CGEM BOSS 6.6.5.f
BESIII Offline Software System
Loading...
Searching...
No Matches
BFieldCorr.cxx
Go to the documentation of this file.
1#include "GaudiKernel/MsgStream.h"
2#include "GaudiKernel/AlgFactory.h"
3#include "GaudiKernel/ISvcLocator.h"
4#include "GaudiKernel/SmartDataPtr.h"
5#include "GaudiKernel/IDataProviderSvc.h"
6#include "GaudiKernel/PropertyMgr.h"
7#include "EventModel/EventModel.h"
8#include "EventModel/Event.h"
9#include "EventModel/EventHeader.h"
10#include "EvtRecEvent/EvtRecEvent.h"
11#include "EvtRecEvent/EvtRecTrack.h"
12#include "EvtRecEvent/EvtRecPi0.h"
13#include "GaudiKernel/INTupleSvc.h"
14#include "GaudiKernel/NTuple.h"
15#include "GaudiKernel/Bootstrap.h"
16#include "GaudiKernel/IHistogramSvc.h"
17#include "CLHEP/Vector/ThreeVector.h"
18#include "CLHEP/Vector/LorentzVector.h"
19#include "CLHEP/Vector/TwoVector.h"
20#include "CLHEP/Geometry/Point3D.h"
21#include "MdcRecEvent/RecMdcKalTrack.h"
22
23#include "BFieldCorr/BFieldCorr.h"
24
25#include "CLHEP/Matrix/Vector.h"
26#include "CLHEP/Vector/LorentzVector.h"
27#include "CLHEP/Vector/ThreeVector.h"
28#include "CLHEP/Matrix/SymMatrix.h"
29#include "CLHEP/Matrix/Matrix.h"
30using CLHEP::HepVector;
31using CLHEP::HepLorentzVector;
32using CLHEP::Hep3Vector;
33using CLHEP::HepMatrix;
34using CLHEP::HepSymMatrix;
35
36#include "CLHEP/Geometry/Point3D.h"
37#ifndef ENABLE_BACKWARDS_COMPATIBILITY
39#endif
40
41#include <cmath>
42#include <vector>
43using namespace std;
44
45BFieldCorr::BFieldCorr(const std::string& name, ISvcLocator* pSvcLocator):Algorithm(name,pSvcLocator)
46{
47 declareProperty("CorrectionFactor", m_factor = 1.0000);
48}
49
51{
52 m_Ew = HepSymMatrix(5, 0);
53 m_Ew[0][0] = 1.0;
54 m_Ew[1][1] = 1.0;
55 m_Ew[2][2] = fabs(m_factor) < 1e-6 ? 1.0 : 1.0 / m_factor;
56 m_Ew[3][3] = 1.0;
57 m_Ew[4][4] = 1.0;
58 RUN_BEGIN_10 = 11414;
59 RUN_END_10 = 14604;
60 RUN_BEGIN_11 = 20448;
61 RUN_END_11 = 23454;
62
63 MsgStream log(msgSvc(), name());
64 log << MSG::INFO << "in MagCorr::initialize()" <<endmsg;
65 return StatusCode::SUCCESS;
66}
67
69{
70 MsgStream log(msgSvc(), name());
71 log << MSG::INFO << "in BFieldCorr::execute()" << endreq;
72 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
73 int run_no = eventHeader->runNumber();
74 if (run_no < 0) return StatusCode::SUCCESS;
75
76 SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
77 if (!evtRecEvent)
78 {
79 log << MSG::FATAL << "Could not find EvtRecEvent" << endreq;
80 return StatusCode::SUCCESS;
81 }
82
83 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
84 if (!evtRecTrkCol)
85 {
86 log << MSG::FATAL << "Could not find EvtRecTrackCol" << endreq;
87 return StatusCode::SUCCESS;
88 }
89
90 if ((unsigned int)evtRecEvent->totalTracks() > evtRecTrkCol->size()) return StatusCode::SUCCESS;
91 //if (evtRecEvent->totalTracks() > 50) return StatusCode::SUCCESS;
92
93 //set Ew if by default
94 double factor;
95 if (fabs(m_factor - 1.000) < 1e-6)
96 {
97 if (run_no >= RUN_BEGIN_10 && run_no <= RUN_END_10)
98 factor = 1.0004;
99 else if (run_no >= RUN_BEGIN_11 && run_no <= RUN_END_11)
100 factor = 1.0002;
101 else
102 factor = 1.0000;
103 }
104 else
105 {
106 factor = m_factor;
107 }
108 m_Ew[2][2] = fabs(factor) < 1e-6 ? 1.0 : 1.0 / factor;
109
110 for (int i = 0; i < evtRecEvent->totalCharged(); i++)
111 {
112 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
113 if (!(*itTrk)->isMdcTrackValid()) continue;
114 if (!(*itTrk)->isMdcKalTrackValid()) continue;
115
116 //RecMdcTrack correction
117 RecMdcTrack *mdc_trk = (*itTrk)->mdcTrack();
118 mdc_trk->setHelix( m_Ew * mdc_trk->helix() );
119 mdc_trk->setError( mdc_trk->err().similarity(m_Ew) );
120 mdc_trk->setP( factor * mdc_trk->p() );
121 mdc_trk->setPxy( factor * mdc_trk->pxy() );
122 mdc_trk->setPx( factor * mdc_trk->px() );
123 mdc_trk->setPy( factor * mdc_trk->py() );
124 mdc_trk->setPz( factor * mdc_trk->pz() );
125
126 //RecMdcKalTrack correction
127 RecMdcKalTrack *kal_trk = (*itTrk)->mdcKalTrack();
128 RecMdcKalTrack::PidType trk_type[] = {
134 };
135
136 for (int j = 0; j < 5; j++)
137 {
138 kal_trk->setPidType( trk_type[j] );
139 kal_trk->setZHelix( m_Ew * kal_trk->helix(), j );
140 kal_trk->setZError( kal_trk->err().similarity(m_Ew), j );
141 kal_trk->setP( factor * kal_trk->p(), j );
142 kal_trk->setPxy( factor * kal_trk->pxy(), j );
143 kal_trk->setPx( factor * kal_trk->px(), j );
144 kal_trk->setPy( factor * kal_trk->py(), j );
145 kal_trk->setPz( factor * kal_trk->pz(), j );
146 }
147 }
148 return StatusCode::SUCCESS;
149}
150
152{
153 MsgStream log(msgSvc(), name());
154 log << MSG::INFO << "in BFieldCorr::finalize()" << endreq;
155 return StatusCode::SUCCESS;
156}
HepGeom::Point3D< double > HepPoint3D
Definition: BFieldCorr.cxx:38
StatusCode finalize()
Definition: BFieldCorr.cxx:151
BFieldCorr(const std::string &name, ISvcLocator *pSvcLocator)
Definition: BFieldCorr.cxx:45
StatusCode initialize()
Definition: BFieldCorr.cxx:50
StatusCode execute()
Definition: BFieldCorr.cxx:68
void setZError(const HepSymMatrix &error, const int pid)
void setPxy(const double pxy, 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
......