0

我有一些代码加载到 ROOT 文件中,我可以从中提取所述 ROOT 文件中的分支并绘制直方图等。代码如下所示:

void MakePlots(string filename) {
    TChain Data("clusters");
    Data.Add(filename.c_str());

    Double_t rr, rx, ry, rz, rrho, rtheta, rphi;

    Data.SetBranchAddress("laben.recon.r", &rr);
    Data.SetBranchAddress("laben.recon.rho", &rrho);
    Data.SetBranchAddress("laben.recon.latitude", &rtheta);
    Data.SetBranchAddress("laben.recon.longitude", &rphi);
    Data.SetBranchAddress("laben.recon.z", &rz);
    Data.SetBranchAddress("laben.recon.y", &ry);
    Data.SetBranchAddress("laben.recon.x", &rx);

    int NumEvents = Data.GetEntries();

    for(int event = 0; event < NumEvents; event++) {
        if(event % 1000 == 0) cout << "Processing Event " << event << endl;
        Data.GetEvent(event);
    }
}

这对于仅加载一个文件并从该文件制作图来说效果很好而且很花哨。但是,我想加载 n 个文件并执行相同的操作。更具体地说,如果我有一个目录,其中包含我要加载的所有 ROOT 文件,我可以编写一个程序来加载该目录中的每个文件。任何帮助将不胜感激。

4

1 回答 1

0

您使用 Data.Add(...) 的重复调用加载多个文件:

Data.Add("file1.root");
Data.Add("file2.root");
...

Data.Add("fileN.root");

然后你应该打电话:

Data.GetEntries();

初始化 TChain。之后,您设置分支地址等。注意:当您致电时:

TChain Data("clusters");

参数“clusters”是 TTree 名称,在您添加的所有文件中必须相同。

于 2014-07-30T07:48:13.250 回答