TemplateConvolver Class Reference

#include <TemplateConvolver.h>

List of all members.

Classes

struct  FoundPeaks

Public Types

typedef std::set< FoundPeaksPeaksVector
typedef std::vector< double > SamplesVector

Public Member Functions

 TemplateConvolver (const IDs::channel ch, TTemplate *tpl, int peak_fit_samples, int left, int right)
 ~TemplateConvolver ()
bool IsValid () const
int Convolve (const Algorithm::TpiMinusPedestal_iterator &begin, const Algorithm::TpiMinusPedestal_iterator &end)
void CharacteriseTemplate ()
const SamplesVectorGetEnergyConvolution () const
const SamplesVectorGetTimeConvolution () const
const PeaksVectorGetPeaks () const
double GetTimeShift () const
double GetLeftSafety () const
double GetAmplitudeScale () const
TH1 * GetTemplateACF () const
int FindPeaks (bool expect_pile_up, const Algorithm::TpiMinusPedestal_iterator &waveform)

Private Member Functions

int FindAllPeaks (const SamplesVector &, const SamplesVector &, const Algorithm::TpiMinusPedestal_iterator *pedestal)
int FindBestPeak (const SamplesVector &, const SamplesVector &, const Algorithm::TpiMinusPedestal_iterator *pedestal)
void FitPeak (FoundPeaks &output, int index, const SamplesVector &energy, const SamplesVector &time, double pedestal)
bool ResetVectors (int size)

Private Attributes

IDs::channel fChannel
TTemplatefTemplate
Algorithm::Convolver
< Algorithm::TH1_c_iterator > * 
fEnergyConvolve
Algorithm::Convolver
< std::vector< int >::iterator > * 
fTimeConvolve
functions::QuadraticFit fQuadFit
const int fPolarity
const int fLeftSafety
const int fRightSafety
const int fTemplateLength
const double fTemplateTime
double fTemplateQuad
double fTemplateLin
double fTemplateConst
double fTemplateScale
PeaksVector fPeaks
SamplesVector fEnergySamples
SamplesVector fTimeSamples
std::vector< int > fTimeWeights
SamplesVector fTemplateACF
SamplesVector fTemplateACFDerivative
TH1 * fTemplateACFHist
TH1 * fTemplateACFDerivativeHist

Detailed Description

Definition at line 15 of file TemplateConvolver.h.


Member Typedef Documentation

Definition at line 38 of file TemplateConvolver.h.

typedef std::vector<double> TemplateConvolver::SamplesVector

Definition at line 39 of file TemplateConvolver.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


Member Data Documentation

Definition at line 67 of file TemplateConvolver.h.

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().

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().

Definition at line 68 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate(), and TemplateConvolver().

Definition at line 81 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate().

Definition at line 81 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate().

Definition at line 82 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate().

Definition at line 82 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate(), and GetTemplateACF().

Definition at line 76 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate().

Definition at line 74 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate(), IsValid(), ResetVectors(), and TemplateConvolver().

Definition at line 76 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate().

Definition at line 76 of file TemplateConvolver.h.

Referenced by CharacteriseTemplate().

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 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().


The documentation for this class was generated from the following files:

Generated on 15 Jun 2016 for AlcapDAQ by  doxygen 1.6.1