我需要用事件标题制作一棵树。我从一个 ROOT 文件读入两个 ntuples。这些 ntuples 中的每一个都具有以下格式:
Index Event SubEvent Characteristic1 Characteristic2 ....
1 1 1 322 234
2 1 2 453 324
3 1 3 ... ...
. . . ... ...
. . . ... ...
100 1 100 ... ...
101 2 1 ... ...
102 2 2 ... ...
. . . ... ...
. . . ... ...
. . . ... ...
207 2 107 ... ...
208 3 1 ... ...
209 3 2 ... ...
以此类推,指数一直跑到两百万左右。
我用来创建 ntuples 的格式:
TNtuple *tp = new TNtuple("tp","tp","x:y:z");
TNtuple *tn = new TNtuple("tn","tn","x:y:z");
for(Int_t n = 0; n < nEvents; n++) {
inTree->GetEntry(n);
Int_t nTracks = trackArray->GetEntries();
for(Int_t i = 0; i < nTracks; i++) {
Track* trackData = (Track*)trackArray->At(i);
if(trackData->fCharge == 1)
tp->Fill(trackData->x,trackData->y,trackData->z);
if(trackData->fCharge == -1)
tn->Fill(trackData->x,trackData->y,trackData->z);
}
}
但是,对于 ntuples,我遇到的问题是,我想要对其进行的分析变得非常耗时。我希望我的数据以与我正在读取的数据相同的方式结构化,即具有两个分支的树(对于我的两个“文件”)并且每个分支都包含一个偶数标题,这样我就可以在一个中循环事件文件并随后仅针对相同事件在第二个文件上嵌套循环。与上一个问题有关。
我没有关于如何构造原始文件的代码,这使得上述写入数据的方式成为可能。