2015-02-04 1 views
2

Cern ROOT TTree 파일에서 데이터를 읽으려고합니다. 나는 전에 뿌리를 사용한 적이 없으며 이것으로 조금 어려움을 겪고있다. C++에 익숙하므로 배열 측면을 정렬 할 수 있지만 온라인 튜토리얼 페이지를 여러 번 읽었으며 어디에도 없습니다.Cern ROOT - TTree 루트 파일의 내용을 배열로 읽는 방법

TTree 파일에서 데이터를 읽으려면 어떻게해야합니까? 나는 그것이 for 루프 내에서 트리 노드 (반복적으로 파일이 어떻게 구성되어 있는지 확실하지 않다)를 반복하여 수행 할 것이라고 가정한다.

다음은 내가 수행하려고했던 일련의 참조 예입니다.

https://root.cern.ch/drupal/content/using-macro-read-ttree

는 나는이 일반적인 문제입니다 알고있는 것처럼,하지만 된 ttree의 제네릭하지? (? 서로 다른 변수 이름을 포함 할 수 있기 때문에, 나는 생각한다)

그래서, 내가 생각하는 더 자세한 정보는, 중요한 것은입니다 :

루트 개체 브라우저 TBrowser b 개방함으로써 - '.root'파일 및 탐색 , (그리고 그것을 두 번 클릭하면) 파일에 12 개의 변수가 있다는 것을 알 수 있습니다. 예를 들어 '질량', '청구'등 ...

희망 정보는 충분합니까? 그렇지 않으면 더 많이 제공 할 수 있습니다. https://root.cern.ch/root/htmldoc/TTreeReader.html

사건에 대한 짧은 사용 예는 다음과 같습니다 다음 옛날일에서

TFile file("filename.root"); 
TTreeReader reader("treename", &file); 
TTreeReaderValue<float> mass(reader, "mass"); // template type must match datatype 
TTreeReaderValue<float> charge(reader, "charge"); // name must match branchname 
... 
while (reader.Next()) { 
    // use *mass, *charge, ... 
} 

하는을있을 사용

+0

아래의 답변이 문제를 해결하는 경우 허용으로 표시하십시오. –

+0

문제가 해결되지 않아 허용 된 것으로 표시하지 않습니다. 귀하의 우려에 감사드립니다 – user3728501

+0

그것은 무엇이 당신의 문제를 해결하지 못했습니까? –

답변

4

이 페이지는이 작업을 수행 할 수있는 방법을 잘 보여주는 것 같다 똑같은 일을하는 수작업 방법. 트리의 가지를 로컬 변수로 리디렉션해야했습니다. 이 방법은 다음과 같습니다

TTree* tree = (TTree*) file.Get("treename"); 
float mass, charge, ...; 
tree->SetBranchAddress("mass", &mass); 
tree->SetBranchAddress("charge", &charge); 
... 
for (int i = 0, N = tree->GetEntries(); i < N; ++i) { 
    tree->GetEntry(i); 
    // use mass, charge 
} 

을 당신이 TTreeReaderValue 또는 SetBranchAddress에 두 번째 있었던 파라미터로 제공해야 가지의 이름을 읽을 수 TBrowser에서.

기본적으로 TTree을 항목 모음으로 사용하는 것이 좋습니다 (트리). 각 항목은 분기 (노드)로 구성됩니다. 이것은 당신이 그것을 읽는 방법입니다.

+0

대량 및 요금 청구는 어떻게 사용하나요? 예, 루프 동안 그 값을 어떻게 계산합니까? – user3728501

+0

모든 것은 답안에 쓰여 있습니다 : 변수 주위에'TTreeReaderVaue' 래퍼를 만들 때 포인터처럼 사용하십시오 :'cout << * mass << ""<< * charge << ... '. 그것은 첫 번째 경우에 해당하며 두 번째 경우에는 변수 만 사용합니다. – jepio

+0

아 ~ 그렇군. 다음()은 다음 변수를 얻기 위해 움직인다.나는 유효한 다음 데이터가있을 때 그것이 참이라고 가정한다. 돌아갈 방법이 있을까요, 말하십시오. 이전()? – user3728501

관련 문제