ROOT 가이드

TNamed의 이름

이름을 부여할 수 있는 모든 ROOT object 는 되도록이면 서로 다른 이름을 지어주도록 하자. 이름은 영문 소문자, 영문 대문자, 및줄("_") 의 조합으로 지어주자.

TNamed 클래스는 앞서 살펴보았듯이 이름을 지을 수 있다는 특징이 있다. 이 특징은 는 ROOT를 사용할 때 꽤 중요한 요소이다. 이에 대해서 설명을 잠깐 해볼 까 한다. 하지만 아래 내용이 전혀 이해가 되지 않을 수도 있기 때문에 짧은 요약을 먼저 한다.

이름을 부여할 수 있는 모든 ROOT object 는 되도록이면 서로 다른 이름을 지어주도록 하자. 이름은 영문 소문자, 영문 대문자, 및줄("_") 의 조합으로 지어주자.

ROOT는 모든 object를 TDirectory 라는 가상의 디렉토리에 저장한다. 이때 같은 디렉토리에 같은 이름을 가진 TNamed 클래스가 생성되면 에러를 출력하고 같은 이름을 가진 이전 object를, 마지막에 생성된 object가 덮어쓴다. 모든 object에 대한 이야기는 아니지만 적어도 히스토그램 클래스(TH1)와 캔버스 클래스(TCanvas) 에게는 해당되는 이야기다. 따라서 히스토그램을 생성할 때는 이전에 생성했던 히스토그램들과 다른 이름을 지어주어야 한다.

하지만 상황에 따라서 같은 이름을 가진 히스토그램을 사용할 수 밖에 없는 경우가 있는데 예를 들면 서로 다른 ROOT 파일에서 같은 이름의 히스토그램을 각각 불러오는 경우다. ROOT 파일은 TDirectory의 파생 TFile 클래스로 다루기 때문에 디렉토리 취급을 받는다. 그렇기 때문에 히스토그램을 불러오기 전까지는 괜찮은데 하나의 코드 안에서 같은 이름의 히스토그램을 불러오는 순간 코드를 어떻게 짜는지에 따라서 히스토그램을 덮어 쓸 수 있다. 이럴 때는 첫번재 히스토그램을 불러와서 (SetName()을 이용하여) 이름을 고치고 두번째 히스토그램을 불러오는 방법이 있다.

ROOT 의 기본 디렉토리는 글로벌 변수로 정의 되어있는 gROOT (TDirectory 의 파생, TROOT 클래스) 이다. 따라서 ROOT를 실행하면 gROOT 디렉토리에서 시작을 한다. 이때 TFile 클래스로 ROOT 파일을 생성한다면 디렉토리가 바뀐다. 이때 주의해야 할 점은 이후의 코드에서는 ROOT 파일 생성 이전의 ROOT object 들이 이름으로 트래킹이 되지 않을 수도 있다는 점이다. 가끔 ROOT 코드를 작성하다 보면 이 이름을 함수 실행 시에 사용할 때가 있다. 예를 들어서 트리(TTree 클래스를 이용한 데이터 컨테이너)에서 데이터를 가져와서 히스토그램에 채워넣을 수 있는 TTree::Draw() 함수가 있다. 이때 코드가 잘 작동하지 않는다면 사용자가 히스토그램을 트리와는 다른 디렉토리에서 생성하였는지 의심해볼 수 있다.

이름은 특수문자를 지원하지 않는다. 되도록이면 띄어쓰기 없는 영문 소문자, 영문 대문자, 및줄("_") 의 조합으로 지어주자. 

댓글

댓글 본문
버전 관리
ejungwoo
현재 버전
선택 버전
graphittie 자세히 보기