00001 #include "CLHEP/Vector/LorentzVector.h" 00002 #include "string.h" 00003 #include "MdcRecEvent/RecMdcKalTrack.h" 00004 const double mmass[5] = {0.000511, 0.105658, 0.139570,0.493677, 0.938272}; 00005 // mmass[5] = { e, mu, pion, Kion, proton} 00006 class m_trkInfo{ 00007 int i; 00008 double mom; 00009 HepLorentzVector trk; 00010 RecMdcKalTrack *mdcTrk; 00011 public: 00012 m_trkInfo(int index, double momentum, HepLorentzVector trkp, RecMdcKalTrack *mdcKaltrk){ 00013 i=index; 00014 mom=momentum; 00015 trk=trkp; 00016 mdcTrk=mdcKaltrk; 00017 } 00018 int getIndex(){return i;} 00019 double getMom(){return mom;} 00020 HepLorentzVector getTrk(){return trk;} 00021 HepLorentzVector getTrk(std::string m_particle_type); 00022 }; 00023 00024 // Define a function which can calculate the momentum difference between two Lorentz vectors. 00025 inline double cal_via_mom(HepLorentzVector m_mom_a, HepLorentzVector m_mom_b){ 00026 return( m_mom_b.vect().mag()*1000-m_mom_a.vect().mag()); 00027 } // where a factor 1000 arise from the differences between the unit of MC truth and reconstruction 00028 00029 inline HepLorentzVector m_trkInfo::getTrk(std::string m_part_type){ 00030 if(m_part_type=="e"){ 00031 mdcTrk->setPidType(RecMdcKalTrack::electron); 00032 trk.setPx(mdcTrk->px()); 00033 trk.setPy(mdcTrk->py()); 00034 trk.setPz(mdcTrk->pz()); 00035 double p3(mdcTrk->p()); 00036 trk.setE( sqrt(p3*p3 + mmass[0]*mmass[0]) ); 00037 return trk; 00038 } 00039 if(m_part_type=="muon"){ 00040 mdcTrk->setPidType(RecMdcKalTrack::muon); 00041 trk.setPx(mdcTrk->px()); 00042 trk.setPy(mdcTrk->py()); 00043 trk.setPz(mdcTrk->pz()); 00044 double p3(mdcTrk->p()); 00045 trk.setE( sqrt(p3*p3 + mmass[1]*mmass[1]) ); 00046 return trk; 00047 } 00048 if(m_part_type=="pion"){ 00049 mdcTrk->setPidType(RecMdcKalTrack::pion); 00050 trk.setPx(mdcTrk->px()); 00051 trk.setPy(mdcTrk->py()); 00052 trk.setPz(mdcTrk->pz()); 00053 double p3(mdcTrk->p()); 00054 trk.setE( sqrt(p3*p3 + mmass[2]*mmass[2]) ); 00055 return trk; 00056 } 00057 if(m_part_type=="kion"){ 00058 mdcTrk->setPidType(RecMdcKalTrack::kaon); 00059 trk.setPx(mdcTrk->px()); 00060 trk.setPy(mdcTrk->py()); 00061 trk.setPz(mdcTrk->pz()); 00062 double p3(mdcTrk->p()); 00063 trk.setE( sqrt(p3*p3 + mmass[3]*mmass[3]) ); 00064 return trk; 00065 } 00066 if(m_part_type=="proton"){ 00067 mdcTrk->setPidType(RecMdcKalTrack::proton); 00068 trk.setPx(mdcTrk->px()); 00069 trk.setPy(mdcTrk->py()); 00070 trk.setPz(mdcTrk->pz()); 00071 double p3(mdcTrk->p()); 00072 trk.setE( sqrt(p3*p3 + mmass[4]*mmass[4]) ); 00073 return trk; 00074 } 00075 else return trk; 00076 }