独立读取多个文件

时间:2012-06-19 15:02:44

标签: c++ root-framework

我有一个相当大的数据分析软件Root(CERN)的代码,我有一些数据,我想查看坏运行。我将它们全部放在一个目录中,但是想要编写一段代码,一次从该文件夹中取出一个文件,运行代码,输出结果图,然后获取下一个文件..等我正在使用宏以现在的方式运行此代码。我希望只是添加一些宏。我对编程有点新手。

gSystem->Load("AlgoCompSelector_C.so");
// make the chains
std::string filekey;
TChain tree1 = new TChain("tree");
filekey = std::string("data/run715604.EEmcTree_Part1.root");
tree1->Add( filekey.data() );

1 个答案:

答案 0 :(得分:1)

要在单个根宏中执行此操作,您可以尝试类似下面的代码段。在这里,我将文件添加到TChain,但您当然可以用您想要的任何内容替换TChain::Add

int addfiles(TChain *ch, const char *dirname=".", const char *ext=".root")
{
   int added = 0;
   TSystemDirectory dir(dirname, dirname);
   TList *files = dir.GetListOfFiles();
   if (files) {
      TSystemFile *file;
      TString fname;
      TIter next(files);
      while ((file=(TSystemFile*)next())) {
         fname = file->GetName();
         if (!file->IsDirectory() && fname.EndsWith(ext)) {
         ch->Add(fname); // or call your function on this one file
         ++added;
         }
     }
   }
   return added;
}

(改编自这个根对话帖子:http://root.cern.ch/phpBB3/viewtopic.php?f=3&t=13666

话虽如此,我认为@ m0skit0建议每次启动一个较小的脚本比做你上面提到的更好。 Root很挑剔,工作量越小越好。