我在实验室中通过终端与ROOT一起使用,我们经常收集数据,并且每小时都有一个带有微小.root
文件的文件夹。
我正在尝试创建一个每天.root
文件,其中包含某一天的所有数据,目前,我在每小时的文件夹中有许多很小的.root
文件。
我对ROOT还是很陌生,不知道该怎么做,有人可以帮助我吗?
换句话说:我需要遍历存在的文件夹并创建每日的“短”文件(即单个ROOT文件,它是所有ROOT文件的组合)并将其放入一个新文件夹。
这只是我的想法的草稿,但更多的是我只是大声思考...
基于我的makeShort.C
文件。
编辑:当我使用“ root”时,我将其用作数据分析的软件框架,因此该语言为c++。
{
void makeShort();
TDatime currtime;
int curryear = currtime.GetYear();
int currmonth = currtime.GetMonth();
int currdate = currtime.GetDay();
if (curryear != 2018) {
cout << "It is not 2018 anymore. Don't blindly run this macro." << endl;
return 0;
}
TChain* c = new TChain("clusters_tree");
TChain* d = new TChain("finfo");
for (int i=7; i<=currmonth; i++){
for (int j = 1;
TString year, month, day;
int yr, mth, dy;
int nFolders = 0;
TString infolder = "/data/....../....../....../ROOT";
TSystemDirectory dir(infolder, infolder);
TList *files = dir.GetListOfFiles();
if (files) {
TSystemFile *file;
TString fname;
TIter next(files);
while ((file=(TSystemFile*)next())) {
fname = file->GetName();
if (file->IsDirectory() && fname.Contains("root_")) {
nFolders+=1;
year = fname(5,4); yr = year.Atoi();
month = fname(9,2); mth = month.Atoi();
day = fname(11,2); dy = day.Atoi();
TDatime fdate(yr,mth,dy,0,0,0);
}
}
}
}
}
答案 0 :(得分:1)
就像@pseyfert所建议的那样,使用hadd:
hadd combined.root /data/....../....../....../ROOT/root_*.root
您可以使用hadd做一些不错的事情:
-O
以根据文件数据重新优化TTree
布局-j 4
与4个并行进程合并。默认情况下,这些树不会被解压缩并再次压缩-这使得hadd相当快,通常受I / O限制。 -j
对于压缩级别/算法的改变最有意义(-f201
将使用LZMA级别1)。