How to get information from RooMinimizer

Dear all,

I’m making what is the best parameter list which is like that:
h1=par[0]h11+par[1]h21+par[2]h31+par[3]h41+par[4]h51
h2=par[0]h12+par[1]h22+par[2]h32+par[3]h42+par[4]h52
h3=par[0]h13+par[1]h23+par[2]h33+par[3]h43+par[4]h53

I would like to use class named “RooMinimizer” and finally got an
best par[*]. But I don’t known that how this class working. I want to
draw some figure, for example chi2 distribution or stability of each parameters. My question is that how I could get that?
I find a reference like here:https://home.ba.infn.it/~pompili/teaching/data_analysis_lab/Verkerke-RooFit-part3.pdf

RooRealVar x(“x”, “x”, 500, 1500);
RooRealVar x1(“x1”, “x1”, 1000, 2000);
RooRealVar x2(“x2”, “x2”, 1400, 2400);

RooDataHist dh_mc1(“dh_mc1”, “dh_mc1”, x, h11);
RooDataHist dh_mc2(“dh_mc2”, “dh_mc2”, x, h21);
RooDataHist dh_mc3(“dh_mc3”, “dh_mc3”, x, h31);
RooDataHist dh_mc4(“dh_mc4”, “dh_mc4”, x, h41);
RooDataHist dh_mc5(“dh_mc5”, “dh_mc5”, x, h51);
RooDataHist dh_data(“dh_data”, “dh_data”, x, h1);

RooDataHist dh_mc11(“dh_mc11”, “dh_mc11”, x1, h12);
RooDataHist dh_mc22(“dh_mc22”, “dh_mc22”, x1, h22);
RooDataHist dh_mc33(“dh_mc33”, “dh_mc33”, x1, h32);
RooDataHist dh_mc44(“dh_mc44”, “dh_mc44”, x1, h42);
RooDataHist dh_mc55(“dh_mc55”, “dh_mc55”, x1, h52);
RooDataHist dh_data1(“dh_data1”, “dh_data1”, x1, h2);

RooDataHist dh_mc111(“dh_mc111”, “dh_mc111”, x2, h13);
RooDataHist dh_mc222(“dh_mc222”, “dh_mc222”, x2, h23);
RooDataHist dh_mc333(“dh_mc333”, “dh_mc333”, x2, h33);
RooDataHist dh_mc444(“dh_mc444”, “dh_mc444”, x2, h43);
RooDataHist dh_mc555(“dh_mc555”, “dh_mc555”, x2, h53);
RooDataHist dh_data2(“dh_data2”, “dh_data2”, x2, h3);

RooHistPdf pdf_mc1(“pdf_mc1”, “pdf_mc1”, x, dh_mc1);
RooHistPdf pdf_mc2(“pdf_mc2”, “pdf_mc2”, x, dh_mc2);
RooHistPdf pdf_mc3(“pdf_mc3”, “pdf_mc3”, x, dh_mc3);
RooHistPdf pdf_mc4(“pdf_mc4”, “pdf_mc5”, x, dh_mc4);
RooHistPdf pdf_mc5(“pdf_mc5”, “pdf_mc6”, x, dh_mc5);

RooHistPdf pdf_mc11(“pdf_mc11”, “pdf_mc11”, x1, dh_mc11);
RooHistPdf pdf_mc22(“pdf_mc22”, “pdf_mc22”, x1, dh_mc22);
RooHistPdf pdf_mc33(“pdf_mc33”, “pdf_mc33”, x1, dh_mc33);
RooHistPdf pdf_mc44(“pdf_mc44”, “pdf_mc44”, x1, dh_mc44);
RooHistPdf pdf_mc55(“pdf_mc55”, “pdf_mc55”, x1, dh_mc55);

RooHistPdf pdf_mc111(“pdf_mc111”, “pdf_mc111”, x2, dh_mc111);
RooHistPdf pdf_mc222(“pdf_mc222”, “pdf_mc222”, x2, dh_mc222);
RooHistPdf pdf_mc333(“pdf_mc333”, “pdf_mc333”, x2, dh_mc333);
RooHistPdf pdf_mc444(“pdf_mc444”, “pdf_mc444”, x2, dh_mc444);
RooHistPdf pdf_mc555(“pdf_mc555”, “pdf_mc555”, x2, dh_mc555);

RooRealVar frac1(“frac1”, “fraction_mc1”, 0.3, 0, 1);
RooRealVar frac2(“frac2”, “fraction_mc2”, 0.4, 0, 1);
RooRealVar frac3(“frac3”, “fraction_mc3”, 0, 0, 1);
RooRealVar frac4(“frac4”, “fraction_mc4”, 0, 0, 1);
RooFormulaVar frac5(“frac5”, “1-frac1-frac2-frac3-frac4”,
RooArgList(frac1, frac2, frac3, frac4));

RooAddPdf model(“model”,
“frac1mc1 + frac2mc2 +frac3mc3+frac4mc4+ frac5mc5",
RooArgList(pdf_mc1, pdf_mc2, pdf_mc3, pdf_mc4, pdf_mc5),
RooArgList(frac1, frac2, frac3, frac4));
RooAddPdf model1(
“model1”, "frac1
mc11 + frac2mc22 + frac3mc33+frac4mc44+ frac5mc55”,
RooArgList(pdf_mc11, pdf_mc22, pdf_mc33, pdf_mc44, pdf_mc55),
RooArgList(frac1, frac2, frac3, frac4));
RooAddPdf model2(
“model2”,
“frac1mc111 + frac2mc222+frac3mc333+frac4mc444 + frac5*mc555”,
RooArgList(pdf_mc111, pdf_mc222, pdf_mc333, pdf_mc444, pdf_mc555),
RooArgList(frac1, frac2, frac3, frac4));

RooCategory channel(“channel”, “channel”);
channel.defineType(“ch0”);
channel.defineType(“ch1”);
channel.defineType(“ch2”);

RooSimultaneous simPdf(“simPdf”, “simultaneous pdf”, channel);
simPdf.addPdf(model, “ch0”);
simPdf.addPdf(model1, “ch1”);
simPdf.addPdf(model2, “ch2”);

RooDataHist combData(“combData”, “combined data”, RooArgList(x, x1, x2),
Index(channel), Import(“ch0”, dh_data),
Import(“ch1”, dh_data1), Import(“ch2”, dh_data2));

RooAbsReal* nll = simPdf.createNLL(combData, SumW2Error(kTRUE));
RooMinimizer minim(nll);
minim.setPrintLevel(1);
minim.setStrategy(1);
minim.migrad();
minim.hesse();
RooFitResult
fitres = minim.save();

std::cout << "Fitted frac1 = " << frac1.getVal() << std::endl;
std::cout << "Fitted frac2 = " << frac2.getVal() << std::endl;
std::cout << "Fitted frac3 = " << frac3.getVal() << std::endl;
std::cout << "Fitted frac4 = " << frac4.getVal() << std::endl;
std::cout << "Fitted frac5 = " << frac5.getVal() << std::endl;
std::cout << "sum= "
<< frac1.getVal() + frac2.getVal() + frac3.getVal() +
frac4.getVal() + frac5.getVal()
<< std::endl;

Hi @NuaaMtz,

thank you for your question. Please let me add @jonas to help you here.

Cheers,
Marta