You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

初学者求助:如何逐个读取多个ROOT树文件并计算统计参数

批量处理ROOT树文件的解决方案

1. 封装单文件处理逻辑

先把你原来的单文件统计代码封装成可复用的函数,传入文件名即可处理单个文件,同时增加错误检查避免程序崩溃:

void ProcessSingleFile(const char* filename) {
    // 打开文件
    TFile *f = new TFile(filename);
    if (!f || f->IsZombie()) {
        cout << "无法打开文件: " << filename << endl;
        delete f;
        return;
    }

    // 获取树结构
    TTree *T1 = (TTree*)f->Get("T1");
    if (!T1) {
        cout << "文件 " << filename << " 中未找到树T1" << endl;
        f->Close();
        delete f;
        return;
    }

    // 绑定分支变量
    int Tcharged ;
    int Neg_charged ;
    int Posi_charged ;
    int delta_charge;
    T1->SetBranchAddress("Totalcharge",&Tcharged);
    T1->SetBranchAddress("negativecharge",&Neg_charged);
    T1->SetBranchAddress("positivecharge",&Posi_charged);
    T1->SetBranchAddress("deltacharge",&delta_charge);

    int nentries = T1->GetEntries();
    cout<< "\n=== 文件 " << filename << " 统计结果 ===" << endl;
    cout<< "条目数 : "<<nentries<<endl;

    // 计算总和与均值
    double sumT=0.0, sumN=0.0, sumP=0.0, sumD=0.0;
    double meanT=0.0, meanN=0.0, meanP=0.0, meanD=0.0;

    for (int i=0; i<nentries; i++) {
        T1->GetEntry(i);
        sumT += Tcharged; 
        sumN += Neg_charged; 
        sumP += Posi_charged; 
        sumD += delta_charge; 
    }

    // 循环外计算均值,减少重复运算
    meanT = sumT / nentries;
    meanN = sumN / nentries;
    meanP = sumP / nentries;
    meanD = sumD / nentries;

    // 输出结果
    cout << "总电荷均值  : "<< meanT << endl;
    cout << "负电荷均值  : "<< meanN << endl;
    cout << "正电荷均值 : "<< meanP << endl;
    cout << "电荷差均值 : "<< meanD << endl;

    // 释放资源
    f->Close();
    delete f;
}

2. 批量调用处理多个文件

因为你的文件是pp1.root到pp10.root,可以用循环自动生成文件名并调用上面的函数:

void pbtrue_batch() {
    // 循环处理pp1到pp10共10个文件
    for (int i=1; i<=10; i++) {
        char filename[20];
        sprintf(filename, "pp%d.root", i);
        ProcessSingleFile(filename);
    }
}

额外说明

  • 增加了文件和树的存在性检查,避免因文件损坏或路径错误导致程序崩溃
  • 将均值计算移到循环外部,提升运行效率
  • 每个文件的统计结果添加了分隔标题,更易阅读
  • 处理完文件后及时关闭并释放内存,避免资源泄漏

内容的提问来源于stack exchange,提问作者Ab_Ad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:54:22