00001 #ifndef DST_DSTMDCDEDX_H 00002 #define DST_DSTMDCDEDX_H 00003 #include "GaudiKernel/ObjectVector.h" 00004 #include "GaudiKernel/ContainedObject.h" 00005 #include "EventModel/EventModel.h" 00006 00007 using namespace EventModel; 00008 extern const CLID &CLID_DstMdcDedx; 00009 enum pid_dedx{electron, muon, kaon, pion, proton}; 00010 00011 class DstMdcDedx : virtual public ContainedObject { 00012 public: 00013 00014 // ctor and dector 00015 DstMdcDedx() {} 00016 virtual ~DstMdcDedx() {} 00017 00018 virtual const CLID& clID() const { return DstMdcDedx::classID(); } 00019 static const CLID& classID() { return CLID_DstMdcDedx; } 00020 00021 // extractors 00022 //int getTrackId() const {return m_trackId ;} 00023 //int getParticleId() const { return m_particleId; } 00024 //int getStatus() const { return m_status; } 00025 //int geTruncAlg() const { return m_trunc_alg; } 00026 //double getNumChidedx(int i) const { return m_numChidedx[i]; } 00027 //int getNumGoodHits() const { return m_numGoodHits; } 00028 //int getNumTotalHits() const { return m_numTotalHits; } 00029 //double getProbPH() const { return m_probPH; } 00030 //double getNormPH() const { return m_normPH; } 00031 // extractors 00032 int trackId() const {return m_trackId ;} 00033 int particleId() const { return m_particleId; } // will converge to particleType() later 00034 pid_dedx particleType() const{ 00035 switch(particleId()){ 00036 case 0: 00037 return electron; 00038 break; 00039 case 1: 00040 return muon; 00041 break; 00042 case 2: 00043 return kaon; 00044 break; 00045 case 3: 00046 return pion; 00047 break; 00048 case 4: 00049 return proton; 00050 break; 00051 default: 00052 std::cerr << "the particleType receive an incorrect input!" << std::endl; 00053 exit(1); 00054 } 00055 } 00056 int status() const { return m_status; } 00057 int truncAlg() const { return m_trunc_alg; } 00058 double chi(int i) const { return m_chi[i]; } 00059 double chiE() const { return m_chi[0]; } 00060 double chiMu() const { return m_chi[1]; } 00061 double chiPi() const { return m_chi[2]; } 00062 double chiK() const { return m_chi[3]; } 00063 double chiP() const { return m_chi[4]; } 00064 int numGoodHits() const { return m_numGoodHits; } 00065 int numTotalHits() const { return m_numTotalHits; } 00066 double probPH() const { return m_probPH; } 00067 double normPH() const { return m_normPH; } 00068 double errorPH() const { return m_errorPH; } 00069 double twentyPH() const { return m_twentyPH; } 00070 00071 // modifiers 00072 void setTrackId(int trackId) {m_trackId = trackId ;} 00073 void setParticleId(int particleId) { m_particleId = particleId; } 00074 void setStatus (int status) { m_status=status; } 00075 void setTruncAlg(int trunc_alg) { m_trunc_alg = trunc_alg; } 00076 00077 void setChi( double* chi) { 00078 for(int i =0; i<5 ; i++) m_chi[i]= chi[i]; 00079 } 00080 00081 void setNumGoodHits(int numGoodHits) { m_numGoodHits = numGoodHits; } 00082 void setNumTotalHits(int numTotalHits) { m_numTotalHits = numTotalHits; } 00083 void setProbPH(double probPH) { m_probPH = probPH; } 00084 void setNormPH(double normPH) { m_normPH = normPH; } 00085 void setErrorPH(double errorPH) { m_errorPH = errorPH; } 00086 void setTwentyPH(double twentyPH) { m_twentyPH = twentyPH; } 00087 protected: 00088 int m_trackId ; //Track ID Add 2005-10-18 00089 int m_particleId; //Particle ID from De/Dx 00090 int m_status; //Status 00091 int m_trunc_alg; //truncate method 00092 double m_chi[5]; //Number of Chi_dEdx for different particles 00093 //0: e 1: mu 2: pi 3: K 4:p 00094 int m_numGoodHits; //No. of good de/dx hits(exclude overflow) 00095 int m_numTotalHits; //No. of good de/dx hits(include overflow) 00096 double m_probPH; //Most probable pulse height from truncated mean 00097 double m_normPH; //normalized pulse height 00098 double m_errorPH; //resolution of truncated mean 00099 double m_twentyPH; //de/dx value of bitrunction rate equal to 20% 00100 }; 00101 00102 typedef ObjectVector<DstMdcDedx> DstMdcDedxCol; 00103 00104 #endif //DST_DEDX_H 00105