{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a4721508",
   "metadata": {},
   "source": [
    "# rf407_ComputationalGraphVisualization\n",
    "Data and categories: Visualing computational graph model before fitting, and latex printing of lists and sets of RooArgSets after fitting\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Clemens Lange, Wouter Verkerke (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:31 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "628027f2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:56.343785Z",
     "iopub.status.busy": "2026-05-19T20:31:56.343619Z",
     "iopub.status.idle": "2026-05-19T20:31:57.311036Z",
     "shell.execute_reply": "2026-05-19T20:31:57.310597Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc8db91f",
   "metadata": {},
   "source": [
    "Setup composite pdf\n",
    "--------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7bef632e",
   "metadata": {},
   "source": [
    "Declare observable x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "337a6547",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:57.315252Z",
     "iopub.status.busy": "2026-05-19T20:31:57.315123Z",
     "iopub.status.idle": "2026-05-19T20:31:57.477498Z",
     "shell.execute_reply": "2026-05-19T20:31:57.476818Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", 0, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6dc8e87f",
   "metadata": {},
   "source": [
    "Create two Gaussian PDFs g1(x,mean1,sigma) anf g2(x,mean2,sigma) and\n",
    "their parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b20c5962",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:57.480231Z",
     "iopub.status.busy": "2026-05-19T20:31:57.480103Z",
     "iopub.status.idle": "2026-05-19T20:31:57.608060Z",
     "shell.execute_reply": "2026-05-19T20:31:57.607355Z"
    }
   },
   "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"
     ]
    }
   ],
   "source": [
    "mean = ROOT.RooRealVar(\"mean\", \"mean of gaussians\", 5)\n",
    "sigma1 = ROOT.RooRealVar(\"sigma1\", \"width of gaussians\", 0.5)\n",
    "sigma2 = ROOT.RooRealVar(\"sigma2\", \"width of gaussians\", 1)\n",
    "sig1 = ROOT.RooGaussian(\"sig1\", \"Signal component 1\", x, mean, sigma1)\n",
    "sig2 = ROOT.RooGaussian(\"sig2\", \"Signal component 2\", x, mean, sigma2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "97124d32",
   "metadata": {},
   "source": [
    "Sum the signal components into a composite signal pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d9bf7b83",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:57.609736Z",
     "iopub.status.busy": "2026-05-19T20:31:57.609590Z",
     "iopub.status.idle": "2026-05-19T20:31:57.790153Z",
     "shell.execute_reply": "2026-05-19T20:31:57.789435Z"
    }
   },
   "outputs": [],
   "source": [
    "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])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b3a4491c",
   "metadata": {},
   "source": [
    "Build Chebychev polynomial pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3f8e44e2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:57.792136Z",
     "iopub.status.busy": "2026-05-19T20:31:57.792007Z",
     "iopub.status.idle": "2026-05-19T20:31:57.902112Z",
     "shell.execute_reply": "2026-05-19T20:31:57.901427Z"
    }
   },
   "outputs": [],
   "source": [
    "a0 = ROOT.RooRealVar(\"a0\", \"a0\", 0.5, 0.0, 1.0)\n",
    "a1 = ROOT.RooRealVar(\"a1\", \"a1\", -0.2, 0.0, 1.0)\n",
    "bkg1 = ROOT.RooChebychev(\"bkg1\", \"Background 1\", x, [a0, a1])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd4500a6",
   "metadata": {},
   "source": [
    "Build expontential pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e9ebb7bb",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:57.904263Z",
     "iopub.status.busy": "2026-05-19T20:31:57.904138Z",
     "iopub.status.idle": "2026-05-19T20:31:58.015262Z",
     "shell.execute_reply": "2026-05-19T20:31:58.014570Z"
    }
   },
   "outputs": [],
   "source": [
    "alpha = ROOT.RooRealVar(\"alpha\", \"alpha\", -1)\n",
    "bkg2 = ROOT.RooExponential(\"bkg2\", \"Background 2\", x, alpha)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5a87e6a",
   "metadata": {},
   "source": [
    "Sum the background components into a composite background pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b27acb5f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.017217Z",
     "iopub.status.busy": "2026-05-19T20:31:58.017091Z",
     "iopub.status.idle": "2026-05-19T20:31:58.120707Z",
     "shell.execute_reply": "2026-05-19T20:31:58.120054Z"
    }
   },
   "outputs": [],
   "source": [
    "bkg1frac = ROOT.RooRealVar(\"sig1frac\", \"fraction of component 1 in background\", 0.2, 0.0, 1.0)\n",
    "bkg = ROOT.RooAddPdf(\"bkg\", \"Signal\", [bkg1, bkg2], [sig1frac])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bde4ede5",
   "metadata": {},
   "source": [
    "Sum the composite signal and background"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "50a72d70",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.122762Z",
     "iopub.status.busy": "2026-05-19T20:31:58.122639Z",
     "iopub.status.idle": "2026-05-19T20:31:58.226187Z",
     "shell.execute_reply": "2026-05-19T20:31:58.225575Z"
    }
   },
   "outputs": [],
   "source": [
    "bkgfrac = ROOT.RooRealVar(\"bkgfrac\", \"fraction of background\", 0.5, 0.0, 1.0)\n",
    "model = ROOT.RooAddPdf(\"model\", \"g1+g2+a\", [bkg, sig], [bkgfrac])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72c398cf",
   "metadata": {},
   "source": [
    "Print composite tree in ASCII\n",
    "-----------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c11f550",
   "metadata": {},
   "source": [
    "Print tree to stdout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "67de4c8a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.228138Z",
     "iopub.status.busy": "2026-05-19T20:31:58.228018Z",
     "iopub.status.idle": "2026-05-19T20:31:58.336904Z",
     "shell.execute_reply": "2026-05-19T20:31:58.336366Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0x5631c11d5540 RooAddPdf::model = 0.900674/1 [Auto,Clean] \n",
      "  0x5631c0e891a0/V- RooAddPdf::bkg = 0.801348/1 [Auto,Clean] \n",
      "    0x5631c1167b00/V- RooChebychev::bkg1 = 1 [Auto,Dirty] \n",
      "      0x5631bb86bcb0/V- RooRealVar::x = 5\n",
      "      0x5631c0b7e3e0/V- RooRealVar::a0 = 0.5\n",
      "      0x5631c1022e30/V- RooRealVar::a1 = 0\n",
      "    0x5631c0bca960/V- RooRealVar::sig1frac = 0.8\n",
      "    0x5631c11641e0/V- RooExponential::bkg2 = 0.00673795 [Auto,Dirty] \n",
      "      0x5631bb86bcb0/V- RooRealVar::x = 5\n",
      "      0x5631c0eec640/V- RooRealVar::alpha = -1\n",
      "  0x5631c117f1d0/V- RooRealVar::bkgfrac = 0.5\n",
      "  0x5631c1171340/V- RooAddPdf::sig = 1/1 [Auto,Clean] \n",
      "    0x5631c0c1c420/V- RooGaussian::sig1 = 1 [Auto,Dirty] \n",
      "      0x5631bb86bcb0/V- RooRealVar::x = 5\n",
      "      0x5631c00bee80/V- RooRealVar::mean = 5\n",
      "      0x5631c0b567e0/V- RooRealVar::sigma1 = 0.5\n",
      "    0x5631c0bca960/V- RooRealVar::sig1frac = 0.8\n",
      "    0x5631c0c98e40/V- RooGaussian::sig2 = 1 [Auto,Dirty] \n",
      "      0x5631bb86bcb0/V- RooRealVar::x = 5\n",
      "      0x5631c00bee80/V- RooRealVar::mean = 5\n",
      "      0x5631c0bc3aa0/V- RooRealVar::sigma2 = 1\n"
     ]
    }
   ],
   "source": [
    "model.Print(\"t\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7832bda0",
   "metadata": {},
   "source": [
    "Print tree to file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e63733a1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.338516Z",
     "iopub.status.busy": "2026-05-19T20:31:58.338390Z",
     "iopub.status.idle": "2026-05-19T20:31:58.448588Z",
     "shell.execute_reply": "2026-05-19T20:31:58.447966Z"
    }
   },
   "outputs": [],
   "source": [
    "model.printCompactTree(\"\", \"rf206_asciitree.txt\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5cc5cea1",
   "metadata": {},
   "source": [
    "Draw composite tree graphically\n",
    "-------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4e62da0",
   "metadata": {},
   "source": [
    "Print GraphViz DOT file with representation of tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "dc331d03",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.450703Z",
     "iopub.status.busy": "2026-05-19T20:31:58.450553Z",
     "iopub.status.idle": "2026-05-19T20:31:58.564662Z",
     "shell.execute_reply": "2026-05-19T20:31:58.558579Z"
    }
   },
   "outputs": [],
   "source": [
    "model.graphVizTree(\"rf206_model.dot\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06bfabef",
   "metadata": {},
   "source": [
    "Make list of parameters before and after fit\n",
    "----------------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afca1708",
   "metadata": {},
   "source": [
    "Make list of model parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "25b329dd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.575402Z",
     "iopub.status.busy": "2026-05-19T20:31:58.575255Z",
     "iopub.status.idle": "2026-05-19T20:31:58.699018Z",
     "shell.execute_reply": "2026-05-19T20:31:58.698402Z"
    }
   },
   "outputs": [],
   "source": [
    "params = model.getParameters({x})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f8921524",
   "metadata": {},
   "source": [
    "Save snapshot of prefit parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f64cb7e6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.701129Z",
     "iopub.status.busy": "2026-05-19T20:31:58.701001Z",
     "iopub.status.idle": "2026-05-19T20:31:58.809458Z",
     "shell.execute_reply": "2026-05-19T20:31:58.808768Z"
    }
   },
   "outputs": [],
   "source": [
    "initParams = params.snapshot()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45225969",
   "metadata": {},
   "source": [
    "Do fit to data, obtain error estimates on parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ea276451",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:58.811176Z",
     "iopub.status.busy": "2026-05-19T20:31:58.811054Z",
     "iopub.status.idle": "2026-05-19T20:31:59.024240Z",
     "shell.execute_reply": "2026-05-19T20:31:59.023594Z"
    }
   },
   "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 generic CPU library compiled with no vectorizations\n",
      "[#1] INFO:Fitting -- Creation of NLL object took 847.934 μs\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_modelData) Summation contains a RooNLLVar, using its error level\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooFitResult object at 0x(nil)>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = model.generate({x}, 1000)\n",
    "model.fitTo(data, PrintLevel=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c688b6f4",
   "metadata": {},
   "source": [
    "Print LateX table of parameters of pdf\n",
    "--------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4cb16fd",
   "metadata": {},
   "source": [
    "Print parameter list in LaTeX for (one column with names, column with\n",
    "values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "b6262d7d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:59.026229Z",
     "iopub.status.busy": "2026-05-19T20:31:59.026099Z",
     "iopub.status.idle": "2026-05-19T20:31:59.142797Z",
     "shell.execute_reply": "2026-05-19T20:31:59.142200Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\\begin{tabular}{lc}\n",
      "$\\verb+a0+ $ & $  0.5\\pm 0.2$\\\\\n",
      "$\\verb+a1+ $ & $  0.3\\pm 0.1$\\\\\n",
      "$\\verb+alpha+ $ & $ -1.00$\\\\\n",
      "$\\verb+bkgfrac+ $ & $  0.46\\pm 0.03$\\\\\n",
      "$\\verb+mean+ $ & $  5$\\\\\n",
      "$\\verb+sig1frac+ $ & $  0.79\\pm 0.05$\\\\\n",
      "$\\verb+sigma1+ $ & $  0.5$\\\\\n",
      "$\\verb+sigma2+ $ & $  1$\\\\\n",
      "\\end{tabular}\n"
     ]
    }
   ],
   "source": [
    "params.printLatex()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bec1c1b2",
   "metadata": {},
   "source": [
    "Print parameter list in LaTeX for (names values|names values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "e58e5e89",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:59.144428Z",
     "iopub.status.busy": "2026-05-19T20:31:59.144302Z",
     "iopub.status.idle": "2026-05-19T20:31:59.253351Z",
     "shell.execute_reply": "2026-05-19T20:31:59.252735Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\\begin{tabular}{lc|lc}\n",
      "$\\verb+a0+ $ & $  0.5\\pm 0.2$ & $\\verb+mean+ $ & $  5$\\\\\n",
      "$\\verb+a1+ $ & $  0.3\\pm 0.1$ & $\\verb+sig1frac+ $ & $  0.79\\pm 0.05$\\\\\n",
      "$\\verb+alpha+ $ & $ -1.00$ & $\\verb+sigma1+ $ & $  0.5$\\\\\n",
      "$\\verb+bkgfrac+ $ & $  0.46\\pm 0.03$ & $\\verb+sigma2+ $ & $  1$\\\\\n",
      "\\end{tabular}\n"
     ]
    }
   ],
   "source": [
    "params.printLatex(Columns=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6aa6432",
   "metadata": {},
   "source": [
    "Print two parameter lists side by side (name values initvalues)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "2dea7425",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:59.254987Z",
     "iopub.status.busy": "2026-05-19T20:31:59.254856Z",
     "iopub.status.idle": "2026-05-19T20:31:59.363815Z",
     "shell.execute_reply": "2026-05-19T20:31:59.363249Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\\begin{tabular}{lcc}\n",
      "$\\verb+a0+ $ & $  0.5\\pm 0.2$ & $ 0.5$\\\\\n",
      "$\\verb+a1+ $ & $  0.3\\pm 0.1$ & $ 0$\\\\\n",
      "$\\verb+alpha+ $ & $ -1.00$ & $-1.00$\\\\\n",
      "$\\verb+bkgfrac+ $ & $  0.46\\pm 0.03$ & $ 0.5$\\\\\n",
      "$\\verb+mean+ $ & $  5$ & $ 5$\\\\\n",
      "$\\verb+sig1frac+ $ & $  0.79\\pm 0.05$ & $ 0.8$\\\\\n",
      "$\\verb+sigma1+ $ & $  0.5$ & $ 0.5$\\\\\n",
      "$\\verb+sigma2+ $ & $  1$ & $ 1$\\\\\n",
      "\\end{tabular}\n"
     ]
    }
   ],
   "source": [
    "params.printLatex(Sibling=initParams)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dedd316a",
   "metadata": {},
   "source": [
    "Print two parameter lists side by side (name values initvalues|name\n",
    "values initvalues)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "fcee371d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:59.365597Z",
     "iopub.status.busy": "2026-05-19T20:31:59.365465Z",
     "iopub.status.idle": "2026-05-19T20:31:59.469379Z",
     "shell.execute_reply": "2026-05-19T20:31:59.468838Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\\begin{tabular}{lcc|lcc}\n",
      "$\\verb+a0+ $ & $  0.5\\pm 0.2$ & $ 0.5$ & $\\verb+mean+ $ & $  5$ & $ 5$\\\\\n",
      "$\\verb+a1+ $ & $  0.3\\pm 0.1$ & $ 0$ & $\\verb+sig1frac+ $ & $  0.79\\pm 0.05$ & $ 0.8$\\\\\n",
      "$\\verb+alpha+ $ & $ -1.00$ & $-1.00$ & $\\verb+sigma1+ $ & $  0.5$ & $ 0.5$\\\\\n",
      "$\\verb+bkgfrac+ $ & $  0.46\\pm 0.03$ & $ 0.5$ & $\\verb+sigma2+ $ & $  1$ & $ 1$\\\\\n",
      "\\end{tabular}\n"
     ]
    }
   ],
   "source": [
    "params.printLatex(Sibling=initParams, Columns=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e48b1100",
   "metadata": {},
   "source": [
    "Write LaTex table to file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "76e84bec",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:59.471038Z",
     "iopub.status.busy": "2026-05-19T20:31:59.470914Z",
     "iopub.status.idle": "2026-05-19T20:31:59.579144Z",
     "shell.execute_reply": "2026-05-19T20:31:59.578399Z"
    }
   },
   "outputs": [],
   "source": [
    "params.printLatex(Sibling=initParams, OutputFile=\"rf407_latextables.tex\")"
   ]
  }
 ],
 "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
}
