BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
DedxCorrecSvc.h
Go to the documentation of this file.
1#ifndef DEDXCORRECSVC_H_
2#define DEDXCORRECSVC_H_
3
4#include "GaudiKernel/IDataProviderSvc.h"
5#include "GaudiKernel/IIncidentListener.h"
6#include "GaudiKernel/IInterface.h"
7#include "GaudiKernel/Kernel.h"
8#include "GaudiKernel/Service.h"
9
10#include "DedxCorrecSvc/Dedx_Helix.h"
11#include "DedxCorrecSvc/IDedxCorrecSvc.h"
12#include "MdcGeomSvc/IMdcGeomSvc.h"
13// #include "MagneticField/IMagneticFieldSvc.h"
14// #include "MagneticFieldSvc.h"
15#include <vector>
16
17using std::vector;
18
19class Identifier;
20class DedxCorrecSvc : public extends<Service, IDedxCorrecSvc>,
21 virtual public IIncidentListener {
22 // class DedxCorrecSvc: public Service, virtual public IDedxCorrecSvc,virtual public
23 // IIncidentListener{
24public:
25 DedxCorrecSvc( const std::string& name, ISvcLocator* svcloc );
27
28 // virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvUnknown);
29 virtual StatusCode initialize();
30 virtual StatusCode finalize();
31
32 // Incident handler
33 void handle( const Incident& );
34
35 double RungCorrec( int runNO, int evtNO, double ex ) const;
36 double WireGainCorrec( int wireid, double ex ) const;
37 double DriftDistCorrec( int layid, double ddrift, double ex ) const;
38 double SaturCorrec( int layid, double costheta, double ex ) const;
39 double CosthetaCorrec( double costheta, double ex ) const;
40 double T0Correc( double t0, double ex ) const;
41 double HadronCorrec( double costheta, double dedx ) const;
42 double ZdepCorrec( int layid, double zhit, double ex ) const;
43 double EntaCorrec( int layid, double enta, double ex ) const;
44 double LayerGainCorrec( int layid, double ex ) const;
45 double DocaSinCorrec( int layid, double doca, double enta, double ex ) const;
46 double DipAngCorrec( int layid, double costheta, double ex ) const;
47 double GlobalCorrec( double dedx ) const;
48 double CellCorrec( int ser, double adc, double dd, double enta, double z,
49 double costheta ) const;
50 double LayerCorrec( int layer, double z, double costheta, double ex ) const;
51 double TrkCorrec( double costheta, double dedx ) const;
52 double StandardCorrec( int runFlag, int ntpFlag, int runNO, int evtNO, double pathl, int wid,
53 int layid, double adc, double dd, double eangle, double z,
54 double costheta ) const;
55 double StandardHitCorrec( int calib_rec_Flag, int runFlag, int ntpFlag, int runNO, int evtNO,
56 double pathl, int wid, int layid, double adc, double dd,
57 double eangle, double costheta ) const;
58 double StandardTrackCorrec( int calib_rec_Flag, int typFlag, int ntpFlag, int runNO,
59 int evtNO, double ex, double costheta, double t0 ) const;
60 double PathL( int ntpFlag, const Dedx_Helix& hel, int layer, int cellid, double z ) const;
61 // double PathLCosmic(const Helix& hel, int layer, int cellid, double z ,double sigmaz )
62 // const;
63 double D2I( const double& cosTheta, const double& D ) const;
64 double I2D( const double& cosTheta, const double& I ) const;
65 void set_flag( int calib_F );
66 // correction according to large fabs(cos(theta))
67 double f_larcos( double x, int nbin );
68
69private:
70 bool m_initConstFlg;
71
72 void init_param();
73 void init_param_svc();
74
75 // simple polynomials
76 double sq( double& x ) const { return ( x * x ); }
77 double cub( double& x ) const { return ( x * x * x ); }
78 double sq4( double& x ) const { return ( x * x * x * x ); }
79 double sq5( double& x ) const { return sq( x ) * cub( x ); }
80 double sq6( double& x ) const { return cub( x ) * cub( x ); }
81 double sq7( double& x ) const { return sq4( x ) * cub( x ); }
82 double sq8( double& x ) const { return sq4( x ) * sq4( x ); }
83 double sq9( double& x ) const { return sq4( x ) * sq5( x ); }
84 double sq10( double& x ) const { return sq5( x ) * sq5( x ); }
85 double sq11( double& x ) const { return sq5( x ) * sq6( x ); }
86 // Chebyshev's polynomials
87 double T0() { return 1; }
88 double T1( double& x ) const { return x; }
89 double T2( double& x ) const { return ( 2 * sq( x ) - 1 ); }
90 double T3( double& x ) const { return ( 4 * cub( x ) - 3 * x ); }
91 double T4( double& x ) const { return ( 8 * sq4( x ) - 8 * sq( x ) + 1 ); }
92 double T5( double& x ) const { return ( 16 * sq5( x ) - 20 * cub( x ) + 5 * x ); }
93 double T6( double& x ) const { return ( 32 * sq6( x ) - 48 * sq4( x ) + 18 * sq( x ) - 1 ); }
94 double T7( double& x ) const {
95 return ( 64 * sq7( x ) - 112 * sq5( x ) + 56 * cub( x ) - 7 * x );
96 }
97 double T8( double& x ) const {
98 return ( 128 * sq8( x ) - 256 * sq6( x ) + 160 * sq4( x ) - 32 * sq( x ) + 1 );
99 }
100 double T9( double& x ) const {
101 return ( 256 * sq9( x ) - 576 * sq7( x ) + 432 * sq5( x ) - 120 * cub( x ) + 9 * x );
102 }
103 double T10( double& x ) const {
104 return ( 512 * sq10( x ) - 1280 * sq8( x ) + 1120 * sq6( x ) - 400 * sq4( x ) +
105 50 * sq( x ) - 1 );
106 }
107 double T11( double& x ) const {
108 return ( 1024 * sq11( x ) - 2816 * sq9( x ) + 2816 * sq7( x ) - 1232 * sq5( x ) +
109 220 * cub( x ) - 11 * x );
110 }
111 double T12( double& x ) const { return ( 2 * x * T11( x ) - T10( x ) ); }
112 double T13( double& x ) const { return ( 2 * x * T12( x ) - T11( x ) ); }
113 double T14( double& x ) const { return ( 2 * x * T13( x ) - T12( x ) ); }
114 double T15( double& x ) const { return ( 2 * x * T14( x ) - T13( x ) ); }
115 double T16( double& x ) const { return ( 2 * x * T15( x ) - T14( x ) ); }
116 double T17( double& x ) const { return ( 2 * x * T16( x ) - T15( x ) ); }
117 double T18( double& x ) const { return ( 2 * x * T17( x ) - T16( x ) ); }
118 double T19( double& x ) const { return ( 2 * x * T18( x ) - T17( x ) ); }
119 double T20( double& x ) const { return ( 2 * x * T19( x ) - T18( x ) ); }
120
121private:
122 IntegerProperty m_run;
123 double m_valid[6796];
124 double m_wire_g[6796];
125 double m_rung[6][100000];
126 double m_ddg[4][43];
127 double m_docaeangle[40][40];
128 vector<double> m_venangle;
129 double m_ggs[4][43];
130 double m_enta[4][43];
131 double m_zdep[4][43];
132 double m_layer_g[43];
133 double m_dedx_gain;
134 double m_dedx_resol;
135 int N_run;
136 double curve_par[5];
137 double sigma_par[6];
138
139 vector<double> cos_k;
140 vector<double> cos_b;
141
142 vector<double> t0_k;
143 vector<double> t0_b;
144
145 double Iner_Stepdoca;
146 double Out_Stepdoca;
147
148 double m_alpha;
149 double m_gamma;
150 double m_delta;
151 double m_power;
152 double m_ratio;
153
154 // int m_valid_flag;
155 /// correction : for individual cell ( calib_F & 2 )? ON:OFF
156
157 /// calibration flag : run by run correction ( calib_F & 1 )? ON : OFF
158 int m_rung_flag;
159
160 /// calibration flag : wire by wire correction ( calib_F & 2 )? ON : OFF
161 int m_wireg_flag;
162
163 /// calibration flag : electron dip angle correction ( calib_F & 4 )? ON : OFF
164 int m_ggs_flag;
165
166 /// calibration flag : drift distance ( calib_F & 8 ) ? ON : OFF
167 int m_ddg_flag;
168
169 /// calibration flag : t0 correction ( calib_F & 16 ) ? ON : OFF
170 int m_t0_flag;
171
172 /// calibration flag : hadron saturation correction ( calib_F & 32 ) ? ON : OFF
173 int m_sat_flag;
174
175 /// calibration flag : entrance angle depsndence ( calib_F & 16 )? ON : OFF
176 int m_enta_flag;
177 /// calibration flag : z depsndence ( calib_F & 32 )? ON : OFF
178 int m_zdep_flag;
179 /// correction : mdc layer gain ( calib_F & 64 )? ON:OFF
180 int m_layerg_flag;
181 /// correction : doca and sinenta correction ( calib_F & 128 )? ON:OFF
182 int m_dcasin_flag;
183 /// correction : Qsaturation correction ( calib_F & 256 )? ON:OFF
184 int m_dip_flag;
185 /// correction : mdc gain (run by run) ( calib_F & 512 )? ON:OFF
186 int m_mdcg_flag;
187 /// control flags
188 int m_init;
189 int m_par_flag;
190 /// mdc geometry
191 IMdcGeomSvc* geosvc;
192 IBesMagFieldSvc* m_pIMF;
193 bool m_debug;
194 int m_debug_i, m_debug_j;
195};
196
197#endif /* DEDXCORRECSVC_H_ */
const DifComplex I
double CosthetaCorrec(double costheta, double ex) const
double D2I(const double &cosTheta, const double &D) const
double f_larcos(double x, int nbin)
virtual StatusCode finalize()
double LayerCorrec(int layer, double z, double costheta, double ex) const
double PathL(int ntpFlag, const Dedx_Helix &hel, int layer, int cellid, double z) const
double StandardTrackCorrec(int calib_rec_Flag, int typFlag, int ntpFlag, int runNO, int evtNO, double ex, double costheta, double t0) const
void handle(const Incident &)
double T0Correc(double t0, double ex) const
double LayerGainCorrec(int layid, double ex) const
double EntaCorrec(int layid, double enta, double ex) const
double SaturCorrec(int layid, double costheta, double ex) const
double StandardHitCorrec(int calib_rec_Flag, int runFlag, int ntpFlag, int runNO, int evtNO, double pathl, int wid, int layid, double adc, double dd, double eangle, double costheta) const
double CellCorrec(int ser, double adc, double dd, double enta, double z, double costheta) const
virtual StatusCode initialize()
double WireGainCorrec(int wireid, double ex) const
double HadronCorrec(double costheta, double dedx) const
double TrkCorrec(double costheta, double dedx) const
double RungCorrec(int runNO, int evtNO, double ex) const
double DriftDistCorrec(int layid, double ddrift, double ex) const
double DocaSinCorrec(int layid, double doca, double enta, double ex) const
double DipAngCorrec(int layid, double costheta, double ex) const
double ZdepCorrec(int layid, double zhit, double ex) const
double I2D(const double &cosTheta, const double &I) const
DedxCorrecSvc(const std::string &name, ISvcLocator *svcloc)
double StandardCorrec(int runFlag, int ntpFlag, int runNO, int evtNO, double pathl, int wid, int layid, double adc, double dd, double eangle, double z, double costheta) const
double GlobalCorrec(double dedx) const
void set_flag(int calib_F)