00001
00002
00003
00004
00005
00006
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
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
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
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
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
00218 string matfile_, cylfile_;
00219
00220 double dchi2cutf_, dchi2cuts_;
00221
00222 double dchi2cut_mid1_,dchi2cut_mid2_,dchi2cut_inner_, dchi2cut_outer_,dchi2cut_layid2_,dchi2cut_layid3_;
00223
00225 double fstrag_;
00226
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;
00235 double m_dangcut, m_dphicut;
00236
00237 private:
00238 std::vector<KalFitCylinder> _BesKalmanFitWalls;
00239 std::vector<KalFitMaterial> _BesKalmanFitMaterials;
00240
00241
00242
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
00258 static bool order_rechits(const SmartRef<RecMdcHit>& m1, const SmartRef<RecMdcHit>& m2);
00259
00260
00261 NTuple::Tuple* m_nt1;
00262 NTuple::Tuple* m_nt2;
00263 NTuple::Tuple* m_nt3;
00264 NTuple::Tuple* m_nt4;
00265 NTuple::Tuple* m_nt5;
00266 NTuple::Tuple* m_nt6;
00267
00268
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
00287 NTuple::Array<double> m_mchelix;
00288 NTuple::Item<double> m_mcptot;
00289 NTuple::Item<long> m_mcpid;
00290
00291 NTuple::Array<double> m_trkhelix, m_trkerror;
00292 NTuple::Item<double> m_trkndf, m_trkchisq, m_trkptot, m_trksigp;
00293
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
00298 NTuple::Item<double> m_trkdelx,m_trkdely,m_trkdelz;
00299 NTuple::Item<double> m_trkdelthe,m_trkdelphi,m_trkdelp;
00300
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
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