Double_t CalculateNLL(Double_t *par) { Double_t fval = 0.0; Int_t nx = hist->GetNbinsX(); Int_t ny = hist->GetNbinsY(); for(Int_t ix = 1; ix <= nx; ix++) { for(Int_t iy = 1; iy <= ny; iy++) { Int_t MC_N = hist->GetBinContent(ix, iy); Double_t x_f_2 = 0.04*ix - 0.02; Double_t costheta_2 = 0.04*iy -1.02; Double_t pdf = (1.5*B_f*M_PI*beta_val*alpha*alpha*Function_Theta(x_f_2, costheta_2, par))/s; //Lum : 1e9 pb , cross section : pb-1 Double_t mu = pdf*0.04*0.04*1e9*3.87e8; Double_t Li = pow(mu,MC_N)*exp(-mu); if (mu > 0) { fval += mu - MC_N * log(mu); fval += logFactorial(MC_N); } } } return fval; } void FCN_NLL(Int_t &npar, Double_t *gin, Double_t &fval, Double_t *par, Int_t iflag) { fval = CalculateNLL(par); } void Fit_chis_WithoutScan_Delta_AY_Reco() { PrepareHistogram(); TMinuit *mMinuit = new TMinuit(3); mMinuit->SetFCN(FCN_NLL); Double_t arglist[10]; Int_t ierflg = 0; arglist[0] = 2; mMinuit->mnexcm("SET PRI", arglist, 1, ierflg); arglist[0] = 0.5; mMinuit->mnexcm("SET ERR", arglist, 1, ierflg); Double_t step = 0.0001; mMinuit->mnparm(0, "deltaAy", 0.001, step, 0.0, 0.0, ierflg); mMinuit->mnparm(1, "deltaAz", 0.001, step, 0.0, 0.0, ierflg); mMinuit->mnparm(2, "deltaBz", 0.001, step, 0.0, 0.0, ierflg); arglist[0] = 50000; arglist[1] = 1e-5; mMinuit->mnexcm("MIGRAD", arglist, 2, ierflg); mMinuit->mnexcm("HESSE", 0, 0, ierflg); }