如何将分支添加到已存在的TTree:ROOT

How to add a Branch to An Already Existing TTree: ROOT

本文关键字:存在 TTree ROOT 分支 添加      更新时间:2023-10-16

在进行模拟后,我有一个现有的TTree。我想在这棵树上加一个树枝,我想把它叫做Muon.Mass。我还想给Muon.Mass分支一个值0.1。

我该怎么写?

我已经了解了如何从头开始创建TTrees,以及如何拥有不同变量的分支。但当我已经有了TTree时,我不知道该怎么办。

您可以在现有TTree上调用TTree::Branch方法,方法与在新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++变量不能,所以每个分支自动生成的类成员都会进行字符替换(。