1#ifndef DEDXCORRECSVC_H_
2#define DEDXCORRECSVC_H_
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"
10#include "DedxCorrecSvc/Dedx_Helix.h"
11#include "DedxCorrecSvc/IDedxCorrecSvc.h"
12#include "MdcGeomSvc/IMdcGeomSvc.h"
21 virtual public IIncidentListener {
25 DedxCorrecSvc(
const std::string& name, ISvcLocator* svcloc );
33 void handle(
const Incident& );
35 double RungCorrec(
int runNO,
int evtNO,
double ex )
const;
38 double SaturCorrec(
int layid,
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;
45 double DocaSinCorrec(
int layid,
double doca,
double enta,
double ex )
const;
46 double DipAngCorrec(
int layid,
double costheta,
double ex )
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;
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;
63 double D2I(
const double& cosTheta,
const double& D )
const;
64 double I2D(
const double& cosTheta,
const double&
I )
const;
67 double f_larcos(
double x,
int nbin );
73 void init_param_svc();
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 ); }
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 );
97 double T8(
double& x )
const {
98 return ( 128 * sq8( x ) - 256 * sq6( x ) + 160 * sq4( x ) - 32 * sq( x ) + 1 );
100 double T9(
double& x )
const {
101 return ( 256 * sq9( x ) - 576 * sq7( x ) + 432 * sq5( x ) - 120 * cub( x ) + 9 * x );
103 double T10(
double& x )
const {
104 return ( 512 * sq10( x ) - 1280 * sq8( x ) + 1120 * sq6( x ) - 400 * sq4( x ) +
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 );
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 ) ); }
122 IntegerProperty m_run;
123 double m_valid[6796];
124 double m_wire_g[6796];
125 double m_rung[6][100000];
127 double m_docaeangle[40][40];
128 vector<double> m_venangle;
130 double m_enta[4][43];
131 double m_zdep[4][43];
132 double m_layer_g[43];
139 vector<double> cos_k;
140 vector<double> cos_b;
145 double Iner_Stepdoca;
194 int m_debug_i, m_debug_j;
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)