00001 #ifndef Event_EvtRecTrack_H 00002 #define Event_EvtRecTrack_H 00003 00004 #include "GaudiKernel/ObjectVector.h" 00005 #include "GaudiKernel/ContainedObject.h" 00006 #include "GaudiKernel/SmartRef.h" 00007 #include "GaudiKernel/SmartRefVector.h" 00008 #include "EventModel/EventModel.h" 00009 #include "MdcRecEvent/RecMdcTrack.h" 00010 #include "MdcRecEvent/RecMdcKalTrack.h" 00011 #include "MdcRecEvent/RecMdcDedx.h" 00012 #include "ExtEvent/RecExtTrack.h" 00013 #include "TofRecEvent/RecTofTrack.h" 00014 #include "EmcRecEventModel/RecEmcShower.h" 00015 #include "MucRecEvent/RecMucTrack.h" 00016 00017 using namespace EventModel; 00018 00019 extern const CLID &CLID_EvtRecTrack; 00020 00021 class EvtRecTrack:virtual public ContainedObject { 00022 public: 00023 virtual const CLID& clID() const {return EvtRecTrack::classID();} 00024 static const CLID& classID() { return CLID_EvtRecTrack;} 00025 00026 EvtRecTrack(); 00027 ~EvtRecTrack() {;} 00028 00029 EvtRecTrack(const EvtRecTrack&); 00030 00031 //get Track ID, Particle ID and Data Quality 00032 int trackId() const {return m_trackId;} 00033 int partId() const {return m_partId;} 00034 int quality() const { return m_quality; } 00035 00036 bool isElectron() const { return (m_partId & 0x01); } 00037 bool isMuon() const { return (m_partId & 0x02); } 00038 bool isPion() const { return (m_partId & 0x04); } 00039 bool isKaon() const { return (m_partId & 0x08); } 00040 bool isProton() const { return (m_partId & 0x10); } 00041 00042 //Sub detector infomation is Valid or not 00043 bool isMdcTrackValid() {return (m_originMdcTrack != 0);} 00044 bool isMdcKalTrackValid() {return (m_originMdcKalTrack != 0);} 00045 bool isMdcDedxValid() {return (m_originMdcDedx != 0);} 00046 bool isTofTrackValid() {return (!m_originTofTrack.empty());} 00047 bool isEmcShowerValid() {return (m_originEmcShower!= 0);} 00048 bool isMucTrackValid() {return (m_originMucTrack != 0);} 00049 bool isExtTrackValid() {return (m_originExtTrack != 0);} 00050 00051 //pointer to sub detector infomation 00052 00053 RecMdcTrack* mdcTrack() {return m_originMdcTrack;} 00054 RecMdcKalTrack* mdcKalTrack() {return m_originMdcKalTrack;} 00055 RecMdcDedx* mdcDedx() {return m_originMdcDedx;} 00056 RecExtTrack* extTrack() {return m_originExtTrack;} 00057 SmartRefVector<RecTofTrack> tofTrack() {return m_originTofTrack;} 00058 RecEmcShower* emcShower() {return m_originEmcShower;} 00059 RecMucTrack* mucTrack() {return m_originMucTrack;} 00060 00061 00062 // set Track ID, Particle ID and Data Quality 00063 00064 void setTrackId(const int trkId) {m_trackId = trkId;} 00065 void setPartId(const int partId) {m_partId = partId;} 00066 void setQuality(const int quality) { m_quality = quality; } 00067 00068 void tagElectron() { m_partId |= 0x01; } 00069 void tagMuon() { m_partId |= 0x02; } 00070 void tagPion() { m_partId |= 0x04; } 00071 void tagKaon() { m_partId |= 0x08; } 00072 void tagProton() { m_partId |= 0x10; } 00073 00074 // set sub detector pointer 00075 00076 void setMdcTrack(const RecMdcTrack* trk) {m_originMdcTrack = trk;} 00077 void setMdcKalTrack(const RecMdcKalTrack* trk) {m_originMdcKalTrack = trk;} 00078 void setMdcDedx(const RecMdcDedx* trk) {m_originMdcDedx = trk;} 00079 void setExtTrack(const RecExtTrack* trk) {m_originExtTrack = trk;} 00080 void setTofTrack(const SmartRefVector<RecTofTrack> trk) {m_originTofTrack = trk;} 00081 void addTofTrack(const SmartRef<RecTofTrack> trk) {m_originTofTrack.push_back(trk);} 00082 void setEmcShower(const RecEmcShower* shower) {m_originEmcShower = shower;} 00083 void setMucTrack(const RecMucTrack* trk) {m_originMucTrack = trk;} 00084 00085 // assign operator 00086 00087 EvtRecTrack & operator = (const EvtRecTrack &); 00088 00089 00090 00091 private: 00092 00093 int m_trackId; 00094 // Pid: 0x01 - electron, 0x02 - muon, 0x04 - pion, 0x08 - kaon, 0x10 - proton 00095 int m_partId; 00096 //data quality: 1 - very good, 2 - available, 3 - normal 00097 int m_quality; 00098 00099 SmartRef<RecMdcTrack> m_originMdcTrack; 00100 SmartRef<RecMdcKalTrack> m_originMdcKalTrack; 00101 SmartRef<RecMdcDedx> m_originMdcDedx; 00102 SmartRef<RecExtTrack> m_originExtTrack; 00103 SmartRefVector<RecTofTrack> m_originTofTrack; 00104 SmartRef<RecEmcShower> m_originEmcShower; 00105 SmartRef<RecMucTrack> m_originMucTrack; 00106 00107 }; 00108 00109 typedef ObjectVector<EvtRecTrack> EvtRecTrackCol; 00110 00111 typedef EvtRecTrackCol::iterator EvtRecTrackIterator; 00112 00113 00114 00115 #endif