Thank you Wile_E_Coyote for helping me. I still have issue with background integral error which is given me zero and the number of the events in the background is larger than the total number. Also I notice that chi2/ndf is too large. That mean there is some thing wrong I made it which I don’t know what exactly is. Could you please help me
void electronPionID(){
gStyle->SetOptFit(11111);
const Bool_t use_partial_covariances = kFALSE; // kFALSE or kTRUE
TFile *f= TFile::Open("histneutronefficincy.hipo.root");
TH2D *h1 = new TH2D("h1","",150 , 0, 10,150,0,2);
h1= (TH2D*)f->Get("NDE_mmVSmp_exp");
TH1D *g1 = h1->ProjectionY();
TH1D *g2 = h1->ProjectionX();
TF1 *fg = new TF1("fg", "gaus(0)");
TF1 *fbc = new TF1("fbc", "pol2(3)");
//Int_t ch_min = 0.8, ch_max = 1.1; // "channel numbers"
TF1 *f1 = new TF1("f1", "gaus(0) + pol2(3)", 0.70,1.13);
f1->SetParameters(1, 1, 0.2, 1, 1,1);
TFitResultPtr r1 = g1->Fit(f1, "WEMRS");
std::cout << "r1) = " << r1 << std::endl;
TMatrixD c1 = r1->GetCovarianceMatrix();
c1.Print();
TMatrixD c1g = c1.GetSub(0, 2, 0, 2);
c1g.Print();
if (use_partial_covariances) c1g -=
c1.GetSub(0, 2, 3, 5) *
c1.GetSub(3, 5, 3, 5).InvertFast() *
c1.GetSub(3, 5, 0, 2);
Double_t N_sig, N_sigErr, N_bg, N_bgErr, N_tot, N_totErr;
// Getting Number of events in the signal peak
fg->SetParameters(f1->GetParameters());
N_sig = fg->Integral(fg->GetParameter(1) -(3.0*fg->GetParameter(2)), fg->GetParameter(1)+(3.0 * fg->GetParameter(2)))/g1->GetBinWidth(1);
N_sigErr= fg->IntegralError(fg->GetParameter(1) -(3.0*fg->GetParameter(2)), fg->GetParameter(1)+(3.0 * fg->GetParameter(2)),fg->GetParameters(),c1g.GetMatrixArray())/g1->GetBinWidth(1);
std::cout << "Number of events in signal peak (mean +/- 3 sigma) = " << N_sig
<< " +/- " << N_sigErr
<< std::endl;
// Getting Number of events in the back ground
fbc->SetParameters(f1->GetParameters());
N_bg = fbc->Integral(fg->GetParameter(1)-(3.0*fg->GetParameter(2)), fg->GetParameter(1)+(3.0 * fg->GetParameter(2)))/g1->GetBinWidth(1);
N_bgErr = fbc->IntegralError(fg->GetParameter(1) -(3.0*fg->GetParameter(2)), fg->GetParameter(1)+(3.0 * fg->GetParameter(2)),fbc->GetParameters(),c1g.GetMatrixArray())/g1->GetBinWidth(1);
std::cout << "Number of events in background (mean +/- 3 sigma) = " << N_bg
<< " +/- " << N_bgErr
<< std::endl;
// Getting Number of events for Both
N_tot= f1->Integral(fg->GetParameter(1)-(3.0*fg->GetParameter(2)), fg->GetParameter(1)+(3.0 * fg->GetParameter(2)))/g1->GetBinWidth(1);
N_totErr = f1->IntegralError(fg->GetParameter(1)-(3.0*fg->GetParameter(2)), fg->GetParameter(1)+(3.0 * fg->GetParameter(2)),f1->GetParameters(),c1g.GetMatrixArray())/g1->GetBinWidth(1);
std::cout << " Number of the total events = " << N_tot
<< " +/- " << N_totErr
<< std::endl;
double integral = f1->GetParameter(0) * f1->GetParameter(2) * TMath::Sqrt(TMath::TwoPi()) / g1->GetBinWidth(0);
double integralErr = integral * sqrt(pow(f1->GetParError(0) / f1->GetParameter(0), 2) + pow(f1->GetParError(2) / f1->GetParameter(2), 2));
std::cout << " Number of sig = " << integral
<< " +/- " << integralErr
<< std::endl;
double x1,x2;
x1= f1->GetParameter(1)-(3.0*f1->GetParameter(2));
x2= f1->GetParameter(1)+(3.0 * f1->GetParameter(2));
TF1 * fSig = new TF1("fSig","gaus",x1, x2);
// Set the values of the gaussian and parabola
for (int ipar=0;ipar<3;ipar++){
fSig->SetParameter(ipar,f1->GetParameter(ipar));
//fbc->SetParameter(ipar,f1->GetParameter(ipar+3));
}
TCanvas *c = new TCanvas("c", "c",1100,800);
c->Divide(1, 2);
TLatex *latex = new TLatex();
TLatex *latex1 = new TLatex();
TLatex *latex2 = new TLatex();
c->Print("test1.pdf[");
c->cd(1);
g1->Draw();
latex->DrawLatexNDC(0.13,0.80,Form("total: %.2f +/- %.2f", N_tot, N_totErr));
latex1->DrawLatexNDC(0.13,0.74,Form(" sig: %.2f +/- %.2f",N_sig, N_sigErr));
latex2->DrawLatexNDC(0.13,0.69,Form("bacground : %.2f +/- %.2f",N_bg, N_bgErr));
fSig->SetLineColor(kBlue);
fSig->DrawClone("Same");
//fbc->DrawClone("Same");
c->Print("test1.pdf");
c->cd(2);
h1->Draw("colz");
//c->Print("test1.pdf");
c->cd(0);
c->Print("test1.pdf]");
}