00001
00002
00003
00004
00005
00006
00007
00009
00010 #ifndef STAR_StGammaEvent
00011 #define STAR_StGammaEvent
00012
00013 #include <set>
00014
00015 #include "TObject.h"
00016 #include "TVector3.h"
00017
00018 #include "StGammaCandidate.h"
00019 #include "StGammaCandidateMaker.h"
00020
00021 #include "StGammaTrack.h"
00022 #include "StGammaTower.h"
00023 #include "StGammaStrip.h"
00024
00025 #include "TClonesArray.h"
00026 #include "TObjString.h"
00027
00028 class StMuTrack;
00029 class StGammaPythiaEvent;
00030
00031 #define TPC_VERTEX 0x0001
00032
00033 class StGammaEvent: public TObject
00034 {
00035
00036 public:
00037
00038 enum Spin4State { kBlueUpYellUp=5, kBlueUpYellDn=6, kBlueDnYellUp=9, kBlueDnYellDn=10, kUnknownSpin4=42 };
00039 enum PolarizationType { kUnpolarized=0, kLongLong, kTransTrans, kRadRad, kUnknownPol=42 };
00040
00041
00042 StGammaEvent();
00043 ~StGammaEvent();
00044
00045 virtual const char* GetCVS() const
00046 {static const char cvs[] = "Tag $Name: $ $Id: StGammaEvent.h,v 1.15 2011/01/11 18:33:20 betan Exp $ built "__DATE__" "__TIME__; return cvs; }
00047
00048 void Clear(Option_t *opts= "");
00049
00050 UShort_t mFlags;
00051 UShort_t flags() const { return mFlags; }
00052
00054
00056
00057 Int_t numberOfTracks() const { return mTracks->GetEntriesFast(); }
00058 Int_t numberOfTowers() const { return mTowers->GetEntriesFast(); }
00059 Int_t numberOfPreshower1() const { return mPreshower1->GetEntriesFast(); }
00060 Int_t numberOfPreshower2() const { return mPreshower2->GetEntriesFast(); }
00061 Int_t numberOfPostshower() const { return mPostshower->GetEntriesFast(); }
00062 Int_t numberOfStrips() const { return mStrips->GetEntriesFast(); }
00063 Int_t numberOfCandidates() const { return mCandidates->GetEntriesFast(); }
00064
00065 StGammaTrack *track( Int_t i ) const { return (StGammaTrack*)mTracks->At(i); }
00066 StGammaTower *tower( Int_t i ) const { return (StGammaTower*)mTowers->At(i); }
00067 StGammaTower *preshower1( Int_t i ) const { return (StGammaTower*)mPreshower1->At(i); }
00068 StGammaTower *preshower2( Int_t i ) const { return (StGammaTower*)mPreshower2->At(i); }
00069 StGammaTower *postshower( Int_t i ) const { return (StGammaTower*)mPostshower->At(i); }
00070 StGammaStrip *strip( Int_t i ) const { return (StGammaStrip*)mStrips->At(i); }
00071 StGammaCandidate *candidate( Int_t i ) const { return (StGammaCandidate*)mCandidates->At(i); }
00072
00073 Int_t runNumber() const { return mRunNumber; }
00074 Int_t eventNumber() const { return mEventNumber; }
00075 set<int>& triggerIds() { return mTriggerIds; }
00076 bool isTrigger(int id) const { return mTriggerIds.find(id) != mTriggerIds.end(); }
00077 bool isSimuTrigger(int id) const { return mSimuTriggerIds.find(id) != mSimuTriggerIds.end(); }
00078 TObjString muDstFileName() const { return mMudstFileName; }
00079 TVector3& vertex(){ return mVertex; }
00080 Float_t vertexRank() { return mVertexRank; }
00081 Float_t magneticField() const { return mMagneticField; }
00082 StGammaPythiaEvent* pythia() { return mPythia; }
00083
00084 Bool_t validSpinDb() { return mSpinDbValid; }
00085 UShort_t spin4() { return mSpin4; }
00086 UShort_t bunchCrossing7bit() { return mBunchCrossing7bit; }
00087 UShort_t bunchCrossing48bit() { return mBunchCrossing48bit; }
00088 UShort_t bunchCrossingStar() { return mBunchCrossingStar; }
00089 UShort_t polarizationType() { return mPolarizationType; }
00090
00091 Float_t sumPt( Float_t eta_min = -2.5, Float_t eta_max = +2.5 ) const;
00092 Float_t sumTrackPt(Float_t eta_min = -2.5, Float_t eta_max = +2.5 ) const;
00093 Float_t sumTowerPt(Float_t eta_min = -2.5, Float_t eta_max = +2.5 ) const;
00094
00096
00098
00099 StGammaTrack *newTrack( StMuTrack *mutr=0 );
00100 StGammaTower *newTower();
00101 StGammaTower *newPreshower1();
00102 StGammaTower *newPreshower2();
00103 StGammaTower *newPostshower();
00104 StGammaStrip *newStrip();
00105 StGammaCandidate *newCandidate();
00106
00107 void SetRunNumber( Int_t run ){ mRunNumber=run; }
00108 void SetEventNumber( Int_t event ){ mEventNumber=event; }
00109 void SetTriggerIds(const vector<unsigned int>& triggerIds) { copy(triggerIds.begin(), triggerIds.end(), inserter(mTriggerIds, mTriggerIds.begin())); }
00110 void SetSimuTriggerIds(const vector<unsigned int>& triggerIds) { copy(triggerIds.begin(), triggerIds.end(), inserter(mSimuTriggerIds, mSimuTriggerIds.begin())); }
00111 void SetMudstFileName(const TObjString &i) { mMudstFileName = i; }
00112 void SetVertex(const TVector3& vertex ){ mVertex=vertex; }
00113 void SetVertexRank(Float_t rank) { mVertexRank = rank; }
00114 void SetMagneticField( Float_t magneticField) { mMagneticField = magneticField; }
00115 void SetPythia(StGammaPythiaEvent* pythia) { mPythia = pythia; }
00116
00117 void SetValidDb( Bool_t v ){ mSpinDbValid=v; }
00118 void SetSpin4( UShort_t s ){ mSpin4=s; }
00119 void SetBunchCrossing7bit( UShort_t b ){ mBunchCrossing7bit=b; }
00120 void SetBunchCrossing48bit( UShort_t b ){ mBunchCrossing48bit=b; }
00121 void SetBunchCrossingStar( UShort_t b ){ mBunchCrossingStar=b; }
00122 void SetPolarizationType( UShort_t t ){ mPolarizationType=t; }
00123 void SetDsmVertex( UShort_t v ){ mDsmVertex=v; }
00124
00125 protected:
00126
00127 Int_t mRunNumber;
00128 Int_t mEventNumber;
00129 set<int> mTriggerIds;
00130 set<int> mSimuTriggerIds;
00131 TObjString mMudstFileName;
00132 TVector3 mVertex;
00133 Float_t mVertexRank;
00134 Float_t mMagneticField;
00135 StGammaPythiaEvent* mPythia;
00136
00137 Bool_t mSpinDbValid;
00138 UShort_t mSpin4;
00139 UShort_t mBunchCrossing7bit;
00140 UShort_t mBunchCrossing48bit;
00141 UShort_t mBunchCrossingStar;
00142 UShort_t mPolarizationType;
00143
00144 UShort_t mDsmVertex;
00145
00146 private:
00147
00148 Int_t InitArrays();
00149
00150 TClonesArray *mTracks;
00151 TClonesArray *mTowers;
00152 TClonesArray *mPreshower1;
00153 TClonesArray *mPreshower2;
00154 TClonesArray *mPostshower;
00155 TClonesArray *mStrips;
00156 TClonesArray *mCandidates;
00157
00158 friend Int_t StGammaCandidateMaker::Compress();
00159
00160 ClassDef(StGammaEvent, 1);
00161
00162 };
00163
00164 #endif