diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx index c0cdd177be1e14175f13544499b3f144177287ac..b03eddaaafe54b4743d2feb8fa8cbfa39995ff27 100644 --- a/src/THcCherenkov.cxx +++ b/src/THcCherenkov.cxx @@ -215,6 +215,8 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date ) // Region parameters fRegionsValueMax = fNRegions * 8; fRegionValue = new Double_t[fRegionsValueMax]; + fAdcGoodElem = new Int_t[fNelem]; + fAdcPulseAmpTest = new Double_t[fNelem]; DBRequest list[]={ {"_ped_limit", fPedLimit, kInt, (UInt_t) fNelem, optional}, @@ -440,28 +442,38 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray& ) { Double_t StartTime = 0.0; if( fglHod ) StartTime = fglHod->GetStartTime(); - - // Loop over the elements in the TClonesArray + for(Int_t ipmt = 0; ipmt < fNelem; ipmt++) { + fAdcPulseAmpTest[ipmt] = -1000.; + fAdcGoodElem[ipmt]=-1; + } + // for(Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) { - Int_t npmt = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1; - Double_t pulsePed = ((THcSignalHit*) frAdcPed->ConstructedAt(ielem))->GetData(); - Double_t pulseInt = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData(); - Double_t pulseIntRaw = ((THcSignalHit*) frAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); - Double_t pulseAmp = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData(); Double_t pulseTime = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t pulseAmp = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData(); Double_t adctdcdiffTime = StartTime-pulseTime; Bool_t errorFlag = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData(); Bool_t pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin[npmt] && adctdcdiffTime < fAdcTimeWindowMax[npmt]; - - if (!errorFlag) { fGoodAdcMult.at(npmt) += 1; } - + if (!errorFlag && pulseTimeCut && pulseAmp > fAdcPulseAmpTest[npmt]) { + fAdcGoodElem[npmt]=ielem; + fAdcPulseAmpTest[npmt] = pulseAmp; + } + } + // Loop over the npmt + for(Int_t npmt = 0; npmt < fNelem; npmt++) { + Int_t ielem = fAdcGoodElem[npmt]; + if (ielem != -1) { + Double_t pulsePed = ((THcSignalHit*) frAdcPed->ConstructedAt(ielem))->GetData(); + Double_t pulseInt = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData(); + Double_t pulseIntRaw = ((THcSignalHit*) frAdcPulseIntRaw->ConstructedAt(ielem))->GetData(); + Double_t pulseAmp = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData(); + Double_t pulseTime = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData(); + Double_t adctdcdiffTime = StartTime-pulseTime; // By default, the last hit within the timing cut will be considered "good" - if (!errorFlag && pulseTimeCut) { fGoodAdcPed.at(npmt) = pulsePed; fGoodAdcHitUsed.at(npmt) = ielem+1; fGoodAdcPulseInt.at(npmt) = pulseInt; diff --git a/src/THcCherenkov.h b/src/THcCherenkov.h index 47845c55575ec2d79630afbc8c667bd564d50be3..2edaf496825025a15cf428be520190dc96c12d2b 100644 --- a/src/THcCherenkov.h +++ b/src/THcCherenkov.h @@ -104,6 +104,8 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList { Double_t* fPedMean; /* Can be supplied in parameters and then */ Double_t* fPed; Double_t* fThresh; + Double_t* fAdcPulseAmpTest; + Int_t* fAdcGoodElem; // 12 Gev FADC variables TClonesArray* frAdcPedRaw;