{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "eebc7031",
   "metadata": {},
   "source": [
    "# StandardProfileLikelihoodDemo\n",
    "Standard demo of the Profile Likelihood calculator\n",
    "StandardProfileLikelihoodDemo\n",
    "\n",
    "This is a standard demo that can be used with any ROOT file\n",
    "prepared in the standard way.  You specify:\n",
    " - name for input ROOT file\n",
    " - name of workspace inside ROOT file that holds model and data\n",
    " - name of ModelConfig that specifies details for calculator tools\n",
    " - name of dataset\n",
    "With the values provided below the macro will attempt to run the\n",
    "standard hist2workspace example and read the ROOT file\n",
    "that it produces.\n",
    "\n",
    "The actual heart of the demo is only about 10 lines long.\n",
    "\n",
    "The ProfileLikelihoodCalculator is based on Wilks's theorem\n",
    "and the asymptotic properties of the profile likelihood ratio\n",
    "(eg. that it is chi-square distributed for the true value).\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Akeem Hart, Kyle Cranmer (C++ Version)  \n",
    "<i><small>This notebook tutorial was automatically generated with <a href= \"https://github.com/root-project/root/blob/master/documentation/doxygen/converttonotebook.py\">ROOTBOOK-izer</a> from the macro found in the ROOT repository  on Tuesday, May 19, 2026 at 08:36 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9b294f50",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:31.547969Z",
     "iopub.status.busy": "2026-05-19T20:36:31.547836Z",
     "iopub.status.idle": "2026-05-19T20:36:32.588251Z",
     "shell.execute_reply": "2026-05-19T20:36:32.587679Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT\n",
    "\n",
    "workspaceName = \"combined\"\n",
    "modelConfigName = \"ModelConfig\"\n",
    "dataName = \"obsData\"\n",
    "confLevel = 0.95\n",
    "nScanPoints = 50\n",
    "plotAsTF1 = False\n",
    "poiXMin = 1\n",
    "poiXMax = 0\n",
    "doHypoTest = False\n",
    "nullParamValue = 0\n",
    "filename = \"results/example_combined_GaussExample_model.root\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "417500bb",
   "metadata": {},
   "source": [
    "if file does not exists generate with histfactory"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f832bc60",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:32.592192Z",
     "iopub.status.busy": "2026-05-19T20:36:32.592037Z",
     "iopub.status.idle": "2026-05-19T20:36:32.841599Z",
     "shell.execute_reply": "2026-05-19T20:36:32.841032Z"
    }
   },
   "outputs": [],
   "source": [
    "if ROOT.gSystem.AccessPathName(filename):\n",
    "    # Normally this would be run on the command line\n",
    "    print(\"will run standard hist2workspace example\")\n",
    "    ROOT.gROOT.ProcessLine(\".! prepareHistFactory .\")\n",
    "    ROOT.gROOT.ProcessLine(\".! hist2workspace config/example.xml\")\n",
    "    print(\"\\n\\n---------------------\")\n",
    "    print(\"Done creating example input\")\n",
    "    print(\"---------------------\\n\\n\")\n",
    "\n",
    "file = ROOT.TFile.Open(filename)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8777dcb",
   "metadata": {},
   "source": [
    "-------------------------------------------------------\n",
    "Tutorial starts here\n",
    "-------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2617eaf1",
   "metadata": {},
   "source": [
    "get the workspace out of the file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8be45d75",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:32.843241Z",
     "iopub.status.busy": "2026-05-19T20:36:32.843101Z",
     "iopub.status.idle": "2026-05-19T20:36:33.108760Z",
     "shell.execute_reply": "2026-05-19T20:36:33.107915Z"
    }
   },
   "outputs": [],
   "source": [
    "w = file.Get(workspaceName)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73d472e4",
   "metadata": {},
   "source": [
    "get the modelConfig out of the file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4e22bf40",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:33.110861Z",
     "iopub.status.busy": "2026-05-19T20:36:33.110728Z",
     "iopub.status.idle": "2026-05-19T20:36:33.259422Z",
     "shell.execute_reply": "2026-05-19T20:36:33.258762Z"
    }
   },
   "outputs": [],
   "source": [
    "mc = w[modelConfigName]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9946245",
   "metadata": {},
   "source": [
    "get the modelConfig out of the file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e1952601",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:33.275535Z",
     "iopub.status.busy": "2026-05-19T20:36:33.275381Z",
     "iopub.status.idle": "2026-05-19T20:36:33.392125Z",
     "shell.execute_reply": "2026-05-19T20:36:33.391567Z"
    }
   },
   "outputs": [],
   "source": [
    "data = w[dataName]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10b31e6c",
   "metadata": {},
   "source": [
    "---------------------------------------------\n",
    "create and use the ProfileLikelihoodCalculator\n",
    "to find and plot the 95% confidence interval\n",
    "on the parameter of interest as specified\n",
    "in the model config"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ff026e43",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:33.393639Z",
     "iopub.status.busy": "2026-05-19T20:36:33.393497Z",
     "iopub.status.idle": "2026-05-19T20:36:33.565929Z",
     "shell.execute_reply": "2026-05-19T20:36:33.565348Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:InputArguments -- The deprecated RooFit::CloneData(1) option passed to createNLL() is ignored.\n",
      "[#1] INFO:Minimization -- p.d.f. provides expected number of events, including extended term in likelihood.\n",
      "[#1] INFO:Minimization --  Including the following constraint terms in minimization: (alpha_syst2Constraint,alpha_syst3Constraint,gamma_stat_channel1_bin_0_constraint,gamma_stat_channel1_bin_1_constraint)\n",
      "[#1] INFO:Minimization -- The following global observables have been defined and their values are taken from the model: (nominalLumi,nom_alpha_syst1,nom_alpha_syst2,nom_alpha_syst3,nom_gamma_stat_channel1_bin_0,nom_gamma_stat_channel1_bin_1)\n",
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(simPdf) fixing normalization set for coefficient determination to observables in data\n",
      "[#1] INFO:Fitting -- using generic CPU library compiled with no vectorizations\n",
      "[#1] INFO:Fitting -- Creation of NLL object took 8.48303 ms\n",
      "[#0] PROGRESS:Minimization -- ProfileLikelihoodCalcultor::DoGLobalFit - find MLE \n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_simPdf_obsData) Summation contains a RooNLLVar, using its error level\n",
      "[#0] PROGRESS:Minimization -- ProfileLikelihoodCalcultor::DoMinimizeNLL - using Minuit2 /  with strategy 1\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "[#1] INFO:Minimization -- \n",
      "  RooFitResult: minimized FCN value: 15.5775, estimated distance to minimum: 9.97883e-09\n",
      "                covariance matrix quality: Full, accurate covariance matrix\n",
      "                Status : MINIMIZE=0 \n",
      "\n",
      "    Floating Parameter    FinalValue +/-  Error   \n",
      "  --------------------  --------------------------\n",
      "         SigXsecOverSM    1.1153e+00 +/-  5.87e-01\n",
      "           alpha_syst2   -8.9073e-03 +/-  9.83e-01\n",
      "           alpha_syst3    1.7876e-02 +/-  9.48e-01\n",
      "  gamma_stat_channel1_bin_0    9.9955e-01 +/-  4.93e-02\n",
      "  gamma_stat_channel1_bin_1    1.0036e+00 +/-  8.01e-02\n",
      "\n"
     ]
    }
   ],
   "source": [
    "pl = ROOT.RooStats.ProfileLikelihoodCalculator(data, mc)\n",
    "pl.SetConfidenceLevel(confLevel)\n",
    "interval = pl.GetInterval()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15fe9138",
   "metadata": {},
   "source": [
    "print out the interval on the first Parameter of Interest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8bb257af",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:33.577320Z",
     "iopub.status.busy": "2026-05-19T20:36:33.577173Z",
     "iopub.status.idle": "2026-05-19T20:36:33.724501Z",
     "shell.execute_reply": "2026-05-19T20:36:33.724061Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      ">>>> RESULT : 95.0% interval on SigXsecOverSM is : [0.0, 2.3274364501099436]\n",
      "\n"
     ]
    }
   ],
   "source": [
    "firstPOI = mc.GetParametersOfInterest().first()\n",
    "limit_lower, limit_upper = interval.LowerLimit(firstPOI), interval.UpperLimit(firstPOI)\n",
    "print(f\"\\n>>>> RESULT : {confLevel * 100}% interval on {firstPOI.GetName()} is : [{limit_lower}, {limit_upper}]\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d143ecb",
   "metadata": {},
   "source": [
    "make a plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c086bb7b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:33.733049Z",
     "iopub.status.busy": "2026-05-19T20:36:33.732903Z",
     "iopub.status.idle": "2026-05-19T20:36:33.902362Z",
     "shell.execute_reply": "2026-05-19T20:36:33.901868Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "making a plot of the profile likelihood function ....(if it is taking a lot of time use less points or the TF1 drawing option)\n",
      "\n",
      "[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) Creating instance of MINUIT\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_simPdf_obsData) Summation contains a RooNLLVar, using its error level\n",
      "[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) determining minimum likelihood for current configurations w.r.t all observable\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) minimum found at (SigXsecOverSM=1.11588)\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "\n",
      "[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) Creating instance of MINUIT\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_simPdf_obsData) Summation contains a RooNLLVar, using its error level\n",
      "[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) determining minimum likelihood for current configurations w.r.t all observable\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "[#0] ERROR:InputArguments -- RooArgSet::checkForDup: ERROR argument with name SigXsecOverSM is already in this set\n",
      "[#1] INFO:Minimization -- RooProfileLL::evaluate(RooEvaluatorWrapper_Profile[SigXsecOverSM]) minimum found at (SigXsecOverSM=1.11549)\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      ".[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::MakeDefCanvas>:  created default TCanvas with name c1\n"
     ]
    }
   ],
   "source": [
    "print(\n",
    "    \"making a plot of the profile likelihood function ....(if it is taking a lot of time use less points or the \"\n",
    "    \"TF1 drawing option)\\n\"\n",
    ")\n",
    "plot = ROOT.RooStats.LikelihoodIntervalPlot(interval)\n",
    "plot.SetNPoints(nScanPoints)  # do not use too many points, it could become very slow for some models\n",
    "if poiXMin < poiXMax:\n",
    "    plot.SetRange(poiXMin, poiXMax)\n",
    "opt = \"\"\n",
    "if plotAsTF1:\n",
    "    opt += \"tf1\"\n",
    "plot.Draw(opt)  # use option TF1 if too slow (plot.Draw(\"tf1\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2655e1f",
   "metadata": {},
   "source": [
    "if requested perform also an hypothesis test for the significance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a4e86bb7",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:33.903827Z",
     "iopub.status.busy": "2026-05-19T20:36:33.903682Z",
     "iopub.status.idle": "2026-05-19T20:36:34.007136Z",
     "shell.execute_reply": "2026-05-19T20:36:34.006645Z"
    }
   },
   "outputs": [],
   "source": [
    "if doHypoTest:\n",
    "    nullparams = ROOT.RooArgSet(\"nullparams\")\n",
    "    nullparams.addClone(firstPOI)\n",
    "    nullparams.setRealValue(firstPOI.GetName(), nullParamValue)\n",
    "    pl.SetNullParameters(nullparams)\n",
    "    print(\"Perform Test of Hypothesis : null Hypothesis is \" + firstPOI.GetName() + str(nullParamValue))\n",
    "    result = pl.GetHypoTest()\n",
    "    print(\"\\n>>>> Hypotheis Test Result \")\n",
    "    result.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3635725e",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "57fdefef",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:34.008658Z",
     "iopub.status.busy": "2026-05-19T20:36:34.008526Z",
     "iopub.status.idle": "2026-05-19T20:36:34.202501Z",
     "shell.execute_reply": "2026-05-19T20:36:34.201942Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222994191\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222994191() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(21749,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222994191', obj, '');\n",
       "});\n",
       "\n",
       "      }\n",
       "      const servers = ['/static/', 'https://root.cern/js/7.11.0/', 'https://jsroot.gsi.de/7.11.0/'],\n",
       "            path = 'build/jsroot';\n",
       "      if (typeof JSROOT !== 'undefined')\n",
       "         execCode(JSROOT);\n",
       "      else if (typeof requirejs !== 'undefined') {\n",
       "         servers.forEach((s,i) => { servers[i] = s + path; });\n",
       "         requirejs.config({ paths: { 'jsroot' : servers } })(['jsroot'],  execCode);\n",
       "      } else {\n",
       "         const config = document.getElementById('jupyter-config-data');\n",
       "         if (config)\n",
       "            servers[0] = (JSON.parse(config.innerHTML || '{}')?.baseUrl || '/') + 'static/';\n",
       "         else\n",
       "            servers.shift();\n",
       "         function loadJsroot() {\n",
       "            return !servers.length ? 0 : import(servers.shift() + path + '.js').catch(loadJsroot).then(() => execCode(JSROOT));\n",
       "         }\n",
       "         loadJsroot();\n",
       "      }\n",
       "   }\n",
       "   process_root_plot_1779222994191();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ROOT import gROOT \n",
    "gROOT.GetListOfCanvases().Draw()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
