00001 #ifndef __StEEmcPoint_h__ 00002 #define __StEEmcPoint_h__ 00003 00015 #include "TObject.h" 00016 #include "TVector3.h" 00017 00018 #include "StEEmcPool/StEEmcA2EMaker/StEEmcTower.h" 00019 #include "StEEmcPool/StEEmcClusterMaker/StEEmcCluster.h" 00020 #include "StEEmcPool/StEEmcClusterMaker/StEEmcSmdCluster.h" 00021 00022 class StEmcPoint; 00023 00024 class StEEmcPoint : public TObject { 00025 public: 00026 00027 StEEmcPoint(); 00028 StEEmcPoint( const StEEmcPoint &p ); 00029 virtual ~StEEmcPoint(){ /* nada */ }; 00030 00032 void position( const TVector3 &p ) { mPosition=p; } 00034 void energy( Float_t e, Int_t layer=0 ) { mEnergy[layer]=e; } 00036 void fraction ( Float_t f ) { mFraction=f; } 00038 void tower( const StEEmcTower &t, Float_t w=1. ) { mTowers.push_back(t); mWeights.push_back(w); } 00040 void cluster( const StEEmcSmdCluster &c, Int_t plane ) { 00041 mSmdClusters[plane]=c; 00042 mSector=c.sector(); 00043 if (plane==0) 00044 mU=c.mean(); 00045 else 00046 mV=c.mean(); 00047 } 00048 00050 void cluster( const StEEmcCluster &c, Int_t layer){ mTowerClusters[layer].push_back(c); } 00051 00053 StEEmcClusterVec_t &clusters(Int_t layer){ return mTowerClusters[layer]; } 00054 const StEEmcClusterVec_t &clusters(Int_t layer) const { return mTowerClusters[layer]; } 00055 00057 void numberOfRelatives( Int_t r ) { mRelatives=r; } 00058 00060 const TVector3 &position() const { return mPosition; } 00062 Float_t fraction() const { return mFraction; } 00064 Float_t energy(Int_t layer=0) const { return mEnergy[layer]; } 00066 Int_t numberOfTowers() const { return (Int_t)mTowers.size(); } 00068 const StEEmcTower &tower(Int_t t) const { return mTowers[t]; } 00070 Float_t weight(Int_t t) const { return mWeights[t]; } 00073 StEEmcSmdCluster &cluster(Int_t c) { return mSmdClusters[c]; } 00074 const StEEmcSmdCluster &cluster(Int_t c) const { return mSmdClusters[c]; } 00075 00078 Int_t numberOfRelatives() const { return mRelatives; } 00079 00082 StEmcPoint *stemc(); 00083 00085 Int_t sector() const { return mSector; } 00087 void sector(Int_t s){ mSector=s; } 00088 00090 Float_t sigma() const { return mSigma; } 00092 void sigma(Float_t s) { mSigma=s; } 00093 00095 Float_t u() const { return mU; } 00097 void u(Float_t uu){ mU=uu; } 00098 00100 Float_t v() const { return mV; } 00102 void v(Float_t vv){ mV=vv; } 00103 00105 Float_t residueU() const { return mResidueU; } 00107 void residueU(Float_t r){ mResidueU=r; } 00109 Float_t residueV() const { return mResidueV; } 00111 void residueV(Float_t r){ mResidueV=r; } 00112 00114 void print() const; 00115 00117 Bool_t operator<( const StEEmcPoint &other ) const { return this->energy() < other.energy(); } 00119 Bool_t chiSquare( const StEEmcPoint &other ) const; 00120 00121 Int_t key() const { return mKey; } 00122 void key( Int_t k ) { mKey = k; } 00123 00124 Float_t asymmetry() const { 00125 Float_t esum=cluster(0).energy()+cluster(1).energy(); 00126 Float_t edif=cluster(0).energy()-cluster(1).energy(); 00127 if(esum>0.) 00128 return edif/esum; 00129 return 9.0E9; 00130 } 00131 00132 Float_t chisquared() const { 00133 Float_t edif = ( mSmdClusters[0].energy() - mSmdClusters[1].energy() ); 00134 Float_t esum = ( mSmdClusters[0].energy() + mSmdClusters[1].energy() ); 00135 Float_t nmip = 1000.0*esum / 1.3; 00136 if ( nmip > 0. ) return (edif*edif)/nmip; 00137 return -1.0; 00138 } 00139 00140 protected: 00142 TVector3 mPosition; 00144 Float_t mEnergy[4]; 00146 Float_t mFraction; 00147 00149 Int_t mSector; 00151 Float_t mSigma; 00153 Float_t mU; 00155 Float_t mV; 00157 Float_t mResidueU; 00159 Float_t mResidueV; 00160 00162 StEEmcSmdCluster mSmdClusters[2]; 00163 00165 std::vector< StEEmcClusterVec_t > mTowerClusters; 00166 00169 StEEmcTowerVec_t mTowers; 00170 00171 std::vector<Float_t> mWeights; 00172 00174 Int_t mRelatives; 00175 00177 StEmcPoint *mEmcPoint; 00178 00179 Int_t mKey; 00180 00182 ClassDef(StEEmcPoint,1); 00183 00184 }; 00185 00186 typedef std::vector<StEEmcPoint> StEEmcPointVec_t; 00187 00188 inline Bool_t chiSquare( const StEEmcPoint &me, const StEEmcPoint &other ) { return me.chiSquare( other ); } 00189 00190 inline Bool_t Asymmetry( const StEEmcPoint &me, const StEEmcPoint &other ){ 00191 return TMath::Abs(me.asymmetry()) < TMath::Abs(other.asymmetry()); 00192 } 00193 00194 #endif
1.5.9