JG ROOT Tools libraries  version 5.0 - august 2014
RFitDecay.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file RFitDecay.hh
3  *
4  * Include file for class RFitDecay
5  */
6 //======================================================================
7 
8 #ifndef R_FIT_DECAY_HH
9 #define R_FIT_DECAY_HH
10 
11 #include "RFitBase1D.hh"
12 #include "RFitDataDecay.hh"
13 
14 // Fit function.
15 #include "RDecayFunction.hh"
16 extern Double_t RFitDecayFunction ( Double_t *x, Double_t *p );
17 
18 extern const char *rDecayBgName[];
19 
20 // Decay fit options added to RFitOptions namespace
21 namespace RFitOptions
22 {
23  /*! Use of relative efficiency for first and second filiation*/
24  static const u_int modeEfficiency = 0x00000010;
25 
26  /*! Fit of decay phase.*/
27  static const u_int fitDecay = 0x00000100;
28 
29  /*! Fit of production phase (constant production).*/
30  static const u_int fitGrowing = 0x00000200;
31 
32  /*! Full fit: production and decay.*/
33  static const u_int fitGrowingAndDecay = 0x00000300;
34 
35  /*! Production phase start as fit parameter (if production phase is
36  * part of the fit)*/
37  static const u_int varProdTime = 0x00001000;
38 
39  /*! Decay phase start as fit parameter (if both production and decay
40  * phases are part of the fit).*/
41  static const u_int varDecayTime = 0x00002000;
42 
43  /*! Use decay constant parameter instead of half-life.*/
44  static const u_int fitLambda = 0x00010000;
45 
46  /*! The amplitude parameter is the number of nuclei (filiation excluded)
47  * at the beginning of the decay phase, instead of decay rate at
48  * beginning of decay phase.
49  */
50  static const u_int fitNumber = 0x00020000;
51 
52  /*! The amplitude parameter is the constant production rate
53  * during the production phase, instead of decay rate at
54  * beginning of decay phase.
55  */
56  static const u_int fitProd = 0x00040000;
57 
58  /*! Use a second nucleus as daughter of the first one.*/
59  static const u_int singleFiliation = 0x00100000;
60 
61  /*! Use a third nucleus as daughter of the second one
62  * (the second nucleus is the daughter of the first).*/
63  static const u_int doubleFiliation = 0x00200000;
64 
65  /*! The fit function contains a direct production component of the
66  * second nucleus.*/
67  static const u_int modeProdSecond = 0x01000000;
68 
69  /*! The fit function contains a direct production component of the
70  * thirs nucleus.*/
71  static const u_int modeProdThird = 0x02000000;
72 }
73 
74 
75 //======================================================================
76 /*! \class RFitDecay
77  *
78  * Class for radioactive decay fits (see also RFitBase1D).
79  *
80  * The decay can include up to 3 components, that can be defined as
81  * parent, daugther and grand-daughter, and/or produced directly
82  * (the production rate is assumed to be constant).
83  *
84  * It is possible to include production phase (grow-in) and/or decay
85  * phase.
86  *
87  * \par The decay phases
88  *
89  * - background (if production phase is in the fit), from fit lower limit
90  * to production start time;
91  * - production (if production phase is in the fit), from production start
92  * time to decay start time:
93  * - decay: (if decay phase is in the fit), from decay start time to fit
94  * upper limit.
95  *
96  * \par Detection efficiency
97  *
98  * The detection efficiency can be different for the 3 components.
99  * Then a relative coefficient for number of counts (scale factor) can
100  * be defined for contributions of the second and the third component
101  * to take it into account.
102  * These relative efficiencies are defined as new fit parameters.
103  *
104  * \par Fit options
105  *
106  * The fit options are defined in RFitOptions namespace, and the fit
107  * modes (chi2 minimisation or maximum likelyhood) in the RFitModes
108  * namespace.
109  *
110  * The options must be defined before presetting of fixing parameters.
111  *
112  * Fit modes:
113  * - fitChi2 : chi2 minimisation
114  * - fitLikelyhood : maximum likelyhood
115  *
116  * Global fit options:
117  * - modeErrNorm : uncertainties are normalised with Chi2.
118  *
119  * Specific fit options:
120  * - fitDecay : fit only the decay phase.
121  * - fitGrowing : fit only the production phase.
122  * - fitGrowingAndDecay : fit production and decay.
123  * - modeEfficiency : detection efficiency is different for second and
124  * third components : a parameter for relative
125  * efficiency (with respect to first component)
126  * is defined.
127  * - fitLambda : use decay constant instead of half-life as
128  * fit parameter
129  * - fitNumber : use number of nuclei at beginning of decay
130  * phase (end of production) instead of decay rate.
131  * - fitProd : use production rate instead of decay rate (at
132  * beginning of decay phase) as parameter
133  * (valid if production phase is fitted).
134  * - singleFiliation : second component is the daughter of the
135  * first component (filiation: 1 -> 2).
136  * - doubleFiliation : third component is the daughter of the
137  * second component (implies also singleFiliation:
138  * 1 -> 2 -> 3).
139  * - modeProdSecond : second component is produced directly (it is
140  * compatible with singleFiliation).
141  * - modeProdThird : second component is produced directly (it is
142  * compatible with singleFiliation and
143  * doubleFiliation).
144  *
145  * Background types:
146  * - bgNone: no background
147  * - bgConst: constant background
148  * - bgLin: linear background
149  */
150 class RFitDecay : virtual public RFitDataDecay, virtual public RFitBase1D
151 {
152  //------------------------------------------------------------
153  /*! \object_doc{RFitDecay} */
155  //------------------------------------------------------------
156 
157  friend Double_t RFitDecayFunction (Double_t *, Double_t *);
158 
159  ///! Background types identifiers
160  enum BgType
161  {
162  bgNone = 0,
163  bgConst = 1,
164  bgLin = 2
165  };
166 
167  protected:
168 
169  // données statiques
170 #ifndef __MAKECINT__
171  static UInt_t bg_type; ///< Type de fond (statique pour être vue dans la fonction de fit)
172  static UInt_t bg_par_number[RDECAY_BG_MAX]; ///< Table du nombre de paramètres selon le type de fond
173 
174  static Int_t decay_number; ///< Nombre de contributions (durée de vie)
175  static Int_t prod_number; ///< Nombre de contributions (production directe)
176 
177  static Int_t index_tprod; ///< Index du paramètre de temps de début de production
178  static Int_t index_tdec; ///< Index du paramètre de temps de début de décroissance
179  static Int_t index_prod[RDECAY_MAX]; ///< Index des productions (initiale ou taux)
180  static Int_t index_dec [RDECAY_MAX]; ///< Index des durées de vies
181  static Int_t index_eff [RDECAY_MAX]; ///< Index des efficacités relatives de détection
182  static Int_t index_bg[RDECAY_MAX_BG_PAR]; ///< Index des paramètres de fond dans la table des paramètres
183 
184  static bool calc_prod[RDECAY_MAX]; ///< Indique les composantes de production directe à calculer
185  static bool calc_fil1[RDECAY_MAX]; ///< Indique les composantes de première filiation
186  static bool calc_fil2[RDECAY_MAX]; ///< Indique les composantes de seconde filiation
187  static bool calc_bg; ///< Indique s'il faut calculer le fond
188 
189  static Double_t time_prod; ///< Temps de début de production (hors paramètre)
190  static Double_t time_dec; ///< Temps de début de décroissance (hors paramètre)
191  static Double_t rel_eff[RDECAY_MAX]; ///< Efficacités relatives d'observation des composantes
192 #endif
193 
194  // attributs de lignes
195  static TAttLine latt_dec[3]; ///< Attributs de lignes pour tracé des composantes de décroissance
196  static TAttLine latt_bg; ///< Attributs de lignes pour tracé du fond
197 
198  //------------------------------------------------------------
199  // Constructors / affectation / destructor
200  public:
201  RFitDecay ( TH1 *hptr, TH1 * herr = NULL );
202  RFitDecay ( TH1 *hptr, const RFitDataDecay & fit_data );
203  RFitDecay ( TH1 *hptr, TH1 * herr, const RFitDataDecay & fit_data );
204  RFitDecay ( const RFitDecay & original );
205 
206  virtual ~RFitDecay ( );
207 
208  //------------------------------------------------------------
209  // surcharge des fonctions de la classe de base
210  virtual void SetOption ( const UInt_t opt, const bool b = true );
211  virtual void InitMode ( );
212 
213  //------------------------------------------------------------
214  static Int_t GetStaticDecayNumber ( );
215  static Int_t GetStaticProdNumber ( );
216 
217  // type de fond (statiques pour pouvoir être vues dans la fonction de fit)
218  virtual void SetBgType ( const Int_t bg );
219  static Int_t GetStaticBgType ( );
220  static Int_t GetStaticBgParNumber ( );
221  static Int_t GetBgParNumber ( const Int_t bg );
222 
223  /*! Redefinition of RFitDataDecay function, to avoid compilation
224  * warning due to -Woverloaded-virtual option.*/
225  virtual Int_t GetBgParNumber ( ) const
226  { return (GetStaticBgParNumber()); }
227 
228  // paramètres
229  virtual Int_t GetBgParIndex ( const Int_t p );
230  virtual Int_t GetDecayParIndex ( const Int_t p );
231  virtual Int_t GetProdParIndex ( const Int_t p );
232 
233  // prédéfinition du fond et des contributions
234  virtual void SetProdTime ( const Double_t val );
235  virtual void SetDecayTime ( const Double_t val );
236  virtual Double_t GetStaticProdTime ( ) const;
237  virtual Double_t GetStaticDecayTime ( ) const;
238  virtual Int_t CheckTimes ( const bool warn = false );
239 
240  virtual void SetEfficiency ( const Int_t n, const Double_t val );
241  virtual Double_t GetStaticEfficiency ( const Int_t n );
242 
243  virtual void SetBgPar ( const Int_t p, const Double_t val );
244  virtual void SetDecayPar ( const Int_t n, const Double_t val );
245  virtual void SetProdPar ( const Int_t n, const Double_t val );
246 
247  virtual void SetHalfLife ( const Int_t n, const Double_t val );
248  virtual void SetLambda ( const Int_t n, const Double_t val );
249 
250  virtual void SetDecayRate ( const Int_t n, const Double_t val );
251  virtual void SetInitNumber ( const Int_t n, const Double_t val );
252  virtual void SetProdRate ( const Int_t n, const Double_t val );
253 
254  virtual Double_t GetHalfLife ( const Int_t n ) const;
255  virtual Double_t GetLambda ( const Int_t n ) const;
256 
257  virtual Double_t GetBgPar ( const Int_t p ) const;
258  virtual Double_t GetDecayPar ( const Int_t n ) const;
259  virtual Double_t GetProdPar ( const Int_t n ) const;
260 
261  virtual Double_t GetBgParError ( const Int_t p ) const;
262  virtual Double_t GetDecayParError ( const Int_t n ) const;
263  virtual Double_t GetProdParError ( const Int_t n ) const;
264 
265  // paramètres fixes
266  virtual void FixBgParameter ( const Int_t p, const bool b = true );
267  virtual void FixDecayParameter ( const Int_t n, const bool b = true );
268  virtual void FixProdParameter ( const Int_t n, const bool b = true );
269 
270  virtual bool IsFixBgParameter ( const Int_t p ) const;
271  virtual bool IsFixDecayParameter ( const Int_t n ) const;
272  virtual bool IsFixProdParameter ( const Int_t n ) const;
273 
274  //------------------------------------------------------------
275  // styles de tracé static void SetBgLineAtt ( const TAttLine att ); static void SetBgLineAtt ( const Color_t c, const Style_t s, const Width_t w ); //------------------------------------------------------------ // tracés de la fonction virtual void SetCalcAll ( ); virtual void SetCalcNone ( ); virtual void SetFunction ( ); virtual void ScaleFunction ( const Double_t s ); virtual void DrawDecay ( const Int_t n, const Int_t fil, const bool bg = true, const char *opts = "" ); virtual void DrawBg ( const char *opts = "" ); virtual void DrawFctResult ( TVirtualPad * pad, const ROptionString &opts = "" ); // création d'histogrammes à partir de la fonction virtual TH1 * GetDecayHisto ( const char *name, const Int_t n, const Int_t fil, const bool bg = true ); virtual TH1 * GetBgHisto ( const char *name ); // résultat (texte) virtual void Preset ( ); virtual void Preset ( const Double_t t0, const Double_t t1 = 0., const Double_t t2 = 0. ); virtual void PresetBg ( ); virtual Double_t Fit ( const char *opts = "" ); virtual string GetFitText ( ) const; virtual RFitData1D * CreateFitData ( ); virtual RFitData1D * GetFitData ( ); virtual void SetFitData ( const RFitData1D * fit_data ); virtual Int_t LoadFitData ( const string &fname ); //------------------------------------------------------------ /*! For ROOT dictionary.*/ public: ClassDef(RFitDecay,0); }; //---------------------------------------------------------------------- // Inline functions #include "icc/RFitDecay.icc" //====================================================================== #endif
276  static void SetBgLineAtt ( const TAttLine att );
277  static void SetBgLineAtt ( const Color_t c, const Style_t s, const Width_t w );
278 
279  //------------------------------------------------------------
280  // tracés de la fonction
281  virtual void SetCalcAll ( );
282  virtual void SetCalcNone ( );
283  virtual void SetFunction ( );
284  virtual void ScaleFunction ( const Double_t s );
285 
286  virtual void DrawDecay ( const Int_t n, const Int_t fil, const bool bg = true, const char *opts = "" );
287  virtual void DrawBg ( const char *opts = "" );
288 
289  virtual void DrawFctResult ( TVirtualPad * pad, const ROptionString &opts = "" );
290 
291  // création d'histogrammes à partir de la fonction
292  virtual TH1 * GetDecayHisto ( const char *name, const Int_t n, const Int_t fil, const bool bg = true );
293  virtual TH1 * GetBgHisto ( const char *name );
294 
295  // résultat (texte)
296  virtual void Preset ( );
297  virtual void Preset ( const Double_t t0, const Double_t t1 = 0., const Double_t t2 = 0. );
298  virtual void PresetBg ( );
299  virtual Double_t Fit ( const char *opts = "" );
300  virtual string GetFitText ( ) const;
301 
302  virtual RFitData1D * CreateFitData ( );
303  virtual RFitData1D * GetFitData ( );
304  virtual void SetFitData ( const RFitData1D * fit_data );
305  virtual Int_t LoadFitData ( const string &fname );
306 
307  //------------------------------------------------------------
308  /*! For ROOT dictionary.*/
309  public:
310  ClassDef(RFitDecay,0);
311 };
312 
313 //----------------------------------------------------------------------
314 // Inline functions
315 #include "icc/RFitDecay.icc"
316 
317 //======================================================================
318 #endif
virtual Int_t GetProdParIndex(const Int_t p)
Definition: RFitDecay.icc:54
virtual Double_t GetProdParError(const Int_t n) const
Definition: RFitDecay.cpp:922
virtual void SetProdRate(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:729
virtual void SetDecayRate(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:632
virtual bool IsFixBgParameter(const Int_t p) const
Definition: RFitDecay.cpp:983
virtual void FixBgParameter(const Int_t p, const bool b=true)
Definition: RFitDecay.cpp:942
Definition: RFitDataDecay.hh:28
virtual void SetCalcNone()
Definition: RFitDecay.cpp:1046
virtual void ScaleFunction(const Double_t s)
Definition: RFitDecay.cpp:1077
static TAttLine latt_bg
Attributs de lignes pour tracé du fond.
Definition: RFitDecay.hh:196
static bool calc_prod[3]
Indique les composantes de production directe à calculer.
Definition: RFitDecay.hh:184
static const u_int fitGrowingAndDecay
Definition: RFitDecay.hh:33
virtual void SetDecayTime(const Double_t val)
Definition: RFitDecay.cpp:394
static const u_int fitLambda
Definition: RFitDecay.hh:44
static Int_t GetStaticDecayNumber()
Definition: RFitDecay.icc:11
static Double_t rel_eff[3]
Efficacités relatives d&#39;observation des composantes.
Definition: RFitDecay.hh:191
static const u_int fitProd
Definition: RFitDecay.hh:56
virtual Double_t GetDecayParError(const Int_t n) const
Definition: RFitDecay.cpp:905
virtual RFitData1D * CreateFitData()
Definition: RFitDecay.cpp:1837
static Int_t GetStaticProdNumber()
Definition: RFitDecay.icc:18
virtual Double_t GetStaticProdTime() const
Definition: RFitDecay.cpp:474
virtual void SetLambda(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:606
virtual void DrawDecay(const Int_t n, const Int_t fil, const bool bg=true, const char *opts="")
Definition: RFitDecay.cpp:1126
static Int_t GetStaticBgParNumber()
Definition: RFitDecay.icc:72
virtual Double_t GetHalfLife(const Int_t n) const
Definition: RFitDecay.cpp:775
virtual void FixProdParameter(const Int_t n, const bool b=true)
Definition: RFitDecay.cpp:971
static UInt_t bg_par_number[3]
Table du nombre de paramètres selon le type de fond.
Definition: RFitDecay.hh:172
static const u_int modeProdSecond
Definition: RFitDecay.hh:67
static const u_int doubleFiliation
Definition: RFitDecay.hh:63
virtual bool IsFixDecayParameter(const Int_t n) const
Definition: RFitDecay.cpp:998
GOptionString ROptionString
! Defined for compatibility
Definition: ROptionString.hh:17
virtual RFitData1D * GetFitData()
Definition: RFitDecay.cpp:1849
static bool calc_fil2[3]
Indique les composantes de seconde filiation.
Definition: RFitDecay.hh:186
virtual Double_t Fit(const char *opts="")
Definition: RFitDecay.cpp:1539
virtual Int_t GetBgParNumber() const
Definition: RFitDecay.hh:225
virtual ~RFitDecay()
Definition: RFitDecay.cpp:131
virtual Double_t GetLambda(const Int_t n) const
Definition: RFitDecay.cpp:807
static const u_int fitGrowing
Definition: RFitDecay.hh:30
BgType
! Background types identifiers
Definition: RFitDecay.hh:160
virtual Double_t GetDecayPar(const Int_t n) const
Definition: RFitDecay.cpp:855
virtual void SetEfficiency(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:511
ClassDef(RFitDecay, 0)
virtual Double_t GetProdPar(const Int_t n) const
Definition: RFitDecay.cpp:872
#define RDECAY_MAX_BG_PAR
! Maximum number of background parameters
Definition: RFitDataDecay.hh:18
virtual Double_t GetStaticEfficiency(const Int_t n)
Definition: RFitDecay.icc:26
virtual void SetProdTime(const Double_t val)
Definition: RFitDecay.cpp:370
virtual void SetBgPar(const Int_t p, const Double_t val)
Definition: RFitDecay.cpp:531
virtual void SetHalfLife(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:586
virtual bool IsFixProdParameter(const Int_t n) const
Definition: RFitDecay.cpp:1013
virtual void SetDecayPar(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:548
virtual Int_t CheckTimes(const bool warn=false)
Definition: RFitDecay.cpp:425
static Int_t decay_number
Nombre de contributions (durée de vie)
Definition: RFitDecay.hh:174
static Int_t index_prod[3]
Index des productions (initiale ou taux)
Definition: RFitDecay.hh:179
virtual void DrawFctResult(TVirtualPad *pad, const ROptionString &opts="")
Definition: RFitDecay.cpp:1166
static void SetBgLineAtt(const TAttLine att)
Definition: RFitDecay.icc:86
virtual TH1 * GetDecayHisto(const char *name, const Int_t n, const Int_t fil, const bool bg=true)
Definition: RFitDecay.cpp:1256
#define RDECAY_BG_MAX
! Maximum identifier of background type
Definition: RFitDataDecay.hh:21
virtual Double_t GetBgPar(const Int_t p) const
Definition: RFitDecay.cpp:839
Definition: RFitDecay.hh:150
virtual Int_t GetBgParIndex(const Int_t p)
Definition: RFitDecay.icc:38
virtual void SetCalcAll()
Definition: RFitDecay.cpp:1033
Definition: RFitData1D.hh:21
virtual TH1 * GetBgHisto(const char *name)
Definition: RFitDecay.cpp:1337
virtual void FixDecayParameter(const Int_t n, const bool b=true)
Definition: RFitDecay.cpp:956
static Int_t GetStaticBgType()
Definition: RFitDecay.icc:66
RFitDecay(TH1 *hptr, TH1 *herr=NULL)
Definition: RFitDecay.cpp:50
static const u_int fitDecay
Definition: RFitDecay.hh:27
const char * rDecayBgName[]
Noms des différents types de fond.
Definition: RFitDecay.cpp:38
virtual void DrawBg(const char *opts="")
Definition: RFitDecay.cpp:1145
virtual Int_t LoadFitData(const string &fname)
Definition: RFitDecay.cpp:1898
static TAttLine latt_dec[3]
Attributs de lignes pour tracé des composantes de décroissance.
Definition: RFitDecay.hh:195
virtual Int_t GetDecayParIndex(const Int_t p)
Definition: RFitDecay.icc:46
static Double_t time_dec
Temps de début de décroissance (hors paramètre)
Definition: RFitDecay.hh:190
static const u_int modeEfficiency
Definition: RFitDecay.hh:24
static Int_t prod_number
Nombre de contributions (production directe)
Definition: RFitDecay.hh:175
static Int_t index_bg[2]
Index des paramètres de fond dans la table des paramètres.
Definition: RFitDecay.hh:182
static Double_t time_prod
Temps de début de production (hors paramètre)
Definition: RFitDecay.hh:189
virtual void SetProdPar(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:568
static const u_int fitNumber
Definition: RFitDecay.hh:50
static const u_int varProdTime
Definition: RFitDecay.hh:37
GObject(RFitDecay)
Definition: RFitBase1D.hh:37
virtual void PresetBg()
Definition: RFitDecay.cpp:1507
static Int_t index_dec[3]
Index des durées de vies.
Definition: RFitDecay.hh:180
static bool calc_fil1[3]
Indique les composantes de première filiation.
Definition: RFitDecay.hh:185
virtual Double_t GetStaticDecayTime() const
Definition: RFitDecay.cpp:492
virtual void Preset()
Definition: RFitDecay.cpp:1361
virtual void SetInitNumber(const Int_t n, const Double_t val)
Definition: RFitDecay.cpp:683
static Int_t index_eff[3]
Index des efficacités relatives de détection.
Definition: RFitDecay.hh:181
static UInt_t bg_type
Type de fond (statique pour être vue dans la fonction de fit)
Definition: RFitDecay.hh:171
virtual void SetBgType(const Int_t bg)
Definition: RFitDecay.icc:62
virtual void SetOption(const UInt_t opt, const bool b=true)
Definition: RFitDecay.cpp:143
static bool calc_bg
Indique s&#39;il faut calculer le fond.
Definition: RFitDecay.hh:187
virtual void SetFunction()
Definition: RFitDecay.cpp:1058
friend Double_t RFitDecayFunction(Double_t *, Double_t *)
Definition: RFitDecayFunction.cpp:16
Double_t RFitDecayFunction(Double_t *x, Double_t *p)
Definition: RFitDecayFunction.cpp:16
virtual void InitMode()
Definition: RFitDecay.cpp:192
static const u_int modeProdThird
Definition: RFitDecay.hh:71
static Int_t index_tprod
Index du paramètre de temps de début de production.
Definition: RFitDecay.hh:177
static Int_t index_tdec
Index du paramètre de temps de début de décroissance.
Definition: RFitDecay.hh:178
static const u_int singleFiliation
Definition: RFitDecay.hh:59
virtual Double_t GetBgParError(const Int_t p) const
Definition: RFitDecay.cpp:889
#define RDECAY_MAX
! Maximum number of contributions
Definition: RFitDataDecay.hh:15
static const u_int varDecayTime
Definition: RFitDecay.hh:41
virtual void SetFitData(const RFitData1D *fit_data)
Definition: RFitDecay.cpp:1870
virtual string GetFitText() const
Definition: RFitDecay.cpp:1563