00001 #ifndef __StEEmcCluster_h__ 00002 #define __StEEmcCluster_h__ 00003 00042 #include <TObject.h> 00043 #include <TVector3.h> 00044 #include <TMath.h> 00045 #include "StEEmcPool/StEEmcA2EMaker/StEEmcTower.h" 00046 #include "StEEmcBaseCluster.h" 00047 class StEmcCluster; 00048 00049 class StEEmcCluster : public StEEmcBaseCluster { 00050 public: 00051 StEEmcCluster(); 00052 StEEmcCluster ( const StEEmcCluster &other ); 00053 virtual ~StEEmcCluster(); 00054 00058 void add(const StEEmcTower &t, Float_t weight=1.0 ); 00059 00061 Float_t energy() const {return mEnergy;} 00062 00064 Float_t seedEnergy() const {return (mTowers.size())?mTowers[0].energy():0.;} 00065 00068 TVector3 momentum() const {return mMomentum;} 00069 00072 TVector3 position() const {return mPosition;} 00073 00075 Int_t numberOfTowers() const { return (Int_t)mTowers.size(); } 00076 00078 StEEmcTower &tower(Int_t t) { return mTowers[t]; } 00079 const StEEmcTower &tower(Int_t t) const { return mTowers[t]; } 00080 00083 Float_t sigmaE() const; 00084 00086 Float_t weight(Int_t t) const { return mWeights[t]; } 00088 StEEmcTowerVec_t &towers() { return mTowers; } 00089 const StEEmcTowerVec_t &towers() const { return mTowers; } 00090 00095 void momentum(const TVector3 &p) {mMomentum=p;} 00096 00100 StEmcCluster *stemc(); 00101 00103 void stemc(StEmcCluster *c){ mEmcCluster = c; } 00104 00107 Bool_t operator==( const StEEmcCluster &other ) const { return this->tower(0).index() == other.tower(0).index(); } 00108 00110 void print() const; 00111 00112 void printLine(Bool_t Endl=false) const; 00113 00115 Bool_t isNeighbor(const StEEmcTower &tower) const; 00116 00118 Float_t fracEtabin() const; 00120 Float_t fracPhibin() const; 00121 00123 Float_t sigmaEtabin() const { return TMath::Sqrt(mSumEta2W/mEnergy-mSumEtaW*mSumEtaW/mEnergy/mEnergy); } 00124 Float_t sigmaPhibin() const { return TMath::Sqrt(mSumPhi2W/mEnergy-mSumPhiW*mSumPhiW/mEnergy/mEnergy); } 00125 00127 Bool_t hasTower(const StEEmcTower &tower) const; 00128 00129 Bool_t operator<( const StEEmcCluster &other ) const { return this->energy() < other.energy(); } 00130 Bool_t operator>( const StEEmcCluster &other ) const { return this->energy() > other.energy(); } 00131 00132 Int_t numberOfEtabins() const; 00133 Int_t numberOfPhibins() const; 00134 00135 protected: 00137 StEEmcTowerVec_t mTowers; 00139 std::vector<Float_t> mWeights; 00140 00142 TVector3 mMomentum; 00143 TVector3 mPosition; 00144 00146 StEmcCluster *mEmcCluster; 00147 00148 Float_t mfEtabin; 00149 Float_t mfPhibin; 00151 Float_t mSumEta2W; 00152 Float_t mSumEtaW; 00153 Float_t mSumPhi2W; 00154 Float_t mSumPhiW; 00155 00156 ClassDef(StEEmcCluster,1); 00157 }; 00158 00159 typedef std::vector<StEEmcCluster> StEEmcClusterVec_t; 00160 00161 #endif
1.5.9