00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00021
00022 #ifndef STAR_StGammaCandidate
00023 #define STAR_StGammaCandidate
00024
00025 #include "TObject.h"
00026 #include "TVector3.h"
00027 #include "TRefArray.h"
00028
00029 #include <vector>
00030
00031 #include "StGammaTower.h"
00032 #include "StGammaStrip.h"
00033 #include "StGammaTrack.h"
00034 #include "StGammaFitterResult.h"
00035
00036 class StEEmcCluster;
00037 class StEEmcSmdCluster;
00038 class StEmcCluster;
00039
00040 class StGammaCandidate: public TObject
00041 {
00042
00043 public:
00044
00045 enum CalorimeterId { kEEmc = 0, kBEmc, kUnknown = 255};
00046 enum thresholdCut { kMagnitude, kTransverse };
00047
00048 StGammaCandidate();
00049 ~StGammaCandidate();
00050
00051 virtual const char* GetCVS() const
00052 {static const char cvs[] = "Tag $Name: $ $Id: StGammaCandidate.h,v 1.15 2010/10/08 19:56:09 betan Exp $ built "__DATE__" "__TIME__; return cvs; }
00053
00055
00057
00058 Float_t sumPt( Float_t radius, Float_t threshold = 0.0, thresholdCut cut = kTransverse );
00059 Float_t sumTrackPt( Float_t radius, Float_t threshold = 0.0, thresholdCut cut = kTransverse );
00060 Float_t sumTowerPt( Float_t radius, Float_t threshold = 0.0, thresholdCut cut = kTransverse );
00061 Float_t sumPreshower1( Float_t radius, Float_t threshold = 0.0 );
00062 Float_t sumPreshower2( Float_t radius, Float_t threshold = 0.0 );
00063 Float_t sumPostshower( Float_t radius, Float_t threshold = 0.0 );
00064
00065 Int_t numberOfTracks( Float_t radius, Float_t threshold = 0.0, thresholdCut cut = kTransverse );
00066 Int_t numberOfTowers( Float_t radius, Float_t threshold = 0.0, thresholdCut cut = kTransverse );
00067 Int_t numberOfPreshower1( Float_t radius, Float_t threshold = 0.0 );
00068 Int_t numberOfPreshower2( Float_t radius, Float_t threshold = 0.0 );
00069 Int_t numberOfPostshower( Float_t radius, Float_t threshold = 0.0 );
00070
00071 Int_t detectorId() { return mDetector; }
00072 Int_t id() { return mGammaId; }
00073
00074 Float_t energy() const { return mEnergy; }
00075 Float_t seedEnergy() const { return mSeedEnergy; }
00076 Float_t pre1Energy(Float_t threshold = 0.0);
00077 Float_t pre2Energy(Float_t threshold = 0.0);
00078 Float_t postEnergy(Float_t threshold = 0.0);
00079 Float_t smduEnergy(Float_t threshold = 0.0);
00080 Float_t smdvEnergy(Float_t threshold = 0.0);
00081 Float_t smdEtaEnergy(Float_t threshold = 0.0) { return smduEnergy(threshold); }
00082 Float_t smdPhiEnergy(Float_t threshold = 0.0) { return smdvEnergy(threshold); }
00083
00084 TVector3 position() const { return mPosition; }
00085 TVector3 momentum() const { return mMomentum; }
00086
00087 TVector3 momentum1x1();
00088 TVector3 momentum1x1c();
00089 TVector3 momentum2x1();
00090
00091 Int_t numberOfTracks(){ return mTracks.GetLast()+1; }
00092 Int_t numberOfTowers(){ return mTowers.GetLast()+1; }
00093 Int_t numberOfPreshower1(){ return mPreshower1.GetLast()+1; }
00094 Int_t numberOfPreshower2(){ return mPreshower2.GetLast()+1; }
00095 Int_t numberOfPostshower(){ return mPostshower.GetLast()+1; }
00096 Int_t numberOfSmdu(){ return mSmdu.GetLast()+1; }
00097 Int_t numberOfSmdv(){ return mSmdv.GetLast()+1; }
00098 Int_t numberOfSmdEta(){ return mSmdu.GetLast()+1; }
00099 Int_t numberOfSmdPhi(){ return mSmdv.GetLast()+1; }
00100
00101 StGammaTrack *track( Int_t i ){ return (StGammaTrack*)mTracks.At(i); }
00102 StGammaTower *tower( Int_t i ){ return (StGammaTower*)mTowers.At(i); }
00103 StGammaTower *preshower1( Int_t i ){ return (StGammaTower*)mPreshower1.At(i); }
00104 StGammaTower *preshower2( Int_t i ){ return (StGammaTower*)mPreshower2.At(i); }
00105 StGammaTower *postshower( Int_t i ){ return (StGammaTower*)mPostshower.At(i); }
00106 StGammaStrip *smdu( Int_t i ){ return (StGammaStrip *)mSmdu.At(i); }
00107 StGammaStrip *smdv( Int_t i ){ return (StGammaStrip *)mSmdv.At(i); }
00108 StGammaStrip *smdEta( Int_t i ){ return (StGammaStrip *)mSmdu.At(i); }
00109 StGammaStrip *smdPhi( Int_t i ){ return (StGammaStrip *)mSmdv.At(i); }
00110
00111 StGammaTrack *mytrack( Int_t i ){ return (StGammaTrack*)mMyTracks.At(i); }
00112 StGammaTower *mytower( Int_t i ){ return (StGammaTower*)mMyTowers.At(i); }
00113 StGammaTower *mypreshower1( Int_t i ){ return (StGammaTower*)mMyPreshower1.At(i); }
00114 StGammaTower *mypreshower2( Int_t i ){ return (StGammaTower*)mMyPreshower2.At(i); }
00115 StGammaTower *mypostshower( Int_t i ){ return (StGammaTower*)mMyPostshower.At(i); }
00116
00117 Int_t numberOfMyTracks(){ return mMyTracks.GetLast()+1; }
00118 Int_t numberOfMyTowers(){ return mMyTowers.GetLast()+1; }
00119 Int_t numberOfMyPreshower1(){ return mMyPreshower1.GetLast()+1; }
00120 Int_t numberOfMyPreshower2(){ return mMyPreshower2.GetLast()+1; }
00121 Int_t numberOfMyPostshower(){ return mMyPostshower.GetLast()+1; }
00122
00123 StGammaFitterResult& smdFit(Int_t plane=0) { return mSmdFit[plane]; }
00124
00126
00128
00129 void recluster(TVector3 vertex, Float_t threshold, thresholdCut cut = kTransverse);
00130
00131 void SetId(Int_t id) { if( id == kEEmc || id == kBEmc ) mGammaId = id; else mGammaId = kUnknown; }
00132 void SetTowerId( Int_t id ) { mTowerId = id; }
00133 void SetTowerClusterId( Int_t id ) { mTowerClusterId = id; }
00134 void SetSmduClusterId( Int_t id ) { mSmduClusterId = id; }
00135 void SetSmdvClusterId( Int_t id ) { mSmdvClusterId = id; }
00136
00137 void SetSmdEtaClusterId( Int_t id ) { mSmduClusterId = id; }
00138 void SetSmdPhiClusterId( Int_t id ) { mSmdvClusterId = id; }
00139
00140 void SetDetectorId( Int_t id ) { mDetector = id; }
00141
00142 void SetMomentum( TVector3 p ){ mMomentum=p; }
00143 void SetPosition( TVector3 p ){ mPosition=p; }
00144 void SetEnergy( Float_t e ){ mEnergy=e; }
00145 void SetSeedEnergy( Float_t e ){ mSeedEnergy=e; }
00146 void SetPre1Energy( Float_t e ){ mPre1Energy=e; }
00147 void SetBPrsEnergy( Float_t e ){ mPre1Energy=e; }
00148 void SetPre2Energy( Float_t e ){ mPre2Energy=e; }
00149 void SetPostEnergy( Float_t e ){ mPostEnergy=e; }
00150 void SetSmduEnergy( Float_t e ){ mSmduEnergy=e; }
00151 void SetSmdvEnergy( Float_t e ){ mSmdvEnergy=e; }
00152 void SetSmdEtaEnergy( Float_t e ){ mSmduEnergy=e; }
00153 void SetSmdPhiEnergy( Float_t e ){ mSmdvEnergy=e; }
00154
00155
00156 void addTrack ( StGammaTrack *track ){ mTracks.Add( track ); }
00157 void addTower ( StGammaTower *tower ){ mTowers.Add( tower ); }
00158 void addPreshower1( StGammaTower *pre1 ){ mPreshower1.Add( pre1 ); }
00159 void addPreshower2( StGammaTower *pre2 ){ mPreshower2.Add( pre2 ); }
00160 void addPostshower( StGammaTower *post ){ mPostshower.Add( post ); }
00161 void addSmdu( StGammaStrip *strip ){ mSmdu.Add(strip); }
00162 void addSmdv( StGammaStrip *strip ){ mSmdv.Add(strip); }
00163 void addSmdEta( StGammaStrip *strip ){ mSmdu.Add(strip); }
00164 void addSmdPhi( StGammaStrip *strip ){ mSmdv.Add(strip); }
00165
00166
00167 void addMyTrack ( StGammaTrack *track ){ mMyTracks.Add( track ); }
00168 void addMyTower ( StGammaTower *tower ){ mMyTowers.Add( tower ); }
00169 void addMyPreshower1( StGammaTower *pre1 ){ mMyPreshower1.Add( pre1 ); }
00170 void addMyPreshower2( StGammaTower *pre2 ){ mMyPreshower2.Add( pre2 ); }
00171 void addMyPostshower( StGammaTower *post ){ mMyPostshower.Add( post ); }
00172
00173 void SetSmdFit(const StGammaFitterResult& fit, Int_t plane=0) { mSmdFit[plane] = fit; }
00174
00175 protected:
00176
00177 Int_t mGammaId;
00178 Int_t mTowerId;
00179 Int_t mTowerClusterId;
00180 Int_t mSmduClusterId;
00181 Int_t mSmdvClusterId;
00182
00183 UChar_t mDetector;
00184
00185 TVector3 mMomentum;
00186 TVector3 mPosition;
00187
00188 Float_t mEnergy;
00189
00190 Float_t mSeedEnergy;
00191 Float_t mPre1Energy;
00192 Float_t mPre2Energy;
00193 Float_t mPostEnergy;
00194 Float_t mSmduEnergy;
00195 Float_t mSmdvEnergy;
00196
00197 StGammaFitterResult mSmdFit[2];
00198
00199
00200 private:
00201
00202 TRefArray mTracks;
00203 TRefArray mTowers;
00204 TRefArray mPreshower1;
00205 TRefArray mPreshower2;
00206 TRefArray mPostshower;
00207 TRefArray mSmdu;
00208 TRefArray mSmdv;
00209
00210 TRefArray mMyTracks;
00211 TRefArray mMyTowers;
00212 TRefArray mMyPreshower1;
00213 TRefArray mMyPreshower2;
00214 TRefArray mMyPostshower;
00215
00216
00217 ClassDef(StGammaCandidate, 1);
00218
00219 };
00220
00221 typedef std::vector<StGammaCandidate> StGammaCandidateVec_t;
00222
00223 #endif