#include <TemplateConvolver.h>
Definition at line 15 of file TemplateConvolver.h.
typedef std::set<FoundPeaks> TemplateConvolver::PeaksVector |
Definition at line 38 of file TemplateConvolver.h.
typedef std::vector<double> TemplateConvolver::SamplesVector |
Definition at line 39 of file TemplateConvolver.h.
TemplateConvolver::TemplateConvolver | ( | const IDs::channel | ch, | |
TTemplate * | tpl, | |||
int | peak_fit_samples, | |||
int | left, | |||
int | right | |||
) |
Definition at line 13 of file TemplateConvolver.cpp.
References fEnergyConvolve, fLeftSafety, fRightSafety, fTemplate, fTemplateLength, fTimeConvolve, fTimeWeights, and TTemplate::GetHisto().
00013 : 00014 fChannel(ch), fTemplate(tpl),fQuadFit(peak_fit_samples), fPolarity(EventNavigator::GetSetupRecord().GetPolarity(ch)), 00015 fLeftSafety(left),fRightSafety(right), 00016 fTemplateLength(fTemplate->GetHisto()->GetNbinsX() - fLeftSafety - fRightSafety), 00017 fTemplateTime(fTemplate->GetTime()-fLeftSafety){ 00018 if(fTemplateLength <0) return; 00019 00020 TH1_wrapper hist(fTemplate->GetHisto()); 00021 fEnergyConvolve=new Convolver<TH1_c_iterator>(hist.begin(fLeftSafety), hist.end(fRightSafety)); 00022 00023 const int num_weights=2; 00024 const int weights[num_weights]={-1,1}; 00025 fTimeWeights.assign(weights, weights+num_weights); 00026 fTimeConvolve=new Convolver<std::vector<int>::iterator>(fTimeWeights.begin(),fTimeWeights.end()); 00027 }
TemplateConvolver::~TemplateConvolver | ( | ) |
Definition at line 29 of file TemplateConvolver.cpp.
References fEnergyConvolve, and fTimeConvolve.
00029 { 00030 delete fTimeConvolve; 00031 delete fEnergyConvolve; 00032 }
void TemplateConvolver::CharacteriseTemplate | ( | ) |
Definition at line 121 of file TemplateConvolver.cpp.
References fEnergyConvolve, FindBestPeak(), fPeaks, fTemplate, fTemplateACF, fTemplateACFDerivative, fTemplateACFDerivativeHist, fTemplateACFHist, fTemplateConst, fTemplateLength, fTemplateLin, fTemplateQuad, fTemplateScale, fTemplateTime, fTimeConvolve, fTimeWeights, TTemplate::GetAmplitude(), TTemplate::GetHisto(), Algorithm::Convolver< WeightIterator >::Process(), and functions::VectorToHist().
Referenced by TemplateConvolveAPGenerator::TemplateConvolveAPGenerator().
00121 { 00122 fPeaks.clear(); 00123 00124 // prepare vectors / iterators 00125 TH1_wrapper hist(fTemplate->GetHisto()); 00126 fTemplateACF.assign(fTemplate->GetHisto()->GetNbinsX()- fTemplateLength,0); 00127 fTemplateACFDerivative.assign(fTemplateACF.size()- fTimeWeights.size(),0); 00128 00129 // Run convolution 00130 fEnergyConvolve->Process(hist.begin(), hist.end(), fTemplateACF.begin()); 00131 fTimeConvolve->Process(fTemplateACF.begin(), fTemplateACF.end(), fTemplateACFDerivative.begin()); 00132 FindBestPeak(fTemplateACF, fTemplateACFDerivative, NULL); 00133 00134 // Prepare the quadratic coefficients of the template itself 00135 fTemplateQuad=fPeaks.begin()->quad; 00136 fTemplateLin=fPeaks.begin()->linear; 00137 fTemplateConst=fPeaks.begin()->constant; 00138 fTemplateScale=fTemplate->GetAmplitude(); 00139 fTemplateScale/=fPeaks.begin()->constant - fPeaks.begin()->linear*fPeaks.begin()->linear/4/fPeaks.begin()->quad; 00140 00141 // Convert to histograms 00142 fTemplateACFHist=functions::VectorToHist(fTemplateACF,"Template_ACF","Auto-correlation of template"); 00143 TF1* fit=new TF1("Fit","[0]*(x-[3])**2+[1]*(x-[3])+[2]", 0 , fTemplateACFHist->GetNbinsX()); 00144 fit->SetParameter(0,fTemplateQuad); 00145 fit->SetParameter(1,fTemplateLin); 00146 fit->SetParameter(2,fTemplateConst); 00147 fit->SetParameter(3,fPeaks.begin()->time + fTemplateTime); 00148 fTemplateACFHist->GetListOfFunctions()->Add(fit); 00149 fTemplateACFHist->Clone()->Write(); 00150 fTemplateACFDerivativeHist=functions::VectorToHist(fTemplateACFDerivative,"Template_ACF_derivative","Derivative of auto-correlation of template"); 00151 fTemplateACFDerivativeHist->Clone()->Write(); 00152 00153 fPeaks.clear(); 00154 00155 }
int TemplateConvolver::Convolve | ( | const Algorithm::TpiMinusPedestal_iterator & | begin, | |
const Algorithm::TpiMinusPedestal_iterator & | end | |||
) |
Definition at line 34 of file TemplateConvolver.cpp.
References fEnergyConvolve, fEnergySamples, fTimeConvolve, fTimeSamples, Algorithm::Convolver< WeightIterator >::Process(), and ResetVectors().
Referenced by TemplateConvolveAPGenerator::ProcessPulses().
00034 { 00035 // initialize for convolution 00036 if(!ResetVectors(end - begin)){ 00037 return -1; 00038 } 00039 00040 // convole the waveform with the template 00041 fEnergyConvolve->Process(begin,end, fEnergySamples.begin()); 00042 00043 // now run the timing filter (in the future this and the last step could be merged) 00044 fTimeConvolve->Process(fEnergySamples.begin(),fEnergySamples.end(),fTimeSamples.begin()); 00045 00046 return 0; 00047 }
int TemplateConvolver::FindAllPeaks | ( | const SamplesVector & | energy, | |
const SamplesVector & | time, | |||
const Algorithm::TpiMinusPedestal_iterator * | pedestal | |||
) | [private] |
Definition at line 64 of file TemplateConvolver.cpp.
References FitPeak(), fPeaks, and Algorithm::Pedestal_iterator< InputIterator >::GetPedestal().
Referenced by FindPeaks().
00065 { 00066 double last_sample=time.front(); 00067 FoundPeaks tmp=FoundPeaks(); 00068 for(SamplesVector::const_iterator i_sample=time.begin()+1; i_sample!=time.end(); ++i_sample){ 00069 // check if we've crossed zero gradient ( signs will be different => product is less than zero) 00070 // and check we crossed in the right direction 00071 if( (last_sample * *i_sample)<0 && (*i_sample - last_sample ) <0 ){ 00072 int peak=i_sample - time.begin(); 00073 if(pedestal) FitPeak(tmp, peak, energy, time,pedestal->GetPedestal()); 00074 else FitPeak(tmp, peak, energy, time, 0); 00075 fPeaks.insert(tmp); 00076 } 00077 last_sample = *i_sample; 00078 } 00079 00080 return fPeaks.size(); 00081 }
int TemplateConvolver::FindBestPeak | ( | const SamplesVector & | energy, | |
const SamplesVector & | time, | |||
const Algorithm::TpiMinusPedestal_iterator * | pedestal | |||
) | [private] |
Definition at line 83 of file TemplateConvolver.cpp.
References TemplateConvolver::FoundPeaks::amplitude, FitPeak(), fPeaks, and Algorithm::Pedestal_iterator< InputIterator >::GetPedestal().
Referenced by CharacteriseTemplate(), and FindPeaks().
00084 { 00085 double last_sample=time.front(); 00086 double best_amp=-1e9; 00087 FoundPeaks tmp=FoundPeaks(); 00088 FoundPeaks best=FoundPeaks(); 00089 int peak_count=0; 00090 for(SamplesVector::const_iterator i_sample=time.begin()+1; i_sample!=time.end(); ++i_sample){ 00091 if( last_sample>0 && *i_sample<0){ 00092 int peak=i_sample - time.begin(); 00093 if(pedestal) FitPeak(tmp, peak, energy, time,pedestal->GetPedestal()); 00094 else FitPeak(tmp, peak, energy, time, 0); 00095 if( (tmp.amplitude > best_amp) ){ 00096 best=tmp; 00097 best_amp=tmp.amplitude; 00098 } 00099 ++peak_count; 00100 } 00101 last_sample = *i_sample; 00102 } 00103 fPeaks.insert(best); 00104 return peak_count; 00105 }
int TemplateConvolver::FindPeaks | ( | bool | expect_pile_up, | |
const Algorithm::TpiMinusPedestal_iterator & | waveform | |||
) |
Definition at line 59 of file TemplateConvolver.cpp.
References fEnergySamples, FindAllPeaks(), FindBestPeak(), and fTimeSamples.
Referenced by TemplateConvolveAPGenerator::ProcessPulses().
00059 { 00060 if(expect_pile_up) return FindAllPeaks(fEnergySamples, fTimeSamples,&waveform); 00061 return FindBestPeak(fEnergySamples, fTimeSamples,&waveform); 00062 }
void TemplateConvolver::FitPeak | ( | FoundPeaks & | output, | |
int | index, | |||
const SamplesVector & | energy, | |||
const SamplesVector & | time, | |||
double | pedestal | |||
) | [private] |
Definition at line 108 of file TemplateConvolver.cpp.
References TemplateConvolver::FoundPeaks::amplitude, TemplateConvolver::FoundPeaks::constant, functions::QuadraticFit::Fit(), fQuadFit, functions::QuadraticFit::GetSize(), TemplateConvolver::FoundPeaks::linear, TemplateConvolver::FoundPeaks::pedestal, TemplateConvolver::FoundPeaks::quad, and TemplateConvolver::FoundPeaks::time.
Referenced by FindAllPeaks(), and FindBestPeak().
00108 { 00109 // about where do need to fit? 00110 int peak=(fQuadFit.GetSize()-1)/2; 00111 // if the index we've been asked to fit to is greater than the minimum needed samples then use that 00112 if( index > peak) peak=index-peak; 00113 // run the fit calculation 00114 fQuadFit.Fit(energy.begin() + peak, output.quad, output.linear, output.constant); 00115 00116 output.time= index + output.linear/2/output.quad; 00117 output.pedestal=pedestal; 00118 output.amplitude=output.constant - output.linear*output.linear/4/output.quad; 00119 }
double TemplateConvolver::GetAmplitudeScale | ( | ) | const [inline] |
Definition at line 55 of file TemplateConvolver.h.
References fTemplateScale.
Referenced by TemplateConvolveAPGenerator::ProcessPulses().
00055 {return fTemplateScale;}
const SamplesVector& TemplateConvolver::GetEnergyConvolution | ( | ) | const [inline] |
Definition at line 50 of file TemplateConvolver.h.
References fEnergySamples.
Referenced by TemplateConvolveAPGenerator::ProcessPulses().
00050 {return fEnergySamples;};
double TemplateConvolver::GetLeftSafety | ( | ) | const [inline] |
Definition at line 54 of file TemplateConvolver.h.
References fLeftSafety.
00054 {return fLeftSafety;}
const PeaksVector& TemplateConvolver::GetPeaks | ( | ) | const [inline] |
Definition at line 52 of file TemplateConvolver.h.
References fPeaks.
Referenced by TemplateConvolveAPGenerator::ProcessPulses().
00052 {return fPeaks;};
TH1* TemplateConvolver::GetTemplateACF | ( | ) | const [inline] |
Definition at line 56 of file TemplateConvolver.h.
References fTemplateACFHist.
00056 {return fTemplateACFHist;}
const SamplesVector& TemplateConvolver::GetTimeConvolution | ( | ) | const [inline] |
Definition at line 51 of file TemplateConvolver.h.
References fTimeSamples.
Referenced by TemplateConvolveAPGenerator::ProcessPulses().
00051 {return fTimeSamples;};
double TemplateConvolver::GetTimeShift | ( | ) | const [inline] |
Definition at line 53 of file TemplateConvolver.h.
References fTemplateTime.
Referenced by TemplateConvolveAPGenerator::ProcessPulses().
00053 {return fTemplateTime;}
bool TemplateConvolver::IsValid | ( | ) | const [inline] |
Definition at line 44 of file TemplateConvolver.h.
References fTemplateLength.
00044 {return fTemplateLength>0;}
bool TemplateConvolver::ResetVectors | ( | int | size | ) | [private] |
Definition at line 49 of file TemplateConvolver.cpp.
References fEnergySamples, fPeaks, fTemplateLength, fTimeSamples, and fTimeWeights.
Referenced by Convolve().
00049 { 00050 // make sure we're big enough for the number of samples we'll get 00051 size-=fTemplateLength; 00052 if( size < 1 ) return false; 00053 fEnergySamples.resize(size); 00054 fTimeSamples.resize(size - fTimeWeights.size() ); 00055 fPeaks.clear(); 00056 return true; 00057 }
IDs::channel TemplateConvolver::fChannel [private] |
Definition at line 67 of file TemplateConvolver.h.
Definition at line 69 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), Convolve(), TemplateConvolver(), and ~TemplateConvolver().
Definition at line 78 of file TemplateConvolver.h.
Referenced by Convolve(), FindPeaks(), GetEnergyConvolution(), and ResetVectors().
const int TemplateConvolver::fLeftSafety [private] |
Definition at line 73 of file TemplateConvolver.h.
Referenced by GetLeftSafety(), and TemplateConvolver().
PeaksVector TemplateConvolver::fPeaks [private] |
Definition at line 77 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), FindAllPeaks(), FindBestPeak(), GetPeaks(), and ResetVectors().
const int TemplateConvolver::fPolarity [private] |
Definition at line 72 of file TemplateConvolver.h.
Definition at line 71 of file TemplateConvolver.h.
Referenced by FitPeak().
const int TemplateConvolver::fRightSafety [private] |
Definition at line 73 of file TemplateConvolver.h.
Referenced by TemplateConvolver().
TTemplate* TemplateConvolver::fTemplate [private] |
Definition at line 68 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), and TemplateConvolver().
SamplesVector TemplateConvolver::fTemplateACF [private] |
Definition at line 81 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate().
Definition at line 81 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate().
TH1 * TemplateConvolver::fTemplateACFDerivativeHist [private] |
Definition at line 82 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate().
TH1* TemplateConvolver::fTemplateACFHist [private] |
Definition at line 82 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), and GetTemplateACF().
double TemplateConvolver::fTemplateConst [private] |
Definition at line 76 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate().
const int TemplateConvolver::fTemplateLength [private] |
Definition at line 74 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), IsValid(), ResetVectors(), and TemplateConvolver().
double TemplateConvolver::fTemplateLin [private] |
Definition at line 76 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate().
double TemplateConvolver::fTemplateQuad [private] |
Definition at line 76 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate().
double TemplateConvolver::fTemplateScale [private] |
Definition at line 76 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), and GetAmplitudeScale().
const double TemplateConvolver::fTemplateTime [private] |
Definition at line 75 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), and GetTimeShift().
Algorithm::Convolver<std::vector<int>::iterator>* TemplateConvolver::fTimeConvolve [private] |
Definition at line 70 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), Convolve(), TemplateConvolver(), and ~TemplateConvolver().
SamplesVector TemplateConvolver::fTimeSamples [private] |
Definition at line 79 of file TemplateConvolver.h.
Referenced by Convolve(), FindPeaks(), GetTimeConvolution(), and ResetVectors().
std::vector<int> TemplateConvolver::fTimeWeights [private] |
Definition at line 80 of file TemplateConvolver.h.
Referenced by CharacteriseTemplate(), ResetVectors(), and TemplateConvolver().