81 using namespace RooFit;
82 using namespace RooStats;
89 class BinCountTestStat :
public TestStatistic {
91 BinCountTestStat(
void) : fColumnName(
"tmp") {}
92 BinCountTestStat(
string columnName) : fColumnName(columnName) {}
94 virtual Double_t Evaluate(RooAbsData &data, RooArgSet & )
98 for (
int i = 0; i < data.numEntries(); i++) {
99 value += data.get(i)->getRealValue(fColumnName.c_str());
103 virtual const TString GetVarName()
const {
return fColumnName; }
109 ClassDef(BinCountTestStat, 1)
112 ClassImp(BinCountTestStat)
117 void HybridInstructional()
137 TCanvas *c =
new TCanvas;
146 RooWorkspace *w =
new RooWorkspace(
"w");
147 w->factory(
"Poisson::px(x[150,0,500],sum::splusb(s[0,0,100],b[100,0,300]))");
148 w->factory(
"Poisson::py(y[100,0,500],prod::taub(tau[1.],b))");
149 w->factory(
"PROD::model(px,py)");
150 w->factory(
"Uniform::prior_b(b)");
155 RooFit::MsgLevel msglevel = RooMsgService::instance().globalKillBelow();
158 ProofConfig *pc = NULL;
176 w->factory(
"PROJ::averagedModel(PROD::foo(px|b,py,prior_b),b)");
178 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR);
180 RooPlot *frame = w->var(
"x")->frame(Range(50, 230));
181 w->pdf(
"averagedModel")->plotOn(frame, LineColor(kRed));
182 w->pdf(
"px")->plotOn(frame, LineColor(kGreen));
183 w->var(
"s")->setVal(50.);
184 w->pdf(
"averagedModel")->plotOn(frame, LineColor(kBlue));
187 w->var(
"s")->setVal(0.);
194 w->var(
"y")->setVal(100);
195 w->var(
"x")->setVal(150);
196 RooAbsReal *cdf = w->pdf(
"averagedModel")->createCdf(*w->var(
"x"));
198 cout <<
"-----------------------------------------" << endl;
199 cout <<
"Part 2" << endl;
200 cout <<
"Hybrid p-value from direct integration = " << 1 - cdf->getVal() << endl;
201 cout <<
"Z_Gamma Significance = " << PValueToSignificance(1 - cdf->getVal()) << endl;
202 RooMsgService::instance().setGlobalKillBelow(msglevel);
211 double p_Bi = NumberCountingUtils::BinomialWithTauObsP(150, 100, 1);
212 double Z_Bi = NumberCountingUtils::BinomialWithTauObsZ(150, 100, 1);
213 cout <<
"-----------------------------------------" << endl;
214 cout <<
"Part 3" << endl;
215 std::cout <<
"Z_Bi p-value (analytic): " << p_Bi << std::endl;
216 std::cout <<
"Z_Bi significance (analytic): " << Z_Bi << std::endl;
240 w->defineSet(
"obs",
"x");
241 w->defineSet(
"poi",
"s");
244 RooDataSet *data =
new RooDataSet(
"d",
"d", *w->set(
"obs"));
245 data->add(*w->set(
"obs"));
250 ModelConfig b_model(
"B_model", w);
251 b_model.SetPdf(*w->pdf(
"px"));
252 b_model.SetObservables(*w->set(
"obs"));
253 b_model.SetParametersOfInterest(*w->set(
"poi"));
254 w->var(
"s")->setVal(0.0);
255 b_model.SetSnapshot(*w->set(
"poi"));
258 ModelConfig sb_model(
"S+B_model", w);
259 sb_model.SetPdf(*w->pdf(
"px"));
260 sb_model.SetObservables(*w->set(
"obs"));
261 sb_model.SetParametersOfInterest(*w->set(
"poi"));
262 w->var(
"s")->setVal(50.0);
263 sb_model.SetSnapshot(*w->set(
"poi"));
273 BinCountTestStat binCount(
"x");
295 w->factory(
"Gaussian::gauss_prior(b,y, expr::sqrty('sqrt(y)',y))");
299 w->factory(
"Lognormal::lognorm_prior(b,y, expr::kappa('1+1./sqrt(y)',y))");
317 HybridCalculator hc1(*data, sb_model, b_model);
318 ToyMCSampler *toymcs1 = (ToyMCSampler *)hc1.GetTestStatSampler();
319 toymcs1->SetNEventsPerToy(1);
320 toymcs1->SetTestStatistic(&binCount);
321 hc1.SetToys(20000, 1000);
322 hc1.ForcePriorNuisanceAlt(*w->pdf(
"py"));
323 hc1.ForcePriorNuisanceNull(*w->pdf(
"py"));
341 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR);
343 HypoTestResult *r1 = hc1.GetHypoTest();
344 RooMsgService::instance().setGlobalKillBelow(msglevel);
345 cout <<
"-----------------------------------------" << endl;
346 cout <<
"Part 4" << endl;
354 HypoTestPlot *p1 =
new HypoTestPlot(*r1, 30);
365 SimpleLikelihoodRatioTestStat slrts(*b_model.GetPdf(), *sb_model.GetPdf());
366 slrts.SetNullParameters(*b_model.GetSnapshot());
367 slrts.SetAltParameters(*sb_model.GetSnapshot());
370 HybridCalculator hc2(*data, sb_model, b_model);
371 ToyMCSampler *toymcs2 = (ToyMCSampler *)hc2.GetTestStatSampler();
372 toymcs2->SetNEventsPerToy(1);
373 toymcs2->SetTestStatistic(&slrts);
374 hc2.SetToys(20000, 1000);
375 hc2.ForcePriorNuisanceAlt(*w->pdf(
"py"));
376 hc2.ForcePriorNuisanceNull(*w->pdf(
"py"));
390 toymcs2->SetProofConfig(pc);
393 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR);
395 HypoTestResult *r2 = hc2.GetHypoTest();
396 cout <<
"-----------------------------------------" << endl;
397 cout <<
"Part 5" << endl;
403 RooMsgService::instance().setGlobalKillBelow(msglevel);
406 HypoTestPlot *p2 =
new HypoTestPlot(*r2, 30);
422 w->defineSet(
"obsXY",
"x,y");
425 w->var(
"x")->setVal(150.);
426 w->var(
"y")->setVal(100.);
427 RooDataSet *dataXY =
new RooDataSet(
"dXY",
"dXY", *w->set(
"obsXY"));
428 dataXY->add(*w->set(
"obsXY"));
431 ModelConfig b_modelXY(
"B_modelXY", w);
432 b_modelXY.SetPdf(*w->pdf(
"model"));
433 b_modelXY.SetObservables(*w->set(
"obsXY"));
434 b_modelXY.SetParametersOfInterest(*w->set(
"poi"));
435 w->var(
"s")->setVal(0.0);
436 b_modelXY.SetSnapshot(*w->set(
"poi"));
439 ModelConfig sb_modelXY(
"S+B_modelXY", w);
440 sb_modelXY.SetPdf(*w->pdf(
"model"));
441 sb_modelXY.SetObservables(*w->set(
"obsXY"));
442 sb_modelXY.SetParametersOfInterest(*w->set(
"poi"));
443 w->var(
"s")->setVal(50.0);
444 sb_modelXY.SetSnapshot(*w->set(
"poi"));
458 RatioOfProfiledLikelihoodsTestStat ropl(*b_modelXY.GetPdf(), *sb_modelXY.GetPdf(), sb_modelXY.GetSnapshot());
459 ropl.SetSubtractMLE(
false);
463 ProfileLikelihoodTestStat profll(*b_modelXY.GetPdf());
467 MaxLikelihoodEstimateTestStat mlets(*sb_modelXY.GetPdf(), *w->var(
"s"));
474 w->factory(
"y0[100]");
475 w->factory(
"Gamma::gamma_y0(b,sum::temp0(y0,1),1,0)");
476 w->factory(
"Gaussian::gauss_prior_y0(b,y0, expr::sqrty0('sqrt(y0)',y0))");
479 HybridCalculator hc3(*dataXY, sb_modelXY, b_modelXY);
480 ToyMCSampler *toymcs3 = (ToyMCSampler *)hc3.GetTestStatSampler();
481 toymcs3->SetNEventsPerToy(1);
482 toymcs3->SetTestStatistic(&slrts);
483 hc3.SetToys(30000, 1000);
484 hc3.ForcePriorNuisanceAlt(*w->pdf(
"gamma_y0"));
485 hc3.ForcePriorNuisanceNull(*w->pdf(
"gamma_y0"));
493 toymcs3->SetTestStatistic(&profll);
499 toymcs3->SetProofConfig(pc);
502 RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR);
504 HypoTestResult *r3 = hc3.GetHypoTest();
505 cout <<
"-----------------------------------------" << endl;
506 cout <<
"Part 6" << endl;
512 RooMsgService::instance().setGlobalKillBelow(msglevel);
515 c->GetPad(4)->SetLogy();
516 HypoTestPlot *p3 =
new HypoTestPlot(*r3, 50);
519 c->SaveAs(
"zbi.pdf");