20def rs401d_FeldmanCousins(doFeldmanCousins=False, doMCMC=True):
22 ROOT.RooRealVar.enableSilentClipping()
48 E = ROOT.RooRealVar(
"E",
"", 15, 10, 60,
"GeV")
49 L = ROOT.RooRealVar(
"L",
"", 0.800, 0.600, 1.0,
"km")
50 deltaMSq = ROOT.RooRealVar(
"deltaMSq",
"#Delta m^{2}", 40, 1, 300,
"eV/c^{2}")
51 sinSq2theta = ROOT.RooRealVar(
"sinSq2theta",
"sin^{2}(2#theta)", 0.006, 0.0, 0.02)
55 oscillationFormula =
"std::pow(std::sin(1.27 * x[2] * x[0] / x[1]), 2)"
56 PnmuTone = ROOT.RooGenericPdf(
"PnmuTone",
"P(#nu_{#mu} #rightarrow #nu_{e}", oscillationFormula, [L, E, deltaMSq])
59 sigModel = PnmuTone.createProjection(L)
71 EPrime = ROOT.RooRealVar(
"EPrime",
"", 15, 10, 60,
"GeV")
72 LPrime = ROOT.RooRealVar(
"LPrime",
"", 0.800, 0.600, 1.0,
"km")
73 PnmuTonePrime = ROOT.RooGenericPdf(
74 "PnmuTonePrime",
"P(#nu_{#mu} #rightarrow #nu_{e}", oscillationFormula, [LPrime, EPrime, deltaMSq]
76 intProbToOscInExp = PnmuTonePrime.createIntegral([EPrime, LPrime])
85 maxEventsTot = ROOT.RooConstVar(
"maxEventsTot",
"maximum number of sinal events", 50000)
86 inverseArea = ROOT.RooConstVar(
88 "1/(#Delta E #Delta L)",
89 1.0 / (EPrime.getMax() - EPrime.getMin()) / (LPrime.getMax() - LPrime.getMin()),
93 sigNorm = ROOT.RooProduct(
"sigNorm",
"", [maxEventsTot, intProbToOscInExp, inverseArea, sinSq2theta])
95 bkgNorm = ROOT.RooConstVar(
"bkgNorm",
"normalization for background", 500)
98 bkgEShape = ROOT.RooPolynomial(
"bkgEShape",
"flat bkg shape", E)
101 model = ROOT.RooAddPdf(
"model",
"", [sigModel, bkgEShape], [sigNorm, bkgNorm])
108 ROOT.RooMsgService.instance().setStreamStatus(0,
False)
109 ROOT.RooMsgService.instance().setStreamStatus(1,
False)
110 ROOT.RooMsgService.instance().setStreamStatus(2,
False)
114 nEventsData = bkgNorm.getVal() + sigNorm.getVal()
115 print(
"generate toy data with nEvents = ", nEventsData)
118 ROOT.RooRandom.randomGenerator().SetSeed(3)
120 data = model.generate(E, nEventsData)
124 dataCanvas = ROOT.TCanvas(
"dataCanvas")
125 dataCanvas.Divide(2, 2)
129 hh = PnmuTone.createHistogram(
"hh", E, ROOT.RooFit.YVar(L, ROOT.RooFit.Binning(40)), Binning=40, Scaling=
False)
130 hh.SetLineColor(ROOT.kBlue)
131 hh.SetTitle(
"True Signal Model")
140 model.fitTo(data, Extended=
True)
142 model.plotOn(Eframe, Components=sigModel, LineColor=
"r")
143 model.plotOn(Eframe, Components=bkgEShape, LineColor=
"g")
145 Eframe.SetTitle(
"toy data with best fit model (and sig+bkg components)")
153 nll = model.createNLL(data, Extended=
True)
154 pll = ROOT.RooProfileLL(
"pll",
"", nll, [deltaMSq, sinSq2theta])
156 hhh = pll.createHistogram(
157 "hhh", sinSq2theta, ROOT.RooFit.YVar(deltaMSq, ROOT.RooFit.Binning(40)), Binning=40, Scaling=
False
159 hhh.SetLineColor(ROOT.kBlue)
160 hhh.SetTitle(
"Likelihood Function")
165 dataCanvas.SaveAs(
"3.png")
176 parameters = ROOT.RooArgSet(deltaMSq, sinSq2theta)
177 w = ROOT.RooWorkspace()
179 modelConfig = ROOT.RooFit.ModelConfig()
180 modelConfig.SetWorkspace(w)
181 modelConfig.SetPdf(model)
182 modelConfig.SetParametersOfInterest(parameters)
184 fc = ROOT.RooStats.FeldmanCousins(data, modelConfig)
186 fc.UseAdaptiveSampling(
True)
192 interval = fc.GetInterval()
196 plc = ROOT.RooStats.ProfileLikelihoodCalculator(data, modelConfig)
199 plcInterval = plc.GetInterval()
207 ROOT.RooMsgService.instance().setStreamStatus(0,
True)
208 ROOT.RooMsgService.instance().setStreamStatus(1,
True)
210 mcmcWatch = ROOT.TStopwatch()
213 axisList = ROOT.RooArgList(deltaMSq, sinSq2theta)
214 mc = ROOT.RooStats.MCMCCalculator(data, modelConfig)
216 mc.SetNumBurnInSteps(100)
221 mcInt = mc.GetInterval()
233 parameterScan = fc.GetPointsToScan()
234 hist = parameterScan.createHistogram(deltaMSq, sinSq2theta, 30, 30)
236 forContour = hist.Clone()
241 for i
in range(parameterScan.numEntries):
243 tmpPoint = parameterScan.get(i).clone(
"temp")
246 if interval.IsInInterval(tmpPoint):
247 forContour.SetBinContent(
248 hist.FindBin(tmpPoint.getRealValue(
"sinSq2theta"), tmpPoint.getRealValue(
"deltaMSq")), 1
251 forContour.SetBinContent(
252 hist.FindBin(tmpPoint.getRealValue(
"sinSq2theta"), tmpPoint.getRealValue(
"deltaMSq")), 0
259 forContour.SetContour(1, level)
260 forContour.SetLineWidth(2)
261 forContour.SetLineColor(ROOT.kRed)
262 forContour.Draw(
"cont2,same")
264 mcPlot = ROOT.nullptr
266 print(f
"MCMC actual confidence level: ", mcInt.GetActualConfidenceLevel())
267 mcPlot = ROOT.RooStats.MCMCIntervalPlot(mcInt)
268 mcPlot.SetLineColor(ROOT.kMagenta)
273 plotInt = ROOT.RooStats.LikelihoodIntervalPlot(plcInterval)
275 plotInt.SetTitle(
"90% Confidence Intervals")
283 dataCanvas.SaveAs(
"rs401d_FeldmanCousins.1.pdf")
290rs401d_FeldmanCousins(doFeldmanCousins=
False, doMCMC=
True)
RooArgSet is a container object that can hold multiple RooAbsArg objects.