イベント ヘッダーを含むツリーを作成する必要があります。ROOT ファイルから 2 つの ntuple に読み込みました。これらの各 ntuple の形式は次のとおりです。
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 ... ...
など、インデックスは約 200 万まで実行されます。
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 を使用すると、実行したい分析に非常に時間がかかるという問題があります。私が読んでいるデータと同じ方法でデータを構造化したいと思います。つまり、2 つの分岐 (2 つの「ファイル」用) があり、それぞれに偶数ヘッダーが含まれているツリーで、1 つのイベントをループできるようにしたいと考えています。ファイルに続いて、同じイベントに対してのみ 2 番目のファイルにループをネストします。前の質問に関連します。
元のファイルがどのように構築されたかについてのコードを持っていないため、上記の方法でデータを書き込むことができました。