10#ifndef _DEFINE_KALFITALG_H_
11#define _DEFINE_KALFITALG_H_
22#include "GaudiKernel/Algorithm.h"
23#include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
24#include "MdcCalibFunSvc/MdcCalibFunSvc.h"
25#include "GaudiKernel/IMagneticFieldSvc.h"
26#include "MagneticField/MagneticFieldSvc.h"
27#include "KalFitAlg/KalFitWire.h"
28#include "KalFitAlg/KalFitHelixSeg.h"
29#include "KalFitAlg/KalFitCylinder.h"
30#include "KalFitAlg/KalFitLayer_Mdc.h"
31#include "KalFitAlg/KalFitSuper_Mdc.h"
32#include "KalFitAlg/KalFitMaterial.h"
33#include "MdcTables/MdcTables.h"
34#include "GaudiKernel/NTuple.h"
35#include "AIDA/IHistogram1D.h"
36#include "AIDA/IHistogramFactory.h"
37#include "GaudiKernel/IHistogramSvc.h"
38#include "MdcRecEvent/RecMdcKalTrack.h"
39#include "MdcRecEvent/RecMdcKalHelixSeg.h"
40#include "HepPDT/ParticleDataTable.hh"
43#include "CLHEP/Matrix/Vector.h"
44#include "CLHEP/Matrix/Matrix.h"
45#include "CLHEP/Matrix/SymMatrix.h"
46#include "CLHEP/Vector/ThreeVector.h"
47#include "G4Material.hh"
50#ifndef ENABLE_BACKWARDS_COMPATIBILITY
64 KalFitAlg(
const std::string& name, ISvcLocator* pSvcLocator);
238 std::vector<KalFitCylinder> _BesKalmanFitWalls;
239 std::vector<KalFitMaterial> _BesKalmanFitMaterials;
250 HepPDT::ParticleDataTable* m_particleTable;
251 static const double RIW;
258 static bool order_rechits(
const SmartRef<RecMdcHit>& m1,
const SmartRef<RecMdcHit>& m2);
261 NTuple::Tuple* m_nt1;
262 NTuple::Tuple* m_nt2;
263 NTuple::Tuple* m_nt3;
264 NTuple::Tuple* m_nt4;
265 NTuple::Tuple* m_nt5;
266 NTuple::Tuple* m_nt6;
269 NTuple::Item<long> m_trackid,m_evtid;
270 NTuple::Item<double> m_chi2direct,m_prob;
271 NTuple::Matrix<double> m_ndf,m_chisq,m_stat;
272 NTuple::Array<double> m_length,m_tof,m_nhits;
273 NTuple::Item<double> m_zptot,m_zptote,m_zptotmu,m_zptotk,m_zptotp;
274 NTuple::Item<double> m_zpt,m_zpte,m_zptmu,m_zptk,m_zptp;
275 NTuple::Item<double> m_fptot,m_fptote,m_fptotmu,m_fptotk,m_fptotp;
276 NTuple::Item<double> m_fpt,m_fpte,m_fptmu,m_fptk,m_fptp;
277 NTuple::Item<double> m_lptot,m_lptote,m_lptotmu,m_lptotk,m_lptotp;
278 NTuple::Item<double> m_lpt,m_lpte,m_lptmu,m_lptk,m_lptp;
279 NTuple::Item<double> m_zsigp,m_zsigpe,m_zsigpmu,m_zsigpk,m_zsigpp;
280 NTuple::Array<double> m_zhelix,m_zhelixe,m_zhelixmu,m_zhelixk,m_zhelixp;
281 NTuple::Array<double> m_fhelix,m_fhelixe,m_fhelixmu,m_fhelixk,m_fhelixp;
282 NTuple::Array<double> m_lhelix,m_lhelixe,m_lhelixmu,m_lhelixk,m_lhelixp;
283 NTuple::Array<double> m_zerror,m_zerrore,m_zerrormu,m_zerrork,m_zerrorp;
284 NTuple::Array<double> m_ferror,m_ferrore,m_ferrormu,m_ferrork,m_ferrorp;
285 NTuple::Array<double> m_lerror,m_lerrore,m_lerrormu,m_lerrork,m_lerrorp;
287 NTuple::Array<double> m_mchelix;
288 NTuple::Item<double> m_mcptot;
289 NTuple::Item<long> m_mcpid;
291 NTuple::Array<double> m_trkhelix, m_trkerror;
292 NTuple::Item<double> m_trkndf, m_trkchisq, m_trkptot, m_trksigp;
294 NTuple::Item<double> m_delx,m_dely,m_delz,m_delthe,m_delphi,m_delp;
295 NTuple::Item<double> m_delpx,m_delpy,m_delpz;
298 NTuple::Item<double> m_trkdelx,m_trkdely,m_trkdelz;
299 NTuple::Item<double> m_trkdelthe,m_trkdelphi,m_trkdelp;
301 NTuple::Item<double> m_dchi2,m_orichi2,m_fitchi2,m_residest, m_residnew,m_anal_dr, m_anal_phi0, m_anal_kappa, m_anal_dz, m_anal_tanl, m_anal_ea_dr, m_anal_ea_phi0, m_anal_ea_kappa, m_anal_ea_dz, m_anal_ea_tanl;
302 NTuple::Item<long> m_masshyp, m_layer;
304 NTuple::Item<double> m_docaInc,m_docaExc, m_tdrift;
305 NTuple::Item<long> m_layerid,m_eventNo;
306 NTuple::Item<double> m_residualInc, m_residualExc, m_lr, m_yposition, m_dd;
308 NTuple::Item<double> m_dchisq0,m_dchisq1,m_dchisq2,m_dchisq3,m_dchisq4,m_dchisq5,m_dchisq6,m_dchisq7,m_dchisq8,m_dchisq9,m_dchisq10,m_dchisq11,m_dchisq12,m_dchisq13,m_dchisq14,m_dchisq15,m_dchisq16,m_dchisq17,m_dchisq18,m_dchisq19,m_dchisq20,m_dchisq21,m_dchisq22,m_dchisq23,m_dchisq24,m_dchisq25,m_dchisq26,m_dchisq27,m_dchisq28,m_dchisq29,m_dchisq30,m_dchisq31,m_dchisq32,m_dchisq33,m_dchisq34,m_dchisq35,m_dchisq36,m_dchisq37,m_dchisq38,m_dchisq39,m_dchisq40,m_dchisq41,m_dchisq42;
309 NTuple::Item<double> m_dtrack0,m_dtrack1,m_dtrack2,m_dtrack3,m_dtrack4,m_dtrack5,m_dtrack6,m_dtrack7,m_dtrack8,m_dtrack9,m_dtrack10,m_dtrack11,m_dtrack12,m_dtrack13,m_dtrack14,m_dtrack15,m_dtrack16,m_dtrack17,m_dtrack18,m_dtrack19,m_dtrack20,m_dtrack21,m_dtrack22,m_dtrack23,m_dtrack24,m_dtrack25,m_dtrack26,m_dtrack27,m_dtrack28,m_dtrack29,m_dtrack30,m_dtrack31,m_dtrack32,m_dtrack33,m_dtrack34,m_dtrack35,m_dtrack36,m_dtrack37,m_dtrack38,m_dtrack39,m_dtrack40,m_dtrack41,m_dtrack42;
310 NTuple::Item<double> m_dtdc0,m_dtdc1,m_dtdc2,m_dtdc3,m_dtdc4,m_dtdc5,m_dtdc6,m_dtdc7,m_dtdc8,m_dtdc9,m_dtdc10,m_dtdc11,m_dtdc12,m_dtdc13,m_dtdc14,m_dtdc15,m_dtdc16,m_dtdc17,m_dtdc18,m_dtdc19,m_dtdc20,m_dtdc21,m_dtdc22,m_dtdc23,m_dtdc24,m_dtdc25,m_dtdc26,m_dtdc27,m_dtdc28,m_dtdc29,m_dtdc30,m_dtdc31,m_dtdc32,m_dtdc33,m_dtdc34,m_dtdc35,m_dtdc36,m_dtdc37,m_dtdc38,m_dtdc39,m_dtdc40,m_dtdc41,m_dtdc42;
ObjectVector< RecMdcKalHelixSeg > RecMdcKalHelixSegCol
ObjectVector< RecMdcKalTrack > RecMdcKalTrackCol
HepGeom::Point3D< double > HepPoint3D
double pe_cut_
value of the momentum cut to decide refit
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 fstrag_
factor of energy loss straggling for electron
int back_
flag to perform smoothing
void fillTds_lead(MdcRec_trk &TrasanTRK, KalFitTrack &track, RecMdcKalTrack *trk, int l_mass)
~KalFitAlg(void)
destructor
void kalman_fitting_MdcxReco_Csmc_Sew(void)
void setCalibSvc_init(void)
initialize for the services
void smoother_anal(KalFitTrack &trk, int way)
Kalman filter (smoothing or backward part)
int i_back_
mass assumption for backward filter (if <0 means use leading mass)
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
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)
void init_matrix(int k, MdcRec_trk &trk, HepSymMatrix &Ea)
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.
int debug_
Debug flag for the track finder part.
void start_seed(KalFitTrack &track, int lead_, int way, MdcRec_trk &trk)
void getEventStarTime(void)
void setBesFromGdml(void)
void setGeomSvc_init(void)
KalFitAlg(const std::string &name, ISvcLocator *pSvcLocator)
constructor
void kalman_fitting_anal(void)
int tprop_
propagation correction
int getWallMdcNumber(const HepPoint3D &point)
void set_Mdc(void)
Set up the wires, layers and superlayers...
void setMagneticFieldSvc_init(void)
int enhance_
flag to enhance the error matrix at the inner hit of Mdc (cosmic)
StatusCode execute()
event function
int lead_
leading mass assumption
void complete_track(MdcRec_trk &TrasanTRK, MdcRec_trk_add &TrasanTRK_add, KalFitTrack &track_lead, RecMdcKalTrack *kaltrk, RecMdcKalTrackCol *kalcol, RecMdcKalHelixSegCol *segcol)
void fillTds_back(KalFitTrack &track, RecMdcKalTrack *trk, MdcRec_trk &TrasanTRK, int l_mass, RecMdcKalHelixSegCol *segcol, int smoothflag)
for smoother process
void smoother_calib(KalFitTrack &trk, int way)
void init_matrix(MdcRec_trk &trk, HepSymMatrix &Ea)
void setCylinder_Mdc(void)
Initialize the cylinders (walls and cathodes) for Mdc.
double pT_
value of the pT cut for backward filter
StatusCode initialize()
initialize
void kalman_fitting_csmalign(void)
int ntuple_
Fill ntuples of KalFit.
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.
void fillTds_back(KalFitTrack &track, RecMdcKalTrack *trk, MdcRec_trk &TrasanTRK, int l_mass, RecMdcKalHelixSegCol *segcol)
void extToAnyPoint(KalFitTrack &trk, const HepPoint3D &point)
Description of a Hit in Mdc.
Description of a track class (<- Helix.cc)
Description of a Wire class.