2017-11-13 32 views
0

ROOTのTTreeReaderとTVector3クラスの知識を持っている人が私を助けてくれることを願っています。ROOT:TTreeReaderとTVector3

TTreeReaderを使用して、TVector3を含むTTreeを読み取ろうとしています。 anamuse.rootはTVector3が含まれている "T" と呼ばれる木を、含まれてい

TChain *fChain = new TChain("T"); fChain->AddFile("anamuse.root"); 
fChain->Process("MuseSelector.C"); 

class MuseSelector : public TSelector { 
public : 

    TH1D* h_doca_; 
    TH1D* h_vertex_z_; 

    TTreeReader fReader; 
    TTreeReaderValue<double> mDoca; 
    TTreeReaderValue<TVector3> mVertex; 

    MuseSelector(TTree * = 0): mDoca(fReader, "recon_doca"), mVertex(fReader, "recon_vertex") {} 

    virtual ~MuseSelector() {} 
    virtual void Init(TTree *tree); 
    virtual void SlaveBegin(TTree *tree); 
    virtual Bool_t Process(Long64_t entry); 
    virtual void Terminate(); 
    virtual Int_t Version() const { return 2; } 

    ClassDef(MuseSelector,0); 

}; 

void MuseSelector::Init(TTree *tree) 
{ 

    fReader.SetTree(tree); 

} 

void MuseSelector::SlaveBegin(TTree *tree) 
{ 

    h_doca_ = new TH1D("h_doca_", "", 100, 0, 100); 
    h_vertex_z_ = new TH1D("h_vertex_z_", "", 50, -100, 100); 
    GetOutputList()->Add(h_doca_); 
    GetOutputList()->Add(h_vertex_z_); 

} 

Bool_t MuseSelector::Process(Long64_t entry) 
{ 

    fReader.SetEntry(entry); 

    h_doca_->Fill(*mDoca, 1); 
    h_vertex_z_->Fill((*mVertex)->z(), 1); 

    return kTRUE; 

} 

void MuseSelector::Terminate() 
{ 


    h_doca_->Print(); 
    h_doca_->Draw(); 
    h_vertex_z_->Draw(); 

} 

は私がROOTでこのクラスを実行します。

これを実行するとこのエラーが発生します。

Error in <TTreeReaderValueBase::GetBranchDataType()>: Unknown type and class combination: -1, TVector3 
Error in <TTreeReaderValueBase::CreateProxy()>: The branch recon_vertex contains data of type {UNDETERMINED TYPE}, which does not have a dictionary. 

助けてください。ありがとうございました。

+0

[root-forum](https://root-forum.cern.ch/t/ttreereader-and-tvector3/26887) – pseyfert

答えて

2

そして、ROOTフォーラムでの議論の結論:これはバグであり、しばらくの間、固定されています。 6.10.08に修正があります。アップグレードルートとそれは動作します!

関連する問題