CERN ROOT使用事件标题创建树

时间:2011-08-21 23:22:23

标签: root-framework

我需要使用事件标题创建一个Tree。我从一个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                 ...                      ...

等等,该指数运行至约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,我遇到的问题是我想对其进行的分析变得不可能耗费时间。我希望我的数据结构与我正在阅读的数据相同,即一个带有两个braches的树(对于我的两个“文件”),每个包含一个偶数标题,这样我就可以将事件循环到一个文件并随后在第二个文件上嵌套循环仅用于相同的事件。与previous question.

相关

我没有关于如何构造原始文件的代码,这使得上述编写数据的方式成为可能。

1 个答案:

答案 0 :(得分:0)

两百万不是那么多。

  1. 尝试关闭不需要的分支。
  2. 将第二个if更改为else if
  3. 此外,您可以使用证明