ROOT 가이드

TTree 형태 파악하기

항상, 가능하다면 어떠한 데이터를 받을 때 그 데이터가 어떤 형태로 저장되었는지 알 수 있다면 좋다. 하지만 살다보면 부족한 설명과 함께 데이터를 얻게 되는경우도 있다. 또 내가 취득하거나 만든 데이터지만 다시 꺼내보니 어떤 파일이었는지 잊기도 한다. 이럴때를 대비해서 ROOT 파일을, 혹은 그 안에 들어있는 TTree를 둘러보고 어떤 파일인지 파악하는 법을 알아둘 필요가 있다. 

예시를 위해서 무작정 다음 코드를 루트로 실행해 보자.

void create_data() 
{ 
    TFile *file = new TFile("random_data.root","recreate");
    auto tree = new TTree("data","");
    Double_t x;
    tree -> Branch("x",&x);
    for (auto i = 0; i < 2000; i++) {
        x = gRandom -> Gaus(31,9.005);
        tree -> Fill();
    }
    tree -> Write();
    file -> Close();
}

에러 없이 코드를 돌리고 나면 같은 위치에 random_data.root 라는 파일이 생긴다. 이제 위 코드를 모른다고 가정하고 random_data.root 라는 파일이 어떤 파일인지 파악해보자.

ROOT 파일 둘러보기

앞선 토픽에서 TFile 클래스를 통하여 ROOT 파일을 읽고 무엇이 들어있는지 확인하는 방법에 대해서 배웠다. 만약에 파일 안에 TTree가 들어있다면 어떤식으로 데이터를 확인 할 수 있을까. 먼저 random_data.root 를 열어보자. 

root [0] 
Attaching file random_data.root as _file0...
(TFile *) 0x7ff06f466bb0
root [1] .ls
TFile**               random_data.root
  TFile*               random_data.root
    KEY: TTree     data;1
root [2]

위와 같이 data라는 이름을 가진 TTree가 들어있는 것을 볼 수 있다. data의 대략적인 형태를 보려면 TTree::Print 함수를 실행한다.

root [2] data -> Print()
******************************************************************************
*Tree    :data      :                                                        *
*Entries :     2000 : Total =           16852 bytes  File  Size =      15326 *
*        :          : Tree compression factor =   1.07                       *
******************************************************************************
*Br    0 :x         : x/D                                                    *
*Entries :     2000 : Total  Size=      16534 bytes  File Size  =      14990 *
*Baskets :        1 : Basket Size=      32000 bytes  Compression=   1.07     *
*............................................................................*

위와 같이 Print를 했을 때 두개의 큰 박스가 보이며 첫번째 박스 안에는 TTree 의 정보를 볼 수 있다. 첫번째 줄을 보면 내가 지금 보고 있는 오브젝트가 "data"라는 이름을 가진 TTree라는 알 수 있다.

두번째 박스부터는 브랜치의 목록이다. 첫번째 박스와 같지만 처음 "Br"은 Branch를 의미하며 세번째 칸의 "x/D"에서 "/D"은 이 브랜치가 Double_t 타입의 변수를 담는다는 것을 의미한다. "D"와 같은 이니셜은 TTree 클래스 레퍼런스 설명에 나와있다.

하지만 터미널에 익숙하지 않은 사용자는 TBrowser를 이용한 그래픽 인터페이스를 이용하는 것도 나쁘지 않다. 사용방법은 루트파일을 열자마자 무작정 

root [2] TBrowser b

와 같이 실행하는 것이다. 생각보다 직관적이므로 자세한 내용은 생략한다.

위 TTree는 가장 간단한 구조를 가지지만 경우에 따라서 위와 같은 방식으로 알기 어려운 구조로 만드는 경우도 많다. 당연하지만 이런 경우에 가장 좋은 방법은 파일을 만드는 코드를 들여다 보거나 만든사람에게 물어보는 것이다.
 

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
ejungwoo
현재 버전
선택 버전
graphittie 자세히 보기