00001 #ifndef St_svtHybridDriftVelocityC_h
00002 #define St_svtHybridDriftVelocityC_h
00003 #include "TChair.h"
00004 #include "TArrayI.h"
00005 #include "tables/St_svtHybridDriftVelocity_Table.h"
00006
00007 class St_svtHybridDriftVelocityC : public TChair {
00008 public:
00009 St_svtHybridDriftVelocityC (St_svtHybridDriftVelocity *table=0);
00010 virtual ~St_svtHybridDriftVelocityC() {fgsvtHybridDriftVelocityC = 0;}
00011
00012 static St_svtHybridDriftVelocityC *instance() {return fgsvtHybridDriftVelocityC;}
00013 void Init();
00014 Double_t CalcTransLength(Double_t x) {return x*mAnodePitch;}
00015 Double_t UnCalcTransLength(Double_t x) {return x/mAnodePitch;}
00016 Double_t CalcDriftLength(Int_t barrel, Int_t ladder, Int_t wafer,
00017 Int_t hybrid, Double_t timeBin, Double_t anode)
00018 {return CalcDriftLength(p(barrel, ladder, wafer, hybrid),timeBin,anode);}
00019 Double_t UnCalcDriftLength(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid,Double_t x)
00020 {return UnCalcDriftLength(p(barrel, ladder, wafer, hybrid),x);}
00021 Double_t CalcDriftLength(svtHybridDriftVelocity_st *p, Double_t timeBin, Double_t anode);
00022 Double_t UnCalcDriftLength(svtHybridDriftVelocity_st *p,Double_t x);
00023 Double_t DriftVelocity(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid)
00024 {return DriftVelocity(p(barrel, ladder, wafer, hybrid));}
00025 Double_t DriftVelocity(svtHybridDriftVelocity_st *p);
00026 Double_t uHat(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid, Double_t timeBin)
00027 {return uHat(p(barrel, ladder, wafer, hybrid),timeBin);}
00028 Double_t uHat(svtHybridDriftVelocity_st *p, Double_t timeBin);
00029 Double_t vHat(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid, Double_t anode)
00030 {return vHat(p(barrel, ladder, wafer, hybrid),anode);}
00031 Double_t vHat(svtHybridDriftVelocity_st *p, Double_t anode);
00032 Double_t CalcU(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid, Double_t timeBin, Double_t anode);
00033 Double_t CalcV(Int_t hybrid, Double_t x);
00034 Double_t UnCalcU(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid, Double_t timeBin);
00035 Double_t UnCalcV(Int_t hybrid, Double_t x);
00036 svtHybridDriftVelocity_st *p(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid);
00037 Bool_t IsValidDriftRegion(Int_t barrel, Int_t ladder, Int_t wafer, Int_t hybrid, Double_t timeBin);
00038 static void SetAnodePitch(Double_t pitch = 0.0250) {mAnodePitch = pitch;}
00039 static void SetWaferLength(Double_t length= 2.9928) {mWaferLength = length;}
00040 static void SetWaferWidth(Double_t width = 3.0000) {mWaferWidth = width;}
00041 static void SetSamplingFrequency(Double_t samplingFrequency = 25000000.0) {mSamplingFrequency = samplingFrequency;}
00042
00043 static Double_t AnodePitch() {return mAnodePitch;}
00044 static Double_t WaferLength() {return mWaferLength;}
00045 static Double_t WaferWidth() {return mWaferWidth;}
00046 static Double_t SamplingFrequency() {return mSamplingFrequency;}
00047 static Double_t STcheb(Int_t N, Double_t *par, Double_t x);
00048 private:
00049 static St_svtHybridDriftVelocityC *fgsvtHybridDriftVelocityC;
00050 static Double_t mAnodePitch;
00051 static Double_t mWaferLength;
00052 static Double_t mWaferWidth;
00053 static Double_t mSamplingFrequency;
00054 static Double_t mNoAnodes;
00055 ClassDefChair(St_svtHybridDriftVelocity, svtHybridDriftVelocity_st )
00056 ClassDef(St_svtHybridDriftVelocityC,1)
00057 };
00058 #endif