00001
00002
00003
00004
00005
00006
00007
00008 #include <functional>
00009 using namespace std;
00010
00011
00012 #include "TChain.h"
00013 #include "TStopwatch.h"
00014
00015
00016 #include "StSpinPool/StJetEvent/StJetEvent.h"
00017 #include "StSpinPool/StJetEvent/StJetEventAnalyzer.h"
00018 #include "StSpinPool/StJetSkimEvent/StJetSkimEvent.h"
00019
00020
00021 #include "StJetEventReader.h"
00022
00023 ClassImp(StJetEventReader);
00024
00025 StJetEventReader::StJetEventReader(const char* jetfile, const char* skimfile)
00026 : mJetChain(new TChain("jet"))
00027 , mSkimChain(new TChain("jetSkimTree"))
00028 , mEntry(0)
00029 {
00030 mJetChain->Add(jetfile);
00031 mSkimChain->Add(skimfile);
00032
00033 for (int i = 0; i < mJetChain->GetNbranches(); ++i) {
00034 TBranch* branch = (TBranch*)mJetChain->GetListOfBranches()->At(i);
00035 const char* branchname = branch->GetName();
00036 if (strstr(branchname,"ConeJets12")) addJetBranch(branchname);
00037 }
00038
00039 addJetBranch("PythiaConeJets");
00040 addSkimBranch("skimEventBranch");
00041 }
00042
00043 StJetEventReader::~StJetEventReader()
00044 {
00045 delete mJetChain; mJetChain = 0;
00046 delete mSkimChain; mSkimChain = 0;
00047 }
00048
00049 StJetEvent* StJetEventReader::getJetEvent(const char* branchname) const
00050 {
00051 TBranch* branch = mJetChain->GetBranch(branchname);
00052 if (branch) return *(StJetEvent**)branch->GetAddress();
00053 return 0;
00054 }
00055
00056 StJetSkimEvent* StJetEventReader::getSkimEvent(const char* branchname) const
00057 {
00058 TBranch* branch = mSkimChain->GetBranch(branchname);
00059 if (branch) return *(StJetSkimEvent**)branch->GetAddress();
00060 return 0;
00061 }
00062
00063 bool StJetEventReader::next() const
00064 {
00065 return mJetChain->GetEntry(mEntry) && mSkimChain->GetEntry(mEntry++);
00066 }
00067
00068 void StJetEventReader::addJetBranch(const char* branchname)
00069 {
00070 TBranch* branch = mJetChain->GetBranch(branchname);
00071 if (branch) branch->SetAddress(new StJetEvent*(0));
00072 }
00073
00074 void StJetEventReader::addSkimBranch(const char* branchname)
00075 {
00076 TBranch* branch = mSkimChain->GetBranch(branchname);
00077 if (branch) branch->SetAddress(new StJetSkimEvent*(0));
00078 }
00079
00080 void StJetEventReader::eventLoop(int nentries)
00081 {
00082 TStopwatch stopwatch;
00083 while (nentries-- && next()) {
00084 if (nentries % 1000 == 0) printf("nentries = %d\n",nentries);
00085 for_each(mAnalyzers.begin(),mAnalyzers.end(),bind2nd(mem_fun(&StJetEventAnalyzer::analyze),this));
00086 }
00087 stopwatch.Print();
00088 }