NAGASH 0.9.8
Next Generation Analysis System
Loading...
Searching...
No Matches
Chi2Fitter.h
Go to the documentation of this file.
1//***************************************************************************************
4//***************************************************************************************
5
6#pragma once
7
8#include "NAGASH/Tool.h"
9#include "NAGASH/HistTool.h"
10#include "NAGASH/Global.h"
11#include "Eigen/Dense"
12#include "Minuit2/FCNBase.h"
13#include "Minuit2/FCNGradientBase.h"
14#include "Minuit2/FunctionMinimum.h"
15#include "Minuit2/MnUserParameterState.h"
16#include "Minuit2/MnMigrad.h"
17#include "Minuit2/MnSimplex.h"
18#include "Minuit2/MnHesse.h"
19#include "Minuit2/MnMinos.h"
20
21namespace NAGASH
22{
23 class Chi2Fitter : public Tool
24 {
25 public:
27 enum class FitMethod
28 {
29 Eigen,
30 Minuit
31 };
32 Chi2Fitter(std::shared_ptr<MSGTool>, uint64_t, TH1D *, TH2D *_cov_ = nullptr);
33 Chi2Fitter(std::shared_ptr<MSGTool>, uint64_t);
34 void SetModel(const std::vector<double> &, TH1D *, TH2D *cov = nullptr);
35 void SetModel(const std::vector<double> &, double);
36 void SetRange(int min, int max);
38 double GetChi2(uint64_t);
39 double FitChi2();
40 double Value(uint64_t);
41 double Error(uint64_t);
42 double OffSet();
43 const std::vector<double> &Value() { return value; }
44 const TMatrixD &Cov() { return cov; }
45
46 private:
48 class Chi2FitterFCN : public ROOT::Minuit2::FCNGradientBase
49 {
50 public:
51 Chi2FitterFCN(int _dim_, std::vector<std::vector<double>> *_vv_, std::vector<double> *_vc_) : vc(_vc_), vv(_vv_), dim(_dim_) {}
52 // function value
53 double operator()(const std::vector<double> &) const override;
54 // gradient
55 std::vector<double> Gradient(const std::vector<double> &) const override;
56 // error defination
57 double Up() const { return 1.0; }
58 // whether minuit check the gradient is correct, but its validility has been checked.
59 bool CheckGradient() const override { return false; }
60
61 private:
62 double QuadraticChi2(const std::vector<double> &, const std::vector<double> &) const;
63 std::vector<double> GradientQuadraticChi2(const std::vector<double> &, const std::vector<double> &) const;
64 std::vector<double> *vc;
65 std::vector<std::vector<double>> *vv;
66 size_t dim;
67 };
68
69 bool isvalid = false;
70 uint64_t dimension = 1;
71 int RangeMin = 1;
72 int RangeMax = 1;
73 TH1D *target = nullptr;
74 TH2D *targetcov = nullptr;
75 std::vector<double> vchi2;
76 std::vector<std::vector<double>> vvalue;
77 std::vector<double> vvaluemax;
78 std::vector<double> vvaluemin;
79 std::vector<double> value;
80 TMatrixD cov;
81 double chi2 = 0;
82 double offset = 0;
83
85 };
86}
Some global definitions.
fcn function to calculate the
Definition Chi2Fitter.h:49
double operator()(const std::vector< double > &) const override
Chi2FitterFCN(int _dim_, std::vector< std::vector< double > > *_vv_, std::vector< double > *_vc_)
Definition Chi2Fitter.h:51
bool CheckGradient() const override
Definition Chi2Fitter.h:59
double QuadraticChi2(const std::vector< double > &, const std::vector< double > &) const
std::vector< double > * vc
Definition Chi2Fitter.h:64
std::vector< std::vector< double > > * vv
Definition Chi2Fitter.h:65
std::vector< double > Gradient(const std::vector< double > &) const override
std::vector< double > GradientQuadraticChi2(const std::vector< double > &, const std::vector< double > &) const
fit the parameters of a shape function.
Definition Chi2Fitter.h:24
std::vector< double > vvaluemax
Definition Chi2Fitter.h:77
void SetModel(const std::vector< double > &, TH1D *, TH2D *cov=nullptr)
Set the model with a set of parameter.
std::vector< double > vvaluemin
Definition Chi2Fitter.h:78
double GetChi2(uint64_t)
Get the of ith model.
std::vector< double > value
Definition Chi2Fitter.h:79
const TMatrixD & Cov()
Definition Chi2Fitter.h:44
double FitChi2()
Get the of the fitting procedure.
void Fit(FitMethod fm=FitMethod::Eigen)
Start to fit.
std::vector< double > vchi2
Definition Chi2Fitter.h:75
void SetRange(int min, int max)
Set the range of calculation of of the target histogram.
FitMethod
Fit method.
Definition Chi2Fitter.h:28
@ Eigen
use matrix calculation to get the fitted value, Eigen library is used.
@ Minuit
use minuit library to fit the value.
double Error(uint64_t)
Get the fit error of ith parameter.
std::vector< std::vector< double > > vvalue
Definition Chi2Fitter.h:76
const std::vector< double > & Value()
Definition Chi2Fitter.h:43
double OffSet()
The offset parameter of the fitted function.
provide tools for manipulating ROOT histograms
Definition HistTool.h:17
Provide interface for all tools in NAGASH.
Definition Tool.h:72