00001 #include "MdcAlignAlg/MdcAliRecTrk.h" 00002 00003 #include "GaudiKernel/MsgStream.h" 00004 #include "GaudiKernel/IMessageSvc.h" 00005 #include "GaudiKernel/StatusCode.h" 00006 #include "GaudiKernel/ISvcLocator.h" 00007 #include "GaudiKernel/Bootstrap.h" 00008 #include "GaudiKernel/SmartDataPtr.h" 00009 #include "GaudiKernel/IDataProviderSvc.h" 00010 00011 const double MdcAliRecTrk::m_df = 10.0; 00012 00013 MdcAliRecTrk::~MdcAliRecTrk(){ 00014 unsigned int i; 00015 for(i=0; i<m_rechit.size(); i++){ 00016 delete m_rechit[i]; 00017 } 00018 m_rechit.clear(); 00019 } 00020 00021 void MdcAliRecTrk::setRecTrk(RecMdcTrackCol::iterator it_trk){ 00022 IMessageSvc *msgSvc; 00023 Gaudi::svcLocator()->service("MessageSvc", msgSvc); 00024 MsgStream log(msgSvc, "MdcAliRecTrk"); 00025 log << MSG::DEBUG << "MdcAliRecTrk::setRecTrk()" << endreq; 00026 00027 m_stat = (*it_trk)->stat(); 00028 m_dr = (*it_trk) -> helix(0); 00029 m_phi0 = (*it_trk) -> helix(1); 00030 m_kappa = (*it_trk) -> helix(2); 00031 m_dz = (*it_trk) -> helix(3); 00032 m_tanl = (*it_trk) -> helix(4); 00033 00034 m_helix = (*it_trk)->helix(); 00035 m_helixerr = (*it_trk)->err(); 00036 00037 m_chisq = (*it_trk) -> chi2(); 00038 m_nhits = (*it_trk) -> getNhits(); 00039 00040 m_dr *= m_df; // cm -> mm 00041 m_dz *= m_df; // cm -> mm 00042 00043 if(m_kappa < 0.01){ // no magnetic field 00044 m_pt = 0.0; 00045 m_p = 0.0; 00046 }else{ 00047 m_pt = 1.0 / m_kappa; 00048 m_p = m_pt * sqrt(m_tanl * m_tanl + 1.0); 00049 } 00050 00051 HitRefVec gothits = (*it_trk) -> getVecHits(); 00052 HitRefVec::iterator it_hit = gothits.begin(); 00053 MdcAliRecHit* rechit; 00054 for(; it_hit != gothits.end(); it_hit++){ 00055 rechit = new MdcAliRecHit(); 00056 rechit->setRecHit(it_hit); 00057 m_rechit.push_back(rechit); 00058 } 00059 } 00060 00061 void MdcAliRecTrk::setKalTrk(RecMdcKalTrackCol::iterator it_trk){ 00062 IMessageSvc *msgSvc; 00063 Gaudi::svcLocator()->service("MessageSvc", msgSvc); 00064 MsgStream log(msgSvc, "MdcAliRecTrk"); 00065 log << MSG::DEBUG << "MdcAliRecTrk::setKalTrk()" << endreq; 00066 00067 int m_pid = 1; 00068 if(0 == m_pid) RecMdcKalTrack::setPidType(RecMdcKalTrack::electron); 00069 else if(1 == m_pid) RecMdcKalTrack::setPidType(RecMdcKalTrack::muon); 00070 else RecMdcKalTrack::setPidType(RecMdcKalTrack::electron); 00071 00072 m_stat = 0; 00073 m_dr = (*it_trk)->dr(); 00074 m_phi0 = (*it_trk)->fi0(); 00075 m_kappa = (*it_trk)->kappa(); 00076 m_dz = (*it_trk)->dz(); 00077 m_tanl = (*it_trk)->tanl(); 00078 m_chisq = (*it_trk)->chi2(); 00079 00080 m_dr *= 10.0; // cm -> mm 00081 m_dz *= 10.0; // cm -> mm 00082 00083 m_pt = 1.0 / fabs(m_kappa); 00084 m_p = m_pt * sqrt( m_tanl * m_tanl + 1.0 ); 00085 00086 HelixSegRefVec gothelixsegs = (*it_trk)->getVecHelixSegs(); 00087 HelixSegRefVec::iterator it_hit = gothelixsegs.begin(); 00088 MdcAliRecHit* rechit; 00089 00090 int k = 0; 00091 for(; it_hit != gothelixsegs.end(); it_hit++){ 00092 rechit = new MdcAliRecHit(); 00093 rechit->setKalHit(it_hit); 00094 m_rechit.push_back(rechit); 00095 00096 k++; 00097 } 00098 m_nhits = k; 00099 }