Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
StandardProfileInspectorDemo.py File Reference

Detailed Description

View in nbviewer Open in SWAN
Standard demo of the ProfileInspector class StandardProfileInspectorDemo

This is a standard demo that can be used with any ROOT file prepared in the standard way. You specify:

  • name for input ROOT file
  • name of workspace inside ROOT file that holds model and data
  • name of ModelConfig that specifies details for calculator tools
  • name of dataset

With the values provided below this script will attempt to run the standard hist2workspace example and read the ROOT file that it produces.

The actual heart of the demo is only about 10 lines long.

The ProfileInspector plots the conditional maximum likelihood estimate of each nuisance parameter in the model vs. the parameter of interest. (aka. profiled value of nuisance parameter vs. parameter of interest) (aka. best fit nuisance parameter with p.o.i fixed vs. parameter of interest)

[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.
[#1] INFO:Minimization -- Including the following constraint terms in minimization: (lumiConstraint,alpha_syst1Constraint,alpha_syst2Constraint,alpha_syst3Constraint,gamma_stat_channel1_bin_0_constraint,gamma_stat_channel1_bin_1_constraint)
[#1] INFO:Minimization -- The global observables are not defined , normalize constraints with respect to the parameters (Lumi,SigXsecOverSM,alpha_syst1,alpha_syst2,alpha_syst3,gamma_stat_channel1_bin_0,gamma_stat_channel1_bin_1)
[#1] INFO:Fitting -- RooAbsPdf::fitTo(simPdf) fixing normalization set for coefficient determination to observables in data
[#1] INFO:Fitting -- using CPU computation library compiled with -mavx2
[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) Creating instance of MINUIT
[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_simPdf_obsData) Summation contains a RooNLLVar, using its error level
[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) determining minimum likelihood for current configurations w.r.t all observable
[#1] INFO:NumericIntegration -- RooRealIntegral::init(gamma_stat_channel1_bin_1_constraint_Int[gamma_stat_channel1_bin_1]) using numeric integrator RooIntegrator1D to calculate Int(gamma_stat_channel1_bin_1)
[#1] INFO:NumericIntegration -- RooRealIntegral::init(gamma_stat_channel1_bin_0_constraint_Int[gamma_stat_channel1_bin_0]) using numeric integrator RooIntegrator1D to calculate Int(gamma_stat_channel1_bin_0)
[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) minimum found at (SigXsecOverSM=1.11273)
....................................................................................................
import ROOT
# -------------------------------------------------------
# First part is just to access a user-defined file
# or create the standard example file if it doesn't exist
workspaceName = "combined"
modelConfigName = "ModelConfig"
dataName = "obsData"
filename = "results/example_combined_GaussExample_model.root"
# if file does not exists generate with histfactory
if ROOT.gSystem.AccessPathName(filename):
# Normally this would be run on the command line
print("will run standard hist2workspace example")
ROOT.gROOT.ProcessLine(".! prepareHistFactory .")
ROOT.gROOT.ProcessLine(".! hist2workspace config/example.xml")
print("\n\n---------------------")
print("Done creating example input")
print("---------------------\n\n")
file = ROOT.TFile.Open(filename)
# -------------------------------------------------------
# Tutorial starts here
# -------------------------------------------------------
# get the workspace out of the file
w = file.Get(workspaceName)
# get the modelConfig out of the file
mc = w[modelConfigName]
# get the modelConfig out of the file
data = w[dataName]
# -----------------------------
# now use the profile inspector
p = ROOT.RooStats.ProfileInspector()
profile_plots = p.GetListOfProfilePlots(data, mc)
# now make plots
c1 = ROOT.TCanvas("c1", "ProfileInspectorDemo", 800, 200)
n = len(profile_plots)
if n > 4:
nx = int(n**0.5)
ny = ROOT.TMath.CeilNint(n / nx)
nx = ROOT.TMath.CeilNint(n**0.5)
c1.Divide(ny, nx)
else:
c1.Divide(n)
for i, plot in enumerate(profile_plots):
c1.cd(i + 1)
plot.Draw("al")
c1.Update()
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Authors
Akeem Hart, Kyle Cranmer (C++ Version)

Definition in file StandardProfileInspectorDemo.py.