我有一些代码加载到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文件,我是否可以编写一个程序来加载该目录中的每个文件。任何帮助将不胜感激。
答案 0 :(得分:0)
使用重复调用Data.Add(...)加载多个文件:
Data.Add("file1.root");
Data.Add("file2.root");
...
Data.Add("fileN.root");
然后你应该打电话:
Data.GetEntries();
初始化TChain。之后,您设置分支地址等。注意: 当你打电话:
TChain Data("clusters");
参数“clusters”是TTree名称,在您添加的所有文件中必须相同。