ROOT logo
#ifndef ALITMINUITTOOLKIT_H
#define ALITMINUITTOOLKIT_H


#include <TNamed.h>
class TH1F;
class TH2F;
class TFormula;
#include <TVectorDfwd.h>
#include <TMatrixDfwd.h>

class AliTMinuitToolkit: public TNamed{
public:
  //
  //
  //
  AliTMinuitToolkit();
  virtual ~AliTMinuitToolkit();
  
  void FitHistogram(TH1F *const his);
  void FitHistogram(TH2F *const his);
  void SetInitialParam(TVectorD *const param) { fParam=param;};
  void SetParamLimits(TMatrixD *const paramLimits) { fParamLimits=paramLimits;};
  //
  void SetFitFunction(TFormula *const formula) {fFormula=formula;};
  void SetWeightFunction(TFormula *const weightFunction) {fWeightFunction=weightFunction;};
  void SetWeightFunction(const Char_t *name, Float_t param1, Float_t param2 = 0.1);
  void SetFitAlgorithm(Char_t *const name) {fFitAlgorithm=name;};
  void SetMaxCalls(Int_t calls) {fMaxCalls = calls;};
  void SetTolerance(Double_t tol) {fPrecision = tol;};
  void SetPoints(TMatrixD *const points) {fPoints = points;};
  void SetWeights(TVectorD *const weights) {fWeights = weights;};
  static void Test();
  static void FitterFCN(int &npar, double *dummy, double &fchisq, double *gin, int iflag);
  void Fit();
  void EnableRobust(Bool_t b) {fUseRobust = b;};
  void EnableRobust(Bool_t b, Double_t sigma) {fUseRobust = b; fExpectedSigma = sigma;}; 
  //
  TMatrixD * GetPoints() const {return fPoints;};
  TVectorD * GetWeights() const {return fWeights;};
  TFormula * GetFormula() const {return fFormula;};
  TVectorD * GetParameters() const {return fParam;};
  TFormula * GetWeightFunction() const {return fWeightFunction;};
  TMatrixD * GetCovarianceMatrix() const {return fCovar;};
  Bool_t     GetStatus() const {return fUseRobust;};
  Double_t   GetExpectedSigma() const {return fExpectedSigma;};
 
private:
  //
  AliTMinuitToolkit(const AliTMinuitToolkit&); // fake copy constr. -- suppress warnings
  AliTMinuitToolkit& operator=(const AliTMinuitToolkit&); // fake -- suppress warnings
  //
  TFormula        * fFormula;            // formula of the fitted function
  TFormula        * fWeightFunction;     // weight function, must be defined between 0 and 1
  TString          fFitAlgorithm;       // fit algorithm for TMinuit: migrad, simplex, ...
  //
  //
  TMatrixD        * fPoints;             // fitted points
  TVectorD        * fWeights;            // weights of the points
  TVectorD        * fParam;              // parameter values
  TMatrixD        * fParamLimits;        // limits of the parameters (up, down)
  TMatrixD        * fCovar;              // covariance matrix
  Double_t        * fChi2;               // chi-square
  Int_t             fMaxCalls;           // maximum number of calls, default value depends on fit algorithm
  Double_t          fPrecision;          // normalized tolerance, default value depends on fit algorithm
  Bool_t            fUseRobust;          // switch on/off robust option, default: kFalse
  Double_t          fExpectedSigma;      // expected sigma to normalize robust fitting
  //  
  ClassDef(AliTMinuitToolkit,1);
};



#endif
 AliTMinuitToolkit.h:1
 AliTMinuitToolkit.h:2
 AliTMinuitToolkit.h:3
 AliTMinuitToolkit.h:4
 AliTMinuitToolkit.h:5
 AliTMinuitToolkit.h:6
 AliTMinuitToolkit.h:7
 AliTMinuitToolkit.h:8
 AliTMinuitToolkit.h:9
 AliTMinuitToolkit.h:10
 AliTMinuitToolkit.h:11
 AliTMinuitToolkit.h:12
 AliTMinuitToolkit.h:13
 AliTMinuitToolkit.h:14
 AliTMinuitToolkit.h:15
 AliTMinuitToolkit.h:16
 AliTMinuitToolkit.h:17
 AliTMinuitToolkit.h:18
 AliTMinuitToolkit.h:19
 AliTMinuitToolkit.h:20
 AliTMinuitToolkit.h:21
 AliTMinuitToolkit.h:22
 AliTMinuitToolkit.h:23
 AliTMinuitToolkit.h:24
 AliTMinuitToolkit.h:25
 AliTMinuitToolkit.h:26
 AliTMinuitToolkit.h:27
 AliTMinuitToolkit.h:28
 AliTMinuitToolkit.h:29
 AliTMinuitToolkit.h:30
 AliTMinuitToolkit.h:31
 AliTMinuitToolkit.h:32
 AliTMinuitToolkit.h:33
 AliTMinuitToolkit.h:34
 AliTMinuitToolkit.h:35
 AliTMinuitToolkit.h:36
 AliTMinuitToolkit.h:37
 AliTMinuitToolkit.h:38
 AliTMinuitToolkit.h:39
 AliTMinuitToolkit.h:40
 AliTMinuitToolkit.h:41
 AliTMinuitToolkit.h:42
 AliTMinuitToolkit.h:43
 AliTMinuitToolkit.h:44
 AliTMinuitToolkit.h:45
 AliTMinuitToolkit.h:46
 AliTMinuitToolkit.h:47
 AliTMinuitToolkit.h:48
 AliTMinuitToolkit.h:49
 AliTMinuitToolkit.h:50
 AliTMinuitToolkit.h:51
 AliTMinuitToolkit.h:52
 AliTMinuitToolkit.h:53
 AliTMinuitToolkit.h:54
 AliTMinuitToolkit.h:55
 AliTMinuitToolkit.h:56
 AliTMinuitToolkit.h:57
 AliTMinuitToolkit.h:58
 AliTMinuitToolkit.h:59
 AliTMinuitToolkit.h:60
 AliTMinuitToolkit.h:61
 AliTMinuitToolkit.h:62
 AliTMinuitToolkit.h:63
 AliTMinuitToolkit.h:64
 AliTMinuitToolkit.h:65
 AliTMinuitToolkit.h:66
 AliTMinuitToolkit.h:67
 AliTMinuitToolkit.h:68
 AliTMinuitToolkit.h:69
 AliTMinuitToolkit.h:70
 AliTMinuitToolkit.h:71
 AliTMinuitToolkit.h:72
 AliTMinuitToolkit.h:73
 AliTMinuitToolkit.h:74