diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx index c74dad0f3517e12b9993137223858913910d3dc8..bd38f47b6be519308c89368e903dfe691022b070 100644 --- a/src/THcScintillatorPlane.cxx +++ b/src/THcScintillatorPlane.cxx @@ -319,6 +319,8 @@ Int_t THcScintillatorPlane::ReadDatabase( const TDatime& date ) fGoodNegAdcPulseInt = vector<Double_t> (fNelem, 0.0); fGoodPosAdcPulseTime = vector<Double_t> (fNelem, 0.0); fGoodNegAdcPulseTime = vector<Double_t> (fNelem, 0.0); + fGoodPosAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0); + fGoodNegAdcTdcDiffTime = vector<Double_t> (fNelem, 0.0); fGoodPosTdcTimeUnCorr = vector<Double_t> (fNelem, 0.0); fGoodNegTdcTimeUnCorr = vector<Double_t> (fNelem, 0.0); @@ -426,6 +428,8 @@ Int_t THcScintillatorPlane::DefineVariables( EMode mode ) {"GoodNegAdcPulseAmp", "List of Negative ADC peak amp (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPulseAmp"}, {"GoodPosAdcPulseTime", "List of positive ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcPulseTime"}, {"GoodNegAdcPulseTime", "List of Negative ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcPulseTime"}, + {"GoodPosAdcTdcDiffTime", "List of positive TDC - ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodPosAdcTdcDiffTime"}, + {"GoodNegAdcTdcDiffTime", "List of Negative TDC - ADC time (passed TDC && ADC Min and Max cuts for either end)", "fGoodNegAdcTdcDiffTime"}, {"DiffDisTrack", "Difference between track and scintillator position (cm)", "fHitDistance"}, {"TrackXPos", "Track X position at plane (cm)", "fTrackXPosition"}, {"TrackYPos", "Track Y position at plane (cm)", "fTrackYPosition"}, @@ -495,12 +499,14 @@ void THcScintillatorPlane::Clear( Option_t* ) fGoodPosAdcPulseInt.at(ielem) = 0.0; fGoodPosAdcPulseAmp.at(ielem) = 0.0; fGoodPosAdcPulseTime.at(ielem) = kBig; + fGoodPosAdcTdcDiffTime.at(ielem) = kBig; } for (UInt_t ielem = 0; ielem < fGoodNegAdcPed.size(); ielem++) { fGoodNegAdcPed.at(ielem) = 0.0; fGoodNegAdcPulseInt.at(ielem) = 0.0; fGoodNegAdcPulseAmp.at(ielem) = 0.0; fGoodNegAdcPulseTime.at(ielem) = kBig; + fGoodNegAdcTdcDiffTime.at(ielem) = kBig; } //Clear Good TDC Variables @@ -738,21 +744,46 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) Double_t adcamp_neg=-kBig; Double_t adctime_pos=kBig; Double_t adctime_neg=kBig; + Double_t adctdcdifftime_pos=kBig; + Double_t adctdcdifftime_neg=kBig; Double_t good_ielem_posadc = -1; Double_t good_ielem_negadc = -1; - - + Bool_t btdcraw_pos=kFALSE; + Bool_t btdcraw_neg=kFALSE; + // Determine good tdc pos and neg times + Int_t tdc_pos=-999; + Int_t tdc_neg=-999; + Double_t good_ielem_postdc = -1; + Double_t good_ielem_negtdc = -1; + for(UInt_t thit=0; thit<hit->GetRawTdcHitPos().GetNHits(); thit++) { + tdc_pos = hit->GetRawTdcHitPos().GetTime(thit)+fTdcOffset; + if(tdc_pos >= fScinTdcMin && tdc_pos <= fScinTdcMax) { + btdcraw_pos = kTRUE; + good_ielem_postdc = thit; + break; + } + } + for(UInt_t thit=0; thit<hit->GetRawTdcHitNeg().GetNHits(); thit++) { + tdc_neg = hit->GetRawTdcHitNeg().GetTime(thit)+fTdcOffset; + if(tdc_neg >= fScinTdcMin && tdc_neg <= fScinTdcMax) { + btdcraw_neg = kTRUE; + good_ielem_negtdc = thit; + break; + } + } + // if(fADCMode == kADCDynamicPedestal) { - - //Loop Here over all hits per event for neg side of plane + //Loop Here over all hits per event for neg side of plane + if (good_ielem_negtdc != -1) { for (UInt_t ielem=0;ielem<rawNegAdcHit.GetNPulses();ielem++) { Int_t pulsePed = rawNegAdcHit.GetPed(); Double_t pulseInt = rawNegAdcHit.GetPulseInt(ielem); Double_t pulseAmp = rawNegAdcHit.GetPulseAmp(ielem); Double_t pulseTime = rawNegAdcHit.GetPulseTime(ielem)+fAdcTdcOffset; Bool_t errorflag = 0 ; + Double_t TdcAdcTimeDiff = tdc_neg*fScinTdcToTime-pulseTime; if (rawNegAdcHit.GetPulseAmpRaw(ielem) <= 0) errorflag=1; - Bool_t pulseTimeCut = (pulseTime > fAdcTimeWindowMin) && (pulseTime < fAdcTimeWindowMax); + Bool_t pulseTimeCut =( TdcAdcTimeDiff > fAdcTimeWindowMin) && (TdcAdcTimeDiff < fAdcTimeWindowMax); if (!errorflag && pulseTimeCut && adcint_neg == -999) { adcped_neg = pulsePed; adcint_neg = pulseInt; @@ -760,18 +791,21 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) adctime_neg = pulseTime; badcraw_neg = kTRUE; good_ielem_negadc = ielem; + adctdcdifftime_neg=TdcAdcTimeDiff; } } - + } //Loop Here over all hits per event for pos side of plane - for (UInt_t ielem=0;ielem<rawPosAdcHit.GetNPulses();ielem++) { + if (good_ielem_postdc != -1) { + for (UInt_t ielem=0;ielem<rawPosAdcHit.GetNPulses();ielem++) { Int_t pulsePed = rawPosAdcHit.GetPed(); Double_t pulseInt = rawPosAdcHit.GetPulseInt(ielem); Double_t pulseAmp = rawPosAdcHit.GetPulseAmp(ielem); Double_t pulseTime = rawPosAdcHit.GetPulseTime(ielem)+fAdcTdcOffset; Bool_t errorflag = 0 ; + Double_t TdcAdcTimeDiff = tdc_pos*fScinTdcToTime-pulseTime; if (rawPosAdcHit.GetPulseAmpRaw(ielem) <= 0) errorflag=1; - Bool_t pulseTimeCut = (pulseTime > fAdcTimeWindowMin) && (pulseTime < fAdcTimeWindowMax); + Bool_t pulseTimeCut =( TdcAdcTimeDiff > fAdcTimeWindowMin) && (TdcAdcTimeDiff < fAdcTimeWindowMax); if (!errorflag && pulseTimeCut && adcint_pos == -999) { adcped_pos = pulsePed; adcint_pos = pulseInt; @@ -779,8 +813,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) adctime_pos = pulseTime; badcraw_pos = kTRUE; good_ielem_posadc = ielem; + adctdcdifftime_pos=TdcAdcTimeDiff; } } + } } else if (fADCMode == kADCSampleIntegral) { adcint_pos = hit->GetRawAdcHitPos().GetSampleIntRaw() - fPosPed[index]; adcint_neg = hit->GetRawAdcHitNeg().GetSampleIntRaw() - fNegPed[index]; @@ -805,28 +841,7 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) ((THcSignalHit*) frNegADCSums->ConstructedAt(nrNegADCHits))->Set(padnum, samplesum); ((THcSignalHit*) frNegADCPeds->ConstructedAt(nrNegADCHits++))->Set(padnum, pedestal); } - Bool_t btdcraw_pos=kFALSE; - Bool_t btdcraw_neg=kFALSE; - Int_t tdc_pos=-999; - Int_t tdc_neg=-999; - Double_t good_ielem_postdc = -1; - Double_t good_ielem_negtdc = -1; - for(UInt_t thit=0; thit<hit->GetRawTdcHitPos().GetNHits(); thit++) { - tdc_pos = hit->GetRawTdcHitPos().GetTime(thit)+fTdcOffset; - if(tdc_pos >= fScinTdcMin && tdc_pos <= fScinTdcMax) { - btdcraw_pos = kTRUE; - good_ielem_postdc = thit; - break; - } - } - for(UInt_t thit=0; thit<hit->GetRawTdcHitNeg().GetNHits(); thit++) { - tdc_neg = hit->GetRawTdcHitNeg().GetTime(thit)+fTdcOffset; - if(tdc_neg >= fScinTdcMin && tdc_neg <= fScinTdcMax) { - btdcraw_neg = kTRUE; - good_ielem_negtdc = thit; - break; - } - } + // if((btdcraw_pos && badcraw_pos) || (btdcraw_neg && badcraw_neg )) { if (good_ielem_posadc != -1) { //good adc multiplicity @@ -838,6 +853,7 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) fGoodPosAdcPulseInt.at(padnum-1) = adcint_pos; fGoodPosAdcPulseAmp.at(padnum-1) = adcamp_pos; fGoodPosAdcPulseTime.at(padnum-1) = adctime_pos; + fGoodPosAdcTdcDiffTime.at(padnum-1) = adctdcdifftime_pos; } if (good_ielem_negadc != -1) { //good adc multiplicity @@ -849,6 +865,7 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) fGoodNegAdcPulseInt.at(padnum-1) = adcint_neg; fGoodNegAdcPulseAmp.at(padnum-1) = adcamp_neg; fGoodNegAdcPulseTime.at(padnum-1) = adctime_neg; + fGoodNegAdcTdcDiffTime.at(padnum-1) = adctdcdifftime_neg; } //DEFINE THE "GOOD +TDC Multiplicities and Occupancies" diff --git a/src/THcScintillatorPlane.h b/src/THcScintillatorPlane.h index 48d72fff41a2630211333a6db495f3daeb4a30be..49fffd0b947b4cba587c2444e0cc159bd79c1f42 100644 --- a/src/THcScintillatorPlane.h +++ b/src/THcScintillatorPlane.h @@ -145,6 +145,9 @@ class THcScintillatorPlane : public THaSubDetector { vector<Double_t> fGoodPosAdcPulseTime; vector<Double_t> fGoodNegAdcPulseTime; + + vector<Double_t> fGoodPosAdcTdcDiffTime; + vector<Double_t> fGoodNegAdcTdcDiffTime; //Hodoscopoe "GOOD" TDC Variables vector<Double_t> fGoodPosTdcTimeUnCorr;