1#ifndef MDCCALIBFUNSVC_H_
2#define MDCCALIBFUNSVC_H_
4#include "GaudiKernel/DataSvc.h"
5#include "GaudiKernel/IDataProviderSvc.h"
6#include "GaudiKernel/IIncidentListener.h"
7#include "GaudiKernel/IInterface.h"
8#include "GaudiKernel/Kernel.h"
9#include "GaudiKernel/Service.h"
10#include "GaudiKernel/SmartDataPtr.h"
12#include "CalibData/CalibModel.h"
13#include "CalibData/Mdc/MdcCalibData.h"
14#include "CalibDataSvc/ICalibRootSvc.h"
16#include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
22 virtual public IIncidentListener {
32 void handle(
const Incident& );
42 double getTprop(
int lay,
double z )
const;
47 double driftTimeToDist(
double drifttime,
int layid,
int cellid,
int lr,
48 double entrance = 0.0 )
const;
50 double entrance = 0.0 )
const;
56 double getSigma(
int layid,
int lr,
double dist,
double entrance = 0.0,
double tanlam = 0.0,
57 double z = 0.0,
double Q = 1000.0 )
const;
58 double getSigmaLR(
int layid,
int lr,
double dist,
double entrance = 0.0,
59 double tanlam = 0.0,
double z = 0.0,
double Q = 1000.0 )
const;
60 double getSigma1(
int layid,
int lr,
double dist,
double entrance = 0.0,
double tanlam = 0.0,
61 double z = 0.0,
double Q = 1000.0 )
const;
62 double getSigma2(
int layid,
int lr,
double dist,
double entrance = 0.0,
double tanlam = 0.0,
63 double z = 0.0,
double Q = 1000.0 )
const;
64 double getF(
int layid,
int lr,
double dist,
double entrance = 0.0,
double tanlam = 0.0,
65 double z = 0.0,
double Q = 1000.0 )
const;
67 double getSigmaToT(
int layid,
int lr,
double tdr,
double entrance = 0.0,
68 double tanlam = 0.0,
double z = 0.0,
double Q = 1000.0 )
const;
69 double getSigmaToTLR(
int layid,
int lr,
double tdr,
double entrance = 0.0,
70 double tanlam = 0.0,
double z = 0.0,
double Q = 1000.0 )
const;
74 void getXtpar(
int layid,
int entr,
int lr,
double par[] )
const;
78 double getT0(
int layid,
int cellid )
const;
79 double getT0(
int wireid )
const {
return m_t0[wireid]; }
80 double getDelT0(
int wireid )
const {
return m_delt0[wireid]; }
83 double getQtpar(
int layid,
int ord )
const;
85 double getWireEff(
int layid,
int cellid )
const;
86 double getWireEff(
int wireid )
const {
return m_wireEff[wireid]; }
90 void getSdpar(
int layid,
int entr,
int lr,
double par[] )
const;
100 static const int NWIRE = 6796;
101 static const int NLAYER = 43;
102 static const int NXTENTR = 18;
103 static const int NXTPAR = 8;
104 static const int NXTORD = 6;
105 static const int NSDBIN = 24;
108 bool initCalibConst();
110 double t2dPoly(
double drifttime,
int layid,
int cellid,
int lr,
111 double entrance = 0.0 )
const;
112 double t2dInter(
double drifttime,
int layid,
int cellid,
int lr,
113 double entrance = 0.0 )
const;
121 int getXtKey(
int layid,
int entr,
int lr,
int ord )
const;
122 int getSdKey(
int layid,
int entr,
int lr,
int bin )
const;
123 int getXtparId(
int layid,
int entr,
int lr,
int ord )
const;
124 int getSdparId(
int layid,
int entr,
int lr,
int bin )
const;
132 std::string m_xtfile;
135 bool m_readWireEffDb;
136 std::string m_wireEffFile;
139 double m_fixSigmaValue;
142 IDataProviderSvc* m_pCalDataSvc;
149 std::map<int, double> m_xtmap;
150 std::vector<double> m_xtpar;
152 std::vector<double>
m_t0;
153 std::vector<double> m_delt0;
155 std::vector<double> m_qtpar0;
156 std::vector<double> m_qtpar1;
158 std::map<int, double> m_sdmap;
159 std::vector<double> m_sdpar;
161 std::map<int, double>::iterator m_xtiter;
162 std::map<int, double>::iterator m_sditer;
164 double m_wireEff[6796];
166 int m_nNewXt[
NLAYER][NXTENTR][2];
167 double m_vt[
NLAYER][NXTENTR][2][200];
168 double m_vd[
NLAYER][NXTENTR][2][200];
170 int m_nR2t[
NLAYER][NXTENTR][2];
171 double m_tR2t[
NLAYER][NXTENTR][2][200];
172 double m_sR2t[
NLAYER][NXTENTR][2][200];
174 static const int XTLAYER_INDEX = 11;
175 static const int XTLAYER_MASK = 0x1F800;
176 static const int XTLAYER_DECO = 0x3F;
178 static const int XTENTRA_INDEX = 6;
179 static const int XTENTRA_MASK = 0x7C0;
180 static const int XTENTRA_DECO = 0x1F;
182 static const int XTLR_INDEX = 4;
183 static const int XTLR_MASK = 0x30;
184 static const int XTLR_DECO = 0x3;
186 static const int XTORDER_INDEX = 0;
187 static const int XTORDER_MASK = 0xF;
188 static const int XTORDER_DECO = 0xF;
190 static const int SDLAYER_INDEX = 10;
191 static const int SDLAYER_MASK = 0xFC00;
192 static const int SDLAYER_DECO = 0x3F;
194 static const int SDENTRA_INDEX = 7;
195 static const int SDENTRA_MASK = 0x380;
196 static const int SDENTRA_DECO = 0x7;
198 static const int SDLR_INDEX = 5;
199 static const int SDLR_MASK = 0x60;
200 static const int SDLR_DECO = 0x3;
202 static const int SDBIN_INDEX = 0;
203 static const int SDBIN_MASK = 0x1F;
204 static const int SDBIN_DECO = 0x1F;
208 if ( lay < 8 )
return 220.0;
212inline int MdcCalibFunSvc::getXtparId(
int layid,
int entr,
int lr,
int ord )
const {
213 int parId = ( layid * 432 ) + ( entr * 24 ) + ( lr * 8 ) + ord;
217inline int MdcCalibFunSvc::getSdparId(
int layid,
int entr,
int lr,
int bin )
const {
218 int parId = ( layid * 288 ) + ( entr * 48 ) + ( lr * 24 ) +
bin;
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per bin
NTuple::Item< double > m_t0
*************DOUBLE PRECISION m_pi *DOUBLE PRECISION m_HvecTau2 DOUBLE PRECISION m_HvClone2 DOUBLE PRECISION m_gamma1 DOUBLE PRECISION m_gamma2 DOUBLE PRECISION m_thet1 DOUBLE PRECISION m_thet2 INTEGER m_IFPHOT *COMMON c_Taupair $ !Spin Polarimeter vector first Tau $ !Spin Polarimeter vector second Tau $ !Clone Spin Polarimeter vector first Tau $ !Clone Spin Polarimeter vector second Tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !phi of HvecTau1 $ !theta of HvecTau1 $ !phi of HvecTau2 $ !theta of HvecTau2 $ !super key
int getNextXtpar(int &key, double &par)
virtual StatusCode finalize()
double getSigmaToT(int layid, int lr, double tdr, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
int getSdEntrIndex(double entrance) const
TTree * getR2tTree(int layid) const
double getSigmaToTLR(int layid, int lr, double tdr, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
void getSdpar(int layid, int entr, int lr, double par[]) const
double distToDriftTime(double dist, int layid, int cellid, int lr, double entrance=0.0) const
double getSigma2(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getWireEff(int layid, int cellid) const
double getSigma(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getWireEff(int wireid) const
double getT0(int layid, int cellid) const
double driftTimeToDist(double drifttime, int layid, int cellid, int lr, double entrance=0.0) const
double getSigmaLR(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getQtpar(int layid, int ord) const
TTree * getNewXtparTree(int layid, int entr, int lr) const
void getXtpar(int layid, int entr, int lr, double par[]) const
MdcCalibFunSvc(const std::string &name, ISvcLocator *svcloc)
double getSigma1(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
int getXtEntrIndex(double entrance) const
double getDelT0(int wireid) const
double getVprop(int lay) const
virtual StatusCode initialize()
void handle(const Incident &)
double getT0(int wireid) const
int getNextSdpar(int &key, double &par)
double getTprop(int lay, double z) const
double getF(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getTimeWalk(int layid, double Q) const