BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BFieldCorr.cxx
Go to the documentation of this file.
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"
9#include <cmath>
10
11#include "EventModel/EventHeader.h"
12#include "EvtRecEvent/EvtRecEvent.h"
13#include "EvtRecEvent/EvtRecTrack.h"
14#include "MdcRecEvent/RecMdcKalTrack.h"
15
16#include "BFieldCorr.h"
17
18using CLHEP::HepSymMatrix;
19using namespace std;
20typedef HepGeom::Point3D<double> HepPoint3D;
21
23BFieldCorr::BFieldCorr( const std::string& name, ISvcLocator* pSvcLocator )
24 : Algorithm( name, pSvcLocator ) {
25 declareProperty( "CorrectionFactor", m_factor = 1.0000 );
26}
27
29 m_Ew = HepSymMatrix( 5, 0 );
30 m_Ew[0][0] = 1.0;
31 m_Ew[1][1] = 1.0;
32 m_Ew[2][2] = fabs( m_factor ) < 1e-6 ? 1.0 : 1.0 / m_factor;
33 m_Ew[3][3] = 1.0;
34 m_Ew[4][4] = 1.0;
35 RUN_BEGIN_10 = 11414;
36 RUN_END_10 = 14604;
37 RUN_BEGIN_11 = 20448;
38 RUN_END_11 = 23454;
39
40 MsgStream log( msgSvc(), name() );
41 log << MSG::INFO << "in MagCorr::initialize()" << endmsg;
42 return StatusCode::SUCCESS;
43}
44
45StatusCode BFieldCorr::execute() {
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;
51
52 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(), EventModel::EvtRec::EvtRecEvent );
53 if ( !evtRecEvent )
54 {
55 log << MSG::FATAL << "Could not find EvtRecEvent" << endmsg;
56 return StatusCode::SUCCESS;
57 }
58
59 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(), EventModel::EvtRec::EvtRecTrackCol );
60 if ( !evtRecTrkCol )
61 {
62 log << MSG::FATAL << "Could not find EvtRecTrackCol" << endmsg;
63 return StatusCode::SUCCESS;
64 }
65
66 if ( (unsigned int)evtRecEvent->totalTracks() > evtRecTrkCol->size() )
67 return StatusCode::SUCCESS;
68 // if (evtRecEvent->totalTracks() > 50) return StatusCode::SUCCESS;
69
70 // set Ew if by default
71 double factor;
72 if ( fabs( m_factor - 1.000 ) < 1e-6 )
73 {
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;
76 else factor = 1.0000;
77 }
78 else { factor = m_factor; }
79 m_Ew[2][2] = fabs( factor ) < 1e-6 ? 1.0 : 1.0 / factor;
80
81 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
82 {
83 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
84 if ( !( *itTrk )->isMdcTrackValid() ) continue;
85 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
86
87 // RecMdcTrack correction
88 RecMdcTrack* mdc_trk = ( *itTrk )->mdcTrack();
89 mdc_trk->setHelix( m_Ew * mdc_trk->helix() );
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() );
96
97 // RecMdcKalTrack correction
98 RecMdcKalTrack* kal_trk = ( *itTrk )->mdcKalTrack();
99 RecMdcKalTrack::PidType trk_type[] = {
102 };
103
104 for ( int j = 0; j < 5; j++ )
105 {
106 kal_trk->setPidType( trk_type[j] );
107 kal_trk->setZHelix( m_Ew * kal_trk->helix(), 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 );
114 }
115 }
116 return StatusCode::SUCCESS;
117}
118
120 MsgStream log( msgSvc(), name() );
121 log << MSG::INFO << "in BFieldCorr::finalize()" << endmsg;
122 return StatusCode::SUCCESS;
123}
DECLARE_COMPONENT(BesBdkRc)
HepGeom::Point3D< double > HepPoint3D
EvtRecTrackCol::iterator EvtRecTrackIterator
IMessageSvc * msgSvc()
StatusCode finalize()
BFieldCorr(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize()
StatusCode execute()
void setPz(const double pz, const int pid)
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)
void setZHelix(const HepVector &helix, const int pid)
const HepSymMatrix err() const
void setError(double err[15])
void setHelix(double helix[5])
const HepVector helix() const
......