11 #ifndef ROOT_TF1NormSum__
12 #define ROOT_TF1NormSum__
19 class TF1NormSum :
public TF1AbsComposition {
22 unsigned int fNOfFunctions;
26 std::vector<std::unique_ptr<TF1>> fFunctions;
27 std::vector < Double_t > fCoeffs;
28 std::vector < Int_t > fCstIndexes;
29 std::vector< TString > fParNames;
31 void InitializeDataMembers(
const std::vector<TF1 *> &functions,
const std::vector<Double_t> &coeffs,
37 TF1NormSum(
const std::vector <TF1*>&functions,
const std::vector <Double_t> &coeffs, Double_t scale = 1.);
38 TF1NormSum(TF1* function1, TF1* function2, Double_t coeff1 = 1., Double_t coeff2 = 1., Double_t scale = 1.);
39 TF1NormSum(TF1* function1, TF1* function2, TF1*function3, Double_t coeff1 = 1., Double_t coeff2 = 1., Double_t coeff3 = 1., Double_t scale = 1.);
40 TF1NormSum(
const TString &formula, Double_t xmin, Double_t xmax);
43 TF1NormSum(
const TF1NormSum &nsum);
45 TF1NormSum &operator=(
const TF1NormSum &rhs);
47 virtual ~TF1NormSum() {}
49 double operator()(
const Double_t *x,
const Double_t *p);
51 std::vector<double> GetParameters()
const;
53 void SetScale(Double_t scale) { fScale = scale; };
55 void SetParameters(
const Double_t *params);
57 void SetParameters(Double_t p0, Double_t p1, Double_t p2=0., Double_t p3=0., Double_t p4=0.,
58 Double_t p5=0., Double_t p6=0., Double_t p7=0., Double_t p8=0., Double_t p9=0., Double_t p10=0.);
60 void SetRange(Double_t a, Double_t b);
62 Int_t GetNpar()
const;
64 Double_t GetScale()
const {
return fScale; }
66 const char* GetParName(Int_t ipar)
const {
return fParNames.at(ipar).Data(); }
68 Double_t GetXmin()
const {
return fXmin; }
70 Double_t GetXmax()
const {
return fXmax; }
72 void GetRange(Double_t &a, Double_t &b)
const;
76 void Copy(TObject &obj)
const;
78 ClassDef(TF1NormSum, 1);