首页 > 解决方案 > 如何向已经存在的 TTree 添加分支:ROOT

问题描述

进行模拟后,我有一个现有的 TTree。我想向这个 TTree 添加一个分支,我想将它命名为 Muon.Mass。我还想给 Muon.Mass 分支一个 0.1 的值。

我该怎么写?

我已经看到了如何从头开始创建 TTree 并拥有不同变量的分支。但是当我已经有了 TTree 时,我不确定该怎么做。

标签: c++treeroot-framework

解决方案


您可以像调用TTree::Branch新 TTree 一样在现有 TTree 上调用该方法。只是为了填充,您需要确保只填充分支。(这是来自https://github.com/pseyfert/tmva-branch-adder的一个强烈缩减的示例)

void AddABranch(TTree* tree) {
  Float_t my_local_variable;
  TBranch* my_new_branch = tree->AddBranch( ... /* use address of my_local_variable */ );
  for (Long64_t entry = 0 ; entry < tree->GetEntries() ; ++e ) {
    tree->GetEntry();
    /* something to compute my_local_variable */
    my_new_branch->Fill();
  }
}

作为替代方案,您可能想查看树朋友的根教程。

作为旁注,根据您要对树做什么/将树交给谁,我建议不要.在分支名称中使用,因为它们在运行时会引起头痛MakeClass(分支名称可以包含句点,但 c++ 变量不能,所以每个分支的自动生成的类成员将进行字符替换)。


推荐阅读