我正在尝试从ROOT TTree中的嵌套分支结构中读取分支。我可以很容易地扫描这些值,但我无法使用tree->GetEntry()
来阅读它们。
分支设置为event.Branch.DataBranch
,
如果事件为TDataType = kNoType_t
,则分支为TDataType = kInt_t
,DataBranch为TDataType = kDouble_t
。这是我的代码
#include <TFile.h>
#include <iostream>
using namespace std;
void treeread(){
TFile *f = new TFile("Data.root");
TTree* tree = (TTree*)f->Get("TheTree");
//tree->SetMakeClass(1);
Double_t Data1;
Int_t topBranch;
tree->SetBranchStatus("*",0);
tree->SetBranchStatus("event.Branch",1);
tree->SetBranchStatus("event.Branch.DataBranch",1);
tree->Scan("event.Branch.DataBranch","","", 3, 0);
tree->SetBranchAddress("event.Branch",&topBranch);
tree->SetBranchAddress("event.Branch.DataBranch",&Data1);
for (int i = 0, N = tree->GetEntries(); i < 3; ++i) {
tree->GetEntry(i);
cout<<"Data1 = "<<Data1<<endl;
}
}
运行时输出以下内容
root [0] .L SimpleTreeRead.C
root [1] treeread()
***********************************
* Row * Instance * event.Bra *
***********************************
* 0 * 0 * 5.1277329 *
* 1 * 0 * 4.4813465 *
* 2 * 0 * 4.3048654 *
***********************************
Data1 = 0
Data1 = 0
Data1 = 0
我不知道如何设置事件分支的分支地址,因为它的类型为kNoType_t。我怀疑这可能是问题,但我对如何解决它一无所知。此外,tree->SetMakeClass(1)
只会在使用时导致分段错误。有谁看到我在这里做错了什么或知道会发生什么?任何线索都会非常感激。
非常感谢!