constexpr Double_t Pi() { return 3.14159265358979323846; } Double_t fit_firstder_one(Double_t *x1_one, Double_t *par1_one) { Double_t arg1_one = 0; Double_t arg1_0_one = 0; if (par1_one[2] != 0) { arg1_one = (x1_one[0] - par1_one[1])/par1_one[2]; arg1_0_one = (x1_one[0] - par1_one[1])/(par1_one[2]*par1_one[2]); } Double_t fitval1_one= -par1_one[0]*TMath::Exp(-0.5*arg1_one*arg1_one)*arg1_0_one; return fitval1_one; } void Demo() { gStyle->SetOptStat(2211); gStyle->SetOptFit(1111); // DEFINING CANVAS TCanvas *c1 = new TCanvas("c1","Without constraint",700,1000); c1->Divide(1,3); TH1D*h2 = new TH1D("h2","set bin center", 100,40,140); TH1D*h3 = new TH1D("h3","set bin center:error", 100,40,140); Double_t LowerLimit_Mass_one = 44; Double_t UpperLimit_Mass_one = 132; Int_t no_par_one = 3; TFile *file1=new TFile("Tot.root"); TH1D *h1 = (TH1D*)file1->Get("Tot"); c1->cd(1); h1->Draw("HIST E1"); Double_t error_A; Double_t A = h1->IntegralAndError(1, h1->GetNbinsX(), error_A, ""); std::cout << "Int_A (excluding underflow and overflow bins) = " << A<< " +- " <IntegralAndError(0, (h1->GetNbinsX() + 1), error_A1, ""); // "" or "width" std::cout << "Int_A (including underflow and overflow bins) = " << A1<< " +- " <SetTextSize(0.04); pt_h1->SetFillColor(0); pt_h1->SetTextAlign(12); pt_h1->AddText(Form("Integral =""%f""+/-""%f", A , error_A)); pt_h1->Draw(); //--------------- Fitting first derivative with 1 gauss ----------------------- TF1 *f12_firstder_one_root = new TF1("fit_firstder_one_root",fit_firstder_one ,LowerLimit_Mass_one,UpperLimit_Mass_one,no_par_one); f12_firstder_one_root ->SetLineColor(2); f12_firstder_one_root ->SetParameter(0,1000); f12_firstder_one_root ->SetParLimits(0,1.5,1e8); f12_firstder_one_root->FixParameter(1, 88); f12_firstder_one_root ->SetParameter(2, 13); f12_firstder_one_root ->SetParLimits(2,1,30); Int_t nbins = h1->GetNbinsX(); for(Int_t i=0;iGetBinContent(i); double a_cent=h1->GetBinCenter(i); double a_err=h1->GetBinError(i); double h=h1->GetBinContent(i+6); double h_cent=h1->GetBinCenter(i+6); double h_err=h1->GetBinError(i+6); //7 bins double d_7_gauss = (h-a)/(h_cent-a_cent); double d_mid_7_gauss = (h_cent+a_cent)/2; double d_mid_7_gauss_err = (1/(h_cent-a_cent))*TMath::Sqrt(pow(h_err,2)+pow(a_err,2)); h2->SetBinContent(i+3,d_7_gauss); h3->Fill(d_mid_7_gauss,d_7_gauss); } c1->cd(2); h2->SetMarkerStyle(24); h2->SetMarkerColor(1); h2->SetLineColor(6); h2->SetMarkerSize(0.4); h2->Draw("HIST"); h2->Fit("fit_firstder_one_root"); f12_firstder_one_root->Draw("same"); TPaveText *pt_h15 = new TPaveText(0.4,0.6,0.7,0.75,"brNDC"); pt_h15->SetTextSize(0.04); pt_h15->SetFillColor(0); pt_h15->SetTextAlign(12); pt_h15->AddText(Form("Integral =""%i""+/-""%f",TMath::Nint(TMath :: Sqrt(2*Pi())*f12_firstder_one_root->GetParameter(0)*f12_firstder_one_root->GetParameter(2)), (TMath:: Sqrt(2*Pi()*(pow(f12_firstder_one_root->GetParameter(2),2)*pow(f12_firstder_one_root->GetParError(0),2) + pow(f12_firstder_one_root->GetParameter(0),2)*pow(f12_firstder_one_root->GetParError(2),2)) ) ))); pt_h15->AddText(Form("Area =""%f""+/-""%f", ((TMath :: Sqrt(2*Pi())*f12_firstder_one_root->GetParameter(0)*f12_firstder_one_root->GetParameter(2))/A)*100 , (TMath:: Sqrt(2*Pi()*(pow(f12_firstder_one_root->GetParameter(2),2)*pow(f12_firstder_one_root->GetParError(0),2) + pow(f12_firstder_one_root->GetParameter(0),2)*pow(f12_firstder_one_root->GetParError(2),2)) )/A)*100 )); pt_h15->Draw(); c1->cd(3); h3->SetMarkerStyle(24); h3->SetMarkerColor(1); h3->SetLineColor(1); h3->SetMarkerSize(0.4); h3->Draw("HIST"); h3->Fit("fit_firstder_one_root"); f12_firstder_one_root->Draw("same"); TPaveText *pt_h16 = new TPaveText(0.4,0.6,0.7,0.75,"brNDC"); pt_h16->SetTextSize(0.04); pt_h16->SetFillColor(0); pt_h16->SetTextAlign(12); pt_h16->AddText(Form("Integral =""%i""+/-""%f",TMath::Nint(TMath :: Sqrt(2*Pi())*f12_firstder_one_root->GetParameter(0)*f12_firstder_one_root->GetParameter(2)), (TMath:: Sqrt(2*Pi()*(pow(f12_firstder_one_root->GetParameter(2),2)*pow(f12_firstder_one_root->GetParError(0),2) + pow(f12_firstder_one_root->GetParameter(0),2)*pow(f12_firstder_one_root->GetParError(2),2)) ) ))); pt_h16->AddText(Form("Area =""%f""+/-""%f", ((TMath :: Sqrt(2*Pi())*f12_firstder_one_root->GetParameter(0)*f12_firstder_one_root->GetParameter(2))/A)*100 , (TMath:: Sqrt(2*Pi()*(pow(f12_firstder_one_root->GetParameter(2),2)*pow(f12_firstder_one_root->GetParError(0),2) + pow(f12_firstder_one_root->GetParameter(0),2)*pow(f12_firstder_one_root->GetParError(2),2)) )/A)*100 )); pt_h16->Draw(); }