double onebin; Double_t gausPeak(Double_t *x, Double_t *par) { //return par[0]/sqrt(2.0*TMath::Pi()*par[2]*par[2]) //*exp(-(x[0]-par[1])*(x[0]-par[1])/(2.0 * par[2] * par[2])); return par[0]*exp(-(x[0]-par[1])*(x[0]-par[1])/(2.0 * par[2] * par[2])); //return (onebin*par[0]*par[1])/(2.0*TMath::Pi())/ //TMath::Max(1.e-10, (x[0]-par[2])*(x[0]-par[2]) + 0.25*par[1]*par[1]); } Double_t background(Double_t *x, Double_t *par) { return par[0] + par[1]*x[0] + par[2]*x[0]**2 + par[3]*x[0]**3; //return par[0] + par[1]*x[0] + par[2]*x[0]**2; } Double_t fitFunction(Double_t *x, Double_t *par) { return background(x,par) + gausPeak(x, &par[4]); } void fitGausBack(TH1F *h1) { //onebin=(1.6-1.5)/(h1->GetXaxis()->FindBin(1.6)-h1->GetXaxis()->FindBin(1.5)); TF1 *fitFcn = new TF1("fitFcn", fitFunction, 1.1, 1.25, 7); TF1 *backFcn = new TF1("backFcn", background, 1.1, 1.25, 4); TF1 *signalFcn = new TF1("signalFcn", gausPeak, 1.1, 1.25, 4); h1->Fit("backFcn","","",1.1,1.2); //fitFcn->SetParameter(0, -5.6e+6); //fitFcn->SetParameter(1, 1.07e+7); //fitFcn->SetParameter(2, -6.8e+6); //fitFcn->SetParameter(3, 1.45e+6); fitFcn->SetParameter(0, backFcn->GetParameter(0)); fitFcn->SetParameter(1, backFcn->GetParameter(1)); fitFcn->SetParameter(2, backFcn->GetParameter(2)); fitFcn->SetParameter(3, backFcn->GetParameter(3)); fitFcn->SetParameter(4, 40); fitFcn->SetParameter(5, 1.21); fitFcn->SetParameter(6, 0.01); h1->Fit("fitFcn","","",1.1,1.25); backFcn->SetParameter(0, fitFcn->GetParameter(0)); backFcn->SetParameter(1, fitFcn->GetParameter(1)); backFcn->SetParameter(2, fitFcn->GetParameter(2)); backFcn->SetParameter(3, fitFcn->GetParameter(3)); backFcn->Draw("same"); signalFcn->SetParameter(0, fitFcn->GetParameter(4)); signalFcn->SetParameter(1, fitFcn->GetParameter(5)); signalFcn->SetParameter(2, fitFcn->GetParameter(6)); signalFcn->Draw("same"); double mean, width; double x1,x2; int bin1, bin2; int n; double probability; double sigma; sigma = 3.0; width = fitFcn->GetParameter(5); mean = fitFcn->GetParameter(6); x1 = mean - sigma*width/2.0; x2 = mean + sigma*width/2.0; bin1 = h1->GetXaxis()->FindBin(x1); bin2 = h1->GetXaxis()->FindBin(x2); n = h1->Integral(bin1, bin2); //probability = (double)n/(double)h1->GetEntries(); //printf("n=%d pro=%f\n", n, probability); TLine *l1 = new TLine(x1, 0, x1, 20000); TLine *l2 = new TLine(x2, 0, x2, 20000); l1->SetLineColor(kRed); l2->SetLineColor(kRed); l1->Draw("same"); l2->Draw("same"); }