2016-11-15 12 views
2

我寫了下面的代碼在一些樹木閱讀(這只是光禿禿的骨頭,它正在開發中):LoadTree如何在根中工作?

~~included headers here 

using namespace std; 

void reconstruction::readtest(){ 

    TFile *file = TFile::Open("file.root"); 

    TTree* comp_tree = (TTree*)file->Get("_compress_tree"); 
    TTree* compch_tree = (TTree*)file->Get("_compress_ch"); 

    TChain* compchain = new TChain("_compress_tree"); 
    compchain->Add("file.root"); 

    TChain* chchain = new TChain("_compress_ch"); 
    chchain->Add("file.root"); 


    TH2D *hist = new TH2D("hist","hist",100,0,0.05,100,0,60);                       

    Double_t _compression, _compressionU, _compressionV, _compressionY, _ch_compression; 
    Int_t _ch; 
    comp_tree->SetBranchAddress("_compression",&_compression); 
    comp_tree->SetBranchAddress("_compressionU",&_compressionU); 
    comp_tree->SetBranchAddress("_compressionV",&_compressionV); 
    comp_tree->SetBranchAddress("_compressionY",&_compressionY); 
    compch_tree->SetBranchAddress("_ch_compression",&_ch_compression); 
    compch_tree->SetBranchAddress("_ch",&_ch); 

    TH1D *comp = new TH1D("comp","_compression",100,0,0.05); 
    TH1D *comp_ch = new TH1D("comp_ch","channel compression",100,0,0.02); 

    Long64_t nentries = compchain->GetEntries(); 

    for (int i=0; i<2 ; i++) { 

    Long64_t ientry = LoadTree(i); 
    if (ientry <0) break; 

    compchain->GetEntry(i); 

    cout << "compression = " << _compression << endl; 
    cout << "compression_ch = " << _ch_compression << endl; 

    comp->Fill(_compression); 
    comp_ch->Fill(_ch_compression); 
} 
    cout << "entries = " << nentries << endl; 

    TCanvas *cans = new TCanvas("cans","xxx",800,400); 
    cans->Divide(2,1); 
    cans->cd(1); 
    comp_ch->Draw(); 

    cans->cd(2); 
    comp->Draw(); 

} 

而且我收到以下錯誤消息:

readtest.C:51:20: error: use of undeclared identifier 'LoadTree' 
Long64_t ientry = LoadTree(i); 

從谷歌搜索我已經明白,我需要: some_class::LoadTree,但我不敢肯定哪類和如何做到這一點...

我只是想要一種方式來循環所有事件,並讓我的歷史!

回答

1

而不是

Long64_t ientry = LoadTree(i); 

使用

Long64_t ientry = compchain->LoadTree(i); 

Long64_t ientry = chchain->LoadTree(i); 

(這取決於針對你的對象 - compchainchchain - 你想使用Known Issues已知的()方法 - 我想那是compchain。)

+0

作品,謝謝!!! – lasagna

+0

我有另一個問題...代碼運行,但我實際上沒有獲取條目...而是讀出顯示相同的微小數字* 10^-321 ...因此,出於某種原因,條目不是實際上正在加載。我該怎麼辦? – lasagna