Как добавить ветку в уже существующее TTree: ROOT - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть существующее TTree после симуляции. Я хотел бы добавить ветвь к этому TTree, и я хочу назвать его Muon.Mass для дерева. Я также хотел бы дать ветви Muon.Mass значение 0,1.

Как я могу написать это?

Я видел, как создавать деревья TT с нуля и иметь ветви различных переменных. Но я точно не знаю, что делать, когда у меня уже есть TTree.

1 Ответ

0 голосов
/ 17 февраля 2020

Вы можете вызвать метод 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();
  }
}

В качестве альтернативы вы можете обратиться к root учебникам для друзей по дереву.

В качестве примечания: в зависимости от того, что вы хотите сделать с деревом / которому вы даете дерево, я советую не использовать . в именах ветвей, поскольку они вызывают головную боль при выполнении MakeClass (имена ветвей могут содержать точки, но Переменные c ++ не могут, поэтому автоматически сгенерированные члены класса для каждой ветви будут заменены символами go.

...