Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

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 "CLHEP/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  
00243   KalFitWire * _wire;
00244   KalFitLayer_Mdc * _layer;
00245   KalFitSuper_Mdc * _superLayer;
00246   HepPDT::ParticleDataTable* m_particleTable;
00247   static const double RIW;
00248 
00249   const MdcCalibFunSvc* m_mdcCalibFunSvc_;
00250   const IMagneticFieldSvc* m_MFSvc_;
00251   static IMdcGeomSvc* imdcGeomSvc_;
00252 
00253   //sort the rec hits by layer
00254   static bool  order_rechits(const SmartRef<RecMdcHit>& m1, const SmartRef<RecMdcHit>& m2);
00255 
00256 //ntuples
00257   NTuple::Tuple* m_nt1;  // KalFit track params 
00258   NTuple::Tuple* m_nt2;  // KalFit 2-prong comparison
00259   NTuple::Tuple* m_nt3;  // PatRec track params
00260   NTuple::Tuple* m_nt4;  // PatRec 2-prong comparison
00261   NTuple::Tuple* m_nt5;  // for hit checking and cut
00262   NTuple::Tuple* m_nt6;  // for helix seg of calib
00263  
00264   //for nt1
00265   NTuple::Item<long>  m_trackid,m_evtid;
00266   NTuple::Item<double>  m_chi2direct,m_prob;
00267   NTuple::Matrix<double> m_ndf,m_chisq,m_stat;
00268   NTuple::Array<double> m_length,m_tof,m_nhits;
00269   NTuple::Item<double> m_zptot,m_zptote,m_zptotmu,m_zptotk,m_zptotp;
00270   NTuple::Item<double> m_zpt,m_zpte,m_zptmu,m_zptk,m_zptp;
00271   NTuple::Item<double> m_fptot,m_fptote,m_fptotmu,m_fptotk,m_fptotp;
00272   NTuple::Item<double> m_fpt,m_fpte,m_fptmu,m_fptk,m_fptp;
00273   NTuple::Item<double> m_lptot,m_lptote,m_lptotmu,m_lptotk,m_lptotp;
00274   NTuple::Item<double> m_lpt,m_lpte,m_lptmu,m_lptk,m_lptp; 
00275   NTuple::Item<double> m_zsigp,m_zsigpe,m_zsigpmu,m_zsigpk,m_zsigpp;
00276   NTuple::Array<double> m_zhelix,m_zhelixe,m_zhelixmu,m_zhelixk,m_zhelixp;
00277   NTuple::Array<double> m_fhelix,m_fhelixe,m_fhelixmu,m_fhelixk,m_fhelixp;
00278   NTuple::Array<double> m_lhelix,m_lhelixe,m_lhelixmu,m_lhelixk,m_lhelixp;
00279   NTuple::Array<double> m_zerror,m_zerrore,m_zerrormu,m_zerrork,m_zerrorp;
00280   NTuple::Array<double> m_ferror,m_ferrore,m_ferrormu,m_ferrork,m_ferrorp;
00281   NTuple::Array<double> m_lerror,m_lerrore,m_lerrormu,m_lerrork,m_lerrorp;
00282   //for nt1 single track MCTruth
00283   NTuple::Array<double> m_mchelix;   
00284   NTuple::Item<double> m_mcptot;   
00285   NTuple::Item<long> m_mcpid;   
00286   //for nt3
00287   NTuple::Array<double> m_trkhelix, m_trkerror;   
00288   NTuple::Item<double> m_trkndf, m_trkchisq, m_trkptot, m_trksigp;   
00289   //for nt2
00290   NTuple::Item<double> m_delx,m_dely,m_delz,m_delthe,m_delphi,m_delp;
00291   NTuple::Item<double> m_delpx,m_delpy,m_delpz;
00292   
00293   //for nt4
00294   NTuple::Item<double> m_trkdelx,m_trkdely,m_trkdelz;
00295   NTuple::Item<double> m_trkdelthe,m_trkdelphi,m_trkdelp;
00296   //for nt5
00297   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;
00298   NTuple::Item<long> m_masshyp, m_layer; 
00299   //for nt6
00300   NTuple::Item<double> m_docaInc,m_docaExc, m_tdrift;
00301   NTuple::Item<long>  m_layerid,m_eventNo;
00302   NTuple::Item<double> m_residualInc, m_residualExc, m_lr, m_yposition, m_dd;
00303  
00304   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;
00305   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;
00306   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;
00307  
00308 };
00309 #endif
00310 

Generated on Wed Feb 2 15:41:56 2011 for BOSS6.5.5 by  doxygen 1.3.9.1