diff --git a/src/THcBCMCurrent.cxx b/src/THcBCMCurrent.cxx index b0558a25e647bfaea32a884ea262cf4bae63d3b2..a65a41f4edc8cea03c2d7122c62ce4993242bf2c 100644 --- a/src/THcBCMCurrent.cxx +++ b/src/THcBCMCurrent.cxx @@ -21,11 +21,10 @@ using namespace std; THcBCMCurrent::THcBCMCurrent(const char* name, const char* description) : - THaPhysicsModule(name, description), fThreshold(0) + THaPhysicsModule(name, description) { - fBCM1flag = 0; - fBCM2flag = 0; + fBCMflag = 0; fBCM1avg = 0; fBCM2avg = 0; @@ -68,20 +67,14 @@ Int_t THcBCMCurrent::ReadDatabase( const TDatime& date ) { DBRequest list1[] = { - {"num_scal_reads", &fNscaler, kInt}, + {"num_scal_reads", &fNscaler, kInt}, + {"gBCM_Current_threshold", &fThreshold, kDouble}, + {"gBCM_Current_threshold_index", &fBCMIndex, kInt}, {0} }; + gHcParms->LoadParmValues((DBRequest*)&list1); - if(fThreshold < 1.e-5) - { - DBRequest list2[] = { - {"gBCM_Current_threshold", &fThreshold, kDouble}, - {0} - }; - gHcParms->LoadParmValues((DBRequest*)&list2); - } - fiBCM1 = new Double_t[fNscaler]; fiBCM2 = new Double_t[fNscaler]; fiBCM4a = new Double_t[fNscaler]; @@ -90,7 +83,7 @@ Int_t THcBCMCurrent::ReadDatabase( const TDatime& date ) fEvtNum = new Int_t[fNscaler]; - DBRequest list3[] = { + DBRequest list2[] = { {"scal_read_bcm1_current", fiBCM1, kDouble, (UInt_t) fNscaler}, {"scal_read_bcm2_current", fiBCM2, kDouble, (UInt_t) fNscaler}, {"scal_read_bcm4a_current", fiBCM4a, kDouble, (UInt_t) fNscaler}, @@ -100,7 +93,7 @@ Int_t THcBCMCurrent::ReadDatabase( const TDatime& date ) {0} }; - gHcParms->LoadParmValues((DBRequest*)&list3); + gHcParms->LoadParmValues((DBRequest*)&list2); BCMInfo binfo; for(int i=0; i<fNscaler; i++) @@ -127,13 +120,12 @@ Int_t THcBCMCurrent::DefineVariables( EMode mode ) fIsSetup = ( mode == kDefine ); RVarDef vars[] = { - {"bcm1.currentflag", "BCM1 current flag for good event", "fBCM1flag"}, - {"bcm2.currentflag", "BCM2 current flag for good event", "fBCM2flag"}, - {"bcm1.AvgCurrent", "BCM1 average beam current", "fBCM1avg"}, - {"bcm2.AvgCurrent", "BCM2 average beam current", "fBCM2avg"}, - {"bcm4a.AvgCurrent", "BCM4a average beam current", "fBCM4aavg"}, - {"bcm4b.AvgCurrent", "BCM4b average beam current", "fBCM4bavg"}, - {"bcm17.AvgCurrent", "BCM17 average beam current", "fBCM17avg"}, + {"CurrentFlag", "BCM current flag for good event", "fBCMflag"}, + {"bcm1.AvgCurrent", "BCM1 average beam current", "fBCM1avg"}, + {"bcm2.AvgCurrent", "BCM2 average beam current", "fBCM2avg"}, + {"bcm4a.AvgCurrent", "BCM4a average beam current", "fBCM4aavg"}, + {"bcm4b.AvgCurrent", "BCM4b average beam current", "fBCM4bavg"}, + {"bcm17.AvgCurrent", "BCM17 average beam current", "fBCM17avg"}, { 0 } }; @@ -170,15 +162,27 @@ Int_t THcBCMCurrent::Process( const THaEvData& evdata ) fBCM17avg = binfo.bcm17_current; } - if(fBCM1avg < fThreshold) - fBCM1flag = 0; - else - fBCM1flag = 1; - - if(fBCM2avg < fThreshold) - fBCM2flag = 0; - else - fBCM2flag = 1; + switch (fBCMIndex) + { + case BCM1 : + fBCMflag = ( fBCM1avg < fThreshold )?0:1; + break; + case BCM2: + fBCMflag = ( fBCM2avg < fThreshold )?0:1; + break; + case BCM4A: + fBCMflag = ( fBCM4aavg < fThreshold )?0:1; + break; + case BCM4B: + fBCMflag = ( fBCM4bavg < fThreshold )?0:1; + break; + case BCM17: + fBCMflag = ( fBCM17avg < fThreshold )?0:1; + break; + default: + fBCMflag = 0; + break; + } return kOK; diff --git a/src/THcBCMCurrent.h b/src/THcBCMCurrent.h index 4357a30441c233e5bcdb15d48d7f14517c744ad3..ef70a0c1f6f88cdc9c6612e6c3fb3d75767dbe0a 100644 --- a/src/THcBCMCurrent.h +++ b/src/THcBCMCurrent.h @@ -19,12 +19,13 @@ class THcBCMCurrent : public THaPhysicsModule { virtual EStatus Init( const TDatime& date); virtual Int_t Process( const THaEvData& ); - void SetCurrentCut(Double_t _threshold){ fThreshold = _threshold; } + enum BCMopt {BCM1, BCM2, UNSER, BCM4A, BCM4B, BCM17}; private: Int_t fNscaler; Double_t fThreshold; + Int_t fBCMIndex; Double_t* fiBCM1; Double_t* fiBCM2; Double_t* fiBCM4a; @@ -32,8 +33,7 @@ class THcBCMCurrent : public THaPhysicsModule { Double_t* fiBCM17; Int_t* fEvtNum; - Int_t fBCM1flag; - Int_t fBCM2flag; + Int_t fBCMflag; Double_t fBCM1avg; Double_t fBCM2avg; @@ -49,13 +49,12 @@ class THcBCMCurrent : public THaPhysicsModule { Double_t bcm17_current; }; + std::map<Int_t, BCMInfo> BCMInfoMap; + Int_t GetAvgCurrent( Int_t fevn, BCMInfo &bcminfo ); virtual Int_t ReadDatabase( const TDatime& date); virtual Int_t DefineVariables( EMode mode = kDefine ); - - std::map<Int_t, BCMInfo> BCMInfoMap; - ClassDef(THcBCMCurrent, 0) };