我有一些代码在根文件中加载,我可以从所述根文件和绘图直方图中提取分支等等。代码看起来像这样:

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个文件并执行相同的操作。更具体地说,如果我有一个填充有我想要加载的所有根文件的目录,我可以编写一个将从该目录加载每个文件的程序。任何帮助将不胜感激。

有帮助吗?

解决方案

使用重复调用data.add(...):

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

Data.Add("fileN.root");
.

然后你应该拨打电话:

Data.GetEntries();
.

初始化tchain。之后,您将设置分支地址等。注意: 当您打电话时:

TChain Data("clusters");
.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top