NAGASH 0.9.8
Next Generation Analysis System
Loading...
Searching...
No Matches
TemplateFitter.h
Go to the documentation of this file.
1//***************************************************************************************
4//***************************************************************************************
5
6#pragma once
7
8#include "NAGASH/Global.h"
9#include "NAGASH/Tool.h"
10
11#include "Minuit2/FCNBase.h"
12#include "Minuit2/FunctionMinimum.h"
13#include "Minuit2/MnUserParameterState.h"
14#include "Minuit2/MnPrint.h"
15#include "Minuit2/MnMigrad.h"
16#include "Minuit2/MnSimplex.h"
17#include "Minuit2/MnHesse.h"
18#include "Minuit2/MnMinos.h"
19#include "Minuit2/MnContours.h"
20#include "Minuit2/MnPlot.h"
21
22namespace NAGASH
23{
24 class TemplateFitter : public Tool
25 {
26 public:
27 TemplateFitter(std::shared_ptr<MSGTool> MSG) : Tool(MSG) {}
28
29 void SetTarget(TH1D *h);
30 void SetTemplate(TH1D *h, double SF = 1, bool fix = false);
31 void SetTemplate(TH1D *h, double SF, double min, double max);
32 void Fit();
33 void SetRelation(std::function<double(const std::vector<double> &, const std::vector<double> &)>,
34 std::function<double(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &)>);
35 void SetFitRange(int min, int max);
36 double GetSF(uint64_t i);
37 double GetSFError(uint64_t i);
38 double GetChi2();
39 void Clear();
40
41 private:
42 class TemplateFitterFCN : public ROOT::Minuit2::FCNBase
43 {
44 public:
45 TemplateFitterFCN(TH1D *, const std::vector<TH1D *> &, int, int);
46 void SetRelation(std::function<double(const std::vector<double> &, const std::vector<double> &)>,
47 std::function<double(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &)>);
48 double operator()(const std::vector<double> &) const override;
49 // error defination
50 double Up() const { return 1.0; }
51
52 private:
53 std::function<double(const std::vector<double> &, const std::vector<double> &)> contentfunction;
54 std::function<double(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &)> errorfunction;
55
56 TH1D *h_target = nullptr;
57 std::vector<TH1D *> h_template;
58 int min = 0;
59 int max = 0;
60 };
61
62 std::vector<double> sf;
63 std::vector<double> sfmin; // user set min sf
64 std::vector<double> sfmax; // user set min sf
65 std::vector<double> sferr;
66 std::vector<bool> isfixed;
67 double chi2 = 0;
68 int FitRangeMin = 0;
69 int FitRangeMax = 0;
70
71 std::function<double(const std::vector<double> &, const std::vector<double> &)> contentfunction;
72 std::function<double(const std::vector<double> &, const std::vector<double> &, const std::vector<double> &)> errorfunction;
73
74 TH1D *ht = nullptr;
75 std::vector<TH1D *> vh;
76
77 bool Check();
78 };
79} // namespace NAGASH
Some global definitions.
double operator()(const std::vector< double > &) const override
void SetRelation(std::function< double(const std::vector< double > &, const std::vector< double > &)>, std::function< double(const std::vector< double > &, const std::vector< double > &, const std::vector< double > &)>)
std::function< double(const std::vector< double > &, const std::vector< double > &, const std::vector< double > &)> errorfunction
std::function< double(const std::vector< double > &, const std::vector< double > &)> contentfunction
Fit the contributions use template histograms to a target histogram.
void Fit()
Run the fit.
TemplateFitter(std::shared_ptr< MSGTool > MSG)
std::vector< double > sf
double GetSF(uint64_t i)
Get the scale factors for ith template.
double GetChi2()
Get the fit .
std::vector< double > sfmin
void SetFitRange(int min, int max)
Set the fit range.
std::vector< TH1D * > vh
void Clear()
Clear this tool.
double GetSFError(uint64_t i)
Get the uncertainty of the scale factors for ith template.
void SetTarget(TH1D *h)
Set the target histogram.
void SetTemplate(TH1D *h, double SF=1, bool fix=false)
Set the template histogram.
std::vector< bool > isfixed
std::function< double(const std::vector< double > &, const std::vector< double > &, const std::vector< double > &)> errorfunction
std::function< double(const std::vector< double > &, const std::vector< double > &)> contentfunction
std::vector< double > sferr
void SetRelation(std::function< double(const std::vector< double > &, const std::vector< double > &)>, std::function< double(const std::vector< double > &, const std::vector< double > &, const std::vector< double > &)>)
Set the relation between the target histogram and the template histograms. if not called,...
std::vector< double > sfmax
Provide interface for all tools in NAGASH.
Definition Tool.h:72