diff --git a/src/THcTrigDet.cxx b/src/THcTrigDet.cxx index f00f6a295dae44dd05f300e2441840b2d2f93ae4..2695938e345cdfbbd47f4cd8c3accbfafe3f7313 100644 --- a/src/THcTrigDet.cxx +++ b/src/THcTrigDet.cxx @@ -136,7 +136,13 @@ THcTrigDet::THcTrigDet( } -THcTrigDet::~THcTrigDet() {} +THcTrigDet::~THcTrigDet() { + delete [] fAdcTimeWindowMin; fAdcTimeWindowMin = NULL; + delete [] fAdcTimeWindowMax; fAdcTimeWindowMax = NULL; + delete [] fTdcTimeWindowMin; fTdcTimeWindowMin = NULL; + delete [] fTdcTimeWindowMax; fTdcTimeWindowMax = NULL; + +} THaAnalysisObject::EStatus THcTrigDet::Init(const TDatime& date) { @@ -180,7 +186,7 @@ THaAnalysisObject::EStatus THcTrigDet::Init(const TDatime& date) { } // Initialize hitlist part of the class. // printf(" Init trig det hitlist\n"); - InitHitList(fDetMap, "THcTrigRawHit", 100); + InitHitList(fDetMap, "THcTrigRawHit", 200,fTDC_RefTimeCut,fADC_RefTimeCut); CreateMissReportParms(fKwPrefix.c_str()); fPresentP = 0; @@ -237,24 +243,41 @@ Int_t THcTrigDet::Decode(const THaEvData& evData) { Int_t cnt = hit->fCounter-1; if (hit->fPlane == 1) { THcRawAdcHit rawAdcHit = hit->GetRawAdcHit(); - - fAdcPedRaw[cnt] = rawAdcHit.GetPedRaw(); - fAdcPulseIntRaw[cnt] = rawAdcHit.GetPulseIntRaw(); - fAdcPulseAmpRaw[cnt] = rawAdcHit.GetPulseAmpRaw(); - fAdcPulseTimeRaw[cnt] = rawAdcHit.GetPulseTimeRaw(); - fAdcPulseTime[cnt] = rawAdcHit.GetPulseTime()+fAdcTdcOffset; - - fAdcPed[cnt] = rawAdcHit.GetPed(); - fAdcPulseInt[cnt] = rawAdcHit.GetPulseInt(); - fAdcPulseAmp[cnt] = rawAdcHit.GetPulseAmp(); - fAdcMultiplicity[cnt] = rawAdcHit.GetNPulses(); + UInt_t good_hit=999; + if (rawAdcHit.GetNPulses()>1) { + for (UInt_t thit=0; thit<rawAdcHit.GetNPulses(); ++thit) { + Int_t TestTime=rawAdcHit.GetPulseTime(thit)+fAdcTdcOffset; + if (TestTime>fAdcTimeWindowMin[cnt]&&TestTime<fAdcTimeWindowMax[cnt]&&good_hit==999) { + good_hit=thit; + } + } + } + if (good_hit==999) good_hit=0; + fAdcPedRaw[cnt] = rawAdcHit.GetPedRaw(); + fAdcPulseIntRaw[cnt] = rawAdcHit.GetPulseIntRaw(good_hit); + fAdcPulseAmpRaw[cnt] = rawAdcHit.GetPulseAmpRaw(good_hit); + fAdcPulseTimeRaw[cnt] = rawAdcHit.GetPulseTimeRaw(good_hit); + fAdcPulseTime[cnt] = rawAdcHit.GetPulseTime(good_hit)+fAdcTdcOffset; + fAdcPed[cnt] = rawAdcHit.GetPed(); + fAdcPulseInt[cnt] = rawAdcHit.GetPulseInt(good_hit); + fAdcPulseAmp[cnt] = rawAdcHit.GetPulseAmp(good_hit); } else if (hit->fPlane == 2) { THcRawTdcHit rawTdcHit = hit->GetRawTdcHit(); - fTdcTimeRaw[cnt] = rawTdcHit.GetTimeRaw(); - fTdcTime[cnt] = rawTdcHit.GetTime()*fTdcChanperNS+fTdcOffset; + UInt_t good_hit=999; + if (rawTdcHit.GetNHits()>1) { + for (UInt_t thit=0; thit<rawTdcHit.GetNHits(); ++thit) { + Int_t TestTime=rawTdcHit.GetTime(thit)*fTdcChanperNS+fTdcOffset; + if (TestTime>fTdcTimeWindowMin[cnt]&&TestTime<fTdcTimeWindowMax[cnt]&&good_hit==999) { + good_hit=thit; + } + } + } + if (good_hit==999) good_hit=0; + fTdcTimeRaw[cnt] = rawTdcHit.GetTimeRaw(good_hit); + fTdcTime[cnt] = rawTdcHit.GetTime(good_hit)*fTdcChanperNS+fTdcOffset; fTdcMultiplicity[cnt] = rawTdcHit.GetNHits(); } @@ -281,7 +304,6 @@ void THcTrigDet::Setup(const char* name, const char* description) { Int_t THcTrigDet::ReadDatabase(const TDatime& date) { std::string adcNames, tdcNames; - DBRequest list[] = { {"_numAdc", &fNumAdc, kInt}, // Number of ADC channels. {"_numTdc", &fNumTdc, kInt}, // Number of TDC channels. @@ -290,12 +312,38 @@ Int_t THcTrigDet::ReadDatabase(const TDatime& date) { {"_tdcoffset", &fTdcOffset, kDouble,0,1}, // Offset of tdc channels {"_adc_tdc_offset", &fTdcOffset, kDouble,0,1}, // Offset of Adc Pulse time (ns) {"_tdcchanperns", &fTdcChanperNS, kDouble,0,1}, // Convert channesl to ns + {"_trig_tdcrefcut", &fTDC_RefTimeCut, kInt, 0, 1}, + {"_trig_adcrefcut", &fADC_RefTimeCut, kInt, 0, 1}, {0} }; fTdcChanperNS=0.1; fTdcOffset=300.; fAdcTdcOffset=200.; + fTDC_RefTimeCut=-1000.; + fADC_RefTimeCut=-1000.; gHcParms->LoadParmValues(list, fKwPrefix.c_str()); + // + fAdcTimeWindowMin = new Double_t [fNumAdc]; + fAdcTimeWindowMax = new Double_t [fNumAdc]; + fTdcTimeWindowMin = new Double_t [fNumTdc]; + fTdcTimeWindowMax = new Double_t [fNumTdc]; + for(Int_t ip=0;ip<fNumAdc;ip++) { // Set a large default window + fAdcTimeWindowMin[ip]=-1000; + fAdcTimeWindowMax[ip]=1000; + } + for(Int_t ip=0;ip<fNumTdc;ip++) { // Set a large default window + fTdcTimeWindowMin[ip]=-1000; + fTdcTimeWindowMax[ip]=1000; + } + DBRequest list2[]={ + {"_AdcTimeWindowMin", fAdcTimeWindowMin, kDouble, (UInt_t) fNumAdc, 1}, + {"_AdcTimeWindowMax", fAdcTimeWindowMax, kDouble, (UInt_t) fNumAdc, 1}, + {"_TdcTimeWindowMin", fTdcTimeWindowMin, kDouble, (UInt_t) fNumAdc, 1}, + {"_TdcTimeWindowMax", fTdcTimeWindowMax, kDouble, (UInt_t) fNumAdc, 1}, + {0} + }; + + gHcParms->LoadParmValues(list2, fKwPrefix.c_str()); // Split the names to std::vector<std::string>. fAdcNames = vsplit(adcNames); diff --git a/src/THcTrigDet.h b/src/THcTrigDet.h index bce03b4bbc67bab5fe13e04e049638d5f2c68064..58be6074745764d98f0783f03abe724835820a2c 100644 --- a/src/THcTrigDet.h +++ b/src/THcTrigDet.h @@ -55,7 +55,15 @@ class THcTrigDet : public THaDetector, public THcHitList { Int_t fTdcTimeRaw[fMaxTdcChannels]; Double_t fTdcTime[fMaxTdcChannels]; + Int_t fTDC_RefTimeCut; + Int_t fADC_RefTimeCut; + Double_t *fAdcTimeWindowMin; + Double_t *fAdcTimeWindowMax; + Double_t *fTdcTimeWindowMin; + Double_t *fTdcTimeWindowMax; + + Int_t fAdcPedRaw[fMaxAdcChannels]; Int_t fAdcPulseIntRaw[fMaxAdcChannels]; Int_t fAdcPulseAmpRaw[fMaxAdcChannels];