(f*g)(t) = int(f(x)g(x-t)dx) * class wrapping convolution of two function : evaluation of TF1(t) * TF1(x-t) The convolution is performed by default using FFTW if it is available . One can pass optionally the range of the convolution (by default the first function range is used). Note that when using Discrete Fouriere Transform (as FFTW), it is a circular transform, so the functions should be approximatly zero at the end of the range. If they are significantly different than zero on one side (e.g. the left side) a spill over will occur on the other side (e.g right side). If no function range is given by default the function1 range + 10% is used One shoud use also a not too small number of points for the DFT (a minimum of 1000). By default 10000 points are used .
Double_t | EvalFFTConv(Double_t t) |
Double_t | EvalNumConv(Double_t t) |
void | InitializeDataMembers(TF1* function1, TF1* function2, Bool_t useFFT) |
void | MakeFFTConv() |
Int_t | fCstIndex | index of the constant parameter f the first function |
Bool_t | fFlagFFT | choose fft or numerical convolution |
Bool_t | fFlagGraph | tells if the graph is already done or not |
shared_ptr<TF1> | fFunction1 | |
shared_ptr<TF1> | fFunction2 | |
shared_ptr<TGraph> | fGraphConv | |
Int_t | fNofParams1 | |
Int_t | fNofParams2 | |
Int_t | fNofPoints | number of point for FFT array |
vector<TString> | fParNames | parameter names |
vector<Double_t> | fParams1 | |
vector<Double_t> | fParams2 | |
Double_t | fXmax | maximal bound of the range of the convolution |
Double_t | fXmin | minimal bound of the range of the convolution |
constructor from the two function pointer and a flag is using FFT
constructor from the two function pointer and the convolution range
constructor from a formula expression as f1 * f2 where f1 and f2 are two functions known to ROOT
perform numerical convolution could in principle cache the integral in a Grap[h as it is done for the FFTW