#include "PndEventLoop.h" #include #include "TTree.h" #include "TChain.h" #include "TClonesArray.h" #include "TFile.h" #include "RhoBase/TCandidate.h" #include "RhoBase/TCandList.h" #include "RhoBase/VAbsPidSelector.h" #include "RhoBase/TFactory.h" #include "RhoSelector/TPidSelector.h" #include "RhoTools/PndPidListMaker.h" PndEventLoop::PndEventLoop(TChain *t) : fEvtCount(0), fChainEntries(0), fTreeName(""), fOwnChain(t), fOwnTree(false), fPidListMaker(0) { if (t) fTreeName=t->GetName(); Init(); } PndEventLoop::PndEventLoop(std::string fname, std::string treename) : fEvtCount(0), fChainEntries(0), fTreeName(treename), fOwnChain(0), fOwnTree(true), fPidListMaker(0) { Init(); Add(fname); } PndEventLoop::PndEventLoop(TString fname, TString treename) : fEvtCount(0), fChainEntries(0), fTreeName(std::string(treename.Data())), fOwnChain(0), fOwnTree(true), fPidListMaker(0) { Init(); Add(fname); } PndEventLoop::PndEventLoop(const char* fname, const char* treename) : fEvtCount(0), fChainEntries(0), fTreeName(std::string(treename)), fOwnChain(0), fOwnTree(true), fPidListMaker(0) { Init(); Add(fname); } PndEventLoop::~PndEventLoop() { delete fPidListMaker; if (fOwnTree) delete fOwnChain; } void PndEventLoop::Init() { Reset(); if (0==fOwnChain) fOwnChain=new TChain(fTreeName.c_str()); fOwnChain->SetBranchAddress("PndChargedCandidates",&fChargedCands); fOwnChain->SetBranchAddress("PndNeutralCandidates",&fNeutralCands); fOwnChain->SetBranchAddress("PndMcTracks",&fMcCands); fPidListMaker=new PndPidListMaker(); } Int_t PndEventLoop::Add(const char* fname) { Int_t result=fOwnChain->Add(fname); fChainEntries=fOwnChain->GetEntries(); return result; } Int_t PndEventLoop::Add(TChain *chain) { Int_t result=fOwnChain->Add(chain); fChainEntries=fOwnChain->GetEntries(); return result; } void PndEventLoop::Reset() { fEvtCount=0; } int PndEventLoop::GetEvent(int n) { TFactory::Instance()->Reset(); TCandidate *tc; allCands.Cleanup(); chargedCands.Cleanup(); neutralCands.Cleanup(); mcCands.Cleanup(); if (n>=0) fEvtCount=n; if (fEvtCountGetEntry(fEvtCount++); int i1; if (fChargedCands) for (i1=0; i1GetEntriesFast(); i1++) { tc = (TCandidate *)fChargedCands->At(i1); chargedCands.Add(*tc); allCands.Add(*tc); } if (fNeutralCands) for (i1=0; i1GetEntriesFast(); i1++) { tc = (TCandidate *)fNeutralCands->At(i1); neutralCands.Add(*tc); allCands.Add(*tc); } fPidListMaker->SetBaseList(chargedCands); return fEvtCount; } return 0; } bool PndEventLoop::FillList(TCandList &l, std::string listkey) { TCandidate *tc; l.Cleanup(); if (listkey=="All") { l=allCands; return true; } if (listkey=="Charged") { l=chargedCands; return true; } if (listkey=="Neutral") { l=neutralCands; return true; } if (listkey=="McTruth") { if (fMcCands) for (int i1=0; i1GetEntriesFast(); i1++){ tc = (TCandidate *)fMcCands->At(i1); l.Add(*tc); } return true; } return fPidListMaker->FillList(l,listkey); } int PndEventLoop::GetEntries() { if (fOwnChain) return fOwnChain->GetEntries(); else return 0; }