FdDoubleBumpFinderKG/ProfileFitter.h
Go to the documentation of this file.
1 #ifndef _FdDoubleBumpFinderKG_ProfileFitter_h_
2 #define _FdDoubleBumpFinderKG_ProfileFitter_h_
3 
4 #include "ProfileFitFunctions.h"
5 
6 #include <vector>
7 #include <cstddef>
8 
9 class TMinuit;
10 
11 namespace profileFit {
12 
13  class ProfileFitter {
14 
15 
16  public:
17 
18  ProfileFitter();
20 
21  void SetVerbosity(int v) { fVerbosity=v; }
22 
24  { fFunctionType = type; }
25 
26  // size threshold for fit
27  void SetThreshold(double t) { fThreshold=t; }
28  // variance of size values
29  void SetVariance(double v) { fVariance=v; }
30 
31  const std::vector<double>& GetFitParameters() const
32  { return fFitParameters; }
33  const std::vector<double>& GetFitErrors() const
34  { return fFitErrors; }
35  double GetChi2() const { return fChi2; }
36  unsigned int GetNdf() const { return fNdof; }
37  int GetStatus() const { return fStatus;}
38 
39  bool Fit();
40 
41  void SetStartParameters(const std::vector<double> & start,
42  const std::vector<double> & step) {
43  fStartParameters = start;
44  fStepParameters = step;
45  fLimitsUp.clear();
46  fLimitsDown.clear();
47  }
48 
49  void SetStartParameters(const std::vector<double> & start,
50  const std::vector<double> & step,
51  const std::vector<double> & limitsDown,
52  const std::vector<double> & limitsUp) {
53  fStartParameters = start;
54  fStepParameters = step;
55  fLimitsUp = limitsUp;
56  fLimitsDown = limitsDown;
57  }
58 
59  template<typename T>
60  void SetData(const int n,
61  const T* depth,
62  const T* size,
63  const T* sizeError=0) {
64  fDepth.resize(n);
65  fSize.resize(n);
66  copy(depth,depth+n,fDepth.begin());
67  copy(size,size+n,fSize.begin());
68  if ( sizeError ) {
69  fSizeError.resize(n);
70  copy(sizeError,sizeError+n,fSizeError.begin());
71  }
72  else
73  fSizeError.clear();
74 
75  }
76 
77  private:
78 
79  bool GHFit();
80  bool DoubleGHFit();
81  bool GaussInAgeFit();
82  std::pair<double, double> FindMaximum() const;
83  void InitMinuit(TMinuit&) const;
84  bool Minimize(TMinuit&);
85  void UserStartInit(TMinuit& theMinuit);
86 
87  static void GHFitFunction(int&,double* const,double&,
88  double* const, const int);
89  static void DoubleGHFitFunction(int&,double* const,double&,
90  double* const, const int);
91  static void GaussInAgeFitFunction(int&,double* const,double&,
92  double* const, const int);
93 
95  double fChi2;
96  int fStatus;
97 
98  static unsigned int fNdof;
99  static double fVariance;
100  static double fThreshold;
102  static std::vector<double> fDepth;
103  static std::vector<double> fSize;
104  static std::vector<double> fSizeError;
105  static bool fIsConstrained;
106  std::vector<double> fFitParameters;
107  std::vector<double> fFitErrors;
108  std::vector<double> fStartParameters;
109  std::vector<double> fStepParameters;
110  std::vector<double> fLimitsUp;
111  std::vector<double> fLimitsDown;
112 
113  };
114 }
115 #endif
const std::vector< double > & GetFitParameters() const
void SetData(const int n, const T *depth, const T *size, const T *sizeError=0)
static void GaussInAgeFitFunction(int &, double *const, double &, double *const, const int)
const std::vector< double > & GetFitErrors() const
static void DoubleGHFitFunction(int &, double *const, double &, double *const, const int)
void SetFunctionType(EFitFunctionType type)
std::pair< double, double > FindMaximum() const
void SetStartParameters(const std::vector< double > &start, const std::vector< double > &step, const std::vector< double > &limitsDown, const std::vector< double > &limitsUp)
void SetStartParameters(const std::vector< double > &start, const std::vector< double > &step)
static void GHFitFunction(int &, double *const, double &, double *const, const int)

, generated on Tue Sep 26 2023.