void macro() { auto h1 = new TH1D("h1_gaus","Mass original (amu); Mass;Counts",202.0,39.5,140.5); auto h1_smeared = new TH1D("h1_gaus_smeared","Smeared Mass (amu);Mass; Counts",202.0,39.5,140.5); double amu=0; for(long int i=0;i<100000;i++) { amu=gRandom->Gaus(87.52,12.); h1->Fill( amu ); h1_smeared->Fill( amu + gRandom->Gaus(0,3.5)); } for(long int i=0;i<20000;i++) { amu=gRandom->Gaus(105.,20.); h1->Fill( amu ); h1_smeared->Fill( amu + gRandom->Gaus(0,3.5)); } TF1Convolution *f_conv = new TF1Convolution("gaus(0)+gaus(3)", "gaus", 30.,150., true); f_conv->SetRange(30.,150.); f_conv->SetNofPointsFFT(1000); TF1 *f = new TF1("f", *f_conv, 40., 140., f_conv->GetNpar()); TF1 *f_gaus = new TF1("f_gaus_original","gaus(0)+gaus(3)", 40., 140.); f->SetParLimits(0,0.,1e6); f->SetParLimits(3,0.,1e6); f->SetParLimits(1,60.,120.); f->SetParLimits(4,60.,120.); f->SetParLimits(2,1.,100.); f->SetParLimits(5,1.,100.); f->SetParNames("A_{1}","#mu_{1}","#sigma_{1}","A_{2}","#mu_{2}","#sigma_{2}","Amplitude Convolution","#mu_conv","#sigma_res"); f->SetParameters(1e4,90.,13., 100 ,90,30, 1000,0.,3.5); f->FixParameter(f_conv->GetNpar() -3 ,1.); f->FixParameter(f_conv->GetNpar() -2 ,0.); f->FixParameter(f_conv->GetNpar()-1, 3.5); TCanvas *c = new TCanvas("c","c",800,1000); c->Divide(1,2); c->cd(1); h1->Draw(); c->cd(2); h1_smeared->Draw(); h1_smeared->Fit(f,"ME"); c->cd(1); f_gaus->SetParameters(f->GetParameters()); double convoluted_gauss_area= 3.5*TMath::Sqrt(2*TMath::Pi()); f_gaus->SetParameter(0,convoluted_gauss_area*f_gaus->GetParameter(0)); f_gaus->SetParameter(3,convoluted_gauss_area*f_gaus->GetParameter(3)); f_gaus->Draw("same"); }