00001 /* 00002 * @class : MdcDedx 00003 * 00004 * this class models "dE/dx" used in Mdc Reconstruction 00005 * 00006 * @author: wangdy 00007 * 00008 * ********************************************************/ 00009 00010 #ifndef RECMDCDEDX_H 00011 #define RECMDCDEDX_H 00012 #include "GaudiKernel/ContainedObject.h" 00013 #include "GaudiKernel/SmartRef.h" 00014 #include "GaudiKernel/SmartRefVector.h" 00015 #include "GaudiKernel/ObjectVector.h" 00016 #include "EventModel/EventModel.h" 00017 #include "RecMdcTrack.h" 00018 #include "RecMdcDedxHit.h" 00019 00020 00021 //#include "Identifier/Identifier.h" 00022 //#include "ExtEvent/ExtTrack.h" 00023 #include "DstEvent/DstMdcDedx.h" 00024 00025 extern const CLID& CLID_RecMdcDedx; 00026 typedef SmartRefVector<RecMdcDedxHit> DedxHitRefVec; 00027 //class MdcDedx : virtual public ContainedObject { 00028 class RecMdcDedx : virtual public DstMdcDedx { 00029 00030 public: 00031 virtual const CLID& clID() const { 00032 return RecMdcDedx::classID(); 00033 } 00034 00035 static const CLID& classID() { 00036 return CLID_RecMdcDedx; 00037 } 00038 00039 00040 //ctor and dector 00041 RecMdcDedx(); 00042 RecMdcDedx(const RecMdcDedx& dedxtrk); 00043 RecMdcDedx(const DstMdcDedx& dedxtrk); 00044 RecMdcDedx& operator=(const RecMdcDedx&); 00045 RecMdcDedx& operator=(const DstMdcDedx&); 00046 00047 ~RecMdcDedx(); 00048 //extractors 00049 // int getId(void) const { return m_id; } 00050 // int getPid(void) const { return m_pid; } 00051 // int getStat(void) const { return m_stat; } 00052 // int getNHits(void) const { return m_nhits; } 00053 // float getDedx(void) const { return m_dedx; } 00054 // float getDedxStd(void) const { return m_dedx_std; } 00055 // int getBitrunc(void) const { return m_bitrunc; } 00056 00057 double getDedxHit(void) {return m_dedx_hit; } 00058 double getDedxEsat(void) {return m_dedx_esat; } 00059 double getDedxNoRun(void) {return m_dedx_norun; } 00060 double getDedxMoment(void) {return m_dedx_momentum; } 00061 00062 double getDedxExpect(int pid) const { return m_dedx_exp[pid-1]; } 00063 double getSigmaDedx(int pid) const { return m_sigma_dedx[pid-1]; } 00064 double getPidProb(int pid) const { return m_pid_prob[pid-1]; } 00065 // double getChi(int pid) const { return m_chi[pid-1]; } 00066 SmartRef<RecMdcTrack> getTrack(void) { return m_trk; } 00067 00068 //modifiers 00069 void setDedxHit(double dedx_hit) { m_dedx_hit = dedx_hit; } 00070 void setDedxEsat(double dedx_esat) { m_dedx_esat = dedx_esat; } 00071 void setDedxNoRun(double dedx_norun) { m_dedx_norun = dedx_norun; } 00072 void setDedxMoment(double dedx_momentum){ m_dedx_momentum = dedx_momentum; } 00073 // void setId(int id) { m_id = id; } 00074 // void setPid(int pid) { m_pid = pid; } 00075 // void setStat(int stat) { m_stat = stat; } 00076 // void setNHits(int nhits) { m_nhits = nhits; } 00077 // void setDedx(float dedx) { m_dedx = dedx; } 00078 // void setDedxStd(float dedx_std) { m_dedx_std = dedx_std; } 00079 // void setBitrunc(int bitrunc) { m_bitrunc = bitrunc; } 00080 00081 void setDedxExpect(double* dedx_exp) { 00082 for(int i = 0; i < 5; i++) 00083 m_dedx_exp[i] = dedx_exp[i] ; 00084 } 00085 void setSigmaDedx(double* sigma_dedx) { 00086 for(int i = 0; i < 5; i++) 00087 m_sigma_dedx[i] = sigma_dedx[i] ; 00088 } 00089 void setPidProb(double* pid_prob) { 00090 for(int i = 0; i < 5; i++) 00091 m_pid_prob[i] = pid_prob[i] ; 00092 } 00093 /* void setChi(double* chi) { 00094 for(int i = 0; i < 5; i++) 00095 m_chi[i] = chi[i] ; 00096 } 00097 */ 00098 void setTrack(SmartRef<RecMdcTrack> trk) { m_trk = trk; } 00099 00100 private: 00101 double m_dedx_hit; //double trucation mean of hit-level calib 00102 double m_dedx_esat; //double trucation mean of hit-level+electron saturation calib 00103 double m_dedx_norun; //double trucation mean of no run gain calib 00104 double m_dedx_momentum; //dE/dx calib used momentum 00105 // int m_bitrunc; //bitrunction rate 00106 // int m_id; 00107 // int m_pid; // partile id results 00108 // int m_stat; // status flag 00109 // int m_nhits; // number of hits used in dE/dx recon 00110 // float m_dedx; // measured value of dE/dx 00111 // float m_dedx_std; // normalized dE/dx; 00112 double m_dedx_exp[5]; // expected value of dE/dx for 5 particle hypotheses 00113 double m_sigma_dedx[5]; // sigma value of dE/dx for 5 particle hypotheses 00114 double m_pid_prob[5]; // probability for each of the 5 particle hypotheses 00115 // double m_chi[5]; // chi of dE/dx for each of 5 particle hypotheses 00116 SmartRef<RecMdcTrack> m_trk; // reference to the track 00117 00118 }; 00119 00120 typedef ObjectVector<RecMdcDedx> RecMdcDedxCol; 00121 00122 #endif 00123