24 double gauss2D(
double *
x,
double *
par) {
25 double z1 = double((x[0]-par[1])/par[2]);
26 double z2 = double((x[1]-par[3])/par[4]);
27 return par[0]*
exp(-0.5*(z1*z1+z2*z2));
29 double my2Dfunc(
double *x,
double *par) {
32 return gauss2D(x,p1) + gauss2D(x,p2);
39 std::vector<std::pair<double, double> > coords;
40 std::vector<double > values;
41 std::vector<double > errors;
45 int n = coords.size();
48 for (
int i = 0; i <
n; ++i ) {
49 x[0] = coords[i].first;
50 x[1] = coords[i].second;
51 tmp = ( values[i] - my2Dfunc(x,p))/errors[i];
57 void FillHisto(
TH2D *
h,
int n,
double * p) {
60 const double mx1 = p[1];
61 const double my1 = p[3];
62 const double sx1 = p[2];
63 const double sy1 = p[4];
64 const double mx2 = p[6];
65 const double my2 = p[8];
66 const double sx2 = p[7];
67 const double sy2 = p[9];
69 const double w1 = 0.5;
72 for (
int i = 0; i <
n; ++i) {
76 double r = rndm.
Rndm(1);
93 int TwoHistoFit2D(
bool global =
true) {
110 TH2D *
h1 =
new TH2D(
"h1",
"core",nbx1,xlow1,xup1,nby1,ylow1,yup1);
111 TH2D * h2 =
new TH2D(
"h2",
"tails",nbx2,xlow2,xup2,nby2,ylow2,yup2);
113 double iniParams[10] = { 100, 6., 2., 7., 3, 100, 12., 3., 11., 2. };
115 TF2 *
func =
new TF2(
"func",my2Dfunc,xlow2,xup2,ylow2,yup2, 10);
123 FillHisto(h1,n1,iniParams);
124 FillHisto(h2,n2,iniParams);
127 double dx1 = (xup1-xlow1)/
double(nbx1);
128 double dy1 = (yup1-ylow1)/
double(nby1);
129 double dx2 = (xup2-xlow2)/
double(nbx2);
130 double dy2 = (yup2-ylow2)/
double(nby2);
135 h2->
Scale( (
double(n1) * dx1 * dy1 ) / (
double(n2) * dx2 * dy2 ) );
140 std::cout <<
"Do global fit" << std::endl;
155 coords = std::vector<std::pair<double,double> >();
156 values = std::vector<double>();
157 errors = std::vector<double>();
160 for (
int ix = 1; ix <= nbinX1; ++ix) {
161 for (
int iy = 1; iy <= nbinY1; ++iy) {
169 for (
int ix = 1; ix <= nbinX2; ++ix) {
170 for (
int iy = 1; iy <= nbinY2; ++iy) {
181 for (
int i = 0; i < 10; ++i) {
197 double minParams[10];
198 double parErrors[10];
199 for (
int i = 0; i < 10; ++i) {
203 double chi2, edm, errdef;
205 minuit->
GetStats(chi2,edm,errdef,nvpar,nparx);
210 int ndf = coords.size()-nvpar;
213 std::cout <<
"Chi2 Fit = " << chi2 <<
" ndf = " << ndf <<
" " << func->
GetNDF() << std::endl;
228 TCanvas *
c1 =
new TCanvas(
"c1",
"Two HIstogram Fit example",100,10,900,800);
235 func->
SetRange(xlow1,ylow1,xup1,yup1);
241 func->
SetRange(xlow2,ylow2,xup2,yup2);
247 func->
Draw(
"surf1 same");
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
virtual void SetParameters(const Double_t *params)
virtual void Rannor(Float_t &a, Float_t &b)
Return 2 numbers distributed following a gaussian with mean=0 and sigma=1.
Random number generator class based on M.
virtual void Draw(Option_t *option="")
Draw this function with its current attributes.
virtual Double_t Rndm()
Machine independent random number generator.
virtual Int_t SetParameter(Int_t ipar, const char *parname, Double_t value, Double_t verr, Double_t vlow, Double_t vhigh)=0
R__EXTERN TStyle * gStyle
static void SetDefaultFitter(const char *name="")
static: set name of default fitter
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
virtual Double_t GetParameter(Int_t ipar) const =0
void SetStatY(Float_t y=0)
virtual Int_t GetNDF() const
Return the number of degrees of freedom in the fit the fNDF parameter has been previously computed du...
static double p2(double t, double a, double b, double c)
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
virtual void SetFCN(void *fcn) R__DEPRECATED(6
To set the address of the minimization objective function.
virtual Double_t GetParError(Int_t ipar) const =0
virtual const char * GetParName(Int_t ipar) const
virtual void SetChisquare(Double_t chi2)
Class to manage histogram axis.
virtual void Draw(Option_t *option="")
Draw this histogram with options.
void SetOptFit(Int_t fit=1)
The type of information about fit parameters printed in the histogram statistics box can be selected ...
virtual Int_t ExecuteCommand(const char *command, Double_t *args, Int_t nargs)=0
static double p1(double t, double a, double b)
A 2-Dim function with parameters.
virtual Int_t GetStats(Double_t &amin, Double_t &edm, Double_t &errdef, Int_t &nvpar, Int_t &nparx) const =0
virtual void SetRange(Double_t xmin, Double_t xmax)
Initialize the upper and lower bounds to draw the function.
virtual TF1 * DrawCopy(Option_t *option="") const
Draw a copy of this function with its current attributes-*.
double func(double *x, double *p)
THist< 2, double, THistStatContent, THistStatUncertainty > TH2D
Abstract Base Class for Fitting.
static TVirtualFitter * Fitter(TObject *obj, Int_t maxpar=25)
Static function returning a pointer to the current fitter.
virtual void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0)
Automatic pad generation by division.
virtual void Add(TObject *obj)
virtual void SetParErrors(const Double_t *errors)
Set errors for all active parameters when calling this function, the array errors must have at least ...
virtual Double_t GetParameter(Int_t ipar) const
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
virtual void SetNDF(Int_t ndf)
Set the number of degrees of freedom ndf should be the number of points used in a fit - the number of...
virtual Int_t GetNbinsX() const
Int_t Fill(Double_t)
Invalid Fill method.
TList * GetListOfFunctions() const
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
Fit histogram with function fname.
virtual Int_t GetNbinsY() const
virtual Double_t GetBinError(Int_t bin) const
Return value of error associated to bin number bin.
tomato 2-D histogram with a double per channel (see TH1 documentation)}