BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
KalFitAlg.h
Go to the documentation of this file.
1//------------------------------------------------------------------------
2// Description :
3// Main file of the module KalFit in charge of :
4// 1/ Refit of the Mdc tracks using Kalman filter
5// 2/ Backward filter (smoothing)
6// 3/ and also several mass hypothesis, Non unif mag field treatment...
7//
8//------------------------------------------------------------------------
9
10#ifndef _DEFINE_KALFITALG_H_
11#define _DEFINE_KALFITALG_H_
12#ifndef DBL_MAX
13# define DBL_MAX 9999
14#endif
15
16class KalFitTrack;
17class KalFitHitMdc;
18class KalFitHelixSeg;
19// class Bfield;
20// class Helix;
21
22#include "AIDA/IHistogram1D.h"
23#include "AIDA/IHistogramFactory.h"
24#include "GaudiKernel/Algorithm.h"
25#include "GaudiKernel/IHistogramSvc.h"
26// #include "GaudiKernel/IMagneticFieldSvc.h"
27#include "GaudiKernel/NTuple.h"
28#include "HepPDT/ParticleDataTable.hh"
29#include "KalFitAlg/KalFitCylinder.h"
30#include "KalFitAlg/KalFitHelixSeg.h"
31#include "KalFitAlg/KalFitLayer_Mdc.h"
32#include "KalFitAlg/KalFitMaterial.h"
33#include "KalFitAlg/KalFitSuper_Mdc.h"
34#include "KalFitAlg/KalFitWire.h"
35#include "MagneticFieldSvc/IBesMagFieldSvc.h"
36#include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
37#include "MdcRecEvent/RecMdcKalHelixSeg.h"
38#include "MdcRecEvent/RecMdcKalTrack.h"
39#include "MdcTables/MdcTables.h"
40#include <vector>
41// added header files for 6.0.0
42#include "CLHEP/Matrix/Matrix.h"
43#include "CLHEP/Matrix/SymMatrix.h"
44#include "CLHEP/Matrix/Vector.h"
45#include "CLHEP/Vector/ThreeVector.h"
46#include "G4Material.hh"
47#include "G4Tubs.hh"
48
49#ifndef ENABLE_BACKWARDS_COMPATIBILITY
50typedef HepGeom::Point3D<double> HepPoint3D;
51#endif
52
53using namespace std;
54using namespace CLHEP;
55
56class KalFitAlg : public Algorithm {
57
58public:
59 /**@name Main member functions*/
60 //@{
61 /// constructor
62 KalFitAlg( const std::string& name, ISvcLocator* pSvcLocator );
63 /// destructor
64 ~KalFitAlg( void );
65 /// initialize
66 StatusCode initialize();
67 /// event function
68 StatusCode execute();
69 StatusCode finalize();
70 StatusCode beginRun();
71 /// hist definition
72 void hist_def( void );
73 /// delete C++ objects, necessary to clean before begin_run or inside
74 /// destructor
75 void clean( void );
76 //@}
77 /**@name Set up the description of the Mdc */
78 //@{
79 /// Set up the wires, layers and superlayers...
80 void set_Mdc( void );
81 /// Initialize the material for Mdc
82 void setMaterial_Mdc( void );
83 /// Initialize the cylinders (walls and cathodes) for Mdc
84 void setCylinder_Mdc( void );
85 ///
86 void setDchisqCut( void );
87 /// initialize for the services
88 void setCalibSvc_init( void );
89 void setGeomSvc_init( void );
91 ///
92 void getEventStarTime( void );
93
94 /**@name Kalman filter method related member functions*/
95 //@{
96 /// Kalman filter (forward) in Mdc
97 void filter_fwd_anal( KalFitTrack& trk, int l_mass, int way, HepSymMatrix& Eakal );
98 void filter_fwd_calib( KalFitTrack& trk, int l_mass, int way, HepSymMatrix& Eakal );
99
100 void init_matrix( MdcRec_trk& trk, HepSymMatrix& Ea );
101 void init_matrix( int k, MdcRec_trk& trk, HepSymMatrix& Ea );
102
103 void start_seed( KalFitTrack& track, int lead_, int way, MdcRec_trk& trk );
104
105 /// Kalman filter (smoothing or backward part)
106 void smoother_anal( KalFitTrack& trk, int way );
107 void smoother_calib( KalFitTrack& trk, int way );
108
109 /// Take the inner walls (eloss and mult scat) into account
110 void innerwall( KalFitTrack& trk, int l_mass, int way );
111 //@{
112 /// with results got at the inner Mdc hit
113 void fillTds( MdcRec_trk& TrasanTRK, KalFitTrack& track, RecMdcKalTrack* trk, int l_mass );
114 void fillTds_lead( MdcRec_trk& TrasanTRK, KalFitTrack& track, RecMdcKalTrack* trk,
115 int l_mass );
116 /// with results got at the outer Mdc hit
117 void fillTds_back( KalFitTrack& track, RecMdcKalTrack* trk, MdcRec_trk& TrasanTRK,
118 int l_mass );
119
120 void fillTds_back( KalFitTrack& track, RecMdcKalTrack* trk, MdcRec_trk& TrasanTRK,
121 int l_mass, RecMdcKalHelixSegCol* segcol );
122
123 /// for smoother process
124 void fillTds_back( KalFitTrack& track, RecMdcKalTrack* trk, MdcRec_trk& TrasanTRK,
125 int l_mass, RecMdcKalHelixSegCol* segcol, int smoothflag );
126 /// with results got at (0,0,0)
127 void fillTds_ip( MdcRec_trk& TrasanTRK, KalFitTrack& track, RecMdcKalTrack* trk,
128 int l_mass );
129
130 /// complete the RecMdcKalTrackCol
131 void sameas( RecMdcKalTrack* trk, int l_mass, int imain );
132
133 void complete_track( MdcRec_trk& TrasanTRK, MdcRec_trk_add& TrasanTRK_add,
134 KalFitTrack& track_lead, RecMdcKalTrack* kaltrk,
136 int flagsmooth );
137
138 void complete_track( MdcRec_trk& TrasanTRK, MdcRec_trk_add& TrasanTRK_add,
139 KalFitTrack& track_lead, RecMdcKalTrack* kaltrk,
140 RecMdcKalTrackCol* kalcol, RecMdcKalHelixSegCol* segcol );
141
142 // Careful refit
143 void kalman_fitting_anal( void );
144 void kalman_fitting_calib( void );
145 void kalman_fitting_csmalign( void );
147
148 // clear tables by wangdy
149 void clearTables();
150
151 ///
152 int getWallMdcNumber( const HepPoint3D& point );
153
154 ///
155 void extToAnyPoint( KalFitTrack& trk, const HepPoint3D& point );
156
157 ///
158 void setBesFromGdml( void );
159
160 /// this usage is used to control the usage of this algorithm ,to be
161 /// analysis or calibration.
163 ///
165 //// flag to calculate path length in each Mdc laye :
167 /// flag to take account the wire sag into account
168 int wsag_;
169 /// flag to perform smoothing
170 int back_;
171
173
175 /// value of the pT cut for backward filter
176 double pT_;
177 /// leading mass assumption
178 int lead_;
179 ///
180 int mhyp_;
181 /// value of the momentum cut to decide refit
184
185 /// Flag account to multiple scattering and energy loss,
186 /// where lr flag from and whether use active hits only
188 /// flag to enhance the error matrix at the inner hit of Mdc (cosmic)
191 ///
195 int numf_;
201 ///
203 /// mass assumption for backward filter (if <0 means use leading mass)
206 /// Debug flag for the track finder part
208 /// Fill ntuples of KalFit
210 // dir of files
212 // cut for delta_chi2
214
217
218 /// factor of energy loss straggling for electron
219 double fstrag_;
220 // wire resoltion flag
223
224 /// propagation correction
228 int m_csmflag; // cosmic events flag; for cosmic events tof(y>0) should be minus
229 double m_dangcut, m_dphicut; // for cosmic events cut
230
231private:
232 bool m_beginRun{ false };
233
234 std::vector<KalFitCylinder> _BesKalmanFitWalls;
235 std::vector<KalFitMaterial> _BesKalmanFitMaterials;
236 // std::vector<G4Tubs> _BesKalmanFitTubs;
237
238 // --- statistics
239 int nTotalTrks;
240 int nFailedTrks[5];
241
242 KalFitWire* _wire;
243 KalFitLayer_Mdc* _layer;
244 KalFitSuper_Mdc* _superLayer;
245 HepPDT::ParticleDataTable* m_particleTable;
246 static const double RIW;
247
248 const IMdcCalibFunSvc* m_mdcCalibFunSvc_;
249 const IBesMagFieldSvc* m_MFSvc_;
250 static IMdcGeomSvc* imdcGeomSvc_;
251
252 // sort the rec hits by layer
253 static bool order_rechits( const SmartRef<RecMdcHit>& m1, const SmartRef<RecMdcHit>& m2 );
254
255 // ntuples
256 NTuple::Tuple* m_nt1; // KalFit track params
257 NTuple::Tuple* m_nt2; // KalFit 2-prong comparison
258 NTuple::Tuple* m_nt3; // PatRec track params
259 NTuple::Tuple* m_nt4; // PatRec 2-prong comparison
260 NTuple::Tuple* m_nt5; // for hit checking and cut
261 NTuple::Tuple* m_nt6; // for helix seg of calib
262
263 // for nt1
264 NTuple::Item<long> m_trackid, m_evtid;
265 NTuple::Item<double> m_chi2direct, m_prob;
266 NTuple::Matrix<double> m_ndf, m_chisq, m_stat;
267 NTuple::Array<double> m_length, m_tof, m_nhits;
268 NTuple::Item<double> m_zptot, m_zptote, m_zptotmu, m_zptotk, m_zptotp;
269 NTuple::Item<double> m_zpt, m_zpte, m_zptmu, m_zptk, m_zptp;
270 NTuple::Item<double> m_fptot, m_fptote, m_fptotmu, m_fptotk, m_fptotp;
271 NTuple::Item<double> m_fpt, m_fpte, m_fptmu, m_fptk, m_fptp;
272 NTuple::Item<double> m_lptot, m_lptote, m_lptotmu, m_lptotk, m_lptotp;
273 NTuple::Item<double> m_lpt, m_lpte, m_lptmu, m_lptk, m_lptp;
274 NTuple::Item<double> m_zsigp, m_zsigpe, m_zsigpmu, m_zsigpk, m_zsigpp;
275 NTuple::Array<double> m_zhelix, m_zhelixe, m_zhelixmu, m_zhelixk, m_zhelixp;
276 NTuple::Array<double> m_fhelix, m_fhelixe, m_fhelixmu, m_fhelixk, m_fhelixp;
277 NTuple::Array<double> m_lhelix, m_lhelixe, m_lhelixmu, m_lhelixk, m_lhelixp;
278 NTuple::Array<double> m_zerror, m_zerrore, m_zerrormu, m_zerrork, m_zerrorp;
279 NTuple::Array<double> m_ferror, m_ferrore, m_ferrormu, m_ferrork, m_ferrorp;
280 NTuple::Array<double> m_lerror, m_lerrore, m_lerrormu, m_lerrork, m_lerrorp;
281 // for nt1 single track MCTruth
282 NTuple::Array<double> m_mchelix;
283 NTuple::Item<double> m_mcptot;
284 NTuple::Item<long> m_mcpid;
285 // for nt3
286 NTuple::Array<double> m_trkhelix, m_trkerror;
287 NTuple::Item<double> m_trkndf, m_trkchisq, m_trkptot, m_trksigp;
288 // for nt2
289 NTuple::Item<double> m_delx, m_dely, m_delz, m_delthe, m_delphi, m_delp;
290 NTuple::Item<double> m_delpx, m_delpy, m_delpz;
291
292 // for nt4
293 NTuple::Item<double> m_trkdelx, m_trkdely, m_trkdelz;
294 NTuple::Item<double> m_trkdelthe, m_trkdelphi, m_trkdelp;
295 // for nt5
296 NTuple::Item<double> m_dchi2, m_orichi2, m_fitchi2, m_residest, m_residnew, m_anal_dr,
297 m_anal_phi0, m_anal_kappa, m_anal_dz, m_anal_tanl, m_anal_ea_dr, m_anal_ea_phi0,
298 m_anal_ea_kappa, m_anal_ea_dz, m_anal_ea_tanl;
299 NTuple::Item<long> m_masshyp, m_layer;
300 // for nt6
301 NTuple::Item<double> m_docaInc, m_docaExc, m_tdrift;
302 NTuple::Item<long> m_layerid, m_eventNo;
303 NTuple::Item<double> m_residualInc, m_residualExc, m_lr, m_yposition, m_dd;
304
305 NTuple::Item<double> m_dchisq0, m_dchisq1, m_dchisq2, m_dchisq3, m_dchisq4, m_dchisq5,
306 m_dchisq6, m_dchisq7, m_dchisq8, m_dchisq9, m_dchisq10, m_dchisq11, m_dchisq12,
307 m_dchisq13, m_dchisq14, m_dchisq15, m_dchisq16, m_dchisq17, m_dchisq18, m_dchisq19,
308 m_dchisq20, m_dchisq21, m_dchisq22, m_dchisq23, m_dchisq24, m_dchisq25, m_dchisq26,
309 m_dchisq27, m_dchisq28, m_dchisq29, m_dchisq30, m_dchisq31, m_dchisq32, m_dchisq33,
310 m_dchisq34, m_dchisq35, m_dchisq36, m_dchisq37, m_dchisq38, m_dchisq39, m_dchisq40,
311 m_dchisq41, m_dchisq42;
312 NTuple::Item<double> m_dtrack0, m_dtrack1, m_dtrack2, m_dtrack3, m_dtrack4, m_dtrack5,
313 m_dtrack6, m_dtrack7, m_dtrack8, m_dtrack9, m_dtrack10, m_dtrack11, m_dtrack12,
314 m_dtrack13, m_dtrack14, m_dtrack15, m_dtrack16, m_dtrack17, m_dtrack18, m_dtrack19,
315 m_dtrack20, m_dtrack21, m_dtrack22, m_dtrack23, m_dtrack24, m_dtrack25, m_dtrack26,
316 m_dtrack27, m_dtrack28, m_dtrack29, m_dtrack30, m_dtrack31, m_dtrack32, m_dtrack33,
317 m_dtrack34, m_dtrack35, m_dtrack36, m_dtrack37, m_dtrack38, m_dtrack39, m_dtrack40,
318 m_dtrack41, m_dtrack42;
319 NTuple::Item<double> m_dtdc0, m_dtdc1, m_dtdc2, m_dtdc3, m_dtdc4, m_dtdc5, m_dtdc6, m_dtdc7,
320 m_dtdc8, m_dtdc9, m_dtdc10, m_dtdc11, m_dtdc12, m_dtdc13, m_dtdc14, m_dtdc15, m_dtdc16,
321 m_dtdc17, m_dtdc18, m_dtdc19, m_dtdc20, m_dtdc21, m_dtdc22, m_dtdc23, m_dtdc24, m_dtdc25,
322 m_dtdc26, m_dtdc27, m_dtdc28, m_dtdc29, m_dtdc30, m_dtdc31, m_dtdc32, m_dtdc33, m_dtdc34,
323 m_dtdc35, m_dtdc36, m_dtdc37, m_dtdc38, m_dtdc39, m_dtdc40, m_dtdc41, m_dtdc42;
324};
325#endif
HepGeom::Point3D< double > HepPoint3D
ObjectVector< RecMdcKalHelixSeg > RecMdcKalHelixSegCol
NTuple::Array< double > m_tof
NTuple::Array< double > m_layer
HepGeom::Point3D< double > HepPoint3D
Definition KalFitAlg.h:50
double pe_cut_
value of the momentum cut to decide refit
Definition KalFitAlg.h:182
int debug_kft_
Definition KalFitAlg.h:207
double gain1_
Definition KalFitAlg.h:192
void filter_fwd_anal(KalFitTrack &trk, int l_mass, int way, HepSymMatrix &Eakal)
Kalman filter (forward) in Mdc.
void filter_fwd_calib(KalFitTrack &trk, int l_mass, int way, HepSymMatrix &Eakal)
double dchi2cut_mid1_
Definition KalFitAlg.h:215
double fstrag_
factor of energy loss straggling for electron
Definition KalFitAlg.h:219
double pmu_cut_
Definition KalFitAlg.h:182
StatusCode beginRun()
double fac_h4_
Definition KalFitAlg.h:190
double m_dangcut
Definition KalFitAlg.h:229
double theta_cut_
Definition KalFitAlg.h:183
double pt_cut_
Definition KalFitAlg.h:183
int back_
flag to perform smoothing
Definition KalFitAlg.h:170
double gain3_
Definition KalFitAlg.h:192
void fillTds_lead(MdcRec_trk &TrasanTRK, KalFitTrack &track, RecMdcKalTrack *trk, int l_mass)
int iqual_front_[5]
Definition KalFitAlg.h:222
int numfcor_
Definition KalFitAlg.h:194
int outer_steps_
Definition KalFitAlg.h:197
int eventno
Definition KalFitAlg.h:172
~KalFitAlg(void)
destructor
double gain5_
Definition KalFitAlg.h:192
double dchi2cutf_
Definition KalFitAlg.h:213
void clean(void)
int tof_hyp_
Definition KalFitAlg.h:187
void kalman_fitting_MdcxReco_Csmc_Sew(void)
double pp_cut_
Definition KalFitAlg.h:182
void setCalibSvc_init(void)
initialize for the services
int numf_in_
Definition KalFitAlg.h:198
void smoother_anal(KalFitTrack &trk, int way)
Kalman filter (smoothing or backward part).
int iqual_back_
Definition KalFitAlg.h:222
int i_back_
mass assumption for backward filter (if <0 means use leading mass)
Definition KalFitAlg.h:204
void complete_track(MdcRec_trk &TrasanTRK, MdcRec_trk_add &TrasanTRK_add, KalFitTrack &track_lead, RecMdcKalTrack *kaltrk, RecMdcKalTrackCol *kalcol, RecMdcKalHelixSegCol *segcol, int flagsmooth)
int wsag_
flag to take account the wire sag into account
Definition KalFitAlg.h:168
double fac_h3_
Definition KalFitAlg.h:190
double dchi2cut_mid2_
Definition KalFitAlg.h:215
void kalman_fitting_calib(void)
void sameas(RecMdcKalTrack *trk, int l_mass, int imain)
complete the RecMdcKalTrackCol
void fillTds_ip(MdcRec_trk &TrasanTRK, KalFitTrack &track, RecMdcKalTrack *trk, int l_mass)
with results got at (0,0,0)
int tofflag_
Definition KalFitAlg.h:187
string matfile_
Definition KalFitAlg.h:211
void fillTds(MdcRec_trk &TrasanTRK, KalFitTrack &track, RecMdcKalTrack *trk, int l_mass)
with results got at the inner Mdc hit
void innerwall(KalFitTrack &trk, int l_mass, int way)
Take the inner walls (eloss and mult scat) into account.
double fac_h1_
Definition KalFitAlg.h:190
double m_dphicut
Definition KalFitAlg.h:229
double fac_h2_
Definition KalFitAlg.h:190
int fitnocut_
Definition KalFitAlg.h:200
int debug_
Debug flag for the track finder part.
Definition KalFitAlg.h:207
string cylfile_
Definition KalFitAlg.h:211
void start_seed(KalFitTrack &track, int lead_, int way, MdcRec_trk &trk)
double dchi2cut_layid2_
Definition KalFitAlg.h:215
void getEventStarTime(void)
void setBesFromGdml(void)
void setGeomSvc_init(void)
KalFitAlg(const std::string &name, ISvcLocator *pSvcLocator)
constructor
Definition KalFitAlg.cxx:76
void kalman_fitting_anal(void)
int i_front_
Definition KalFitAlg.h:205
void setDchisqCut(void)
int m_usevtxdb
Definition KalFitAlg.h:227
int tprop_
propagation correction
Definition KalFitAlg.h:225
double dchi2cut_layid3_
Definition KalFitAlg.h:216
double fac_h5_
Definition KalFitAlg.h:190
int choice_
Definition KalFitAlg.h:164
int getWallMdcNumber(const HepPoint3D &point)
void set_Mdc(void)
Set up the wires, layers and superlayers...
int numf_out_
Definition KalFitAlg.h:199
void setMagneticFieldSvc_init(void)
int drifttime_choice_
Definition KalFitAlg.h:202
int m_csmflag
Definition KalFitAlg.h:228
double dchi2cut_outer_
Definition KalFitAlg.h:215
int eventNo
Definition KalFitAlg.h:226
int enhance_
flag to enhance the error matrix at the inner hit of Mdc (cosmic)
Definition KalFitAlg.h:189
StatusCode execute()
event function
double gain2_
Definition KalFitAlg.h:192
int inner_steps_
Definition KalFitAlg.h:196
int lead_
leading mass assumption
Definition KalFitAlg.h:178
int resolution_
Definition KalFitAlg.h:221
double dchi2cuts_
Definition KalFitAlg.h:213
void smoother_calib(KalFitTrack &trk, int way)
int Tds_back_no
Definition KalFitAlg.h:174
void init_matrix(MdcRec_trk &trk, HepSymMatrix &Ea)
void setCylinder_Mdc(void)
Initialize the cylinders (walls and cathodes) for Mdc.
double pk_cut_
Definition KalFitAlg.h:182
double pT_
value of the pT cut for backward filter
Definition KalFitAlg.h:176
int steplev_
Definition KalFitAlg.h:193
double matrixg_
Definition KalFitAlg.h:190
StatusCode initialize()
initialize
StatusCode finalize()
void kalman_fitting_csmalign(void)
double gain4_
Definition KalFitAlg.h:192
int ntuple_
Fill ntuples of KalFit.
Definition KalFitAlg.h:209
double ppi_cut_
Definition KalFitAlg.h:182
void hist_def(void)
hist definition
void fillTds_back(KalFitTrack &track, RecMdcKalTrack *trk, MdcRec_trk &TrasanTRK, int l_mass)
with results got at the outer Mdc hit
void setMaterial_Mdc(void)
Initialize the material for Mdc.
double dchi2cut_inner_
Definition KalFitAlg.h:215
int activeonly_
Definition KalFitAlg.h:187
void extToAnyPoint(KalFitTrack &trk, const HepPoint3D &point)
void clearTables()
Description of a track class (<- Helix.cc).
double double * m2
Definition qcdloop1.h:83
double * m1
Definition qcdloop1.h:83