{
"cells": [
{
"cell_type": "markdown",
"id": "00a29316",
"metadata": {},
"source": [
"# rf509_wsinteractive\n",
"Organization and simultaneous fits: easy interactive access to workspace contents - CINT\n",
"to CLING code migration\n",
"\n",
"\n",
"\n",
"\n",
"**Author:** Clemens Lange, Wouter Verkerke (C++ version) \n",
"This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Tuesday, March 19, 2024 at 07:16 PM."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "9f0a440d",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:35.784064Z",
"iopub.status.busy": "2024-03-19T19:16:35.763017Z",
"iopub.status.idle": "2024-03-19T19:16:38.921158Z",
"shell.execute_reply": "2024-03-19T19:16:38.919668Z"
}
},
"outputs": [],
"source": [
"import ROOT\n",
"\n",
"\n",
"def fillWorkspace(w):\n",
" # Create pdf and fill workspace\n",
" # --------------------------------------------------------\n",
"\n",
" # Declare observable x\n",
" x = ROOT.RooRealVar(\"x\", \"x\", 0, 10)\n",
"\n",
" # Create two Gaussian PDFs g1(x,mean1,sigma) anf g2(x,mean2,sigma) and\n",
" # their parameters\n",
" mean = ROOT.RooRealVar(\"mean\", \"mean of gaussians\", 5, 0, 10)\n",
" sigma1 = ROOT.RooRealVar(\"sigma1\", \"width of gaussians\", 0.5)\n",
" sigma2 = ROOT.RooRealVar(\"sigma2\", \"width of gaussians\", 1)\n",
"\n",
" sig1 = ROOT.RooGaussian(\"sig1\", \"Signal component 1\", x, mean, sigma1)\n",
" sig2 = ROOT.RooGaussian(\"sig2\", \"Signal component 2\", x, mean, sigma2)\n",
"\n",
" # Build Chebychev polynomial pdf\n",
" a0 = ROOT.RooRealVar(\"a0\", \"a0\", 0.5, 0.0, 1.0)\n",
" a1 = ROOT.RooRealVar(\"a1\", \"a1\", -0.2, 0.0, 1.0)\n",
" bkg = ROOT.RooChebychev(\"bkg\", \"Background\", x, [a0, a1])\n",
"\n",
" # Sum the signal components into a composite signal pdf\n",
" sig1frac = ROOT.RooRealVar(\"sig1frac\", \"fraction of component 1 in signal\", 0.8, 0.0, 1.0)\n",
" sig = ROOT.RooAddPdf(\"sig\", \"Signal\", [sig1, sig2], [sig1frac])\n",
"\n",
" # Sum the composite signal and background\n",
" bkgfrac = ROOT.RooRealVar(\"bkgfrac\", \"fraction of background\", 0.5, 0.0, 1.0)\n",
" model = ROOT.RooAddPdf(\"model\", \"g1+g2+a\", [bkg, sig], [bkgfrac])\n",
"\n",
" w.Import(model)"
]
},
{
"cell_type": "markdown",
"id": "3a84cc94",
"metadata": {},
"source": [
"Create and fill workspace\n",
"------------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "909b30f2",
"metadata": {},
"source": [
"Create a workspace named 'w'\n",
"With CINT w could exports its contents to\n",
"a same-name C++ namespace in CINT 'namespace w'.\n",
"but self does not work anymore in CLING.\n",
"so self tutorial is an example on how to\n",
"change the code"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "123d8be3",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:38.927310Z",
"iopub.status.busy": "2024-03-19T19:16:38.926787Z",
"iopub.status.idle": "2024-03-19T19:16:39.154514Z",
"shell.execute_reply": "2024-03-19T19:16:39.153160Z"
}
},
"outputs": [],
"source": [
"w = ROOT.RooWorkspace(\"w\", True)"
]
},
{
"cell_type": "markdown",
"id": "ab12abe0",
"metadata": {},
"source": [
"Fill workspace with pdf and data in a separate function"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b375216d",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:39.165663Z",
"iopub.status.busy": "2024-03-19T19:16:39.165257Z",
"iopub.status.idle": "2024-03-19T19:16:40.188556Z",
"shell.execute_reply": "2024-03-19T19:16:40.187197Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[#0] WARNING:InputArguments -- The parameter 'sigma1' with range [-inf, inf] of the RooGaussian 'sig1' exceeds the safe range of (0, inf). Advise to limit its range.\n",
"[#0] WARNING:InputArguments -- The parameter 'sigma2' with range [-inf, inf] of the RooGaussian 'sig2' exceeds the safe range of (0, inf). Advise to limit its range.\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooAddPdf::model\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooChebychev::bkg\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::x\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::a0\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::a1\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::bkgfrac\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooAddPdf::sig\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooGaussian::sig1\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::mean\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sigma1\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sig1frac\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooGaussian::sig2\n",
"[#1] INFO:ObjectHandling -- RooWorkspace::import(w) importing RooRealVar::sigma2\n"
]
}
],
"source": [
"fillWorkspace(w)"
]
},
{
"cell_type": "markdown",
"id": "fd25f8b9",
"metadata": {},
"source": [
"Print workspace contents"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5c5acba1",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:40.200322Z",
"iopub.status.busy": "2024-03-19T19:16:40.199925Z",
"iopub.status.idle": "2024-03-19T19:16:40.357223Z",
"shell.execute_reply": "2024-03-19T19:16:40.351431Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"RooWorkspace(w) w contents\n",
"\n",
"variables\n",
"---------\n",
"(a0,a1,bkgfrac,mean,sig1frac,sigma1,sigma2,x)\n",
"\n",
"p.d.f.s\n",
"-------\n",
"RooChebychev::bkg[ x=x coefList=(a0,a1) ] = 1\n",
"RooAddPdf::model[ bkgfrac * bkg + [%] * sig ] = 1/1\n",
"RooAddPdf::sig[ sig1frac * sig1 + [%] * sig2 ] = 1/1\n",
"RooGaussian::sig1[ x=x mean=mean sigma=sigma1 ] = 1\n",
"RooGaussian::sig2[ x=x mean=mean sigma=sigma2 ] = 1\n",
"\n"
]
}
],
"source": [
"w.Print()"
]
},
{
"cell_type": "markdown",
"id": "401a520d",
"metadata": {},
"source": [
"self does not work anymore with CLING\n",
"use normal workspace functionality"
]
},
{
"cell_type": "markdown",
"id": "9ab36c6d",
"metadata": {},
"source": [
"Use workspace contents\n",
"----------------------------------------------"
]
},
{
"cell_type": "markdown",
"id": "dcbfada2",
"metadata": {},
"source": [
"Old syntax to use the name space prefix operator to access the workspace contents\n",
"\n",
"d = w.model.generate(w.x,1000)\n",
"r = w.model.fitTo(*d)"
]
},
{
"cell_type": "markdown",
"id": "b96c937a",
"metadata": {},
"source": [
"use normal workspace methods"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "53faf38e",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:40.362331Z",
"iopub.status.busy": "2024-03-19T19:16:40.361930Z",
"iopub.status.idle": "2024-03-19T19:16:40.987677Z",
"shell.execute_reply": "2024-03-19T19:16:40.983482Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[#1] INFO:Fitting -- RooAbsPdf::fitTo(model) fixing normalization set for coefficient determination to observables in data\n",
"[#1] INFO:Fitting -- using CPU computation library compiled with -mavx2\n",
"[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_modelData) Summation contains a RooNLLVar, using its error level\n",
"[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization\n",
"[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization\n"
]
}
],
"source": [
"model = w[\"model\"]\n",
"x = w[\"x\"]\n",
"\n",
"d = model.generate({x}, 1000)\n",
"r = model.fitTo(d, PrintLevel=-1)"
]
},
{
"cell_type": "markdown",
"id": "515501f9",
"metadata": {},
"source": [
"old syntax to access the variable x\n",
"frame = w.x.frame()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "0e40855b",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:41.011880Z",
"iopub.status.busy": "2024-03-19T19:16:41.011492Z",
"iopub.status.idle": "2024-03-19T19:16:41.236107Z",
"shell.execute_reply": "2024-03-19T19:16:41.234328Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"frame = x.frame()\n",
"d.plotOn(frame)"
]
},
{
"cell_type": "markdown",
"id": "d0c8adaf",
"metadata": {},
"source": [
"OLD syntax to omit x.\n",
"NB: The 'w.' prefix can be omitted if namespace w is imported in local namespace\n",
"in the usual C++ way\n",
"\n",
"using namespace w\n",
"model.plotOn(frame)\n",
"model.plotOn(frame, Components=bkg, LineStyle=\"--\")"
]
},
{
"cell_type": "markdown",
"id": "fb6d4f06",
"metadata": {},
"source": [
"correct syntax"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "3710ea69",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:41.241795Z",
"iopub.status.busy": "2024-03-19T19:16:41.241348Z",
"iopub.status.idle": "2024-03-19T19:16:41.525954Z",
"shell.execute_reply": "2024-03-19T19:16:41.524740Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) directly selected PDF components: (bkg)\n",
"[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) indirectly selected PDF components: ()\n"
]
}
],
"source": [
"bkg = w[\"bkg\"]\n",
"model.plotOn(frame)\n",
"model.plotOn(frame, Components=bkg, LineStyle=\"--\")"
]
},
{
"cell_type": "markdown",
"id": "f8d5de02",
"metadata": {},
"source": [
"Draw the frame on the canvas"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "ee3e6f00",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:41.530951Z",
"iopub.status.busy": "2024-03-19T19:16:41.530579Z",
"iopub.status.idle": "2024-03-19T19:16:41.905998Z",
"shell.execute_reply": "2024-03-19T19:16:41.904837Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Info in : png file rf509_wsinteractive.png has been created\n"
]
}
],
"source": [
"c = ROOT.TCanvas(\"rf509_wsinteractive\", \"rf509_wsinteractive\", 600, 600)\n",
"ROOT.gPad.SetLeftMargin(0.15)\n",
"frame.GetYaxis().SetTitleOffset(1.4)\n",
"frame.Draw()\n",
"\n",
"c.SaveAs(\"rf509_wsinteractive.png\")"
]
},
{
"cell_type": "markdown",
"id": "3f683ca7",
"metadata": {},
"source": [
"Draw all canvases "
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "b73a2205",
"metadata": {
"collapsed": false,
"execution": {
"iopub.execute_input": "2024-03-19T19:16:41.910600Z",
"iopub.status.busy": "2024-03-19T19:16:41.910023Z",
"iopub.status.idle": "2024-03-19T19:16:42.155545Z",
"shell.execute_reply": "2024-03-19T19:16:42.154230Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"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.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}