#include <BFieldCorr.h>
Public Member Functions | |
BFieldCorr (const std::string &name, ISvcLocator *pSvcLocator) | |
StatusCode | initialize () |
StatusCode | execute () |
StatusCode | finalize () |
Private Attributes | |
double | m_factor |
HepSymMatrix | m_Ew |
int | RUN_BEGIN_10 |
int | RUN_END_10 |
int | RUN_BEGIN_11 |
int | RUN_END_11 |
Definition at line 19 of file BFieldCorr.h.
BFieldCorr::BFieldCorr | ( | const std::string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
Definition at line 45 of file BFieldCorr.cxx.
References m_factor.
00045 :Algorithm(name,pSvcLocator) 00046 { 00047 declareProperty("CorrectionFactor", m_factor = 1.0000); 00048 }
StatusCode BFieldCorr::execute | ( | ) |
Definition at line 68 of file BFieldCorr.cxx.
References DstMdcKalTrack::electron, DstMdcKalTrack::err(), DstMdcTrack::err(), EventModel::EvtRec::EvtRecEvent, EventModel::EvtRec::EvtRecTrackCol, Bes_Common::FATAL, DstMdcKalTrack::helix(), DstMdcTrack::helix(), genRecEmupikp::i, Bes_Common::INFO, ganga-rec::j, DstMdcKalTrack::kaon, m_Ew, m_factor, msgSvc(), DstMdcKalTrack::muon, DstMdcKalTrack::p(), DstMdcTrack::p(), DstMdcKalTrack::pion, DstMdcKalTrack::proton, DstMdcKalTrack::px(), DstMdcTrack::px(), DstMdcKalTrack::pxy(), DstMdcTrack::pxy(), DstMdcKalTrack::py(), DstMdcTrack::py(), DstMdcKalTrack::pz(), DstMdcTrack::pz(), RUN_BEGIN_10, RUN_BEGIN_11, RUN_END_10, RUN_END_11, DstMdcTrack::setError(), DstMdcTrack::setHelix(), DstMdcKalTrack::setP(), DstMdcTrack::setP(), DstMdcKalTrack::setPidType(), DstMdcKalTrack::setPx(), DstMdcTrack::setPx(), DstMdcKalTrack::setPxy(), DstMdcTrack::setPxy(), DstMdcKalTrack::setPy(), DstMdcTrack::setPy(), DstMdcKalTrack::setPz(), DstMdcTrack::setPz(), DstMdcKalTrack::setZError(), and DstMdcKalTrack::setZHelix().
00069 { 00070 MsgStream log(msgSvc(), name()); 00071 log << MSG::INFO << "in BFieldCorr::execute()" << endreq; 00072 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader"); 00073 int run_no = eventHeader->runNumber(); 00074 if (run_no < 0) return StatusCode::SUCCESS; 00075 00076 SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent); 00077 if (!evtRecEvent) 00078 { 00079 log << MSG::FATAL << "Could not find EvtRecEvent" << endreq; 00080 return StatusCode::SUCCESS; 00081 } 00082 00083 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol); 00084 if (!evtRecTrkCol) 00085 { 00086 log << MSG::FATAL << "Could not find EvtRecTrackCol" << endreq; 00087 return StatusCode::SUCCESS; 00088 } 00089 00090 if ((unsigned int)evtRecEvent->totalTracks() > evtRecTrkCol->size()) return StatusCode::SUCCESS; 00091 //if (evtRecEvent->totalTracks() > 50) return StatusCode::SUCCESS; 00092 00093 //set Ew if by default 00094 double factor; 00095 if (fabs(m_factor - 1.000) < 1e-6) 00096 { 00097 if (run_no >= RUN_BEGIN_10 && run_no <= RUN_END_10) 00098 factor = 1.0004; 00099 else if (run_no >= RUN_BEGIN_11 && run_no <= RUN_END_11) 00100 factor = 1.0002; 00101 else 00102 factor = 1.0000; 00103 } 00104 else 00105 { 00106 factor = m_factor; 00107 } 00108 m_Ew[2][2] = fabs(factor) < 1e-6 ? 1.0 : 1.0 / factor; 00109 00110 for (int i = 0; i < evtRecEvent->totalCharged(); i++) 00111 { 00112 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i; 00113 if (!(*itTrk)->isMdcTrackValid()) continue; 00114 if (!(*itTrk)->isMdcKalTrackValid()) continue; 00115 00116 //RecMdcTrack correction 00117 RecMdcTrack *mdc_trk = (*itTrk)->mdcTrack(); 00118 mdc_trk->setHelix( m_Ew * mdc_trk->helix() ); 00119 mdc_trk->setError( mdc_trk->err().similarity(m_Ew) ); 00120 mdc_trk->setP( factor * mdc_trk->p() ); 00121 mdc_trk->setPxy( factor * mdc_trk->pxy() ); 00122 mdc_trk->setPx( factor * mdc_trk->px() ); 00123 mdc_trk->setPy( factor * mdc_trk->py() ); 00124 mdc_trk->setPz( factor * mdc_trk->pz() ); 00125 00126 //RecMdcKalTrack correction 00127 RecMdcKalTrack *kal_trk = (*itTrk)->mdcKalTrack(); 00128 RecMdcKalTrack::PidType trk_type[] = { 00129 RecMdcKalTrack::electron, 00130 RecMdcKalTrack::muon, 00131 RecMdcKalTrack::pion, 00132 RecMdcKalTrack::kaon, 00133 RecMdcKalTrack::proton, 00134 }; 00135 00136 for (int j = 0; j < 5; j++) 00137 { 00138 kal_trk->setPidType( trk_type[j] ); 00139 kal_trk->setZHelix( m_Ew * kal_trk->helix(), j ); 00140 kal_trk->setZError( kal_trk->err().similarity(m_Ew), j ); 00141 kal_trk->setP( factor * kal_trk->p(), j ); 00142 kal_trk->setPxy( factor * kal_trk->pxy(), j ); 00143 kal_trk->setPx( factor * kal_trk->px(), j ); 00144 kal_trk->setPy( factor * kal_trk->py(), j ); 00145 kal_trk->setPz( factor * kal_trk->pz(), j ); 00146 } 00147 } 00148 return StatusCode::SUCCESS; 00149 }
StatusCode BFieldCorr::finalize | ( | ) |
Definition at line 151 of file BFieldCorr.cxx.
References Bes_Common::INFO, and msgSvc().
00152 { 00153 MsgStream log(msgSvc(), name()); 00154 log << MSG::INFO << "in BFieldCorr::finalize()" << endreq; 00155 return StatusCode::SUCCESS; 00156 }
StatusCode BFieldCorr::initialize | ( | ) |
Definition at line 50 of file BFieldCorr.cxx.
References Bes_Common::INFO, m_Ew, m_factor, msgSvc(), RUN_BEGIN_10, RUN_BEGIN_11, RUN_END_10, and RUN_END_11.
00051 { 00052 m_Ew = HepSymMatrix(5, 0); 00053 m_Ew[0][0] = 1.0; 00054 m_Ew[1][1] = 1.0; 00055 m_Ew[2][2] = fabs(m_factor) < 1e-6 ? 1.0 : 1.0 / m_factor; 00056 m_Ew[3][3] = 1.0; 00057 m_Ew[4][4] = 1.0; 00058 RUN_BEGIN_10 = 11414; 00059 RUN_END_10 = 14604; 00060 RUN_BEGIN_11 = 20448; 00061 RUN_END_11 = 23454; 00062 00063 MsgStream log(msgSvc(), name()); 00064 log << MSG::INFO << "in MagCorr::initialize()" <<endmsg; 00065 return StatusCode::SUCCESS; 00066 }
HepSymMatrix BFieldCorr::m_Ew [private] |
double BFieldCorr::m_factor [private] |
Definition at line 28 of file BFieldCorr.h.
Referenced by BFieldCorr(), execute(), and initialize().
int BFieldCorr::RUN_BEGIN_10 [private] |
int BFieldCorr::RUN_BEGIN_11 [private] |
int BFieldCorr::RUN_END_10 [private] |
int BFieldCorr::RUN_END_11 [private] |