JG ROOT Tools libraries  version 5.0 - august 2014
RFitBase1D.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file RFitBase1D.hh
3  *
4  * Include file for class RFitBase1D
5  */
6 //======================================================================
7 
8 #ifndef R_FIT_BASE_1D_HH
9 #define R_FIT_BASE_1D_HH
10 
11 
12 #include "RFitData1D.hh"
13 #include "ROptionString.hh"
14 
15 #include "Rtypes.h"
16 #include "TAttLine.h"
17 #include "TH1.h"
18 #include "TF1.h"
19 #include "TVirtualFitter.h"
20 #include "TPad.h"
21 
22 
23 //======================================================================
24 /*! \class RFitBase1D
25  *
26  * Base class for 1D fit classes.
27  *
28  * \note
29  * Variables and functions used by fitting functions are static, which
30  * causes that some of them are defined twice, since they are already
31  * defined in the fit data class.
32  * The fit classes take care of this problem, so that static and non
33  * static variable remain consistant.
34  * These variables have to be static so that external fit functions
35  * can access them (like options, ...).
36  */
37 class RFitBase1D : virtual public RFitData1D
38 {
39  //------------------------------------------------------------
40  /*! \object_doc{RFitBase1D} */
42  //------------------------------------------------------------
43 
44  protected:
45 
46  // données statiques
47  static Double_t epsilon; ///< Check for null values
48 
49  // pointeurs statiques sur des données (non statiques) de la classe
50  // de base RFitData1D
51  static UInt_t fit_options; ///< Options pour le fit (statique pour être vue dans la fonction de fit)
52  static Int_t fit_mode; ///< Mode de fit (Chi2 ou Log-likelyhood)
53  static Int_t par_number; ///< Nombre de paramètres pour le fit
54 
55  static Double_t histo_bin_x; ///< Largeur de bin de l'histogramme (pour calcul avec la surface comme paramètre)
56 
57  // données variables d'une instance à l'autre
58  TH1 * histo_ptr; ///< Pointeur sur l'histogramme à fitter
59  TH1 * herr1_ptr; ///< Pointeur sur l'histogramme d'erreur négatif
60  TH1 * herr2_ptr; ///< Pointeur sur l'histogramme d'erreur positif
61  bool histo_err; ///< Indique si l'histo est fitté avec une erreur
62 
63 #ifndef __MAKECINT__
64  string par_name[RFIT_MAX_PAR]; ///< tableau des noms de paramètres
65 #endif
66  Int_t ix_min; ///< Borne inférieure du fit en canaux de l'histogramme
67  Int_t ix_max; ///< Borne supérieure du fit en canaux de l'histogramme
68  Int_t nx_bin; ///< Nombre de bins de la zone de fit
69 
70  // fonction fittée TF1 * fct_ptr; ///< Pointeur sur la fonction de fit // attributs de lignes static TAttLine latt_histo; ///< Attributs de lignes pour tracé de l'histogramme static TAttLine latt_error; ///< Attributs de lignes pour tracé de l'erreur static TAttFill fatt_error; ///< Attributs de remplissage pour tracé de l'erreur static TAttLine latt_fct; ///< Attributs de lignes pour tracé de la fonction globale static TAttLine latt_zero; ///< Attributs de lignes pour tracé central différences //------------------------------------------------------------ // Constructors / affectation / destructor public: RFitBase1D ( ); RFitBase1D ( TH1 *hptr, TH1 * herr = NULL ); RFitBase1D ( TH1 *hptr, const RFitData1D & fit_data ); RFitBase1D ( TH1 *hptr, TH1 * herr, const RFitData1D & fit_data ); RFitBase1D ( const RFitBase1D & original ); virtual ~RFitBase1D ( ); //------------------------------------------------------------ static bool Zero ( const Double_t val ); protected: // mise en place des histogrammes (fit et erreur) virtual bool SetHisto ( TH1 * hptr, TH1 * herr = NULL ); public: // initialisation des champs statiques (après changement des options) virtual void Reset ( ); virtual void InitMode ( ); // options (statiques pour pouvoir être vues dans la fonction de fit) virtual void SetOptions ( const UInt_t opts ); virtual void SetOption ( const UInt_t opt, const bool b = true ); static UInt_t GetStaticOptions ( ); static bool GetStaticOption ( const UInt_t opt ); static Int_t GetStaticParNumber ( ); // mode de fit virtual void SetFitMode ( const Int_t mode ); virtual void SetFitLimits ( const Double_t x1, const Double_t x2 ); // paramètres de la fonction de fit virtual void SetParValue ( const Int_t p, const Double_t val ); virtual string GetParName ( const Int_t p ) const; virtual void FixParameter ( const Int_t p, const bool b = true ); // access to fit function TF1 * GetFitFunction ( ); // inline //------------------------------------------------------------ // styles de tracé static void SetFctLineAtt ( const TAttLine att ); static void SetFctLineAtt ( const Color_t c, const Style_t s, const Width_t w ); //------------------------------------------------------------ // tracés de la fonction /*! Indicate that all components of the fit function must be included.*/ virtual void SetCalcAll ( ) = 0; /*! Indicate that none of the components of the fit function must be included.*/ virtual void SetCalcNone ( ) = 0; /*! Defines the fit function and the parameters.*/ virtual void SetFunction ( ) = 0; /*! Scale the function, and adjust parameters according to the scale. * \param s scaling factor*/ virtual void ScaleFunction ( const Double_t s ) = 0; virtual void NormaliseFunction ( const Double_t nor = 1. ); virtual void DrawHisto ( const Double_t yinf = 0., const Double_t ysup = 0.); virtual void DrawFunction ( const char *opts = "" ); virtual int CalcIntegral ( double & val, double & err, const double x1, const double x2, const int npts = 1000, const double frac = 0.1 ); virtual void DrawFctResult ( TVirtualPad * pad, const ROptionString &opts = "" ); virtual void DrawDifResult ( TVirtualPad * pad, const ROptionString &opts = "" ); virtual void DrawFitResult ( TVirtualPad * pad, const ROptionString &opts = "" ); // création d'histogrammes à partir de la fonction virtual void FillFunctionHisto ( TH1 *hptr ); virtual TH1 * GetFunctionHisto ( const char *name ); virtual TH1 * GetDifferenceHisto ( const char *name ); virtual TH1 * GetSqrtHisto ( const char *name ); virtual TH1 * GetSqrtPosHisto ( const char *name ); virtual TH1 * GetSqrtNegHisto ( const char *name ); //------------------------------------------------------------ // évaluation de la fonction virtual Double_t Eval ( const Double_t x ); virtual Double_t GetRandom ( ); virtual TH1 * GetRandomHisto ( const char *name, const Int_t n ); virtual void FillRandomHisto ( TH1 *hptr, const Int_t n ); //------------------------------------------------------------ // fit de la fonction virtual void Preset ( ); virtual Double_t Fit ( const char *opts = "" ); /*! Fonction qui écrit le résultat de fit dans une chaine de caractères.*/ virtual string GetFitText ( ) const = 0; virtual bool PrintFit ( const string &fname ) const; virtual bool PrintFit ( FILE *fptr = stdout ) const; virtual bool WriteParam ( const string &fname ) const; virtual bool WriteParam ( FILE *fptr = stdout ) const; virtual bool WriteOutput ( const string &fname ) const; virtual bool WriteOutput ( FILE *fptr = stdout ) const; /*! Creation d'une structure de données relatives au fit (voir classes dérivées).*/ virtual RFitData1D * CreateFitData ( ) = 0; virtual RFitData1D * GetFitData ( ); virtual void SetFitData ( const RFitData1D * fit_data ); //------------------------------------------------------------ /*! For ROOT dictionary.*/ public: ClassDef(RFitBase1D,0); }; //---------------------------------------------------------------------- // Inline functions #include "icc/RFitBase1D.icc" //====================================================================== #endif
71  TF1 * fct_ptr; ///< Pointeur sur la fonction de fit
72 
73  // attributs de lignes
74  static TAttLine latt_histo; ///< Attributs de lignes pour tracé de l'histogramme
75  static TAttLine latt_error; ///< Attributs de lignes pour tracé de l'erreur
76  static TAttFill fatt_error; ///< Attributs de remplissage pour tracé de l'erreur
77  static TAttLine latt_fct; ///< Attributs de lignes pour tracé de la fonction globale
78  static TAttLine latt_zero; ///< Attributs de lignes pour tracé central différences
79 
80  //------------------------------------------------------------
81  // Constructors / affectation / destructor
82  public:
83  RFitBase1D ( );
84  RFitBase1D ( TH1 *hptr, TH1 * herr = NULL );
85  RFitBase1D ( TH1 *hptr, const RFitData1D & fit_data );
86  RFitBase1D ( TH1 *hptr, TH1 * herr, const RFitData1D & fit_data );
87 
88  RFitBase1D ( const RFitBase1D & original );
89 
90  virtual ~RFitBase1D ( );
91 
92  //------------------------------------------------------------
93  static bool Zero ( const Double_t val );
94 
95  protected:
96  // mise en place des histogrammes (fit et erreur)
97  virtual bool SetHisto ( TH1 * hptr, TH1 * herr = NULL );
98 
99  public:
100  // initialisation des champs statiques (après changement des options)
101  virtual void Reset ( );
102  virtual void InitMode ( );
103 
104  // options (statiques pour pouvoir être vues dans la fonction de fit)
105  virtual void SetOptions ( const UInt_t opts );
106  virtual void SetOption ( const UInt_t opt, const bool b = true );
107  static UInt_t GetStaticOptions ( );
108  static bool GetStaticOption ( const UInt_t opt );
109  static Int_t GetStaticParNumber ( );
110 
111  // mode de fit
112  virtual void SetFitMode ( const Int_t mode );
113  virtual void SetFitLimits ( const Double_t x1, const Double_t x2 );
114 
115  // paramètres de la fonction de fit
116  virtual void SetParValue ( const Int_t p, const Double_t val );
117  virtual string GetParName ( const Int_t p ) const;
118 
119  virtual void FixParameter ( const Int_t p, const bool b = true );
120 
121  // access to fit function
122  TF1 * GetFitFunction ( ); // inline
123 
124  //------------------------------------------------------------
125  // styles de tracé static void SetFctLineAtt ( const TAttLine att ); static void SetFctLineAtt ( const Color_t c, const Style_t s, const Width_t w ); //------------------------------------------------------------ // tracés de la fonction /*! Indicate that all components of the fit function must be included.*/ virtual void SetCalcAll ( ) = 0; /*! Indicate that none of the components of the fit function must be included.*/ virtual void SetCalcNone ( ) = 0; /*! Defines the fit function and the parameters.*/ virtual void SetFunction ( ) = 0; /*! Scale the function, and adjust parameters according to the scale. * \param s scaling factor*/ virtual void ScaleFunction ( const Double_t s ) = 0; virtual void NormaliseFunction ( const Double_t nor = 1. ); virtual void DrawHisto ( const Double_t yinf = 0., const Double_t ysup = 0.); virtual void DrawFunction ( const char *opts = "" ); virtual int CalcIntegral ( double & val, double & err, const double x1, const double x2, const int npts = 1000, const double frac = 0.1 ); virtual void DrawFctResult ( TVirtualPad * pad, const ROptionString &opts = "" ); virtual void DrawDifResult ( TVirtualPad * pad, const ROptionString &opts = "" ); virtual void DrawFitResult ( TVirtualPad * pad, const ROptionString &opts = "" ); // création d'histogrammes à partir de la fonction virtual void FillFunctionHisto ( TH1 *hptr ); virtual TH1 * GetFunctionHisto ( const char *name ); virtual TH1 * GetDifferenceHisto ( const char *name ); virtual TH1 * GetSqrtHisto ( const char *name ); virtual TH1 * GetSqrtPosHisto ( const char *name ); virtual TH1 * GetSqrtNegHisto ( const char *name ); //------------------------------------------------------------ // évaluation de la fonction virtual Double_t Eval ( const Double_t x ); virtual Double_t GetRandom ( ); virtual TH1 * GetRandomHisto ( const char *name, const Int_t n ); virtual void FillRandomHisto ( TH1 *hptr, const Int_t n ); //------------------------------------------------------------ // fit de la fonction virtual void Preset ( ); virtual Double_t Fit ( const char *opts = "" ); /*! Fonction qui écrit le résultat de fit dans une chaine de caractères.*/ virtual string GetFitText ( ) const = 0; virtual bool PrintFit ( const string &fname ) const; virtual bool PrintFit ( FILE *fptr = stdout ) const; virtual bool WriteParam ( const string &fname ) const; virtual bool WriteParam ( FILE *fptr = stdout ) const; virtual bool WriteOutput ( const string &fname ) const; virtual bool WriteOutput ( FILE *fptr = stdout ) const; /*! Creation d'une structure de données relatives au fit (voir classes dérivées).*/ virtual RFitData1D * CreateFitData ( ) = 0; virtual RFitData1D * GetFitData ( ); virtual void SetFitData ( const RFitData1D * fit_data ); //------------------------------------------------------------ /*! For ROOT dictionary.*/ public: ClassDef(RFitBase1D,0); }; //---------------------------------------------------------------------- // Inline functions #include "icc/RFitBase1D.icc" //====================================================================== #endif
126  static void SetFctLineAtt ( const TAttLine att );
127  static void SetFctLineAtt ( const Color_t c, const Style_t s, const Width_t w );
128 
129  //------------------------------------------------------------
130  // tracés de la fonction
131 
132  /*! Indicate that all components of the fit function must be included.*/
133  virtual void SetCalcAll ( ) = 0;
134 
135  /*! Indicate that none of the components of the fit function must be included.*/
136  virtual void SetCalcNone ( ) = 0;
137 
138  /*! Defines the fit function and the parameters.*/
139  virtual void SetFunction ( ) = 0;
140 
141  /*! Scale the function, and adjust parameters according to the scale.
142  * \param s scaling factor*/
143  virtual void ScaleFunction ( const Double_t s ) = 0;
144  virtual void NormaliseFunction ( const Double_t nor = 1. );
145 
146  virtual void DrawHisto ( const Double_t yinf = 0., const Double_t ysup = 0.);
147  virtual void DrawFunction ( const char *opts = "" );
148 
149  virtual int CalcIntegral ( double & val, double & err,
150  const double x1, const double x2,
151  const int npts = 1000,
152  const double frac = 0.1 );
153 
154  virtual void DrawFctResult ( TVirtualPad * pad, const ROptionString &opts = "" );
155  virtual void DrawDifResult ( TVirtualPad * pad, const ROptionString &opts = "" );
156  virtual void DrawFitResult ( TVirtualPad * pad, const ROptionString &opts = "" );
157 
158  // création d'histogrammes à partir de la fonction
159  virtual void FillFunctionHisto ( TH1 *hptr );
160  virtual TH1 * GetFunctionHisto ( const char *name );
161 
162  virtual TH1 * GetDifferenceHisto ( const char *name );
163  virtual TH1 * GetSqrtHisto ( const char *name );
164  virtual TH1 * GetSqrtPosHisto ( const char *name );
165  virtual TH1 * GetSqrtNegHisto ( const char *name );
166 
167  //------------------------------------------------------------
168  // évaluation de la fonction
169  virtual Double_t Eval ( const Double_t x );
170 
171  virtual Double_t GetRandom ( );
172  virtual TH1 * GetRandomHisto ( const char *name, const Int_t n );
173  virtual void FillRandomHisto ( TH1 *hptr, const Int_t n );
174 
175  //------------------------------------------------------------
176  // fit de la fonction
177  virtual void Preset ( );
178  virtual Double_t Fit ( const char *opts = "" );
179 
180  /*! Fonction qui écrit le résultat de fit dans une chaine de caractères.*/
181  virtual string GetFitText ( ) const = 0;
182 
183  virtual bool PrintFit ( const string &fname ) const;
184  virtual bool PrintFit ( FILE *fptr = stdout ) const;
185 
186  virtual bool WriteParam ( const string &fname ) const;
187  virtual bool WriteParam ( FILE *fptr = stdout ) const;
188 
189  virtual bool WriteOutput ( const string &fname ) const;
190  virtual bool WriteOutput ( FILE *fptr = stdout ) const;
191 
192  /*! Creation d'une structure de données relatives au fit (voir classes dérivées).*/
193  virtual RFitData1D * CreateFitData ( ) = 0;
194  virtual RFitData1D * GetFitData ( );
195  virtual void SetFitData ( const RFitData1D * fit_data );
196 
197  //------------------------------------------------------------
198  /*! For ROOT dictionary.*/
199  public:
200  ClassDef(RFitBase1D,0);
201 };
202 
203 //----------------------------------------------------------------------
204 // Inline functions
205 #include "icc/RFitBase1D.icc"
206 
207 //======================================================================
208 #endif
virtual void DrawDifResult(TVirtualPad *pad, const ROptionString &opts="")
Definition: RFitBase1D.cpp:573
virtual void DrawFctResult(TVirtualPad *pad, const ROptionString &opts="")
Definition: RFitBase1D.cpp:535
virtual bool SetHisto(TH1 *hptr, TH1 *herr=NULL)
Definition: RFitBase1D.cpp:138
static UInt_t fit_options
Options pour le fit (statique pour être vue dans la fonction de fit)
Definition: RFitBase1D.hh:51
#define RFIT_MAX_PAR
! Maximum number of fit parameters
Definition: RFitDataBase.hh:14
virtual void SetFitData(const RFitData1D *fit_data)
Definition: RFitBase1D.cpp:1138
virtual TH1 * GetDifferenceHisto(const char *name)
Definition: RFitBase1D.cpp:731
virtual void SetFitMode(const Int_t mode)
Definition: RFitBase1D.icc:80
GObjectV(RFitBase1D)
virtual TH1 * GetSqrtNegHisto(const char *name)
Definition: RFitBase1D.cpp:787
virtual ~RFitBase1D()
Definition: RFitBase1D.cpp:115
static bool Zero(const Double_t val)
Definition: RFitBase1D.icc:19
TH1 * herr1_ptr
Pointeur sur l&#39;histogramme d&#39;erreur négatif.
Definition: RFitBase1D.hh:59
virtual void FillRandomHisto(TH1 *hptr, const Int_t n)
Definition: RFitBase1D.cpp:855
Int_t ix_max
Borne supérieure du fit en canaux de l&#39;histogramme.
Definition: RFitBase1D.hh:67
virtual void SetCalcAll()=0
virtual void DrawFunction(const char *opts="")
Definition: RFitBase1D.cpp:410
TH1 * herr2_ptr
Pointeur sur l&#39;histogramme d&#39;erreur positif.
Definition: RFitBase1D.hh:60
TF1 * fct_ptr
Pointeur sur la fonction de fit.
Definition: RFitBase1D.hh:71
static TAttLine latt_error
Attributs de lignes pour tracé de l&#39;erreur.
Definition: RFitBase1D.hh:75
static TAttLine latt_zero
Attributs de lignes pour tracé central différences.
Definition: RFitBase1D.hh:78
virtual void ScaleFunction(const Double_t s)=0
virtual Double_t Eval(const Double_t x)
Definition: RFitBase1D.cpp:815
virtual void Reset()
Definition: RFitBase1D.cpp:239
virtual TH1 * GetRandomHisto(const char *name, const Int_t n)
Definition: RFitBase1D.cpp:834
Int_t nx_bin
Nombre de bins de la zone de fit.
Definition: RFitBase1D.hh:68
GOptionString ROptionString
! Defined for compatibility
Definition: ROptionString.hh:17
virtual void Preset()
Definition: RFitBase1D.icc:115
static TAttFill fatt_error
Attributs de remplissage pour tracé de l&#39;erreur.
Definition: RFitBase1D.hh:76
static Int_t par_number
Nombre de paramètres pour le fit.
Definition: RFitBase1D.hh:53
virtual int CalcIntegral(double &val, double &err, const double x1, const double x2, const int npts=1000, const double frac=0.1)
Definition: RFitBase1D.cpp:432
RFitBase1D()
Definition: RFitBase1D.cpp:29
virtual bool WriteParam(const string &fname) const
Definition: RFitBase1D.cpp:1013
virtual bool PrintFit(const string &fname) const
Definition: RFitBase1D.cpp:971
TH1 * histo_ptr
Pointeur sur l&#39;histogramme à fitter.
Definition: RFitBase1D.hh:58
virtual bool WriteOutput(const string &fname) const
Definition: RFitBase1D.cpp:1079
virtual void SetCalcNone()=0
virtual TH1 * GetFunctionHisto(const char *name)
Definition: RFitBase1D.cpp:706
virtual void DrawHisto(const Double_t yinf=0., const Double_t ysup=0.)
Definition: RFitBase1D.cpp:384
virtual void SetFitLimits(const Double_t x1, const Double_t x2)
Definition: RFitBase1D.cpp:279
static Double_t epsilon
Check for null values.
Definition: RFitBase1D.hh:47
virtual void DrawFitResult(TVirtualPad *pad, const ROptionString &opts="")
Definition: RFitBase1D.cpp:649
virtual void FillFunctionHisto(TH1 *hptr)
Definition: RFitBase1D.cpp:686
bool histo_err
Indique si l&#39;histo est fitté avec une erreur.
Definition: RFitBase1D.hh:61
static Double_t histo_bin_x
Largeur de bin de l&#39;histogramme (pour calcul avec la surface comme paramètre)
Definition: RFitBase1D.hh:55
static bool GetStaticOption(const UInt_t opt)
Definition: RFitBase1D.icc:71
Definition: RFitData1D.hh:21
TF1 * GetFitFunction()
Definition: RFitBase1D.icc:11
virtual void SetOptions(const UInt_t opts)
Definition: RFitBase1D.icc:61
virtual RFitData1D * GetFitData()
Definition: RFitBase1D.cpp:1124
virtual void FixParameter(const Int_t p, const bool b=true)
Definition: RFitBase1D.cpp:335
virtual string GetParName(const Int_t p) const
Definition: RFitBase1D.icc:45
static UInt_t GetStaticOptions()
Definition: RFitBase1D.icc:65
virtual Double_t Fit(const char *opts="")
Definition: RFitBase1D.cpp:877
static TAttLine latt_histo
Attributs de lignes pour tracé de l&#39;histogramme.
Definition: RFitBase1D.hh:74
Int_t ix_min
Borne inférieure du fit en canaux de l&#39;histogramme.
Definition: RFitBase1D.hh:66
Definition: RFitBase1D.hh:37
virtual Double_t GetRandom()
Definition: RFitBase1D.cpp:824
virtual void SetFunction()=0
Definition: RFitBase1D.cpp:352
virtual void SetParValue(const Int_t p, const Double_t val)
Definition: RFitBase1D.icc:32
virtual void InitMode()
Definition: RFitBase1D.cpp:252
virtual TH1 * GetSqrtPosHisto(const char *name)
Definition: RFitBase1D.cpp:758
virtual void SetOption(const UInt_t opt, const bool b=true)
Definition: RFitBase1D.cpp:224
virtual RFitData1D * CreateFitData()=0
static Int_t GetStaticParNumber()
Definition: RFitBase1D.icc:25
ClassDef(RFitBase1D, 0)
static Int_t fit_mode
Mode de fit (Chi2 ou Log-likelyhood)
Definition: RFitBase1D.hh:52
virtual void NormaliseFunction(const Double_t nor=1.)
Definition: RFitBase1D.cpp:373
static void SetFctLineAtt(const TAttLine att)
Definition: RFitBase1D.icc:88
virtual string GetFitText() const =0
string par_name[50]
tableau des noms de paramètres
Definition: RFitBase1D.hh:64
virtual TH1 * GetSqrtHisto(const char *name)
Definition: RFitBase1D.icc:107
static TAttLine latt_fct
Attributs de lignes pour tracé de la fonction globale.
Definition: RFitBase1D.hh:77