70ROOT.gInterpreter.Declare(
72using namespace RooFit;
73using namespace RooStats;
75class BinCountTestStat : public TestStatistic {
77 BinCountTestStat(void) : fColumnName("tmp") {}
78 BinCountTestStat(string columnName) : fColumnName(columnName) {}
80 virtual Double_t Evaluate(RooAbsData &data, RooArgSet & /*nullPOI*/)
82 // This is the main method in the interface
84 for (int i = 0; i < data.numEntries(); i++) {
85 value += data.get(i)->getRealValue(fColumnName.c_str());
89 virtual const TString GetVarName() const { return fColumnName; }
95 ClassDef(BinCountTestStat, 1)
126w = ROOT.RooWorkspace(
"w")
127w.factory(
"Poisson::px(x[150,0,500],sum::splusb(s[0,0,100],b[100,0.1,300]))")
128w.factory(
"Poisson::py(y[100,0.1,500],prod::taub(tau[1.],b))")
129w.factory(
"PROD::model(px,py)")
130w.factory(
"Uniform::prior_b(b)")
135msglevel = ROOT.RooMsgService.instance().globalKillBelow()
148w.factory(
"PROJ::averagedModel(PROD::foo(px|b,py,prior_b),b)")
150ROOT.RooMsgService.instance().setGlobalKillBelow(ROOT.RooFit.ERROR)
153frame = w.var(
"x").frame(Range=(50, 230))
154w.pdf(
"averagedModel").plotOn(frame, LineColor=
"r")
155w.pdf(
"px").plotOn(frame, LineColor=
"g")
156w.var(
"s").setVal(50.0)
157w.pdf(
"averagedModel").plotOn(frame, LineColor=
"b")
160w.var(
"s").setVal(0.0)
167w.var(
"y").setVal(100)
168w.var(
"x").setVal(150)
169cdf = w.pdf(
"averagedModel").createCdf(w.var(
"x"))
172print(
"-----------------------------------------")
174print(f
"Hybrid p-value from direct integration = {1 - cdf.getVal()}")
175print(f
"Z_Gamma Significance = {ROOT.RooStats.PValueToSignificance(1 - cdf.getVal())}")
176ROOT.RooMsgService.instance().setGlobalKillBelow(msglevel)
186p_Bi = ROOT.RooStats.NumberCountingUtils.BinomialWithTauObsP(150, 100, 1)
187Z_Bi = ROOT.RooStats.NumberCountingUtils.BinomialWithTauObsZ(150, 100, 1)
188print(
"-----------------------------------------")
190print(f
"Z_Bi p-value (analytic): {p_Bi}")
191print(f
"Z_Bi significance (analytic): {Z_Bi}")
215w.defineSet(
"obs",
"x")
216w.defineSet(
"poi",
"s")
219data = ROOT.RooDataSet(
"d",
"d", w.set(
"obs"))
220data.add(w.set(
"obs"))
225b_model = ROOT.RooStats.ModelConfig(
"B_model", w)
226b_model.SetPdf(w.pdf(
"px"))
227b_model.SetObservables(w.set(
"obs"))
228b_model.SetParametersOfInterest(w.set(
"poi"))
229w.var(
"s").setVal(0.0)
231b_model.SetSnapshot(w.set(
"poi"))
234sb_model = ROOT.RooStats.ModelConfig(
"S+B_model", w)
235sb_model.SetPdf(w.pdf(
"px"))
236sb_model.SetObservables(w.set(
"obs"))
237sb_model.SetParametersOfInterest(w.set(
"poi"))
238w.var(
"s").setVal(50.0)
240sb_model.SetSnapshot(w.set(
"poi"))
250binCount = ROOT.BinCountTestStat(
"x")
272w.factory(
"Gaussian::gauss_prior(b,y, expr::sqrty('sqrt(y)',y))")
276w.factory(
"Lognormal::lognorm_prior(b,y, expr::kappa('1+1./sqrt(y)',y))")
294hc1 = ROOT.RooStats.HybridCalculator(data, sb_model, b_model)
295toymcs1 = hc1.GetTestStatSampler()
296toymcs1.SetNEventsPerToy(1)
298toymcs1.SetTestStatistic(binCount)
300hc1.SetToys(ntoys, ntoys // nToysRatio)
301hc1.ForcePriorNuisanceAlt(w.pdf(
"py"))
302hc1.ForcePriorNuisanceNull(w.pdf(
"py"))
315ROOT.RooMsgService.instance().setGlobalKillBelow(ROOT.RooFit.ERROR)
317r1 = hc1.GetHypoTest()
318ROOT.RooMsgService.instance().setGlobalKillBelow(msglevel)
320print(
"-----------------------------------------")
329p1 = ROOT.RooStats.HypoTestPlot(r1, 30)
341slrts = ROOT.RooStats.SimpleLikelihoodRatioTestStat(b_model.GetPdf(), sb_model.GetPdf())
342slrts.SetNullParameters(b_model.GetSnapshot())
343slrts.SetAltParameters(sb_model.GetSnapshot())
346hc2 = ROOT.RooStats.HybridCalculator(data, sb_model, b_model)
347toymcs2 = hc2.GetTestStatSampler()
348toymcs2.SetNEventsPerToy(1)
349toymcs2.SetTestStatistic(slrts)
350hc2.SetToys(ntoys, ntoys // nToysRatio)
351hc2.ForcePriorNuisanceAlt(w.pdf(
"py"))
352hc2.ForcePriorNuisanceNull(w.pdf(
"py"))
365ROOT.RooMsgService.instance().setGlobalKillBelow(ROOT.RooFit.ERROR)
367r2 = hc2.GetHypoTest()
368print(
"-----------------------------------------")
375ROOT.RooMsgService.instance().setGlobalKillBelow(msglevel)
378p2 = ROOT.RooStats.HypoTestPlot(r2, 30)
395w.defineSet(
"obsXY",
"x,y")
398w.var(
"x").setVal(150.0)
399w.var(
"y").setVal(100.0)
400dataXY = ROOT.RooDataSet(
"dXY",
"dXY", w.set(
"obsXY"))
401dataXY.add(w.set(
"obsXY"))
404b_modelXY = ROOT.RooStats.ModelConfig(
"B_modelXY", w)
405b_modelXY.SetPdf(w.pdf(
"model"))
407b_modelXY.SetObservables(w.set(
"obsXY"))
408b_modelXY.SetParametersOfInterest(w.set(
"poi"))
409w.var(
"s").setVal(0.0)
411b_modelXY.SetSnapshot(w.set(
"poi"))
414sb_modelXY = ROOT.RooStats.ModelConfig(
"S+B_modelXY", w)
415sb_modelXY.SetPdf(w.pdf(
"model"))
417sb_modelXY.SetObservables(w.set(
"obsXY"))
418sb_modelXY.SetParametersOfInterest(w.set(
"poi"))
419w.var(
"s").setVal(50.0)
421sb_modelXY.SetSnapshot(w.set(
"poi"))
432ropl = ROOT.RooStats.RatioOfProfiledLikelihoodsTestStat(
433 b_modelXY.GetPdf(), sb_modelXY.GetPdf(), sb_modelXY.GetSnapshot()
435ropl.SetSubtractMLE(
False)
439profll = ROOT.RooStats.ProfileLikelihoodTestStat(b_modelXY.GetPdf())
443mlets = ROOT.RooStats.MaxLikelihoodEstimateTestStat(sb_modelXY.GetPdf(), w.var(
"s"))
451w.factory(
"Gamma::gamma_y0(b,sum::temp0(y0,1),1,0)")
452w.factory(
"Gaussian::gauss_prior_y0(b,y0, expr::sqrty0('sqrt(y0)',y0))")
455hc3 = ROOT.RooStats.HybridCalculator(dataXY, sb_modelXY, b_modelXY)
456toymcs3 = hc3.GetTestStatSampler()
457toymcs3.SetNEventsPerToy(1)
458toymcs3.SetTestStatistic(slrts)
459hc3.SetToys(ntoys, ntoys // nToysRatio)
460hc3.ForcePriorNuisanceAlt(w.pdf(
"gamma_y0"))
461hc3.ForcePriorNuisanceNull(w.pdf(
"gamma_y0"))
469toymcs3.SetTestStatistic(profll)
474ROOT.RooMsgService.instance().setGlobalKillBelow(ROOT.RooFit.ERROR)
476r3 = hc3.GetHypoTest()
477print(
"-----------------------------------------")
484ROOT.RooMsgService.instance().setGlobalKillBelow(msglevel)
488p3 = ROOT.RooStats.HypoTestPlot(r3, 50)