//----------------------------------------------------------- // // Description: // Pulseshape analysis for ADC waveforms // (see header file for more details) // // Dima Melnychuk // //----------------------------------------------------------- // This Class' Header ------------------ #include "PndEmcPSAParabolicBaseline.h" #include "PndEmcWaveform.h" #include // Class Member definitions ----------- void PndEmcPSAParabolicBaseline::Process(const PndEmcWaveform *waveform, Double_t &litude, Double_t &time) { const std::vector signal=waveform->GetSignal(); FitPeak(signal, amplitude, time); Double_t baseline; GetBaseline(signal,baseline); // std::cout << "amplitude: " << amplitude << " baseline: " << baseline << std::endl; amplitude -= baseline; } Int_t PndEmcPSAParabolicBaseline::Process(const PndEmcWaveform *waveform){ Process(waveform,lAmplitude,lTime); if(lAmplitude > 0){ return 1; }else{ return 0; } } void PndEmcPSAParabolicBaseline::GetHit(Int_t , Double_t &energy, Double_t &time){ //i //[R.K.03/2017] unused variable(s) energy = lAmplitude; time = lTime; } void PndEmcPSAParabolicBaseline::FitPeak(const std::vector & signal, Double_t& ampl, Double_t& pos, Int_t peakBin) const { Int_t waveformLength=signal.size(); ampl=pos=-1.; if (peakBin>0 && peakBin & signal, Double_t& ampl, Double_t& pos, Int_t start, Int_t end) const { std::vector::const_iterator p; p=max_element(signal.begin()+start,signal.begin()+end); Int_t pPosition = distance(signal.begin(),p); FitPeak(signal,ampl,pos,pPosition); } void PndEmcPSAParabolicBaseline::FitPeak(const std::vector & signal, Double_t& ampl, Double_t& pos) const { std::vector::const_iterator p; p=max_element(signal.begin(),signal.end()); Int_t pPosition = distance(signal.begin(),p); FitPeak(signal,ampl,pos,pPosition); } void PndEmcPSAParabolicBaseline::GetBaseline(const std::vector & signal, Double_t &baseline) const { std::vector::const_iterator p; p = signal.begin(); baseline = 0; for(Int_t i =0; i