From 00dce128b1e979609201c5b947ac9eaed2d0c512 Mon Sep 17 00:00:00 2001 From: ehrlich-uva Date: Thu, 2 Jul 2026 15:50:19 -0500 Subject: [PATCH] Updated CRV pulse reconstruction for secondary pulses --- CRVReco/fcl/prolog_v11.fcl | 8 +- CRVReco/fcl/prolog_v12.fcl | 8 +- CRVReco/inc/MakeCrvRecoPulses.hh | 30 +-- CRVReco/src/CrvRecoPulsesFinder_module.cc | 26 +- CRVReco/src/MakeCrvRecoPulses.cc | 251 +++++------------- EventDisplay/src/dict_classes/ComponentInfo.h | 22 +- RecoDataProducts/inc/CrvRecoPulse.hh | 15 -- 7 files changed, 101 insertions(+), 259 deletions(-) diff --git a/CRVReco/fcl/prolog_v11.fcl b/CRVReco/fcl/prolog_v11.fcl index a25d00a1cb..150fe6fe46 100644 --- a/CRVReco/fcl/prolog_v11.fcl +++ b/CRVReco/fcl/prolog_v11.fcl @@ -55,12 +55,8 @@ BEGIN_PROLOG //e.g. 0.985 for a leading edge at 50% pulse height //e.g. 1.385 for a leading edge at 20% pulse height //e.g. 1.587 for a leading edge at 10% pulse height - pulseThreshold : 0.5 //50% of ADC peak value above pedestal - //threshold used to determine the pulse time interval for the no-fit option - pulseAreaThreshold : 5 //5 ADC above pedestal - //threshold used to determine the pulse area for the no-fit option - doublePulseSeparation : 0.25 //25% of both ADC peaks of the double pulse - //threshold at which double pulses can be separated in the no-fit option + samplesBefore : 4 //samples before the peak included in fit + samplesAfter : 3 //samples after the peak included in fit (less to avoid hidden pulses from reflections) useTimeOffsetDB : true //applies time offsets from the DB timeOffsetScale : 1.0 //scale factor for the time offsets from the database //examples: diff --git a/CRVReco/fcl/prolog_v12.fcl b/CRVReco/fcl/prolog_v12.fcl index 0511406a90..0fc10879b2 100644 --- a/CRVReco/fcl/prolog_v12.fcl +++ b/CRVReco/fcl/prolog_v12.fcl @@ -55,12 +55,8 @@ BEGIN_PROLOG //e.g. 0.985 for a leading edge at 50% pulse height //e.g. 1.385 for a leading edge at 20% pulse height //e.g. 1.587 for a leading edge at 10% pulse height - pulseThreshold : 0.5 //50% of ADC peak value above pedestal - //threshold used to determine the pulse time interval for the no-fit option - pulseAreaThreshold : 5 //5 ADC above pedestal - //threshold used to determine the pulse area for the no-fit option - doublePulseSeparation : 0.25 //25% of both ADC peaks of the double pulse - //threshold at which double pulses can be separated in the no-fit option + samplesBefore : 4 //samples before the peak included in fit + samplesAfter : 3 //samples after the peak included in fit (less to avoid hidden pulses from reflections) useTimeOffsetDB : true //applies time offsets from the DB timeOffsetScale : 1.0 //scale factor for the time offsets from the database //examples: diff --git a/CRVReco/inc/MakeCrvRecoPulses.hh b/CRVReco/inc/MakeCrvRecoPulses.hh index 547bb813fe..7bc3cf247d 100644 --- a/CRVReco/inc/MakeCrvRecoPulses.hh +++ b/CRVReco/inc/MakeCrvRecoPulses.hh @@ -13,7 +13,7 @@ class MakeCrvRecoPulses public: MakeCrvRecoPulses(float minADCdifference, float defaultBeta, float minBeta, float maxBeta, float maxTimeDifference, float minPulseHeightRatio, float maxPulseHeightRatio, - float LEtimeFactor, float pulseThreshold, float pulseAreaThreshold, float doublePulseSeparation); + float LEtimeFactor, int samplesBefore, int samplesAfter); void SetWaveform(const std::vector &waveform, uint16_t startTDC, float digitizationPeriod, float pedestal, float calibrationFactor, float calibrationFactorPulseHeight); @@ -30,10 +30,8 @@ class MakeCrvRecoPulses private: MakeCrvRecoPulses(); - void FillGraphAndFindPeaks(const std::vector &waveform, uint16_t startTDC, - float digitizationPeriod, float pedestal, - TGraph &g, std::vector > &peaks); - void RangeFinder(const std::vector &waveform, const size_t peakStart, const size_t peakEnd, size_t &start, size_t &end); + bool FindNextPeak(const TGraph &g, int start, int &peakStart, int &peakEnd, int &fitStart, int &fitEnd); + void SubtractPulse(TGraph &g, uint16_t startTDC, float digitizationPeriod); bool FailedFit(TFitResultPtr fr); TF1 _f1; @@ -43,30 +41,12 @@ class MakeCrvRecoPulses float _maxTimeDifference; float _minPulseHeightRatio, _maxPulseHeightRatio; float _LEtimeFactor; - float _pulseThreshold; - float _pulseAreaThreshold; - float _doublePulseSeparation; + int _samplesBefore, _samplesAfter; std::vector _PEs, _PEsPulseHeight; std::vector _pulseTimes, _LEtimes; std::vector _pulseHeights, _pulseBetas, _pulseFitChi2s; - std::vector _zeroNdf, _failedFits, _duplicateNoFitPulses, _separatedDoublePulses; - - public: - const std::vector &GetPEsNoFit() const {return _PEsNoFit;} - const std::vector &GetPulseTimesNoFit() const {return _pulseTimesNoFit;} - const std::vector &GetPulseStarts() const {return _pulseStart;} - const std::vector &GetPulseEnds() const {return _pulseEnd;} - const std::vector &GetDuplicateNoFitPulses() const {return _duplicateNoFitPulses;} - const std::vector &GetSeparatedDoublePulses() const {return _separatedDoublePulses;} - - private: - void NoFitOption(const std::vector &waveform, const std::vector > &peaks, - uint16_t startTDC, float digitizationPeriod, float pedestal, float calibrationFactor); - std::vector _PEsNoFit; - std::vector _pulseTimesNoFit; - std::vector _pulseStart; - std::vector _pulseEnd; + std::vector _zeroNdf, _failedFits; }; } diff --git a/CRVReco/src/CrvRecoPulsesFinder_module.cc b/CRVReco/src/CrvRecoPulsesFinder_module.cc index 3ab2e942ca..2cece8095c 100644 --- a/CRVReco/src/CrvRecoPulsesFinder_module.cc +++ b/CRVReco/src/CrvRecoPulsesFinder_module.cc @@ -61,9 +61,8 @@ namespace mu2e fhicl::Atom minPulseHeightRatio{Name("minPulseHeightRatio"), Comment("smallest accepted ratio between largest ADC value and fitted peak")}; //0.7 fhicl::Atom maxPulseHeightRatio{Name("maxPulseHeightRatio"), Comment("largest accepted ratio between largest ADC value and fitted peak")}; //1.5 fhicl::Atom LEtimeFactor{Name("LEtimeFactor"), Comment("time of leading edge is peakTime-LEtimeFactor*beta (0.985,1.385,1.587 for a leading edge of 0.5,0.2,0.1 pulse height")}; - fhicl::Atom pulseThreshold{Name("pulseThreshold"), Comment("fraction of ADC peak used as threshold to determine the pulse time interval for the no-fit option")}; //0.5 - fhicl::Atom pulseAreaThreshold{Name("pulseAreaThreshold"), Comment("threshold to determine the pulse area for the the no-fit option")}; //5 - fhicl::Atom doublePulseSeparation{Name("doublePulseSeparation"), Comment("fraction of both peaks at which double pulses can be separated in the no-fit option")}; //0.25 + fhicl::Atom samplesBefore{Name("samplesBefore"), Comment("number of samples before the peak to be included in fit")}; + fhicl::Atom samplesAfter{Name("samplesAfter"), Comment("number of samples after the peak to be included in fit")}; fhicl::Atom eventWindowMarkerTag{Name("eventWindowMarkerTag"), Comment("EventWindowMarker producer"),"EWMProducer"}; fhicl::Atom protonBunchTimeTag{Name("protonBunchTimeTag"), Comment("ProtonBunchTime producer"),"EWMProducer"}; fhicl::Atom useTimeOffsetDB{Name("useTimeOffsetDB"), Comment("apply time offsets from the DB")}; //true @@ -109,10 +108,6 @@ namespace mu2e _timeOffsetScale(conf().timeOffsetScale()), _ignoreChannels(conf().ignoreChannels()) { - if(conf().pulseAreaThreshold()>conf().minADCdifference()) - throw cet::exception("CRVRECO_BAD_CONFIG") - << "CrvRecoPulseFinder pulseAreaThreshold " << conf().pulseAreaThreshold() - << " larger than minADCdifference " << conf().minADCdifference(); produces(_NZSdata?"NZS":""); _makeCrvRecoPulses=boost::shared_ptr(new mu2eCrv::MakeCrvRecoPulses(conf().minADCdifference(), conf().defaultBeta(), @@ -122,9 +117,8 @@ namespace mu2e conf().minPulseHeightRatio(), conf().maxPulseHeightRatio(), conf().LEtimeFactor(), - conf().pulseThreshold(), - conf().pulseAreaThreshold(), - conf().doublePulseSeparation())); + conf().samplesBefore(), + conf().samplesAfter())); } void CrvRecoPulsesFinder::beginJob() @@ -233,25 +227,15 @@ namespace mu2e float pulseFitChi2= _makeCrvRecoPulses->GetPulseFitChi2s().at(j); bool failedFit = _makeCrvRecoPulses->GetFailedFits().at(j); - bool duplicateNoFitPulse = _makeCrvRecoPulses->GetDuplicateNoFitPulses().at(j); - bool separatedDoublePulse = _makeCrvRecoPulses->GetSeparatedDoublePulses().at(j); bool zeroNdf = _makeCrvRecoPulses->GetZeroNdfs().at(j); CrvRecoPulseFlags flags; if(failedFit) flags.set(CrvRecoPulseFlagEnums::failedFit); - if(duplicateNoFitPulse) flags.set(CrvRecoPulseFlagEnums::duplicateNoFitPulse); - if(separatedDoublePulse) flags.set(CrvRecoPulseFlagEnums::separatedDoublePulse); if(zeroNdf) flags.set(CrvRecoPulseFlagEnums::zeroNdf); - float PEsNoFit = _makeCrvRecoPulses->GetPEsNoFit().at(j); - double pulseTimeNoFit = _makeCrvRecoPulses->GetPulseTimesNoFit().at(j) + TDC0time + timeOffset; - double pulseStart = _makeCrvRecoPulses->GetPulseStarts().at(j) + TDC0time + timeOffset; - double pulseEnd = _makeCrvRecoPulses->GetPulseEnds().at(j) + TDC0time + timeOffset; - - if(calibPulseArea<=0) {PEs=0; PEsNoFit=0; flags.set(CrvRecoPulseFlagEnums::noCalibConstPulseArea);} + if(calibPulseArea<=0) {PEs=0; flags.set(CrvRecoPulseFlagEnums::noCalibConstPulseArea);} if(calibPulseHeight<=0) {PEsPulseHeight=0; flags.set(CrvRecoPulseFlagEnums::noCalibConstPulseHeight);} crvRecoPulseCollection->emplace_back(PEs, PEsPulseHeight, pulseTime, pulseHeight, pulseBeta, pulseFitChi2, LEtime, flags, - PEsNoFit, pulseTimeNoFit, pulseStart, pulseEnd, waveformIndices, barIndex, SiPM, ROC, FEB, FEBchannel, pedestal, pedestalFromDB); } diff --git a/CRVReco/src/MakeCrvRecoPulses.cc b/CRVReco/src/MakeCrvRecoPulses.cc index d33386dade..948840143e 100644 --- a/CRVReco/src/MakeCrvRecoPulses.cc +++ b/CRVReco/src/MakeCrvRecoPulses.cc @@ -20,7 +20,7 @@ namespace mu2eCrv MakeCrvRecoPulses::MakeCrvRecoPulses(float minADCdifference, float defaultBeta, float minBeta, float maxBeta, float maxTimeDifference, float minPulseHeightRatio, float maxPulseHeightRatio, - float LEtimeFactor, float pulseThreshold, float pulseAreaThreshold, float doublePulseSeparation) : + float LEtimeFactor, int samplesBefore, int samplesAfter) : _f1("peakfitter",Gumbel,0,0,3), _minADCdifference(minADCdifference), _defaultBeta(defaultBeta), _minBeta(minBeta), _maxBeta(maxBeta), @@ -28,78 +28,71 @@ MakeCrvRecoPulses::MakeCrvRecoPulses(float minADCdifference, float defaultBeta, _minPulseHeightRatio(minPulseHeightRatio), _maxPulseHeightRatio(maxPulseHeightRatio), _LEtimeFactor(LEtimeFactor), - _pulseThreshold(pulseThreshold), - _pulseAreaThreshold(pulseAreaThreshold), - _doublePulseSeparation(doublePulseSeparation) + _samplesBefore(samplesBefore), _samplesAfter(samplesAfter) { - if(_pulseAreaThreshold>_minADCdifference) - throw cet::exception("CRVRECO_BAD_CONFIG") - << "MakeCrvRecoPulses pulseAreaThreshold " << _pulseAreaThreshold - << " larger than minADCdifference " << _minADCdifference; } -void MakeCrvRecoPulses::FillGraphAndFindPeaks(const std::vector &waveform, uint16_t startTDC, - float digitizationPeriod, float pedestal, - TGraph &g, std::vector > &peaks) +bool MakeCrvRecoPulses::FindNextPeak(const TGraph &g, int start, int &peakStart, int &peakEnd, int &fitStart, int &fitEnd) { - size_t nBins = waveform.size(); - size_t peakStartBin=0; - size_t peakEndBin=0; - for(size_t bin=0; binwaveform[bin]) //falling edge + if(g.GetPointY(bin-1)>g.GetPointY(bin) && foundRisingEdge) //falling edge { - if(peakStartBin>0) //found a peak + if(g.GetPointY(peakEnd)>_minADCdifference) { - if(waveform[peakEndBin]-pedestal>_minADCdifference) peaks.emplace_back(peakStartBin,peakEndBin); - peakStartBin=0; //so that the loop has to wait for the next rising edge + foundPeak=true; + break; //found the peak. stop searching. } + foundRisingEdge=false; //so that the loop has to wait for the next rising edge } } -} -void MakeCrvRecoPulses::RangeFinder(const std::vector &waveform, const size_t peakStart, const size_t peakEnd, size_t &start, size_t &end) -{ -#ifndef CRVStandalone - if(peakStart<1) throw cet::exception("RECO")<<"MakeCrvRecoPulse::RangeFinder: peakStart<1"<=waveform.size()) throw cet::exception("RECO")<<"MakeCrvRecoPulse::RangeFinder: peakEnd+1>=waveform.size()"<=waveform.size()) throw std::logic_error("MakeCrvRecoPulse::RangeFinder: peakEnd+1>=waveform.size()"); -#endif + if(!foundPeak) return false; - //select a range of up to 4 points before and after the peak - //-find up to 5 points before and after the peak for which the waveform is stricly decreasing + //select a range of up to 3 points before and 2 after the peak (to avoid hidden reflection pulses) + //-find up to 4/3 points before and after the peak for which the waveform is stricly decreasing //-remove 1 point on each side. this removes potentially "bad points" belonging to a second pulse (i.e. in double pulses) - end=peakEnd+1; - start=peakStart-1; - for(size_t i=peakStart-1; i+5>=peakStart; --i) + + fitStart=peakStart-1; + fitEnd=peakEnd+1; + for(int i=peakStart-1; i>=peakStart-_samplesBefore; --i) { - if(waveform[i]<=waveform[i+1]) start=i; + if(g.GetPointY(i)<=g.GetPointY(i+1)) fitStart=i; else break; if(i==0) break; } - for(size_t i=peakEnd+1; i=waveform[i]) end=i; + if(g.GetPointY(i-1)>=g.GetPointY(i)) fitEnd=i; else break; } - if(peakStart-start>1) start++; - if(end-peakEnd>1) end--; + if(peakStart-fitStart>1) fitStart++; + if(fitEnd-peakEnd>1) fitEnd--; + + return true; +} + +void MakeCrvRecoPulses::SubtractPulse(TGraph &g, uint16_t startTDC, float digitizationPeriod) +{ + for(int bin=0; bin(std::round(_f1.Eval(t))); + g.SetPointY(bin,g.GetPointY(bin)-diff); + } } bool MakeCrvRecoPulses::FailedFit(TFitResultPtr fr) @@ -119,111 +112,6 @@ bool MakeCrvRecoPulses::FailedFit(TFitResultPtr fr) return false; } -void MakeCrvRecoPulses::NoFitOption(const std::vector &waveform, const std::vector > &peaks, - uint16_t startTDC, float digitizationPeriod, float pedestal, float calibrationFactor) -{ - //find troughs between peaks, that may be used to separate double pusles - std::vector troughs; - for(size_t i=1; i_pulseAreaThreshold && !aboveAreaThreshold) //waveform rises above area threshold - { - aboveAreaThreshold=true; - pulseStart=i; - } - if(ADC<=_pulseAreaThreshold && aboveAreaThreshold) //waveform falls below area threshold - { - aboveAreaThreshold=false; - pulseFound=true; - pulseEnd=i-1; - } - if(aboveAreaThreshold) sum+=ADC; - if(i+1==waveform.size() && aboveAreaThreshold) //end of waveform, but still above area threshold - { - aboveAreaThreshold=false; - pulseFound=true; - pulseEnd=i; - } - if(find(troughs.begin(),troughs.end(),i)!=troughs.end() && aboveAreaThreshold && !doublePulseNextPeak) //found the lowest point between the peaks of a double pulse - { - aboveAreaThreshold=false; - pulseFound=true; - pulseEnd=i; - doublePulseThisPeak=true; - } - if(pulseFound) //a full waveform section above area threshold has been found - { - std::vector peaksInCurrentPulse; - for(auto ipeak=peaks.begin(); ipeak!=peaks.end(); ++ipeak) - { - if(ipeak->first>=pulseStart && ipeak->second<=pulseEnd) //found a peak within this pulse - { - float peakADC=waveform[ipeak->first]-pedestal; - peaksInCurrentPulse.push_back(peakADC); - _pulseTimesNoFit.push_back((startTDC+0.5*(ipeak->first+ipeak->second))*digitizationPeriod); - _PEsNoFit.push_back(sum*digitizationPeriod/calibrationFactor); //every peak of this pulse gets the same PEs - _separatedDoublePulses.push_back(doublePulseThisPeak || doublePulseNextPeak); - } - } - - pulseFound=false; - sum=0; - doublePulseNextPeak=false; - if(doublePulseThisPeak) - { - doublePulseThisPeak=false; - doublePulseNextPeak=true; -#ifndef CRVStandalone - if(i<1) throw cet::exception("RECO")<<"MakeCrvRecoPulse::NoFitOption: peakStart<1"<rangeThreshold) {pulseRangeStart=j; break;} - } - for(size_t j=pulseEnd; j>=pulseStart; --j) - { - if(waveform[j]-pedestal>rangeThreshold) {pulseRangeEnd=j; break;} - if(j==0) break; - } - for(size_t j=0; j &waveform, uint16_t startTDC, float digitizationPeriod, float pedestal, float calibrationFactor, float calibrationFactorPulseHeight) @@ -237,39 +125,36 @@ void MakeCrvRecoPulses::SetWaveform(const std::vector &waveform, _LEtimes.clear(); _zeroNdf.clear(); _failedFits.clear(); - _duplicateNoFitPulses.clear(); - _separatedDoublePulses.clear(); - _PEsNoFit.clear(); - _pulseTimesNoFit.clear(); - _pulseStart.clear(); - _pulseEnd.clear(); - //fill graph and find peaks - std::vector > peaks; - size_t nBins = waveform.size(); + //fill the TGraph + size_t nBins=waveform.size(); TGraph g(nBins); - FillGraphAndFindPeaks(waveform, startTDC, digitizationPeriod, pedestal, g, peaks); + for(size_t bin=0; bin &waveform, if(failedFit) { - PEs = (waveform[peakStartBin]-pedestal)*TMath::E() * _defaultBeta / calibrationFactor; + PEs = g.GetPointY(peakStart) * TMath::E() * _defaultBeta / calibrationFactor; pulseTime = peakTime; - pulseHeight = waveform[peakStartBin]-pedestal; + pulseHeight = g.GetPointY(peakStart); pulseBeta = _defaultBeta; pulseFitChi2 = -1; } @@ -307,10 +192,16 @@ void MakeCrvRecoPulses::SetWaveform(const std::vector &waveform, _PEsPulseHeight.push_back(PEsPulseHeight); _LEtimes.push_back(LEtime); _zeroNdf.push_back(zeroNdf); - _failedFits.push_back(failedFit); - } + if(_failedFits.size()>0) + { + if(_failedFits.back()) _failedFits.push_back(true); + else _failedFits.push_back(failedFit); + } + else _failedFits.push_back(failedFit); - NoFitOption(waveform, peaks, startTDC, digitizationPeriod, pedestal, calibrationFactor); + SubtractPulse(g, startTDC, digitizationPeriod); + start=fitEnd; + } } diff --git a/EventDisplay/src/dict_classes/ComponentInfo.h b/EventDisplay/src/dict_classes/ComponentInfo.h index e6c1d47991..d678aa08b9 100644 --- a/EventDisplay/src/dict_classes/ComponentInfo.h +++ b/EventDisplay/src/dict_classes/ComponentInfo.h @@ -174,20 +174,30 @@ namespace mu2e_eventdisplay { //1st function is the pedestal that gets added to each reco pulse fitted function TF1 *fpedestal = dynamic_cast(functionList->At(0)); + TString functionStringSum; + functionStringSum.Append(fpedestal->GetExpFormula()); for(int iFunction=1; iFunctionGetSize(); ++iFunction) { TF1 *f = dynamic_cast(functionList->At(iFunction)); TString functionString; functionString.Append(fpedestal->GetExpFormula()); - if(iFunction>0) functionString.Append("+"); + functionString.Append("+"); functionString.Append(f->GetExpFormula()); - TF1 *functionSum = new TF1("recoFunctionSum",functionString.Data()); - functionSum->DrawF1(m->GetXaxis()->GetXmin(),m->GetXaxis()->GetXmax(),"csame"); - functionSum->SetLineWidth(2); - functionSum->SetLineColor(2); - if(f->GetLineStyle()==2) functionSum->SetLineStyle(2); + TF1 *fWithPedestal = new TF1("recoFunctionWithPedestal",functionString.Data()); + fWithPedestal->DrawF1(m->GetXaxis()->GetXmin(),m->GetXaxis()->GetXmax(),"csame"); + fWithPedestal->SetLineWidth(1); + fWithPedestal->SetLineColor(2); + if(f->GetLineStyle()==2) fWithPedestal->SetLineStyle(2); + + functionStringSum.Append("+"); + functionStringSum.Append(f->GetExpFormula()); } + + TF1 *fSum = new TF1("recoFunctionSum",functionStringSum.Data()); + fSum->DrawF1(m->GetXaxis()->GetXmin(),m->GetXaxis()->GetXmax(),"csame"); + fSum->SetLineWidth(2); + fSum->SetLineColor(2); } const std::string multigraphName = m->GetName(); diff --git a/RecoDataProducts/inc/CrvRecoPulse.hh b/RecoDataProducts/inc/CrvRecoPulse.hh index c302d668ce..7954a4c0dc 100644 --- a/RecoDataProducts/inc/CrvRecoPulse.hh +++ b/RecoDataProducts/inc/CrvRecoPulse.hh @@ -21,7 +21,6 @@ namespace mu2e CrvRecoPulse(float PEs, float PEsPulseHeight, double pulseTime, float pulseHeight, float pulseBeta, float pulseFitChi2, double LEtime, const CrvRecoPulseFlags &flags, - float PEsNoFit, double pulseTimeNoFit, double pulseStart, double pulseEnd, const std::vector &waveformIndices, mu2e::CRSScintillatorBarIndex scintillatorBarIndex, uint8_t SiPMNumber, uint8_t ROC, uint8_t FEB, uint8_t FEBchannel, float pedestal, bool pedestalFromDB) : @@ -33,10 +32,6 @@ namespace mu2e _pulseFitChi2(pulseFitChi2), _LEtime(LEtime), _flags(flags), - _PEsNoFit(PEsNoFit), - _pulseTimeNoFit(pulseTimeNoFit), - _pulseStart(pulseStart), - _pulseEnd(pulseEnd), _waveformIndices(waveformIndices), _scintillatorBarIndex(scintillatorBarIndex), _SiPMNumber(SiPMNumber), @@ -56,11 +51,6 @@ namespace mu2e double GetLEtime() const {return _LEtime;} const CrvRecoPulseFlags &GetRecoPulseFlags() const {return _flags;} - float GetPEsNoFit() const {return _PEsNoFit;} - double GetPulseTimeNoFit() const {return _pulseTimeNoFit;} - double GetPulseStart() const {return _pulseStart;} - double GetPulseEnd() const {return _pulseEnd;} - const std::vector &GetWaveformIndices() const {return _waveformIndices;} std::vector &GetWaveformIndices() {return _waveformIndices;} // used in reco compression mu2e::CRSScintillatorBarIndex GetScintillatorBarIndex() const {return _scintillatorBarIndex;} @@ -82,11 +72,6 @@ namespace mu2e double _LEtime{0}; CrvRecoPulseFlags _flags; - float _PEsNoFit{0}; //based on the sum of the pedestal-subtracted ADC values of the pulse. - double _pulseTimeNoFit{0}; //time of largest ADC value. - double _pulseStart{0}; //based on the time when the pulse starts to be above a threshold (FWHM). - double _pulseEnd{0}; - std::vector _waveformIndices; //indices in the vector of the CrvDigiCollection (which is the same as the index in the CrvDigiMCCollection) mu2e::CRSScintillatorBarIndex _scintillatorBarIndex; uint8_t _SiPMNumber{0};