00001 #ifndef St_spaceChargeCorC_h
00002 #define St_spaceChargeCorC_h
00003
00004 #include "TChair.h"
00005 #include "tables/St_spaceChargeCor_Table.h"
00006 #include "StDetectorDbMagnet.h"
00007 #include "StChain/StChain.h"
00008
00009 class St_spaceChargeCorC : public TChair {
00010 public:
00011 spaceChargeCor_st *Struct(Int_t i = 0) {return ((St_spaceChargeCor*) Table())->GetTable()+i;}
00012 UInt_t getNumRows() {return GetNRows();}
00013 Double_t fullFieldB(Int_t i = 0) {return Struct(i)->fullFieldB;}
00014 Double_t halfFieldB(Int_t i = 0) {return Struct(i)->halfFieldB;}
00015 Double_t zeroField(Int_t i = 0) {return Struct(i)->zeroField;}
00016 Double_t halfFieldA(Int_t i = 0) {return Struct(i)->halfFieldA;}
00017 Double_t fullFieldA(Int_t i = 0) {return Struct(i)->fullFieldA;}
00018 Double_t satRate(Int_t i = 0) {return Struct(i)->satRate;}
00019 Float_t factor(Int_t i = 0) {return Struct(i)->factor;}
00020 Float_t detector(Int_t i = 0) {return Struct(i)->detector;}
00021 Float_t offset(Int_t i = 0) {return Struct(i)->offset;}
00022 Float_t getEWRatio(Int_t i = 0) {return Struct(i)->ewratio;}
00023 Double_t getSpaceChargeCorrection(Double_t scaleFactor, Int_t i = 0){
00024 Double_t value = 0;
00025 if(scaleFactor < -.75 && scaleFactor > -1.25) value = fullFieldB(i);
00026 else if(scaleFactor < -0.25) value = halfFieldB(i);
00027 else if(scaleFactor < .25) value = zeroField(i);
00028 else if(scaleFactor < 0.75) value = halfFieldA(i);
00029 else if(scaleFactor < 1.25) value = fullFieldA(i);
00030 return value;
00031 }
00032 Double_t getSpaceChargeCorrection(){return getSpaceChargeCorrection(StDetectorDbMagnet::instance()->getScaleFactor());}
00033 Double_t getSpaceChargeCoulombs(Double_t scaleFactor);
00034 Double_t getSpaceChargeCoulombs(){return getSpaceChargeCoulombs(StDetectorDbMagnet::instance()->getScaleFactor());}
00035 Double_t getSpaceChargeSatRate(Int_t i = 0) {return satRate(i);}
00036 Float_t getSpaceChargeFactor(Int_t i = 0) {return factor(i);}
00037 Float_t getSpaceChargeDetector(Int_t i = 0){return detector(i);}
00038 Float_t getSpaceChargeOffset(Int_t i = 0) {return offset(i);}
00039
00040 protected:
00041 St_spaceChargeCorC(St_spaceChargeCor *table=0) : TChair(table) {}
00042 virtual ~St_spaceChargeCorC() {}
00043 private:
00044 ClassDefChair(St_spaceChargeCor, spaceChargeCor_st )
00045 ClassDef(St_spaceChargeCorC,1)
00046 };
00047
00048 class St_spaceChargeCorR1C : public St_spaceChargeCorC {
00049 public:
00050 static St_spaceChargeCorR1C* instance();
00051 protected:
00052 St_spaceChargeCorR1C(St_spaceChargeCor *table=0) : St_spaceChargeCorC(table) {}
00053 virtual ~St_spaceChargeCorR1C() {fgInstance = 0;}
00054 private:
00055 static St_spaceChargeCorR1C* fgInstance;
00056 ClassDef(St_spaceChargeCorR1C,1)
00057 };
00058 class St_spaceChargeCorR2C : public St_spaceChargeCorC {
00059 public:
00060 static St_spaceChargeCorR2C* instance();
00061 protected:
00062 St_spaceChargeCorR2C(St_spaceChargeCor *table=0) : St_spaceChargeCorC(table) {}
00063 virtual ~St_spaceChargeCorR2C() {fgInstance = 0;}
00064 private:
00065 static St_spaceChargeCorR2C* fgInstance;
00066 ClassDef(St_spaceChargeCorR2C,1)
00067 };
00068 #endif