/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/KalFitAlg/KalFitAlg-00-07-55-p03/KalFitAlg/KalFitAlg.h

Go to the documentation of this file.
00001 //------------------------------------------------------------------------
00002 // Description : 
00003 // Main file of the module KalFit in charge of :
00004 // 1/ Refit of the Mdc tracks using Kalman filter
00005 // 2/ Backward filter (smoothing)
00006 // 3/ and also several mass hypothesis, Non unif mag field treatment...
00007 //
00008 //------------------------------------------------------------------------
00009 
00010 #ifndef _DEFINE_KALFITALG_H_
00011 #define _DEFINE_KALFITALG_H_
00012 #ifndef DBL_MAX
00013 #define DBL_MAX 9999
00014 #endif
00015 
00016 class KalFitTrack;
00017 class KalFitHitMdc;
00018 class KalFitHelixSeg;
00019 class Bfield;
00020 //class Helix;
00021 
00022 #include "GaudiKernel/Algorithm.h"
00023 #include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
00024 #include "MdcCalibFunSvc/MdcCalibFunSvc.h"
00025 #include "GaudiKernel/IMagneticFieldSvc.h"
00026 #include "MagneticField/MagneticFieldSvc.h"
00027 #include "KalFitAlg/KalFitWire.h"
00028 #include "KalFitAlg/KalFitHelixSeg.h"
00029 #include "KalFitAlg/KalFitCylinder.h"
00030 #include "KalFitAlg/KalFitLayer_Mdc.h"
00031 #include "KalFitAlg/KalFitSuper_Mdc.h"
00032 #include "KalFitAlg/KalFitMaterial.h"
00033 #include "MdcTables/MdcTables.h"
00034 #include "GaudiKernel/NTuple.h"
00035 #include "AIDA/IHistogram1D.h" 
00036 #include "AIDA/IHistogramFactory.h" 
00037 #include "GaudiKernel/IHistogramSvc.h"
00038 #include "MdcRecEvent/RecMdcKalTrack.h"
00039 #include "MdcRecEvent/RecMdcKalHelixSeg.h"
00040 #include "HepPDT/ParticleDataTable.hh"
00041 #include <vector>
00042 //added header files for 6.0.0 
00043 #include "CLHEP/Matrix/Vector.h"
00044 #include "CLHEP/Matrix/Matrix.h"
00045 #include "CLHEP/Matrix/SymMatrix.h"
00046 #include "CLHEP/Vector/ThreeVector.h"
00047 #include "G4Material.hh"
00048 #include "G4Tubs.hh"
00049 
00050 #ifndef ENABLE_BACKWARDS_COMPATIBILITY
00051 typedef HepGeom::Point3D <double > HepPoint3D;
00052 #endif
00053 
00054 using namespace std;
00055 using namespace CLHEP;
00056 
00057 
00058 class KalFitAlg : public Algorithm {
00059 
00060         public:
00063 
00064                 KalFitAlg(const std::string& name, ISvcLocator* pSvcLocator);
00066                 ~KalFitAlg(void);
00068                 StatusCode initialize();
00070                 StatusCode execute();
00071                 StatusCode finalize();  
00072                 StatusCode beginRun();
00074                 void hist_def ( void );
00077                 void clean(void);
00079 
00081 
00082                 void set_Mdc(void);
00084                 void setMaterial_Mdc(void);
00086                 void setCylinder_Mdc(void);
00088                 void setDchisqCut(void);
00090                 void setCalibSvc_init(void);
00091                 void setGeomSvc_init(void);
00092                 void setMagneticFieldSvc_init(void);
00094                 void getEventStarTime(void);
00095 
00098 
00099                 void filter_fwd_anal(KalFitTrack& trk, int l_mass, int way, HepSymMatrix& Eakal);
00100                 void filter_fwd_calib(KalFitTrack& trk, int l_mass, int way, HepSymMatrix& Eakal);
00101 
00102                 void init_matrix(MdcRec_trk& trk, HepSymMatrix& Ea);
00103                 void init_matrix(int k, MdcRec_trk& trk, HepSymMatrix& Ea);
00104 
00105                 void start_seed(KalFitTrack& track, int lead_, int way, MdcRec_trk& trk);
00106 
00108                 void smoother_anal(KalFitTrack& trk, int way);
00109                 void smoother_calib(KalFitTrack& trk, int way);
00110 
00112                 void innerwall(KalFitTrack& trk, int l_mass, int way);     
00114 
00115                 void fillTds(MdcRec_trk& TrasanTRK, KalFitTrack& track, 
00116                                 RecMdcKalTrack* trk,int l_mass);
00117                 void fillTds_lead(MdcRec_trk& TrasanTRK, KalFitTrack& track, 
00118                                 RecMdcKalTrack* trk, int l_mass);
00120                 void fillTds_back(KalFitTrack& track, RecMdcKalTrack* trk,
00121                                 MdcRec_trk& TrasanTRK,int l_mass );
00122 
00123                 void fillTds_back(KalFitTrack& track, RecMdcKalTrack* trk, 
00124                                 MdcRec_trk& TrasanTRK,int l_mass,RecMdcKalHelixSegCol*  segcol);
00125 
00127                 void fillTds_back(KalFitTrack& track, RecMdcKalTrack* trk, 
00128                                 MdcRec_trk& TrasanTRK,int l_mass,RecMdcKalHelixSegCol*  segcol, int smoothflag);
00130                 void fillTds_ip(MdcRec_trk& TrasanTRK, KalFitTrack& track, 
00131                                 RecMdcKalTrack* trk, int l_mass);
00132 
00134                 void sameas(RecMdcKalTrack* trk, int l_mass, int imain);
00135 
00136                 void complete_track(MdcRec_trk& TrasanTRK,
00137                                 MdcRec_trk_add& TrasanTRK_add,
00138                                 KalFitTrack& track_lead,
00139                                 RecMdcKalTrack*  kaltrk,
00140                                 RecMdcKalTrackCol* kalcol,RecMdcKalHelixSegCol* segcol,int flagsmooth);
00141 
00142                 void complete_track(MdcRec_trk& TrasanTRK, 
00143                                 MdcRec_trk_add& TrasanTRK_add, 
00144                                 KalFitTrack& track_lead,
00145                                 RecMdcKalTrack*  kaltrk,
00146                                 RecMdcKalTrackCol* kalcol,RecMdcKalHelixSegCol* segcol);
00147 
00148                 // Careful refit
00149                 void kalman_fitting_anal(void);
00150                 void kalman_fitting_calib(void);
00151                 void kalman_fitting_csmalign(void);
00152                 void kalman_fitting_MdcxReco_Csmc_Sew(void);
00153 
00154                 // clear tables by wangdy
00155                 void clearTables( ); 
00156 
00158                 int getWallMdcNumber(const HepPoint3D& point);
00159 
00161                 void extToAnyPoint(KalFitTrack& trk, const HepPoint3D& point);
00162 
00164                 void setBesFromGdml(void);
00165 
00168                 int usage_;
00170                 int choice_;
00172                 int pathl_;
00174                 int wsag_;
00176                 int back_; 
00177 
00178                 int eventno;
00179 
00180                 int Tds_back_no;
00182                 double pT_;
00184                 int lead_;
00186                 int mhyp_;
00188                 double pe_cut_, pmu_cut_, ppi_cut_, pk_cut_, pp_cut_;
00189                 double pt_cut_,theta_cut_;
00190 
00191 
00194                 int muls_, loss_, lr_, activeonly_, tofflag_, tof_hyp_;
00196                 int enhance_;
00197                 double fac_h1_, fac_h2_, fac_h3_, fac_h4_, fac_h5_, matrixg_;
00199                 double  gain1_,gain2_,gain3_,gain4_,gain5_;
00200                 int steplev_;
00201                 int numfcor_;
00202                 int numf_;
00203                 int inner_steps_;
00204                 int outer_steps_;
00205                 int numf_in_;
00206                 int numf_out_;
00207                 int fitnocut_;
00209                 int drifttime_choice_;
00211                 int i_back_;
00212                 int i_front_;
00214                 int debug_ , debug_kft_;
00216                 int ntuple_;
00217                 // dir of files
00218                 string matfile_, cylfile_;
00219                 //cut for delta_chi2 
00220                 double dchi2cutf_, dchi2cuts_;
00221 
00222                 double  dchi2cut_mid1_,dchi2cut_mid2_,dchi2cut_inner_, dchi2cut_outer_,dchi2cut_layid2_,dchi2cut_layid3_;
00223 
00225                 double fstrag_;
00226                 //wire resoltion flag
00227                 int resolution_;
00228                 int iqual_front_[5],iqual_back_;
00229 
00231                 int tprop_;
00232                 int eventNo;
00233                 int m_usevtxdb; 
00234                 int m_csmflag;    //cosmic events flag; for cosmic events tof(y>0) should be minus
00235                 double m_dangcut, m_dphicut;  //for cosmic events cut
00236 
00237         private:
00238                 std::vector<KalFitCylinder> _BesKalmanFitWalls;
00239                 std::vector<KalFitMaterial> _BesKalmanFitMaterials;
00240                 //std::vector<G4Tubs>         _BesKalmanFitTubs;
00241                 
00242                 // --- statistics
00243                 int nTotalTrks;
00244                 int nFailedTrks[5];
00245 
00246 
00247                 KalFitWire * _wire;
00248                 KalFitLayer_Mdc * _layer;
00249                 KalFitSuper_Mdc * _superLayer;
00250                 HepPDT::ParticleDataTable* m_particleTable;
00251                 static const double RIW;
00252 
00253                 const MdcCalibFunSvc* m_mdcCalibFunSvc_;
00254                 const IMagneticFieldSvc* m_MFSvc_;
00255                 static IMdcGeomSvc* imdcGeomSvc_;
00256 
00257                 //sort the rec hits by layer
00258                 static bool  order_rechits(const SmartRef<RecMdcHit>& m1, const SmartRef<RecMdcHit>& m2);
00259 
00260                 //ntuples
00261                 NTuple::Tuple* m_nt1;  // KalFit track params 
00262                 NTuple::Tuple* m_nt2;  // KalFit 2-prong comparison
00263                 NTuple::Tuple* m_nt3;  // PatRec track params
00264                 NTuple::Tuple* m_nt4;  // PatRec 2-prong comparison
00265                 NTuple::Tuple* m_nt5;  // for hit checking and cut
00266                 NTuple::Tuple* m_nt6;  // for helix seg of calib
00267 
00268                 //for nt1
00269                 NTuple::Item<long>  m_trackid,m_evtid;
00270                 NTuple::Item<double>  m_chi2direct,m_prob;
00271                 NTuple::Matrix<double> m_ndf,m_chisq,m_stat;
00272                 NTuple::Array<double> m_length,m_tof,m_nhits;
00273                 NTuple::Item<double> m_zptot,m_zptote,m_zptotmu,m_zptotk,m_zptotp;
00274                 NTuple::Item<double> m_zpt,m_zpte,m_zptmu,m_zptk,m_zptp;
00275                 NTuple::Item<double> m_fptot,m_fptote,m_fptotmu,m_fptotk,m_fptotp;
00276                 NTuple::Item<double> m_fpt,m_fpte,m_fptmu,m_fptk,m_fptp;
00277                 NTuple::Item<double> m_lptot,m_lptote,m_lptotmu,m_lptotk,m_lptotp;
00278                 NTuple::Item<double> m_lpt,m_lpte,m_lptmu,m_lptk,m_lptp; 
00279                 NTuple::Item<double> m_zsigp,m_zsigpe,m_zsigpmu,m_zsigpk,m_zsigpp;
00280                 NTuple::Array<double> m_zhelix,m_zhelixe,m_zhelixmu,m_zhelixk,m_zhelixp;
00281                 NTuple::Array<double> m_fhelix,m_fhelixe,m_fhelixmu,m_fhelixk,m_fhelixp;
00282                 NTuple::Array<double> m_lhelix,m_lhelixe,m_lhelixmu,m_lhelixk,m_lhelixp;
00283                 NTuple::Array<double> m_zerror,m_zerrore,m_zerrormu,m_zerrork,m_zerrorp;
00284                 NTuple::Array<double> m_ferror,m_ferrore,m_ferrormu,m_ferrork,m_ferrorp;
00285                 NTuple::Array<double> m_lerror,m_lerrore,m_lerrormu,m_lerrork,m_lerrorp;
00286                 //for nt1 single track MCTruth
00287                 NTuple::Array<double> m_mchelix;   
00288                 NTuple::Item<double> m_mcptot;   
00289                 NTuple::Item<long> m_mcpid;   
00290                 //for nt3
00291                 NTuple::Array<double> m_trkhelix, m_trkerror;   
00292                 NTuple::Item<double> m_trkndf, m_trkchisq, m_trkptot, m_trksigp;   
00293                 //for nt2
00294                 NTuple::Item<double> m_delx,m_dely,m_delz,m_delthe,m_delphi,m_delp;
00295                 NTuple::Item<double> m_delpx,m_delpy,m_delpz;
00296 
00297                 //for nt4
00298                 NTuple::Item<double> m_trkdelx,m_trkdely,m_trkdelz;
00299                 NTuple::Item<double> m_trkdelthe,m_trkdelphi,m_trkdelp;
00300                 //for nt5
00301                 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;
00302                 NTuple::Item<long> m_masshyp, m_layer; 
00303                 //for nt6
00304                 NTuple::Item<double> m_docaInc,m_docaExc, m_tdrift;
00305                 NTuple::Item<long>  m_layerid,m_eventNo;
00306                 NTuple::Item<double> m_residualInc, m_residualExc, m_lr, m_yposition, m_dd;
00307 
00308                 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;
00309                 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;
00310                 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;
00311 
00312 };
00313 #endif
00314 

Generated on Tue Nov 29 23:13:22 2016 for BOSS_7.0.2 by  doxygen 1.4.7