00001
00002
00003
00004 #include "TTree.h"
00005
00006
00007 #include "StJetFinder/StProtoJet.h"
00008 #include "StSpinPool/StJets/StJets.h"
00009 #include "StSpinPool/StJetEvent/StJetEvent.h"
00010
00011
00012 #include "StjeParticleCollector.h"
00013 #include "StjeJetFinderRunner.h"
00014 #include "StjeJetCuts.h"
00015 #include "StjeTreeWriter.h"
00016 #include "StjeDefaultJetTreeWriter.h"
00017 #include "StppJetAnalyzer.h"
00018 #include "StJetMaker.h"
00019
00020 ClassImp(StJetMaker);
00021
00022 StJetMaker::StJetMaker(const char* name, StMuDstMaker* uDstMaker, const char* outputName)
00023 : StMaker(name)
00024 , _defaultTreeWriter(new StjeDefaultJetTreeWriter(*uDstMaker, outputName))
00025 , _treeWriter(_defaultTreeWriter)
00026 {
00027 }
00028
00029 StJetMaker::~StJetMaker()
00030 {
00031 delete _defaultTreeWriter;
00032 }
00033
00034 StJetMaker::StJetBranch::StJetBranch(const StppAnaPars* anapars, StJetPars* jetpars, StFourPMaker* fourPMaker, const char* name)
00035 : name(name)
00036 , particleCollector(new StjeParticleCollector(anapars,fourPMaker,this->particles))
00037 , jetFinder(new StjeJetFinderRunner(jetpars,this->particles,this->protojets))
00038 , jetCuts(new StjeJetCuts(anapars,this->protojets))
00039 {
00040 }
00041
00042 void StJetMaker::addAnalyzer(const StppAnaPars* anapars, StJetPars* jetpars, StFourPMaker* fourPMaker, const char* name)
00043 {
00044 StJetBranch* jetBranch = new StJetBranch(anapars,jetpars,fourPMaker,name);
00045 mJetBranches.push_back(jetBranch);
00046 _treeWriter->addJetFinder(fourPMaker,&jetBranch->particles,&jetBranch->protojets,name,new StJets);
00047 }
00048
00049 void StJetMaker::SetTreeWriter(StjeTreeWriter* treeWriter)
00050 {
00051 _treeWriter = treeWriter;
00052 }
00053
00054 Int_t StJetMaker::Init()
00055 {
00056 for (size_t iBranch = 0; iBranch < mJetBranches.size(); ++iBranch)
00057 mJetBranches[iBranch]->jetFinder->Init();
00058
00059 _treeWriter->Init();
00060
00061 return kStOk;
00062 }
00063
00064 Int_t StJetMaker::Make()
00065 {
00066 for (size_t iBranch = 0; iBranch < mJetBranches.size(); ++iBranch) {
00067 StJetBranch* jetBranch = mJetBranches[iBranch];
00068 _treeWriter->fillJetTreeHeader(iBranch);
00069 for (size_t iVertex = 0; iVertex < jetBranch->particleCollector->numberOfVertices(); ++iVertex) {
00070 jetBranch->particleCollector->Do(iVertex);
00071 jetBranch->jetFinder->Run();
00072 jetBranch->jetCuts->Apply();
00073 _treeWriter->fillJetTree(iBranch,iVertex);
00074 }
00075 }
00076
00077 _treeWriter->jetTree()->Fill();
00078
00079 return kStOk;
00080 }
00081
00082 Int_t StJetMaker::Finish()
00083 {
00084 _treeWriter->Finish();
00085
00086 return kStOK;
00087 }
00088
00089 TTree* StJetMaker::tree() const
00090 {
00091 return _treeWriter->jetTree();
00092 }
00093
00094 StJets* StJetMaker::getStJets(const char* branchName) const
00095 {
00096 TTree* jetTree = _treeWriter->jetTree();
00097 if (jetTree) {
00098 TBranch* branch = jetTree->GetBranch(branchName);
00099 if (branch) return *(StJets**)branch->GetAddress();
00100 }
00101 return 0;
00102 }
00103
00104 StJetEvent* StJetMaker::getStJetEvent(const char* branchName) const
00105 {
00106 TTree* jetTree = _treeWriter->jetTree();
00107 if (jetTree) {
00108 TBranch* branch = jetTree->GetBranch(branchName);
00109 if (branch) return *(StJetEvent**)branch->GetAddress();
00110 }
00111 return 0;
00112 }