{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c6edbbfb",
   "metadata": {},
   "source": [
    "# rs401c_FeldmanCousins\n",
    "Produces an interval on the mean signal in a number counting experiment with known background using the\n",
    "Feldman-Cousins technique.\n",
    "\n",
    "Using the RooStats FeldmanCousins tool with 200 bins\n",
    "it takes 1 min and the interval is [0.2625, 10.6125]\n",
    "with a step size of 0.075.\n",
    "The interval in Feldman & Cousins's original paper is [.29, 10.81] Phys.Rev.D57:3873-3889,1998.\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Artem Busorgin, 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:35 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "73060641",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:00.913406Z",
     "iopub.status.busy": "2026-05-19T20:36:00.913287Z",
     "iopub.status.idle": "2026-05-19T20:36:01.891812Z",
     "shell.execute_reply": "2026-05-19T20:36:01.876069Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc6f8c80",
   "metadata": {},
   "source": [
    "to time the macro... about 30 s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ee05844f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:01.916236Z",
     "iopub.status.busy": "2026-05-19T20:36:01.916086Z",
     "iopub.status.idle": "2026-05-19T20:36:02.035109Z",
     "shell.execute_reply": "2026-05-19T20:36:02.034648Z"
    }
   },
   "outputs": [],
   "source": [
    "t = ROOT.TStopwatch()\n",
    "t.Start()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "744a10af",
   "metadata": {},
   "source": [
    "make a simple model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7bbee776",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:02.036838Z",
     "iopub.status.busy": "2026-05-19T20:36:02.036719Z",
     "iopub.status.idle": "2026-05-19T20:36:02.287294Z",
     "shell.execute_reply": "2026-05-19T20:36:02.286849Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"\", 1, 0, 50)\n",
    "mu = ROOT.RooRealVar(\"mu\", \"\", 2.5, 0, 15)  # with a limit on mu>=0\n",
    "b = ROOT.RooConstVar(\"b\", \"\", 3.0)\n",
    "mean = ROOT.RooAddition(\"mean\", \"\", [mu, b])\n",
    "pois = ROOT.RooPoisson(\"pois\", \"\", x, mean)\n",
    "parameters = {mu}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "299ae15e",
   "metadata": {},
   "source": [
    "create a toy dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "68e79956",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:02.290187Z",
     "iopub.status.busy": "2026-05-19T20:36:02.290056Z",
     "iopub.status.idle": "2026-05-19T20:36:02.656895Z",
     "shell.execute_reply": "2026-05-19T20:36:02.656302Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DataStore poisData (Generated From )\n",
      "  Contains 1 entries\n",
      "  Observables: \n",
      "    1)  x = 7  L(0 - 50)  \"\"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "RooWorkspace()  contents\n",
      "\n",
      "variables\n",
      "---------\n",
      "(mu,x)\n",
      "\n",
      "p.d.f.s\n",
      "-------\n",
      "RooPoisson::pois[ x=x mean=mean ] = 0.0224772\n",
      "\n",
      "functions\n",
      "--------\n",
      "RooAddition::mean[ mu + b ] = 5.5\n",
      "\n",
      "named sets\n",
      "----------\n",
      "poissonProblem_Observables:(x)\n",
      "poissonProblem_POI:(mu)\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222962646\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222962646() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(21651,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222962646', 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_1779222962646();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = pois.generate({x}, 1)\n",
    "data.Print(\"v\")\n",
    "\n",
    "dataCanvas = ROOT.TCanvas(\"dataCanvas\")\n",
    "frame = x.frame()\n",
    "data.plotOn(frame)\n",
    "frame.Draw()\n",
    "dataCanvas.Update()\n",
    "\n",
    "w = ROOT.RooWorkspace()\n",
    "modelConfig = ROOT.RooStats.ModelConfig(\"poissonProblem\", w)\n",
    "modelConfig.SetPdf(pois)\n",
    "modelConfig.SetParametersOfInterest(parameters)\n",
    "modelConfig.SetObservables({x})\n",
    "w.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9680a8dd",
   "metadata": {},
   "source": [
    "show use of Feldman-Cousins"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e9f8b7aa",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:02.659774Z",
     "iopub.status.busy": "2026-05-19T20:36:02.659592Z",
     "iopub.status.idle": "2026-05-19T20:36:02.782208Z",
     "shell.execute_reply": "2026-05-19T20:36:02.781770Z"
    }
   },
   "outputs": [],
   "source": [
    "fc = ROOT.RooStats.FeldmanCousins(data, modelConfig)\n",
    "fc.SetTestSize(0.05)  # set size of test\n",
    "fc.UseAdaptiveSampling(True)\n",
    "fc.FluctuateNumDataEntries(False)  # number counting analysis: dataset always has 1 entry with N events observed\n",
    "fc.SetNBins(100)  # number of points to test per parameter"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a74dc4b4",
   "metadata": {},
   "source": [
    "use the Feldman-Cousins tool"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c3c9d54e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:02.786265Z",
     "iopub.status.busy": "2026-05-19T20:36:02.786130Z",
     "iopub.status.idle": "2026-05-19T20:36:04.667471Z",
     "shell.execute_reply": "2026-05-19T20:36:04.666634Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "=== Using the following for poissonProblem ===\n",
      "Observables:             RooArgSet:: = (x)\n",
      "Parameters of Interest:  RooArgSet:: = (mu)\n",
      "PDF:                     RooPoisson::pois[ x=x mean=mean ] = 0.0224772\n",
      "\n",
      "FeldmanCousins: ntoys per point: adaptive\n",
      "FeldmanCousins: nEvents per toy will not fluctuate, will always be 1\n",
      "FeldmanCousins: Model has no nuisance parameters\n",
      "FeldmanCousins: # points to test = 100\n",
      "NeymanConstruction: Prog: 1/100 total MC = 240 this test stat = 1.83324\n",
      " mu=0.075 [-inf, 1.08573]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 2/100 total MC = 80 this test stat = 1.6497\n",
      " mu=0.225 [-inf, 0.949959]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 3/100 total MC = 80 this test stat = 1.4816\n",
      " mu=0.375 [-inf, 0.827185]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 4/100 total MC = 240 this test stat = 1.32721\n",
      " mu=0.525 [-inf, 1.32721]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 5/100 total MC = 80 this test stat = 1.1855\n",
      " mu=0.675 [-inf, 2.73601]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 6/100 total MC = 240 this test stat = 1.05546\n",
      " mu=0.825 [-inf, 1.72806]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 7/100 total MC = 80 this test stat = 0.936198\n",
      " mu=0.975 [-inf, 2.32979]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 8/100 total MC = 80 this test stat = 0.826909\n",
      " mu=1.125 [-inf, 1.424]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 9/100 total MC = 80 this test stat = 0.726882\n",
      " mu=1.275 [-inf, 1.2882]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 10/100 total MC = 80 this test stat = 0.635479\n",
      " mu=1.425 [-inf, 1.81453]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 11/100 total MC = 80 this test stat = 0.552124\n",
      " mu=1.575 [-inf, 1.66456]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 12/100 total MC = 80 this test stat = 0.476298\n",
      " mu=1.725 [-inf, 1.725]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 13/100 total MC = 80 this test stat = 0.40728\n",
      " mu=1.875 [-inf, 2.05965]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 14/100 total MC = 80 this test stat = 0.345232\n",
      " mu=2.025 [-inf, 1.9066]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 15/100 total MC = 80 this test stat = 0.289405\n",
      " mu=2.175 [-inf, 1.76244]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 16/100 total MC = 80 this test stat = 0.239437\n",
      " mu=2.325 [-inf, 1.7512]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 17/100 total MC = 80 this test stat = 0.195006\n",
      " mu=2.475 [-inf, 1.27174]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 18/100 total MC = 80 this test stat = 0.155489\n",
      " mu=2.625 [-inf, 1.99618]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 19/100 total MC = 80 this test stat = 0.121494\n",
      " mu=2.775 [-inf, 1.86244]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 20/100 total MC = 80 this test stat = 0.0920776\n",
      " mu=2.925 [-inf, 1.73057]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 21/100 total MC = 80 this test stat = 0.0670922\n",
      " mu=3.075 [-inf, 1.60585]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 22/100 total MC = 80 this test stat = 0.0463567\n",
      " mu=3.225 [-inf, 2.10098]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 23/100 total MC = 80 this test stat = 0.0296823\n",
      " mu=3.375 [-inf, 1.96524]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 24/100 total MC = 80 this test stat = 0.0168841\n",
      " mu=3.525 [-inf, 1.97094]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 25/100 total MC = 80 this test stat = 0.00778646\n",
      " mu=3.675 [-inf, 2.07549]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 26/100 total MC = 80 this test stat = 0.00222463\n",
      " mu=3.825 [-inf, 1.59677]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 27/100 total MC = 80 this test stat = 4.47494e-05\n",
      " mu=3.975 [-inf, 2.06902]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 28/100 total MC = 80 this test stat = 0.00110295\n",
      " mu=4.125 [-inf, 2.39501]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 29/100 total MC = 80 this test stat = 0.00526396\n",
      " mu=4.275 [-inf, 1.6175]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 30/100 total MC = 80 this test stat = 0.0123995\n",
      " mu=4.425 [-inf, 1.70627]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 31/100 total MC = 80 this test stat = 0.0223862\n",
      " mu=4.575 [-inf, 1.79627]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 32/100 total MC = 80 this test stat = 0.0351041\n",
      " mu=4.725 [-inf, 2.04845]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 33/100 total MC = 80 this test stat = 0.0504339\n",
      " mu=4.875 [-inf, 2.94484]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 34/100 total MC = 80 this test stat = 0.0682548\n",
      " mu=5.025 [-inf, 3.0571]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 35/100 total MC = 80 this test stat = 0.0888053\n",
      " mu=5.175 [-inf, 2.27954]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 36/100 total MC = 80 this test stat = 0.111493\n",
      " mu=5.325 [-inf, 2.26305]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 37/100 total MC = 80 this test stat = 0.136468\n",
      " mu=5.475 [-inf, 2.03894]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 38/100 total MC = 80 this test stat = 0.163629\n",
      " mu=5.625 [-inf, 1.55152]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 39/100 total MC = 80 this test stat = 0.192899\n",
      " mu=5.775 [-inf, 1.81715]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 40/100 total MC = 80 this test stat = 0.224207\n",
      " mu=5.925 [-inf, 1.71475]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 41/100 total MC = 80 this test stat = 0.257484\n",
      " mu=6.075 [-inf, 2.75427]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 42/100 total MC = 80 this test stat = 0.292951\n",
      " mu=6.225 [-inf, 2.03573]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 43/100 total MC = 80 this test stat = 0.330045\n",
      " mu=6.375 [-inf, 1.92767]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 44/100 total MC = 80 this test stat = 0.368932\n",
      " mu=6.525 [-inf, 2.0544]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 45/100 total MC = 80 this test stat = 0.409554\n",
      " mu=6.675 [-inf, 2.14188]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 46/100 total MC = 80 this test stat = 0.45186\n",
      " mu=6.825 [-inf, 2.72294]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 47/100 total MC = 80 this test stat = 0.495797\n",
      " mu=6.975 [-inf, 2.03823]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 48/100 total MC = 80 this test stat = 0.541318\n",
      " mu=7.125 [-inf, 2.41011]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 49/100 total MC = 80 this test stat = 0.588375\n",
      " mu=7.275 [-inf, 1.83449]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 50/100 total MC = 80 this test stat = 0.636924\n",
      " mu=7.425 [-inf, 2.80213]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 51/100 total MC = 80 this test stat = 0.686922\n",
      " mu=7.575 [-inf, 1.82957]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 52/100 total MC = 80 this test stat = 0.738329\n",
      " mu=7.725 [-inf, 1.9093]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 53/100 total MC = 80 this test stat = 0.791008\n",
      " mu=7.875 [-inf, 1.98986]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 54/100 total MC = 80 this test stat = 0.845195\n",
      " mu=8.025 [-inf, 2.82912]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 55/100 total MC = 80 this test stat = 0.900613\n",
      " mu=8.175 [-inf, 2.23216]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 56/100 total MC = 80 this test stat = 0.957212\n",
      " mu=8.325 [-inf, 1.51348]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 57/100 total MC = 80 this test stat = 1.01518\n",
      " mu=8.475 [-inf, 2.32128]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 58/100 total MC = 80 this test stat = 1.07427\n",
      " mu=8.625 [-inf, 4.56136]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 59/100 total MC = 80 this test stat = 1.13452\n",
      " mu=8.775 [-inf, 1.83847]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 60/100 total MC = 80 this test stat = 1.19586\n",
      " mu=8.925 [-inf, 1.80373]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 61/100 total MC = 80 this test stat = 1.25841\n",
      " mu=9.075 [-inf, 2.45852]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 62/100 total MC = 80 this test stat = 1.32199\n",
      " mu=9.225 [-inf, 1.95466]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 63/100 total MC = 80 this test stat = 1.38662\n",
      " mu=9.375 [-inf, 2.24328]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 64/100 total MC = 80 this test stat = 1.45228\n",
      " mu=9.525 [-inf, 2.50319]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 65/100 total MC = 80 this test stat = 1.51895\n",
      " mu=9.675 [-inf, 3.02403]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 66/100 total MC = 240 this test stat = 1.58659\n",
      " mu=9.825 [-inf, 1.60365]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 67/100 total MC = 80 this test stat = 1.6552\n",
      " mu=9.975 [-inf, 3.20706]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 68/100 total MC = 80 this test stat = 1.72474\n",
      " mu=10.125 [-inf, 2.42844]  in interval = 1\n",
      "\n",
      "[#0] PROGRESS:Generation -- generated toys: 500 / 1440\n",
      "[#0] PROGRESS:Generation -- generated toys: 1000 / 1440\n",
      "NeymanConstruction: Prog: 69/100 total MC = 2160 this test stat = 1.79519\n",
      " mu=10.275 [-inf, 1.79519]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 70/100 total MC = 240 this test stat = 1.86654\n",
      " mu=10.425 [-inf, 1.86654]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 71/100 total MC = 80 this test stat = 1.93876\n",
      " mu=10.575 [-inf, 2.67618]  in interval = 1\n",
      "\n",
      "NeymanConstruction: Prog: 72/100 total MC = 80 this test stat = 2.01184\n",
      " mu=10.725 [-inf, 1.40678]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 73/100 total MC = 80 this test stat = 2.08575\n",
      " mu=10.875 [-inf, 1.86151]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 74/100 total MC = 240 this test stat = 2.16048\n",
      " mu=11.025 [-inf, 1.7642]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 75/100 total MC = 80 this test stat = 2.23601\n",
      " mu=11.175 [-inf, 1.59869]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 76/100 total MC = 240 this test stat = 2.31232\n",
      " mu=11.325 [-inf, 1.66448]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 77/100 total MC = 80 this test stat = 2.38941\n",
      " mu=11.475 [-inf, 1.26987]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 78/100 total MC = 240 this test stat = 2.46724\n",
      " mu=11.625 [-inf, 1.40071]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 79/100 total MC = 80 this test stat = 2.54582\n",
      " mu=11.775 [-inf, 1.86704]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 80/100 total MC = 80 this test stat = 2.62511\n",
      " mu=11.925 [-inf, 1.93623]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 81/100 total MC = 80 this test stat = 2.70511\n",
      " mu=12.075 [-inf, 1.43268]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 82/100 total MC = 240 this test stat = 2.7858\n",
      " mu=12.225 [-inf, 1.49357]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 83/100 total MC = 80 this test stat = 2.86717\n",
      " mu=12.375 [-inf, 1.55534]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 84/100 total MC = 80 this test stat = 2.94921\n",
      " mu=12.525 [-inf, 1.12614]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 85/100 total MC = 80 this test stat = 3.03185\n",
      " mu=12.675 [-inf, 2.29398]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 86/100 total MC = 80 this test stat = 3.11523\n",
      " mu=12.825 [-inf, 1.7457]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 87/100 total MC = 80 this test stat = 3.1991\n",
      " mu=12.975 [-inf, 1.8108]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 88/100 total MC = 80 this test stat = 3.28355\n",
      " mu=13.125 [-inf, 2.51742]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 89/100 total MC = 240 this test stat = 3.36896\n",
      " mu=13.275 [-inf, 1.40455]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 90/100 total MC = 80 this test stat = 3.45474\n",
      " mu=13.425 [-inf, 2.01076]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 91/100 total MC = 240 this test stat = 3.5411\n",
      " mu=13.575 [-inf, 2.07893]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 92/100 total MC = 80 this test stat = 3.62804\n",
      " mu=13.725 [-inf, 2.14777]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 93/100 total MC = 80 this test stat = 3.71554\n",
      " mu=13.875 [-inf, 1.16754]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 94/100 total MC = 80 this test stat = 3.80359\n",
      " mu=14.025 [-inf, 1.70395]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 95/100 total MC = 240 this test stat = 3.89219\n",
      " mu=14.175 [-inf, 1.76612]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 96/100 total MC = 240 this test stat = 3.98132\n",
      " mu=14.325 [-inf, 1.32819]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 97/100 total MC = 80 this test stat = 4.07097\n",
      " mu=14.475 [-inf, 1.38331]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 98/100 total MC = 80 this test stat = 4.16114\n",
      " mu=14.625 [-inf, 1.43935]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 99/100 total MC = 240 this test stat = 4.25182\n",
      " mu=14.775 [-inf, 1.49612]  in interval = 0\n",
      "\n",
      "NeymanConstruction: Prog: 100/100 total MC = 240 this test stat = 4.343\n",
      " mu=14.925 [-inf, 2.08888]  in interval = 0\n",
      "\n",
      "[#1] INFO:Eval -- 68 points in interval\n"
     ]
    }
   ],
   "source": [
    "interval = fc.GetInterval()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3334c750",
   "metadata": {},
   "source": [
    "make a canvas for plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "84e22f12",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:04.668912Z",
     "iopub.status.busy": "2026-05-19T20:36:04.668782Z",
     "iopub.status.idle": "2026-05-19T20:36:04.782235Z",
     "shell.execute_reply": "2026-05-19T20:36:04.781404Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "is this point in the interval?  False\n",
      "interval is [0.525, 10.575]\n"
     ]
    }
   ],
   "source": [
    "intervalCanvas = ROOT.TCanvas(\"intervalCanvas\")\n",
    "\n",
    "print(\"is this point in the interval? \", interval.IsInInterval(parameters))\n",
    "print(\"interval is [{}, {}]\".format(interval.LowerLimit(mu), interval.UpperLimit(mu)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fdeb6b4",
   "metadata": {},
   "source": [
    "using 200 bins it takes 1 min and the answer is\n",
    "interval is [0.2625, 10.6125] with a step size of .075\n",
    "The interval in Feldman & Cousins's original paper is [.29, 10.81]\n",
    "Phys.Rev.D57:3873-3889,1998."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f79002d",
   "metadata": {},
   "source": [
    "No dedicated plotting class yet, so do it by hand:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "675dfd3a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:04.783687Z",
     "iopub.status.busy": "2026-05-19T20:36:04.783543Z",
     "iopub.status.idle": "2026-05-19T20:36:04.949385Z",
     "shell.execute_reply": "2026-05-19T20:36:04.940413Z"
    }
   },
   "outputs": [],
   "source": [
    "parameterScan = fc.GetPointsToScan()\n",
    "hist = parameterScan.createHistogram(\"mu\", ROOT.RooFit.Binning(30))\n",
    "hist.Draw()\n",
    "\n",
    "marks = []"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d749827",
   "metadata": {},
   "source": [
    "loop over points to test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ac70ccda",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:04.950850Z",
     "iopub.status.busy": "2026-05-19T20:36:04.950721Z",
     "iopub.status.idle": "2026-05-19T20:36:05.161480Z",
     "shell.execute_reply": "2026-05-19T20:36:05.160557Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real time 0:00:03, CP time 2.290\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rs401c_FeldmanCousins_data.png has been created\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rs401c_FeldmanCousins_hist.png has been created\n"
     ]
    }
   ],
   "source": [
    "for i in range(parameterScan.numEntries()):\n",
    "    # get a parameter point from the list of points to test.\n",
    "    tmpPoint = parameterScan.get(i).clone(\"temp\")\n",
    "\n",
    "    mark = ROOT.TMarker(tmpPoint.getRealValue(\"mu\"), 1, 25)\n",
    "    if interval.IsInInterval(tmpPoint):\n",
    "        mark.SetMarkerColor(\"kBlue\")\n",
    "    else:\n",
    "        mark.SetMarkerColor(\"kRed\")\n",
    "\n",
    "    mark.Draw(\"s\")\n",
    "    marks.append(mark)\n",
    "\n",
    "t.Stop()\n",
    "t.Print()\n",
    "\n",
    "dataCanvas.SaveAs(\"rs401c_FeldmanCousins_data.png\")\n",
    "intervalCanvas.SaveAs(\"rs401c_FeldmanCousins_hist.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ae233a0",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "41b2d86b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:36:05.163054Z",
     "iopub.status.busy": "2026-05-19T20:36:05.162926Z",
     "iopub.status.idle": "2026-05-19T20:36:05.297539Z",
     "shell.execute_reply": "2026-05-19T20:36:05.296758Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222965279\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222965279() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(21651,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222965279', 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_1779222965279();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222965293\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222965293() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(44015,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222965293', 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_1779222965293();\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
}
