00001 #include "StMuDSTMaker/COMMON/StMuTrack.h"
00002 #include "StGammaPythiaEvent.h"
00003
00004 #include "StGammaEvent.h"
00005
00006 ClassImp(StGammaEvent);
00007
00009
00011 StGammaEvent::StGammaEvent()
00012 : mFlags(0x0000)
00013 , mRunNumber(0)
00014 , mEventNumber(0)
00015 , mVertex(0,0,0)
00016 , mMagneticField(1956)
00017 , mPythia(0)
00018
00019 , mSpinDbValid(false)
00020 , mSpin4(kUnknownSpin4)
00021 , mBunchCrossing7bit(255)
00022 , mBunchCrossing48bit(255)
00023 , mBunchCrossingStar(255)
00024 , mPolarizationType(kUnknownPol)
00025
00026 , mDsmVertex(255)
00027 , mTracks(0)
00028 , mTowers(0)
00029 , mPreshower1(0)
00030 , mPreshower2(0)
00031 , mPostshower(0)
00032 , mStrips(0)
00033 , mCandidates(0)
00034 {
00035 InitArrays();
00036 Clear();
00037 }
00038
00040
00042 StGammaEvent::~StGammaEvent()
00043 {
00044 delete mTracks; mTracks = 0;
00045 delete mTowers; mTowers = 0;
00046 delete mPreshower1; mPreshower1 = 0;
00047 delete mPreshower2; mPreshower2 = 0;
00048 delete mPostshower; mPostshower = 0;
00049 delete mStrips; mStrips = 0;
00050 delete mCandidates; mCandidates = 0;
00051 }
00052
00054
00056 void StGammaEvent::Clear(Option_t *opts)
00057 {
00058 mRunNumber = 0;
00059 mEventNumber = 0;
00060 mTriggerIds.clear();
00061 mSimuTriggerIds.clear();
00062 mVertex = TVector3(0.,0.,0.);
00063
00064 mTracks->Clear();
00065 mTowers->Clear();
00066 mPreshower1->Clear();
00067 mPreshower2->Clear();
00068 mPostshower->Clear();
00069 mStrips->Clear();
00070 mCandidates->Clear();
00071
00072 mFlags = 0x0000;
00073
00074 mSpinDbValid = false;
00075 mSpin4 = kUnknownSpin4;
00076 mBunchCrossing7bit = 255;
00077 mBunchCrossing48bit = 255;
00078 mBunchCrossingStar = 255;
00079 mPolarizationType = kUnknownPol;
00080 mDsmVertex = 255;
00081
00082 if(mPythia) mPythia->Clear(opts);
00083
00084 }
00085
00087
00089 Int_t StGammaEvent::InitArrays()
00090 {
00091 if (!mTracks) mTracks = new TClonesArray("StGammaTrack", 1000);
00092 if (!mTowers) mTowers = new TClonesArray("StGammaTower", 4800 + 720);
00093 if (!mPreshower1)mPreshower1 = new TClonesArray("StGammaTower", 4800 + 720);
00094 if (!mPreshower2)mPreshower2 = new TClonesArray("StGammaTower", 720);
00095 if (!mPostshower)mPostshower = new TClonesArray("StGammaTower", 720);
00096 if (!mStrips) mStrips = new TClonesArray("StGammaStrip", 10000);
00097 if (!mCandidates)mCandidates = new TClonesArray("StGammaCandidate", 10);
00098 return 1;
00099 }
00100
00102
00103
00105 StGammaTrack *StGammaEvent::newTrack(StMuTrack *mutr)
00106 {
00107
00108 TClonesArray &tracks = *mTracks;
00109 StGammaTrack *track = 0;
00110
00111 if(mutr) track = new( tracks[tracks.GetEntriesFast()] ) StGammaTrack(mutr);
00112 else track = new( tracks[tracks.GetEntriesFast()] ) StGammaTrack;
00113
00114 return track;
00115
00116 }
00117
00118 StGammaTower *StGammaEvent::newTower()
00119 {
00120 TClonesArray &towers = *mTowers;
00121 StGammaTower *tower = new( towers[towers.GetEntriesFast()] ) StGammaTower;
00122 return tower;
00123 }
00124
00125 StGammaTower *StGammaEvent::newPreshower1()
00126 {
00127 TClonesArray &preshower1 = *mPreshower1;
00128 StGammaTower *tower = new( preshower1[preshower1.GetEntriesFast()] ) StGammaTower;
00129 return tower;
00130 }
00131
00132 StGammaTower *StGammaEvent::newPreshower2()
00133 {
00134 TClonesArray &preshower2 = *mPreshower2;
00135 StGammaTower *tower = new( preshower2[preshower2.GetEntriesFast()] ) StGammaTower;
00136 return tower;
00137 }
00138
00139 StGammaTower *StGammaEvent::newPostshower()
00140 {
00141 TClonesArray &postshower = *mPostshower;
00142 StGammaTower *tower = new( postshower[postshower.GetEntriesFast()] ) StGammaTower;
00143 return tower;
00144 }
00145
00146 StGammaStrip *StGammaEvent::newStrip()
00147 {
00148 TClonesArray &strips = *mStrips;
00149 StGammaStrip *strip = new( strips[strips.GetEntriesFast()] ) StGammaStrip;
00150 return strip;
00151 }
00152
00153 StGammaCandidate *StGammaEvent::newCandidate()
00154 {
00155 TClonesArray &candidates = *mCandidates;
00156 StGammaCandidate *candidate = new( candidates[candidates.GetEntriesFast()] ) StGammaCandidate;
00157 return candidate;
00158 }
00159
00161
00162
00164 Float_t StGammaEvent::sumPt(Float_t eta_min, Float_t eta_max) const
00165 {
00166 return sumTrackPt(eta_min,eta_max) + sumTowerPt(eta_min,eta_max);
00167 }
00168
00170
00171
00173 Float_t StGammaEvent::sumTrackPt(Float_t eta_min, Float_t eta_max) const
00174 {
00175
00176 Float_t sum = 0.0;
00177 for(Int_t i = 0; i < numberOfTracks(); i++)
00178 {
00179 StGammaTrack *t = track(i);
00180 if(t->eta() < eta_min || t->eta() > eta_max) continue;
00181 sum += t->pt();
00182 }
00183
00184 return sum;
00185
00186 }
00187
00189
00190
00192 Float_t StGammaEvent::sumTowerPt(Float_t eta_min, Float_t eta_max) const
00193 {
00194
00195 Float_t sum = 0.0;
00196 for (Int_t i = 0; i < numberOfTowers(); i++)
00197 {
00198 StGammaTower *t = tower(i);
00199 if(t->fail) continue;
00200 if(t->eta < eta_min || t->eta > eta_max) continue;
00201 sum += t->pt();
00202 }
00203
00204 return sum;
00205
00206 }