#include "TSystem.h" #include "TROOT.h" #include "TFile.h" #include "TH1D.h" #include "RooRealVar.h" #include "RooCategory.h" #include "RooDataHist.h" #include "RooGenericPdf.h" #include "RooAddPdf.h" #include "RooPlot.h" #include "RooSimultaneous.h" #include "TCanvas.h" #include void test_minimal() { //////// // ROOFIT INCLUSION gSystem->Load("libRooFit"); using namespace RooFit; //////// // VARIABLE AND INTERVAL DEFINITIONS double minx = 139.75; double maxx = 164.75; // Variable RooRealVar* x = new RooRealVar("x", "x", minx,maxx); //////// // EXECUTION OPTIONS bool simultaneous = false; //////// // LOAD HISTOGRAM DATA TH1D* h_data; RooDataHist* data; RooAddPdf* pdf_all; // Open files TFile* file_data; file_data = new TFile("testFit.root"); // Fill histograms and create RooDataHists h_data = (TH1D*)file_data->Get("deltaM_7"); data = new RooDataHist("Data mass distribution", "", RooArgList(*x), h_data); //////// // CREATE SIMULTANEOUS OBJECTS // Fit categories RooCategory* sim_names = new RooCategory("sim_names","sim_names"); sim_names->defineType("bin_7"); // Data std::map histMap; histMap.insert(std::make_pair("bin_7",data)); RooDataHist* sim_data = new RooDataHist("sim data", "sim data", RooArgList(*x),*sim_names, histMap); // PDFs RooSimultaneous* sim_pdf = new RooSimultaneous("sim pdf","sim pdf",*sim_names); // Define signal pdf --> modified gaussian RooRealVar* mean = new RooRealVar("mean_7","mean_7",145,140,150); RooRealVar* sigma = new RooRealVar("sigma_7","sigma_7",0.4,0.3,1); RooGenericPdf* pdf_sig = new RooGenericPdf("pdf_sig_7", "pdf_sig_7", "exp(-0.5*pow(abs((@0-@1)/@2),(1.+1./(1.+0.5*abs((@0-@1)/@2)))))", RooArgSet(*x,*mean,*sigma)); // Define background pdfs --> power * exponential RooRealVar* alpha = new RooRealVar("alpha_7","alpha_7",0.5,0.2,1.5); RooRealVar* beta = new RooRealVar("beta_7","beta_7",0.03,0.001,0.2); RooGenericPdf* pdf_bkg = new RooGenericPdf("pdf_bkg_7", "pdf_bkg_7", "pow(@0-139.57,@1)*exp(-@2*(@0-139.57))", RooArgSet(*x,*alpha,*beta)); // Define composite pdf RooRealVar* nsig = new RooRealVar("nsig_7","nsig_7", 100, 1, 1000000); RooRealVar* nbkg = new RooRealVar("nbkg_7","nbkg_7", 100, 1, 1000000); pdf_all = new RooAddPdf("pdf_all_7","pdf_sig_7+pdf_bkg_7",RooArgList(*pdf_sig,*pdf_bkg),RooArgList(*nsig,*nbkg)); // Add PDF to the simultaneous one sim_pdf->addPdf(*pdf_all,"bin_7"); //////// // PERFORM FIT if(simultaneous) sim_pdf->fitTo(*sim_data,Minos(RooArgSet(*alpha,*beta,*mean,*sigma,*nsig,*nbkg)),Hesse(kTRUE),Range(minx,maxx)); else pdf_all->fitTo(*data,Minos(RooArgSet(*alpha,*beta,*mean,*sigma,*nsig,*nbkg)),Hesse(kTRUE),Range(minx,maxx)); //////// // PLOTS TCanvas *canvas = new TCanvas(); // Plot RooPlot *dataPlot = new RooPlot("Data mass distribution", "", *x, minx, maxx, 200); data->plotOn(dataPlot); pdf_all->plotOn(dataPlot,LineColor(2)); pdf_all->paramOn(dataPlot,Layout(0.55,0.92,0.60)); dataPlot->Draw(); canvas->cd(); }