00001 #ifndef St_tpcSlewingC_h
00002 #define St_tpcSlewingC_h
00003
00004 #include "TChair.h"
00005 #include "tables/St_tpcSlewing_Table.h"
00006
00007 class St_tpcSlewingC : public TChair {
00008 public:
00009 static St_tpcSlewingC* instance();
00010 tpcSlewing_st *Struct(Int_t i = 0) const {return ((St_tpcSlewing*) Table())->GetTable()+i;}
00011 UInt_t getNumRows() const {return GetNRows();}
00012 long type(Int_t i = 0) const {return Struct(i)->type;}
00013 long npar(Int_t i = 0) const {return Struct(i)->npar;}
00014 double minT(Int_t i = 0) const {return Struct(i)->min;}
00015 double a(Int_t i = 0, Int_t n = 0) const {return Struct(i)->a[n];}
00016 double slewing(Int_t i = 0, double q = 0) {
00017 switch (type(i)) {
00018 case 1001 : { return func1001(q,a(i,0),a(i,1),a(i,2),a(i,3)); }
00019
00020 default : {}
00021 }
00022 return 0;
00023 }
00024 double correctedT(int padrow = 1, double q = 0, double T = 0) {
00025 int inout = (padrow <= 13 ? 0 : 1);
00026 return T - (T > minT(inout) ? slewing(inout,q) : 0);
00027 }
00028 protected:
00029 St_tpcSlewingC(St_tpcSlewing *table=0) : TChair(table) {}
00030 virtual ~St_tpcSlewingC() {fgInstance = 0;}
00031 double func1001(double q, double p0, double p1, double p2, double p3) {
00032
00033 return p0 * TMath::Exp(-p1*TMath::Power(q,-0.5*p3)) + p2;
00034 }
00035 private:
00036 static St_tpcSlewingC* fgInstance;
00037 ClassDefChair(St_tpcSlewing, tpcSlewing_st )
00038 ClassDef(St_tpcSlewingC,1)
00039 };
00040 #endif