//----------------------------------------------------------- // // Description: // Pulseshape analysis for ADC waveforms // Matched digital filter // Dima Melnychuk // //----------------------------------------------------------- // This Class' Header ------------------ #include "PndEmcPSAMatchedDigiFilter.h" #include "PndEmcWaveform.h" #include "PndEmcFadcFilter.h" #include "PndEmcAbsPulseshape.h" // Class Member definitions ----------- PndEmcPSAMatchedDigiFilter::PndEmcPSAMatchedDigiFilter(const std::vector params, PndEmcAbsPulseshape *pulseshape): fParams(params), fPulseshape(pulseshape) {} Int_t PndEmcPSAMatchedDigiFilter::Process(const PndEmcWaveform *waveform){ Process(waveform,lAmplitude,lTime); if(lAmplitude > 0){ return 1; }else{ return 0; } } void PndEmcPSAMatchedDigiFilter::GetHit(Int_t i, Double_t &energy, Double_t &time){ energy = lAmplitude; time = lTime; } void PndEmcPSAMatchedDigiFilter::Process(const PndEmcWaveform *waveform, Double_t &litude, Double_t &time) { const std::vector signal=waveform->GetSignal(); std::vector output; Int_t width=(Int_t) fParams[0]; // width of the filter Double_t sampleRate=(Double_t) fParams[1]; // sample rate of ADC PndEmcFadcFilter *flt = new PndEmcFadcFilter(); flt->SetupMatchedFilter(width,fPulseshape,sampleRate); flt->Filter(signal, output); delete flt; // Extraction of energy and time information std::vector::iterator p; p=max_element(output.begin(),output.end()); Int_t pPosition = distance(output.begin(),p); amplitude = *p; time = pPosition; return; }