1#include "CLHEP/Geometry/Point3D.h"
2#include "CLHEP/Matrix/Matrix.h"
3#include "CLHEP/Matrix/SymMatrix.h"
4#include "CLHEP/Matrix/Vector.h"
5#include "GaudiKernel/Bootstrap.h"
6#include "GaudiKernel/ISvcLocator.h"
7#include "GaudiKernel/MsgStream.h"
8#include "GaudiKernel/SmartDataPtr.h"
11#include "EventModel/EventHeader.h"
12#include "EvtRecEvent/EvtRecEvent.h"
13#include "EvtRecEvent/EvtRecTrack.h"
14#include "MdcRecEvent/RecMdcKalTrack.h"
18using CLHEP::HepSymMatrix;
24 : Algorithm( name, pSvcLocator ) {
25 declareProperty(
"CorrectionFactor", m_factor = 1.0000 );
29 m_Ew = HepSymMatrix( 5, 0 );
32 m_Ew[2][2] = fabs( m_factor ) < 1e-6 ? 1.0 : 1.0 / m_factor;
40 MsgStream log(
msgSvc(), name() );
41 log << MSG::INFO <<
"in MagCorr::initialize()" << endmsg;
42 return StatusCode::SUCCESS;
46 MsgStream log(
msgSvc(), name() );
47 log << MSG::INFO <<
"in BFieldCorr::execute()" << endmsg;
48 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
49 int run_no = eventHeader->runNumber();
50 if ( run_no < 0 )
return StatusCode::SUCCESS;
55 log << MSG::FATAL <<
"Could not find EvtRecEvent" << endmsg;
56 return StatusCode::SUCCESS;
62 log << MSG::FATAL <<
"Could not find EvtRecTrackCol" << endmsg;
63 return StatusCode::SUCCESS;
66 if ( (
unsigned int)evtRecEvent->totalTracks() > evtRecTrkCol->size() )
67 return StatusCode::SUCCESS;
72 if ( fabs( m_factor - 1.000 ) < 1e-6 )
74 if ( run_no >= RUN_BEGIN_10 && run_no <= RUN_END_10 ) factor = 1.0004;
75 else if ( run_no >= RUN_BEGIN_11 && run_no <= RUN_END_11 ) factor = 1.0002;
78 else { factor = m_factor; }
79 m_Ew[2][2] = fabs( factor ) < 1e-6 ? 1.0 : 1.0 / factor;
81 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
84 if ( !( *itTrk )->isMdcTrackValid() )
continue;
85 if ( !( *itTrk )->isMdcKalTrackValid() )
continue;
90 mdc_trk->
setError( mdc_trk->
err().similarity( m_Ew ) );
91 mdc_trk->
setP( factor * mdc_trk->
p() );
92 mdc_trk->
setPxy( factor * mdc_trk->
pxy() );
93 mdc_trk->
setPx( factor * mdc_trk->
px() );
94 mdc_trk->
setPy( factor * mdc_trk->
py() );
95 mdc_trk->
setPz( factor * mdc_trk->
pz() );
104 for (
int j = 0; j < 5; j++ )
108 kal_trk->
setZError( kal_trk->
err().similarity( m_Ew ), j );
109 kal_trk->
setP( factor * kal_trk->
p(), j );
110 kal_trk->
setPxy( factor * kal_trk->
pxy(), j );
111 kal_trk->
setPx( factor * kal_trk->
px(), j );
112 kal_trk->
setPy( factor * kal_trk->
py(), j );
113 kal_trk->
setPz( factor * kal_trk->
pz(), j );
116 return StatusCode::SUCCESS;
120 MsgStream log(
msgSvc(), name() );
121 log << MSG::INFO <<
"in BFieldCorr::finalize()" << endmsg;
122 return StatusCode::SUCCESS;
DECLARE_COMPONENT(BesBdkRc)
HepGeom::Point3D< double > HepPoint3D
EvtRecTrackCol::iterator EvtRecTrackIterator
BFieldCorr(const std::string &name, ISvcLocator *pSvcLocator)
void setPz(const double pz, const int pid)
const HepVector & helix() const
void setZError(const HepSymMatrix &error, const int pid)
void setP(const double p, const int pid)
void setPx(const double px, const int pid)
void setPxy(const double pxy, const int pid)
void setPy(const double py, const int pid)
static void setPidType(PidType pidType)
void setZHelix(const HepVector &helix, const int pid)
const HepSymMatrix & err() const
void setPxy(const double pxy)
void setPy(const double py)
const HepSymMatrix err() const
void setError(double err[15])
void setP(const double p)
void setHelix(double helix[5])
const HepVector helix() const
......
void setPz(const double pz)
void setPx(const double px)
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecTrackCol