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")
170 parameters = ROOT.RooArgSet(deltaMSq, sinSq2theta)
171 w = ROOT.RooWorkspace()
173 modelConfig = ROOT.RooFit.ModelConfig()
174 modelConfig.SetWorkspace(w)
175 modelConfig.SetPdf(model)
176 modelConfig.SetParametersOfInterest(parameters)
178 fc = ROOT.RooStats.FeldmanCousins(data, modelConfig)
180 fc.UseAdaptiveSampling(
True)
186 interval = fc.GetInterval()
190 plc = ROOT.RooStats.ProfileLikelihoodCalculator(data, modelConfig)
193 plcInterval = plc.GetInterval()
201 ROOT.RooMsgService.instance().setStreamStatus(0,
True)
202 ROOT.RooMsgService.instance().setStreamStatus(1,
True)
204 mcmcWatch = ROOT.TStopwatch()
207 axisList = ROOT.RooArgList(deltaMSq, sinSq2theta)
208 mc = ROOT.RooStats.MCMCCalculator(data, modelConfig)
210 mc.SetNumBurnInSteps(100)
215 mcInt = mc.GetInterval()
227 parameterScan = fc.GetPointsToScan()
228 hist = parameterScan.createHistogram(deltaMSq, sinSq2theta, 30, 30)
230 forContour = hist.Clone()
235 for i
in range(parameterScan.numEntries):
237 tmpPoint = parameterScan.get(i).clone(
"temp")
240 if interval.IsInInterval(tmpPoint):
241 forContour.SetBinContent(
242 hist.FindBin(tmpPoint.getRealValue(
"sinSq2theta"), tmpPoint.getRealValue(
"deltaMSq")), 1
245 forContour.SetBinContent(
246 hist.FindBin(tmpPoint.getRealValue(
"sinSq2theta"), tmpPoint.getRealValue(
"deltaMSq")), 0
253 forContour.SetContour(1, level)
254 forContour.SetLineWidth(2)
255 forContour.SetLineColor(ROOT.kRed)
256 forContour.Draw(
"cont2,same")
260 print(f
"MCMC actual confidence level: ", mcInt.GetActualConfidenceLevel())
261 mcPlot = ROOT.RooStats.MCMCIntervalPlot(mcInt)
262 mcPlot.SetLineColor(ROOT.kMagenta)
267 plotInt = ROOT.RooStats.LikelihoodIntervalPlot(plcInterval)
269 plotInt.SetTitle(
"90% Confidence Intervals")
277 dataCanvas.SaveAs(
"rs401d_FeldmanCousins.1.pdf")
284rs401d_FeldmanCousins(doFeldmanCousins=
False, doMCMC=
True)
RooArgSet is a container object that can hold multiple RooAbsArg objects.