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;
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$");

댓글

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