ROOT 가이드

TTree에서 그림 그리기

위 토픽에 이어 TTree에서 그림을 그리는 방법은 Draw() 함수를 이용하는 것이다. Draw() 함수는 많은 기능을 가지고 있으며 함수의 설명은 이렇다.

Long64_t Draw(const char *varexp, const TCut &selection, Option_t *option="")

사실 매개변수가 두개 더 있지만 지금은 필요하지 않으므로 생략한다. 각 변수를 살펴보면

  • varexp: variable expression 의 약자인 것을 알 수 있다. 내가 보고자 하는 변수의 이름을 쓴다. 예) "x".
  • selection: 보고자 하는 entry를 고르는 조건을 변수들로 표현한다. 예) " x!=0 && y>500".
  • option: 보통 다른 TObject를 그릴때 Draw() 함수에 들어가는 option. 예) "same".

출력하는 값은 엔트리의 개수가 된다.

 

히스토그램을 자동생성하여 그리기
TTree *tree = from_somewhere;
tree -> Draw("x","y<0","");

이 명령어는 tree에서 모든 momentum 값을 가져와 일차원 히스토그램에 채워넣는다. 단 히스토그램의 속성은 자동으로 생성되기 때문에 보고자 하는 범위가 아닌 경우가 많다.

 

가중치
TTree *tree = from_somewhere;
tree -> Draw("x","w*(y<0)","");

두번째 매개변수 selection은 조건을 의미하는 동시에 히스토그램을 채울 때 주는 가중치에 해당하기도 한다. 따라서 위와 같이 조건문에  w라는 가중치를 곱해주므로써 변수 x에 대한 가중치를 주는것이 가능하다.

 

히스토그램 생성 후 채우기

위와같이 범위를 정하고 싶은 경우를 위해서 히스토그램을 먼저 생성하고 여기에 채워넣는 방법이 있다. varexp 자리에 변수(x) 다음으로 기호 ">>"를 사용하고 히스토그램 이름(예. "my_histogram")을 쓰면 해당 그 이름을 가진 히스토그램을 찾아서 변수들을 채운다.

TTree *tree = from_somewhere;
new TH1D("my_histogram","1D histogram;x",100,0,100);
tree -> Draw("x>>my_histogram","y<0","");

 

히스토그램 생성과 동시에 채우기

히스토그램의 title 등은 중요하지 않고 빈 개수와 범위만 간단하게 설정하고 싶다면 TTree::Draw() 함수 안에서 간단하게 정의하는 것도 가능하다.

TTree *tree = from_somewhere;
tree -> Draw("x>>my_histogram(100,0,100)","y<0",""); 

 

2D 히스토그램 그리기

두개의 변수를 사용하여 2D 히스토그램을 그릴때는 "y:x" 와 같이 ":" 기호를 사용하여 그린다. 주의할점은 y축 변수가 x축 변수보다 먼저 쓰인다는 점이다.

TTree *tree = from_somewhere;
auto hist = new TH2D("my_histogram","2D histogram;x;y",100,0,100,100,-50,50);
tree -> Draw("y:x>>my_histogram","","colz");

 

특별한 변수들
  • Entry$: TTree 가 읽고 있는 entry. TTree::GetReadEntry() 와 같다. ex) Draw("x:Entry$");
  • Entries$: TTree 의 총 entry. TTree::GetEntries() 와 같다. ex) Draw("x/Entries$");

댓글

댓글 본문
  1. 감사합니다~ 도움 많이 됬어요