00001 #include "StEEmcMixTreeMaker.h"
00002 #include "StEEmcA2EMaker.h"
00003 #include "StEEmcPointMaker.h"
00004
00005 #include "StMuDSTMaker/COMMON/StMuDstMaker.h"
00006 #include "StMuDSTMaker/COMMON/StMuDst.h"
00007 #include "StMuDSTMaker/COMMON/StMuEvent.h"
00008
00009 ClassImp(StEEmcMixTreeMaker);
00010
00011
00012 StEEmcMixTreeMaker::StEEmcMixTreeMaker(const Char_t *n):StEEmcMixMaker(n)
00013 {
00014 mFilename="NONE";
00015 mMixEvent = new StEEmcMixEvent();
00016 mFile=0;
00017 }
00018
00019
00020 Int_t StEEmcMixTreeMaker::Init()
00021 {
00022
00023 if ( !mFilename.Contains("NONE") )
00024 mFile = new TFile(mFilename,"recreate");
00025
00026 mTree=new TTree("mTree","Real events");
00027 mTree->Branch("mPi0event","StEEmcMixEvent",&mMixEvent);
00028
00029 return StEEmcMixMaker::Init();
00030 }
00031
00032
00033
00034 Int_t StEEmcMixTreeMaker::Make()
00035 {
00036
00037
00039 Int_t stat = StEEmcMixMaker::Make();
00040 if ( stat != kStOK ) return stat;
00041
00042
00044 mMixEvent -> setEvent( mMuDstMaker -> muDst() -> event() );
00045
00046
00048 for ( UInt_t i = 0; i < mPoints.size(); i++ )
00049 mMixEvent -> addPoint ( mPoints[i] );
00050
00051
00054 Int_t ilead=-1;
00055 Float_t ep1=0.;
00056 Float_t ep2=0.;
00057 for ( UInt_t i = 0; i < mCandidates.size(); i++ )
00058 {
00059 mMixEvent -> addPair ( mCandidates[i] );
00060 if ( mCandidates[i].point(0).energy() > ep1 )
00061 {
00062 ep1=mCandidates[i].point(0).energy();
00063 ilead=(Int_t)i;
00064 }
00065 if ( mCandidates[i].point(1).energy() > ep2 )
00066 {
00067 ep2=mCandidates[i].point(1).energy();
00068 ilead=(Int_t)i;
00069 }
00070 }
00071
00072 if ( mCandidates.size() )
00073 mMixEvent->setLeadingPair( mCandidates[ilead] );
00074 else {
00075 StEEmcPair tmp;
00076 mMixEvent->setLeadingPair(tmp);
00077 }
00078
00079
00080
00082 for ( UInt_t i = 0; i < mBackground.size(); i++ )
00083 mMixEvent -> addMixed( mBackground[i] );
00084
00085
00087 StEEmcTowerVec_t towers=mEEanalysis->towers();
00088 Float_t etotal=0.;
00089 Float_t emax=0.;
00090 Int_t imax=-1;
00091 for ( UInt_t i=0; i < towers.size(); i++ )
00092 {
00093
00094
00095 etotal+= towers[i].energy();
00096 if ( towers[i].energy() > emax ) {
00097 emax=towers[i].energy();
00098 imax=(UInt_t)i;
00099 }
00100 }
00101 mMixEvent->setTotalEnergy(etotal);
00102 mMixEvent->setEnergySeen(mEEpoints->energySeen());
00103 if ( imax>=0 )
00104 {
00105 mMixEvent->setHighTower( towers[imax] );
00106 }
00107 else
00108 {
00109 StEEmcTower tmp;
00110 mMixEvent -> setHighTower( tmp );
00111 }
00112
00113
00115 mTree -> Fill();
00116
00117 return kStOK;
00118
00119 }
00120
00121
00122 void StEEmcMixTreeMaker::Clear(Option_t *o)
00123 {
00124
00125 mMixEvent -> Clear();
00126
00127 StEEmcMixMaker::Clear();
00128
00129 }
00130
00131
00132 Int_t StEEmcMixTreeMaker::Finish()
00133 {
00134
00135 if ( mFile ) {
00136 mFile->Write();
00137 }
00138
00139 return kStOK;
00140
00141 }