#include #include #include std::vector vfunc; const int N = 4; TH1F *h[N]; bool reject; double fline(double *x, double *par) { if (reject && x[0] > 2.5 && x[0] < 3.5) { TF1::RejectPoint(); return 0; } return par[0] + par[1]*x[0]; } void fitExclude() { TF1 *f1 = new TF1("f1","[0] +[1]*x +gaus(2)",0,5); f1->SetParameters(6,-1,5,3,0.2); vfunc.clear(); for (int i = 0; i < N; ++i) { reject = true; if (i%2) reject = false; h[i] = new TH1F(Form("h%d",i),"background + signal",100,0,5); h[i]->FillRandom("f1",2000+i*100); TF1 *fl = new TF1("fl",fline,0,5,2); fl->SetParameters(2,-1); h[i]->Fit(fl,"QN"); std::cout << Form("Fit_%d, f(3) = %.4f",i,fl->Eval(3)) << std::endl; vfunc.emplace_back(fl); } } void drawFit() { fitExclude(); TCanvas *c = new TCanvas("c"); c->Divide(2,2); for (int i = 0; i < N; ++i) { c->cd(i+1); h[i]->DrawCopy(); vfunc[i]->DrawF1(0,5,"SAME"); std::cout << Form("Draw_%d, f(3) = %.4f",i,vfunc[i]->Eval(3)) << std::endl; } }