#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main ( int n_args, const char** args ) { long n_sig5 = 1000; long n_sig3 = 1000; if ( n_args > 1 ) n_sig5 = atoi( args[1] ); if ( n_args > 2 ) n_sig3 = atoi( args[2] ); TRandom3* num_gen = new TRandom3( 0 ); TH1D* hist_sig3 = new TH1D( "hist_sig3", "", 40, -20, 20 ); hist_sig3 -> Sumw2( ); for ( int i=0; i Fill( num_gen->Gaus(0,3) ); TH1D* hist_sig5 = new TH1D( "hist_sig5", "", 40, -20, 20 ); hist_sig5 -> Sumw2( ); for ( int i=0; i Fill( num_gen->Gaus(0,5) ); RooRealVar* function_range = new RooRealVar( "function_range", "", -20, 20 ); RooDataHist* roohist_sig5 = new RooDataHist ( "roohist_sig5", "roohist_sig5", *function_range, RooFit::Import(*hist_sig5) ); RooDataHist* roohist_sig3 = new RooDataHist ( "roohist_sig3", "roohist_sig3", *function_range, RooFit::Import(*hist_sig3) ); RooHistPdf* roopdf_sig3 = new RooHistPdf ( "roopdf_sig3", "sig3-pdf", *function_range, *roohist_sig3 ); RooRealVar* g_mean = new RooRealVar( "g_mean", "", 0.0 ); RooRealVar* g_sigma = new RooRealVar( "g_sigma", "", 2.5, 0.1, 6.0 ); RooGaussian* g_smearing = new RooGaussian( "g_smearing", "gauss-fit", *function_range, *g_mean, *g_sigma ); RooFFTConvPdf* conv_pdf = new RooFFTConvPdf( "conv_pdf", "conv-pdf", *function_range, *roopdf_sig3, *g_smearing ); conv_pdf -> fitTo ( *roohist_sig5, RooFit::Save( ), RooFit::Range( -20, 20 ) ); TF1* fit_func = conv_pdf->asTF( *function_range, RooArgList( *g_mean, *g_sigma ), *function_range ); printf( "TF1 integral: %.5f\n", fit_func->Integral( -10, 10 ) ); TCanvas* canvas = new TCanvas( ); canvas -> cd( ); hist_sig5 -> SetMarkerStyle( 21 ); hist_sig5 -> SetMarkerColor( kBlack ); hist_sig5 -> SetLineWidth( 1 ); hist_sig5 -> SetLineColor( kBlack ); hist_sig5 -> Draw( "ep" ); hist_sig3 -> SetMarkerStyle( 21 ); hist_sig3 -> SetMarkerColor( kAzure+2 ); hist_sig3 -> SetLineWidth( 1 ); hist_sig3 -> SetLineColor( kAzure+2 ); hist_sig3 -> Draw( "hist same" ); fit_func -> SetLineWidth( 2 ); fit_func -> SetLineColor( kOrange+2 ); //fit_func -> Draw( "same" ); fit_func -> Draw( ); canvas -> SaveAs( "plot_convfit.png" ); delete roohist_sig5; delete roohist_sig3; delete roopdf_sig3; delete function_range; delete g_mean; delete g_sigma; delete hist_smearing; delete conv_pdf; delete hist_sig3; delete hist_sig5; return 0; }