gpt4 book ai didi

c++ - 如何遍历几个每小时的 ROOT (.root) 文件并将它们组合成更大的每日数据 .root 文件?

转载 作者:行者123 更新时间:2023-11-28 04:34:09 28 4
gpt4 key购买 nike

我在我的实验室中通过终端使用 ROOT,我们经常收集数据并且每小时都有一个文件夹,其中包含微小的 .root 文件。

我正在尝试创建一个每日 .root 文件,其中包含某一天获取的所有数据,目前我有许多小的 .root 文件,每小时内文件夹。

我是 ROOT 的新手,我不确定我该怎么做,有人可以帮助我吗?


换句话说:我需要遍历存在的文件夹并创建每日“短”文件(即一个 ROOT 文件,它是所有 ROOT 文件的组合)并将它们放入一个新文件夹。

这是我的想法的粗略草稿,但更多的是我只是大声思考...
基于我的 makeShort.C 文件。


编辑:当我使用“root”时,我的意思是它是数据分析的软件框架,所以语言是 .

{
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);
}
}
}
}
}

最佳答案

正如@pseyfert 所建议的,像这样使用 hadd:

hadd combined.root /data/....../....../....../ROOT/root_*.root

你可以用 hadd 做一些好事:

  • -O 根据文件数据重新优化 TTree 布局
  • -j 4 合并 4 个并行进程。

默认情况下,这些树不会再次解压缩和压缩 - 这使得 hadd 相当快,通常是 I/O 受限。 -j 在压缩级别/算法发生变化时最有意义(-f201 将使用 LZMA 级别 1)。

关于c++ - 如何遍历几个每小时的 ROOT (.root) 文件并将它们组合成更大的每日数据 .root 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52008224/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com