ROOT TTree:从嵌套分支结构

时间:2016-11-28 18:38:17

标签: c++ tree root-framework

我正在尝试从ROOT TTree中的嵌套分支结构中读取分支。我可以很容易地扫描这些值,但我无法使用tree->GetEntry()来阅读它们。

分支设置为event.Branch.DataBranch, 如果事件为TDataType = kNoType_t,则分支为TDataType = kInt_t,DataBranch为TDataType = kDouble_t。这是我的代码

#include <TFile.h>
#include <iostream>
using namespace std;

void treeread(){

  TFile *f = new TFile("Data.root");
  TTree* tree = (TTree*)f->Get("TheTree");
  //tree->SetMakeClass(1);

  Double_t Data1;
  Int_t topBranch;

  tree->SetBranchStatus("*",0);
  tree->SetBranchStatus("event.Branch",1);
  tree->SetBranchStatus("event.Branch.DataBranch",1);

  tree->Scan("event.Branch.DataBranch","","", 3, 0);

  tree->SetBranchAddress("event.Branch",&topBranch);
  tree->SetBranchAddress("event.Branch.DataBranch",&Data1);

  for (int i = 0, N = tree->GetEntries(); i < 3; ++i) {
    tree->GetEntry(i);
    cout<<"Data1 = "<<Data1<<endl;
  }
}

运行时输出以下内容

root [0] .L SimpleTreeRead.C 
root [1] treeread()
***********************************
*    Row   * Instance * event.Bra *
***********************************
*        0 *        0 * 5.1277329 *
*        1 *        0 * 4.4813465 *
*        2 *        0 * 4.3048654 *
***********************************
Data1 = 0
Data1 = 0
Data1 = 0

我不知道如何设置事件分支的分支地址,因为它的类型为kNoType_t。我怀疑这可能是问题,但我对如何解决它一无所知。此外,tree->SetMakeClass(1)只会在使用时导致分段错误。有谁看到我在这里做错了什么或知道会发生什么?任何线索都会非常感激。

非常感谢!

0 个答案:

没有答案