11 #ifndef ROOT_TF1Convolution__
12 #define ROOT_TF1Convolution__
20 class TF1Convolution :
public TF1AbsComposition {
21 std::unique_ptr<TF1> fFunction1;
22 std::unique_ptr<TF1> fFunction2;
23 std::unique_ptr<TGraph> fGraphConv;
25 std::vector < Double_t > fParams1;
26 std::vector < Double_t > fParams2;
28 std::vector< TString > fParNames;
37 Bool_t fFlagGraph =
false;
39 Double_t EvalNumConv(Double_t t);
40 Double_t EvalFFTConv(Double_t t);
41 void InitializeDataMembers(TF1* function1, TF1* function2, Bool_t useFFT);
46 TF1Convolution(TF1 *function1, TF1 *function2, Bool_t useFFT =
true);
47 TF1Convolution(TF1 *function1, TF1 *function2, Double_t xmin, Double_t xmax, Bool_t useFFT =
true);
48 TF1Convolution(TString formula, Double_t xmin = 1., Double_t xmax = 0., Bool_t useFFT =
true);
49 TF1Convolution(TString formula1, TString formula2, Double_t xmin = 1., Double_t xmax = 0., Bool_t useFFT =
true);
52 TF1Convolution(
const TF1Convolution &conv);
54 TF1Convolution &operator=(
const TF1Convolution &rhs);
55 virtual ~TF1Convolution() {}
57 void SetParameters(
const Double_t *params);
58 void SetParameters(Double_t p0, Double_t p1, Double_t p2 = 0., Double_t p3 = 0., Double_t p4 = 0., Double_t p5 = 0.,
59 Double_t p6 = 0., Double_t p7 = 0.);
60 void SetRange(Double_t a, Double_t b);
61 void SetExtraRange(Double_t percentage);
62 void SetNofPointsFFT(Int_t n);
63 void SetNumConv(Bool_t flag =
true) { fFlagFFT = !flag; }
65 Int_t GetNpar()
const {
return (fNofParams1 + fNofParams2); }
66 Double_t GetXmin()
const {
return fXmin; }
67 Double_t GetXmax()
const {
return fXmax; }
68 const char *GetParName(Int_t ipar)
const {
return fParNames.at(ipar).Data(); }
69 void GetRange(Double_t &a, Double_t &b)
const;
73 Double_t operator()(
const Double_t *x,
const Double_t *p);
75 void Copy(TObject &obj)
const;
77 ClassDef(TF1Convolution, 1);