22 using namespace RooFit;
23 using namespace RooStats;
25 void rs701_BayesianCalculator(
bool useBkg =
true,
double confLevel = 0.90)
28 RooWorkspace *w =
new RooWorkspace(
"w",
true);
29 w->factory(
"SUM::pdf(s[0.001,15]*Uniform(x[0,1]),b[1,0,2]*Uniform(x))");
30 w->factory(
"Gaussian::prior_b(b,1,1)");
31 w->factory(
"PROD::model(pdf,prior_b)");
32 RooAbsPdf *model = w->pdf(
"model");
33 RooArgSet nuisanceParameters(*(w->var(
"b")));
35 RooAbsRealLValue *POI = w->var(
"s");
36 RooAbsPdf *priorPOI = (RooAbsPdf *)w->factory(
"Uniform::priorPOI(s)");
37 RooAbsPdf *priorPOI2 = (RooAbsPdf *)w->factory(
"GenericPdf::priorPOI2('1/sqrt(@0)',s)");
41 RooDataSet data(
"data",
"", RooArgSet(*(w->var(
"x")), *(w->var(
"n"))),
"n");
42 data.add(RooArgSet(*(w->var(
"x"))), w->var(
"n")->getVal());
45 RooMsgService::instance().setGlobalKillBelow(RooFit::FATAL);
47 RooArgSet *nuisPar = 0;
49 nuisPar = &nuisanceParameters;
52 double size = 1. - confLevel;
53 std::cout <<
"\nBayesian Result using a Flat prior " << std::endl;
54 BayesianCalculator bcalc(data, *model, RooArgSet(*POI), *priorPOI, nuisPar);
55 bcalc.SetTestSize(size);
56 SimpleInterval *interval = bcalc.GetInterval();
57 double cl = bcalc.ConfidenceLevel();
58 std::cout << cl <<
"% CL central interval: [ " << interval->LowerLimit() <<
" - " << interval->UpperLimit()
59 <<
" ] or " << cl + (1. - cl) / 2 <<
"% CL limits\n";
60 RooPlot *plot = bcalc.GetPosteriorPlot();
61 TCanvas *c1 =
new TCanvas(
"c1",
"Bayesian Calculator Result");
67 std::cout <<
"\nBayesian Result using a 1/sqrt(s) prior " << std::endl;
68 BayesianCalculator bcalc2(data, *model, RooArgSet(*POI), *priorPOI2, nuisPar);
69 bcalc2.SetTestSize(size);
70 SimpleInterval *interval2 = bcalc2.GetInterval();
71 cl = bcalc2.ConfidenceLevel();
72 std::cout << cl <<
"% CL central interval: [ " << interval2->LowerLimit() <<
" - " << interval2->UpperLimit()
73 <<
" ] or " << cl + (1. - cl) / 2 <<
"% CL limits\n";
75 RooPlot *plot2 = bcalc2.GetPosteriorPlot();