/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Mdc/DedxCorrecSvc/DedxCorrecSvc-00-02-52/DedxCorrecSvc/DedxCorrecSvc.h

Go to the documentation of this file.
00001 #ifndef DEDXCORRECSVC_H_
00002 #define DEDXCORRECSVC_H_
00003 
00004 #include "GaudiKernel/IInterface.h"
00005 #include "GaudiKernel/Kernel.h"
00006 #include "GaudiKernel/Service.h"
00007 #include "MdcGeomSvc/MdcGeomSvc.h"
00008 #include "MagneticField/IMagneticFieldSvc.h"
00009 #include "MagneticField/MagneticFieldSvc.h"
00010 #include "DedxCorrecSvc/IDedxCorrecSvc.h"
00011 #include "DedxCorrecSvc/Dedx_Helix.h"
00012 
00013 #include "GaudiKernel/IDataProviderSvc.h"
00014 #include "GaudiKernel/IIncidentListener.h"
00015 
00016 
00017 class Identifier;
00018 
00019 class DedxCorrecSvc: public Service, virtual public IDedxCorrecSvc,virtual public IIncidentListener{
00020 public:
00021      DedxCorrecSvc( const std::string& name, ISvcLocator* svcloc );
00022      ~DedxCorrecSvc();
00023 
00024      virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvUnknown);
00025      virtual StatusCode initialize();
00026      virtual StatusCode finalize();
00027 
00028      // Incident handler
00029      void handle(const Incident&);
00030 
00031      double RungCorrec( int runNO, double ex ) const;
00032      double WireGainCorrec( int wireid,double ex) const;
00033      double DriftDistCorrec(int layid, double ddrift, double ex) const;
00034      double SaturCorrec(int layid,double costheta, double ex) const;
00035      double CosthetaCorrec(double costheta, double ex) const;
00036      double T0Correc(double t0, double ex) const;
00037      double HadronCorrec( double costheta,  double dedx ) const;
00038      double ZdepCorrec(int layid,double zhit, double ex) const;
00039      double EntaCorrec(int layid,double enta, double ex) const;
00040      double LayerGainCorrec( int layid,double ex) const;
00041      double DocaSinCorrec(int layid, double doca, double enta, double ex) const;
00042      double DipAngCorrec(int layid, double costheta, double ex) const;
00043      double GlobalCorrec(double dedx) const;
00044      double CellCorrec( int ser, double adc, double dd, double enta,
00045                           double z, double costheta ) const;
00046      double LayerCorrec( int layer, double z, double costheta, double ex ) const;
00047      double TrkCorrec( double costheta, double dedx ) const;
00048      double StandardCorrec( int runFlag, int ntpFlag, int runNO, double pathl, int wid, int layid, double adc, double dd, double eangle, double z, double costheta ) const;
00049      double StandardHitCorrec( int calib_rec_Flag, int runFlag, int ntpFlag, int runNO, double pathl,  int wid, int layid, double adc, double dd, double eangle, double costheta ) const;
00050      double StandardTrackCorrec(int calib_rec_Flag, int typFlag, int ntpFlag, int runNO, double ex, double costheta, double t0 ) const;
00051      double PathL( int ntpFlag, const Dedx_Helix& hel, int layer, int cellid, double z ) const; 
00052      //     double  PathLCosmic(const Helix& hel, int layer, int cellid, double z ,double sigmaz ) const;
00053      double D2I(const double& cosTheta, const double& D) const;
00054      double I2D(const double& cosTheta, const double& I) const;
00055      void set_flag( int calib_F );
00056      // correction according to large fabs(cos(theta))
00057      double f_larcos(double x, int nbin);
00058 
00059  private:
00060      bool m_initConstFlg;
00061 
00062      void init_param();
00063      void init_param_svc();
00064 
00065      // simple polynomials
00066       double sq(double& x) const {return (x*x);}
00067       double cub(double& x) const {return (x*x*x);}
00068       double sq4(double& x) const {return (x*x*x*x);}
00069       double sq5(double& x) const {return sq(x)*cub(x);}
00070       double sq6(double& x) const {return cub(x)*cub(x);}
00071       double sq7(double& x) const {return sq4(x)*cub(x);}
00072       double sq8(double& x) const {return sq4(x)*sq4(x);}
00073       double sq9(double& x) const {return sq4(x)*sq5(x);}
00074       double sq10(double& x) const {return sq5(x)*sq5(x);}
00075       double sq11(double& x) const {return sq5(x)*sq6(x);} 
00076      // Chebyshev's polynomials
00077       double T0(){return 1;}
00078       double T1(double& x) const {return x;}
00079       double T2(double& x) const {return (2*sq(x)-1);}
00080       double T3(double& x) const {return (4*cub(x)-3*x);}
00081       double T4(double& x) const {return (8*sq4(x)-8*sq(x)+1);}
00082       double T5(double& x) const {return (16*sq5(x)-20*cub(x)+5*x);}
00083       double T6(double& x) const {return (32*sq6(x)-48*sq4(x)+18*sq(x)-1);}
00084       double T7(double& x) const {return (64*sq7(x)-112*sq5(x)+56*cub(x)-7*x);}
00085       double T8(double& x) const {return (128*sq8(x)-256*sq6(x)+160*sq4(x)-32*sq(x)+1);}
00086       double T9(double& x) const {return (256*sq9(x)-576*sq7(x)+432*sq5(x)-120*cub(x)+9*x);}
00087       double T10(double& x) const {return (512*sq10(x)-1280*sq8(x)+1120*sq6(x)-400*sq4(x)+50*sq(x)-1);}
00088       double T11(double& x) const {return (1024*sq11(x)-2816*sq9(x)+2816*sq7(x)-1232*sq5(x)+220*cub(x)-11*x);}
00089       double T12(double& x) const {return (2*x*T11(x)-T10(x));}
00090       double T13(double& x) const {return (2*x*T12(x)-T11(x));}
00091       double T14(double& x) const {return (2*x*T13(x)-T12(x));}
00092       double T15(double& x) const {return (2*x*T14(x)-T13(x));}
00093       double T16(double& x) const {return (2*x*T15(x)-T14(x));}
00094       double T17(double& x) const {return (2*x*T16(x)-T15(x));}
00095       double T18(double& x) const {return (2*x*T17(x)-T16(x));}
00096       double T19(double& x) const {return (2*x*T18(x)-T17(x));}
00097       double T20(double& x) const {return (2*x*T19(x)-T18(x));}      
00098 
00099  private:
00100      IntegerProperty  m_run;
00101      double m_valid[6796];
00102      double m_wire_g[6796];
00103      double m_rung[4][10000];
00104      double m_ddg[4][43];
00105      double m_docaeangle[40][40];
00106      vector<double> m_venangle;
00107      double m_ggs[4][43];   
00108      double m_enta[4][43];   
00109      double m_zdep[4][43];
00110      double m_layer_g[43];
00111      double m_dedx_gain;
00112      double m_dedx_resol;
00113      int N_run;     
00114      double curve_par[5];
00115      double sigma_par[6];
00116 
00117      vector<double> cos_k;
00118      vector<double> cos_b;
00119 
00120      vector<double> t0_k;
00121      vector<double> t0_b;
00122      
00123   
00124      double Iner_Stepdoca;
00125      double Out_Stepdoca;
00126      
00127      double  m_alpha;
00128      double  m_gamma;
00129      double  m_delta;
00130      double  m_power;
00131      double  m_ratio;
00132 
00133      //int m_valid_flag; 
00135      
00136      
00138      int m_rung_flag;
00139      
00141      int m_wireg_flag;   
00142      
00144      int m_ggs_flag;
00145      
00147      int m_ddg_flag;
00148 
00150      int m_t0_flag;
00151 
00153      int m_sat_flag;
00154 
00155      
00156 
00158      int m_enta_flag;
00160      int m_zdep_flag;
00162      int m_layerg_flag;
00164      int m_dcasin_flag;
00166      int m_dip_flag;
00168      int m_mdcg_flag;
00170      int m_init;
00171      int m_par_flag;
00173      IMdcGeomSvc* geosvc;
00174      IMagneticFieldSvc* m_pIMF; 
00175      bool m_debug;
00176      int m_debug_i, m_debug_j;
00177 };
00178 
00179 #endif /* DEDXCORRECSVC_H_ */

Generated on Tue Nov 29 23:12:46 2016 for BOSS_7.0.2 by  doxygen 1.4.7