10#ifndef _DEFINE_KALFITALG_H_
11#define _DEFINE_KALFITALG_H_
22#include "GaudiKernel/Algorithm.h"
25#include "GaudiKernel/IMagneticFieldSvc.h"
35#include "GaudiKernel/NTuple.h"
36#include "AIDA/IHistogram1D.h"
37#include "AIDA/IHistogramFactory.h"
38#include "GaudiKernel/IHistogramSvc.h"
41#include "HepPDT/ParticleDataTable.hh"
44#include "CLHEP/Matrix/Vector.h"
45#include "CLHEP/Matrix/Matrix.h"
46#include "CLHEP/Matrix/SymMatrix.h"
47#include "CLHEP/Vector/ThreeVector.h"
48#include "G4Material.hh"
53#ifndef ENABLE_BACKWARDS_COMPATIBILITY
67 KalFitAlg(
const std::string& name, ISvcLocator* pSvcLocator);
252 std::vector<KalFitCylinder> _BesKalmanFitWalls;
253 std::vector<KalFitMaterial> _BesKalmanFitMaterials;
254 std::vector<KalFitCylinder> m_innerWall;
255 std::vector<KalFitCylinder> m_CGEM;
256 std::vector<KalFitMaterial> m_CGEMMaterials;
274 HepPDT::ParticleDataTable* m_particleTable;
275 static const double RIW;
289 static bool order_rechits(
const SmartRef<RecMdcHit>& m1,
const SmartRef<RecMdcHit>& m2);
292 NTuple::Tuple* m_nt1;
293 NTuple::Tuple* m_nt2;
294 NTuple::Tuple* m_nt3;
295 NTuple::Tuple* m_nt4;
296 NTuple::Tuple* m_nt5;
297 NTuple::Tuple* m_nt6;
298 NTuple::Tuple* m_nt7;
301 NTuple::Item<long> m_trackid,m_evtid;
302 NTuple::Item<double> m_chi2direct,m_prob;
303 NTuple::Matrix<double> m_ndf,m_chisq,m_stat;
304 NTuple::Array<double> m_length,m_tof,m_nhits;
305 NTuple::Item<double> m_zptot,m_zptote,m_zptotmu,m_zptotk,m_zptotp;
306 NTuple::Item<double> m_zpt,m_zpte,m_zptmu,m_zptk,m_zptp;
307 NTuple::Item<double> m_fptot,m_fptote,m_fptotmu,m_fptotk,m_fptotp;
308 NTuple::Item<double> m_fpt,m_fpte,m_fptmu,m_fptk,m_fptp;
309 NTuple::Item<double> m_lptot,m_lptote,m_lptotmu,m_lptotk,m_lptotp;
310 NTuple::Item<double> m_lpt,m_lpte,m_lptmu,m_lptk,m_lptp;
311 NTuple::Item<double> m_zsigp,m_zsigpe,m_zsigpmu,m_zsigpk,m_zsigpp;
312 NTuple::Array<double> m_zhelix,m_zhelixe,m_zhelixmu,m_zhelixk,m_zhelixp;
313 NTuple::Array<double> m_fhelix,m_fhelixe,m_fhelixmu,m_fhelixk,m_fhelixp;
314 NTuple::Array<double> m_lhelix,m_lhelixe,m_lhelixmu,m_lhelixk,m_lhelixp;
315 NTuple::Array<double> m_zerror,m_zerrore,m_zerrormu,m_zerrork,m_zerrorp;
316 NTuple::Array<double> m_ferror,m_ferrore,m_ferrormu,m_ferrork,m_ferrorp;
317 NTuple::Array<double> m_lerror,m_lerrore,m_lerrormu,m_lerrork,m_lerrorp;
318 NTuple::Array<double> m_rGem, m_chi2Gem, m_phiGemExp, m_phiGemHit, m_zGemExp, m_zGemHit;
320 NTuple::Array<double> m_mchelix;
321 NTuple::Item<double> m_mcptot;
322 NTuple::Item<long> m_mcpid;
324 NTuple::Array<double> m_trkhelix, m_trkerror;
325 NTuple::Item<double> m_trkndf, m_trkchisq, m_trkptot, m_trksigp;
327 NTuple::Item<double> m_delx,m_dely,m_delz,m_delthe,m_delphi,m_delp;
328 NTuple::Item<double> m_delpx,m_delpy,m_delpz;
331 NTuple::Item<double> m_trkdelx,m_trkdely,m_trkdelz;
332 NTuple::Item<double> m_trkdelthe,m_trkdelphi,m_trkdelp;
334 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;
335 NTuple::Item<long> m_masshyp, m_layer;
337 NTuple::Item<double> m_docaInc,m_docaExc, m_tdrift;
338 NTuple::Item<long> m_layerid,m_eventNo;
339 NTuple::Item<double> m_residualInc, m_residualExc, m_lr, m_yposition, m_dd;
342 NTuple::Item<int> m_run_kal;
343 NTuple::Item<int> m_event_kal;
344 NTuple::Item<int> m_trkid_kal;
345 NTuple::Item<int> m_dropedHits_kal_e;
346 NTuple::Item<double> m_kappa2_kal_e;
347 NTuple::Item<int> m_trackNhits_kal_e;
348 NTuple::Item<int> m_trackNster_kal_e;
349 NTuple::Item<int> m_trackNaxis_kal_e;
350 NTuple::Item<double> m_chi2_kal_e;
351 NTuple::Item<double> m_Ea00_kal_e;
352 NTuple::Item<double> m_Ea11_kal_e;
353 NTuple::Item<double> m_Ea22_kal_e;
354 NTuple::Item<double> m_Ea33_kal_e;
355 NTuple::Item<double> m_Ea44_kal_e;
356 NTuple::Item<double> m_iqual_front_kal_e;
357 NTuple::Item<int> m_dropedHits_kal_mu;
358 NTuple::Item<double> m_kappa2_kal_mu;
359 NTuple::Item<int> m_trackNhits_kal_mu;
360 NTuple::Item<int> m_trackNster_kal_mu;
361 NTuple::Item<int> m_trackNaxis_kal_mu;
362 NTuple::Item<double> m_chi2_kal_mu;
363 NTuple::Item<double> m_Ea00_kal_mu;
364 NTuple::Item<double> m_Ea11_kal_mu;
365 NTuple::Item<double> m_Ea22_kal_mu;
366 NTuple::Item<double> m_Ea33_kal_mu;
367 NTuple::Item<double> m_Ea44_kal_mu;
368 NTuple::Item<double> m_iqual_front_kal_mu;
369 NTuple::Item<int> m_dropedHits_kal_pi;
370 NTuple::Item<double> m_kappa2_kal_pi;
371 NTuple::Item<int> m_trackNhits_kal_pi;
372 NTuple::Item<int> m_trackNster_kal_pi;
373 NTuple::Item<int> m_trackNaxis_kal_pi;
374 NTuple::Item<double> m_chi2_kal_pi;
375 NTuple::Item<double> m_Ea00_kal_pi;
376 NTuple::Item<double> m_Ea11_kal_pi;
377 NTuple::Item<double> m_Ea22_kal_pi;
378 NTuple::Item<double> m_Ea33_kal_pi;
379 NTuple::Item<double> m_Ea44_kal_pi;
380 NTuple::Item<double> m_iqual_front_kal_pi;
381 NTuple::Item<int> m_dropedHits_kal_k;
382 NTuple::Item<double> m_kappa2_kal_k;
383 NTuple::Item<int> m_trackNhits_kal_k;
384 NTuple::Item<int> m_trackNster_kal_k;
385 NTuple::Item<int> m_trackNaxis_kal_k;
386 NTuple::Item<double> m_chi2_kal_k;
387 NTuple::Item<double> m_Ea00_kal_k;
388 NTuple::Item<double> m_Ea11_kal_k;
389 NTuple::Item<double> m_Ea22_kal_k;
390 NTuple::Item<double> m_Ea33_kal_k;
391 NTuple::Item<double> m_Ea44_kal_k;
392 NTuple::Item<double> m_iqual_front_kal_k;
393 NTuple::Item<int> m_dropedHits_kal_p;
394 NTuple::Item<double> m_kappa2_kal_p;
395 NTuple::Item<int> m_trackNhits_kal_p;
396 NTuple::Item<int> m_trackNster_kal_p;
397 NTuple::Item<int> m_trackNaxis_kal_p;
398 NTuple::Item<double> m_chi2_kal_p;
399 NTuple::Item<double> m_Ea00_kal_p;
400 NTuple::Item<double> m_Ea11_kal_p;
401 NTuple::Item<double> m_Ea22_kal_p;
402 NTuple::Item<double> m_Ea33_kal_p;
403 NTuple::Item<double> m_Ea44_kal_p;
404 NTuple::Item<double> m_iqual_front_kal_p;
406 NTuple::Item<int> m_hit_no;
407 NTuple::Item<int> m_nCluster;
408 NTuple::Array<int> m_layer_hit_e;
409 NTuple::Array<double> m_dchi2_hit_e;
410 NTuple::Array<double> m_residest_hit_e;
411 NTuple::Array<double> m_anal_dr_hit_e;
412 NTuple::Array<double> m_anal_phi0_hit_e;
413 NTuple::Array<double> m_anal_kappa_hit_e;
414 NTuple::Array<double> m_anal_dz_hit_e;
415 NTuple::Array<double> m_anal_tanl_hit_e;
416 NTuple::Array<double> m_anal_ea_dr_hit_e;
417 NTuple::Array<double> m_anal_ea_phi0_hit_e;
418 NTuple::Array<double> m_anal_ea_kappa_hit_e;
419 NTuple::Array<double> m_anal_ea_dz_hit_e;
420 NTuple::Array<double> m_anal_ea_tanl_hit_e;
421 NTuple::Array<double> m_residnew_hit_e;
422 NTuple::Array<int> m_layer_hit_mu;
423 NTuple::Array<double> m_dchi2_hit_mu;
424 NTuple::Array<double> m_residest_hit_mu;
425 NTuple::Array<double> m_anal_dr_hit_mu;
426 NTuple::Array<double> m_anal_phi0_hit_mu;
427 NTuple::Array<double> m_anal_kappa_hit_mu;
428 NTuple::Array<double> m_anal_dz_hit_mu;
429 NTuple::Array<double> m_anal_tanl_hit_mu;
430 NTuple::Array<double> m_anal_ea_dr_hit_mu;
431 NTuple::Array<double> m_anal_ea_phi0_hit_mu;
432 NTuple::Array<double> m_anal_ea_kappa_hit_mu;
433 NTuple::Array<double> m_anal_ea_dz_hit_mu;
434 NTuple::Array<double> m_anal_ea_tanl_hit_mu;
435 NTuple::Array<double> m_residnew_hit_mu;
436 NTuple::Array<int> m_layer_hit_pi;
437 NTuple::Array<double> m_dchi2_hit_pi;
438 NTuple::Array<double> m_residest_hit_pi;
439 NTuple::Array<double> m_anal_dr_hit_pi;
440 NTuple::Array<double> m_anal_phi0_hit_pi;
441 NTuple::Array<double> m_anal_kappa_hit_pi;
442 NTuple::Array<double> m_anal_dz_hit_pi;
443 NTuple::Array<double> m_anal_tanl_hit_pi;
444 NTuple::Array<double> m_anal_ea_dr_hit_pi;
445 NTuple::Array<double> m_anal_ea_phi0_hit_pi;
446 NTuple::Array<double> m_anal_ea_kappa_hit_pi;
447 NTuple::Array<double> m_anal_ea_dz_hit_pi;
448 NTuple::Array<double> m_anal_ea_tanl_hit_pi;
449 NTuple::Array<double> m_residnew_hit_pi;
450 NTuple::Array<int> m_layer_hit_k;
451 NTuple::Array<double> m_dchi2_hit_k;
452 NTuple::Array<double> m_residest_hit_k;
453 NTuple::Array<double> m_anal_dr_hit_k;
454 NTuple::Array<double> m_anal_phi0_hit_k;
455 NTuple::Array<double> m_anal_kappa_hit_k;
456 NTuple::Array<double> m_anal_dz_hit_k;
457 NTuple::Array<double> m_anal_tanl_hit_k;
458 NTuple::Array<double> m_anal_ea_dr_hit_k;
459 NTuple::Array<double> m_anal_ea_phi0_hit_k;
460 NTuple::Array<double> m_anal_ea_kappa_hit_k;
461 NTuple::Array<double> m_anal_ea_dz_hit_k;
462 NTuple::Array<double> m_anal_ea_tanl_hit_k;
463 NTuple::Array<double> m_residnew_hit_k;
464 NTuple::Array<int> m_layer_hit_p;
465 NTuple::Array<double> m_dchi2_hit_p;
466 NTuple::Array<double> m_residest_hit_p;
467 NTuple::Array<double> m_anal_dr_hit_p;
468 NTuple::Array<double> m_anal_phi0_hit_p;
469 NTuple::Array<double> m_anal_kappa_hit_p;
470 NTuple::Array<double> m_anal_dz_hit_p;
471 NTuple::Array<double> m_anal_tanl_hit_p;
472 NTuple::Array<double> m_anal_ea_dr_hit_p;
473 NTuple::Array<double> m_anal_ea_phi0_hit_p;
474 NTuple::Array<double> m_anal_ea_kappa_hit_p;
475 NTuple::Array<double> m_anal_ea_dz_hit_p;
476 NTuple::Array<double> m_anal_ea_tanl_hit_p;
477 NTuple::Array<double> m_residnew_hit_p;
481 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;
482 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;
483 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;
486 NTuple::Tuple* m_nt10;
487 NTuple::Item<long> m_evt3;
488 NTuple::Item<long> m_nGemHits,m_qua;
489 NTuple::Array<double> m_meas_r,m_meas_phi,m_meas_z,m_esti1_r,m_esti1_phi,m_esti1_z,m_esti2_r,m_esti2_phi ,m_esti2_z,m_diff1_phi,m_diff2_z,m_diff1_z,m_diff2_phi,m_Gchi2;
490 NTuple::Array<int> m_GemLayer,m_mass;
491 NTuple::Array<double> m_meas_phierr,m_meas_zerr,m_esti_phierr,m_esti_zerr;
492 NTuple::Item<int> ctrk;
493 NTuple::Array<double> m_phi1,m_z1,m_phi2,m_z2,m_resphi1,m_resphi2,m_resz1,m_resz2,m_achi2;
496 NTuple::Tuple* m_nt11;
497 NTuple::Item<int> m_evt4,m_ntruth;
498 NTuple::Array<double> m_dtphi,m_dtv,m_dtpostphi,m_dtpostz;
499 NTuple::Array<int> m_tlayer;
503 NTuple::Tuple* m_nt12;
504 NTuple::Item<long> m_track,m_evt;
505 NTuple::Item<double> m_diff_dr,m_diff_phi0,m_diff_kappa,m_diff_dz,m_diff_tanl,m_diff_p;
HepGeom::Point3D< double > HepPoint3D
vector< KalFitGemHit > KalFitGemHitCol
ObjectVector< RecMdcKalHelixSeg > RecMdcKalHelixSegCol
ObjectVector< RecMdcKalTrack > RecMdcKalTrackCol
double pe_cut_
value of the momentum cut to decide refit
void residual(KalFitTrack &track)
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 fromFHitToInnerWall(KalFitTrack &track, int way)
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 fitGemHits(KalFitTrack &track, int hypo, int way)
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.
KalFitTrack Cgem_filter_anal(KalFitTrack &track, int hypo, int way)
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)
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 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 extToAnyPoint(KalFitTrack &trk, const HepPoint3D &point)
Description of a Hit in Mdc.
Description of a track class (<- Helix.cc)
Description of a Wire class.