2017-11-13 5 views
0

ROOT의 TTreeReader 및 TVector3 클래스에 대한 지식이있는 사람이 나를 도울 수 있기를 바랍니다.ROOT : TTreeReader and 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에 수정 사항이 있습니다. ROOT를 업그레이드하면 작동합니다!