{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a3a161b6",
   "metadata": {},
   "source": [
    "# rf712_lagrangianmorphfit\n",
    "Performing a simple fit with RooLagrangianMorphFunc\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:** Rahul Balasubramanian  \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": "0c93d577",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:11.305558Z",
     "iopub.status.busy": "2026-05-19T20:35:11.305441Z",
     "iopub.status.idle": "2026-05-19T20:35:12.274702Z",
     "shell.execute_reply": "2026-05-19T20:35:12.274080Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT\n",
    "\n",
    "ROOT.gStyle.SetOptStat(0)\n",
    "ROOT.PyConfig.IgnoreCommandLineOptions = True\n",
    "ROOT.gROOT.SetBatch(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4762e21",
   "metadata": {},
   "source": [
    "Create functions\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e4e4aab9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:12.276547Z",
     "iopub.status.busy": "2026-05-19T20:35:12.276406Z",
     "iopub.status.idle": "2026-05-19T20:35:12.435333Z",
     "shell.execute_reply": "2026-05-19T20:35:12.434912Z"
    }
   },
   "outputs": [],
   "source": [
    "observablename = \"pTV\"\n",
    "obsvar = ROOT.RooRealVar(observablename, \"observable of pTV\", 10, 600)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6dffc8e3",
   "metadata": {},
   "source": [
    "Setup three EFT coefficient and constant SM modifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "49c3fc14",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:12.447350Z",
     "iopub.status.busy": "2026-05-19T20:35:12.447212Z",
     "iopub.status.idle": "2026-05-19T20:35:12.559445Z",
     "shell.execute_reply": "2026-05-19T20:35:12.559029Z"
    }
   },
   "outputs": [],
   "source": [
    "kSM = ROOT.RooRealVar(\"kSM\", \"sm modifier\", 1.0)\n",
    "cHq3 = ROOT.RooRealVar(\"cHq3\", \"EFT modifier\", -10.0, 10.0)\n",
    "cHq3.setAttribute(\"NewPhysics\", True)\n",
    "cHl3 = ROOT.RooRealVar(\"cHl3\", \"EFT modifier\", -10.0, 10.0)\n",
    "cHl3.setAttribute(\"NewPhysics\", True)\n",
    "cHDD = ROOT.RooRealVar(\"cHDD\", \"EFT modifier\", -10.0, 10.0)\n",
    "cHDD.setAttribute(\"NewPhysics\", True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4be4f685",
   "metadata": {},
   "source": [
    "Inputs to setup config\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "75582009",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:12.570099Z",
     "iopub.status.busy": "2026-05-19T20:35:12.569962Z",
     "iopub.status.idle": "2026-05-19T20:35:12.677673Z",
     "shell.execute_reply": "2026-05-19T20:35:12.677117Z"
    }
   },
   "outputs": [],
   "source": [
    "infilename = ROOT.gROOT.GetTutorialDir().Data() + \"/roofit/roofit/input_histos_rf_lagrangianmorph.root\"\n",
    "par = \"cHq3\"\n",
    "samplelist = [\n",
    "    \"SM_NPsq0\",\n",
    "    \"cHq3_NPsq1\",\n",
    "    \"cHq3_NPsq2\",\n",
    "    \"cHl3_NPsq1\",\n",
    "    \"cHl3_NPsq2\",\n",
    "    \"cHDD_NPsq1\",\n",
    "    \"cHDD_NPsq2\",\n",
    "    \"cHl3_cHDD_NPsq2\",\n",
    "    \"cHq3_cHDD_NPsq2\",\n",
    "    \"cHl3_cHq3_NPsq2\",\n",
    "]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36202550",
   "metadata": {},
   "source": [
    "Set Config\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "db4a0338",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:12.679526Z",
     "iopub.status.busy": "2026-05-19T20:35:12.679402Z",
     "iopub.status.idle": "2026-05-19T20:35:13.071426Z",
     "shell.execute_reply": "2026-05-19T20:35:13.070855Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "config = ROOT.RooLagrangianMorphFunc.Config()\n",
    "config.fileName = infilename\n",
    "config.observableName = observablename\n",
    "config.folderNames = samplelist\n",
    "config.couplings.add(cHq3)\n",
    "config.couplings.add(cHDD)\n",
    "config.couplings.add(cHl3)\n",
    "config.couplings.add(kSM)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6e6feae",
   "metadata": {},
   "source": [
    "Create morphing function\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0ec15bbd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:13.073194Z",
     "iopub.status.busy": "2026-05-19T20:35:13.073071Z",
     "iopub.status.idle": "2026-05-19T20:35:13.217128Z",
     "shell.execute_reply": "2026-05-19T20:35:13.216623Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] PROGRESS:InputArguments -- initializing physics inputs from file /github/home/ROOT-CI/build/tutorials/roofit/roofit/input_histos_rf_lagrangianmorph.root with object name(s) 'pTV'\n"
     ]
    }
   ],
   "source": [
    "morphfunc = ROOT.RooLagrangianMorphFunc(\"morphfunc\", \"morphed dist. of pTV\", config)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "caea8a43",
   "metadata": {},
   "source": [
    "Create pseudo data histogram to fit at cHq3 = 0.01, cHl3 = 1.0, cHDD = 0.2\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dd4dc518",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:13.218514Z",
     "iopub.status.busy": "2026-05-19T20:35:13.218384Z",
     "iopub.status.idle": "2026-05-19T20:35:13.463574Z",
     "shell.execute_reply": "2026-05-19T20:35:13.463032Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] PROGRESS:Caching -- creating cache from getCache function for 0x5630e0e2bd50\n",
      "[#0] PROGRESS:Caching -- current storage has size 10\n",
      "[#0] PROGRESS:ObjectHandling -- observable: pTV\n",
      "[#0] PROGRESS:ObjectHandling -- binWidth: binWidth_pTV\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pseudo_dh): fit range of variable pTV expanded to nearest bin boundaries: [10,600] --> [0,600]\n"
     ]
    }
   ],
   "source": [
    "morphfunc.setParameter(\"cHq3\", 0.01)\n",
    "morphfunc.setParameter(\"cHl3\", 1.0)\n",
    "morphfunc.setParameter(\"cHDD\", 0.2)\n",
    "\n",
    "pseudo_hist = morphfunc.createTH1(\"pseudo_hist\")\n",
    "pseudo_dh = ROOT.RooDataHist(\"pseudo_dh\", \"pseudo_dh\", [obsvar], pseudo_hist)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "531cb77b",
   "metadata": {},
   "source": [
    "reset parameters to zeros before fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d6361d70",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:13.465112Z",
     "iopub.status.busy": "2026-05-19T20:35:13.464988Z",
     "iopub.status.idle": "2026-05-19T20:35:13.568359Z",
     "shell.execute_reply": "2026-05-19T20:35:13.567818Z"
    }
   },
   "outputs": [],
   "source": [
    "morphfunc.setParameter(\"cHq3\", 0.0)\n",
    "morphfunc.setParameter(\"cHl3\", 0.0)\n",
    "morphfunc.setParameter(\"cHDD\", 0.0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "89ef6d07",
   "metadata": {},
   "source": [
    "set error to set initial step size in fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "33f33f44",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:13.569939Z",
     "iopub.status.busy": "2026-05-19T20:35:13.569815Z",
     "iopub.status.idle": "2026-05-19T20:35:13.677890Z",
     "shell.execute_reply": "2026-05-19T20:35:13.677344Z"
    }
   },
   "outputs": [],
   "source": [
    "cHq3.setError(0.1)\n",
    "cHl3.setError(0.1)\n",
    "cHDD.setError(0.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20919120",
   "metadata": {},
   "source": [
    "Wrap pdf on morphfunc and fit to data histogram\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "215d9310",
   "metadata": {},
   "source": [
    "wrapper pdf to normalise morphing function to a morphing pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c4445524",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:13.679478Z",
     "iopub.status.busy": "2026-05-19T20:35:13.679356Z",
     "iopub.status.idle": "2026-05-19T20:35:13.926195Z",
     "shell.execute_reply": "2026-05-19T20:35:13.925655Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] PROGRESS:Caching -- creating cache from getCache function for 0x5630e1c32600\n",
      "[#0] PROGRESS:Caching -- current storage has size 10\n",
      "[#0] PROGRESS:ObjectHandling -- observable: pTV\n",
      "[#0] PROGRESS:ObjectHandling -- binWidth: binWidth_pTV\n",
      "\n",
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(wrap_pdf_over_wrap_pdf_Int[pTV]) 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 7.52358 ms\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_wrap_pdf_over_wrap_pdf_Int[pTV]_pseudo_dh) Summation contains a RooNLLVar, using its error level\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (39620.3) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tcHDD=0.22238\tcHl3=2.00088\tcHq3=0.00780325\n",
      "RooFit::Detail::RooNormalizedPdf::wrap_pdf_over_wrap_pdf_Int[pTV][ numerator=wrap_pdf denominator=wrap_pdf_Int[pTV] ]\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.0889525, denominator=wrap_pdf_Int[pTV]=4479.59\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.0889525, denominator=wrap_pdf_Int[pTV]=4479.59\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.0889525, denominator=wrap_pdf_Int[pTV]=4479.59\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.0889525, denominator=wrap_pdf_Int[pTV]=4479.59\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (39620.3) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tcHDD=1.16153\tcHl3=8.6965\tcHq3=0.0408466\n",
      "RooFit::Detail::RooNormalizedPdf::wrap_pdf_over_wrap_pdf_Int[pTV][ numerator=wrap_pdf denominator=wrap_pdf_Int[pTV] ]\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.894368, denominator=wrap_pdf_Int[pTV]=3980.01\n",
      "    ... (remaining 4 messages suppressed)\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (39620.3) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tcHDD=0.607791\tcHl3=5.23432\tcHq3=0.0213386\n",
      "RooFit::Detail::RooNormalizedPdf::wrap_pdf_over_wrap_pdf_Int[pTV][ numerator=wrap_pdf denominator=wrap_pdf_Int[pTV] ]\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.315769, denominator=wrap_pdf_Int[pTV]=237.773\n",
      "    ... (remaining 16 messages suppressed)\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (39620.3) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tcHDD=0.330108\tcHl3=2.94627\tcHq3=0.0115846\n",
      "RooFit::Detail::RooNormalizedPdf::wrap_pdf_over_wrap_pdf_Int[pTV][ numerator=wrap_pdf denominator=wrap_pdf_Int[pTV] ]\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.131032, denominator=wrap_pdf_Int[pTV]=2465.37\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.131032, denominator=wrap_pdf_Int[pTV]=2465.37\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.131032, denominator=wrap_pdf_Int[pTV]=2465.37\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.131032, denominator=wrap_pdf_Int[pTV]=2465.37\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.131032, denominator=wrap_pdf_Int[pTV]=2465.37\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.131032, denominator=wrap_pdf_Int[pTV]=2465.37\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (39620.3) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tcHDD=0.191157\tcHl3=1.72296\tcHq3=0.00670752\n",
      "RooFit::Detail::RooNormalizedPdf::wrap_pdf_over_wrap_pdf_Int[pTV][ numerator=wrap_pdf denominator=wrap_pdf_Int[pTV] ]\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.0801556, denominator=wrap_pdf_Int[pTV]=5193.38\n",
      "     p.d.f value is less than zero, trying to recover @ numerator=wrap_pdf=0.0801556, denominator=wrap_pdf_Int[pTV]=5193.38\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.0801556, denominator=wrap_pdf_Int[pTV]=5193.38\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.0801556, denominator=wrap_pdf_Int[pTV]=5193.38\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (39620.3) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tcHDD=0.138238\tcHl3=1.24892\tcHq3=0.00485049\n",
      "RooFit::Detail::RooNormalizedPdf::wrap_pdf_over_wrap_pdf_Int[pTV][ numerator=wrap_pdf denominator=wrap_pdf_Int[pTV] ]\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.0688277, denominator=wrap_pdf_Int[pTV]=6538.46\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (39620.3) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tcHDD=0.121667\tcHl3=1.24299\tcHq3=0.004269\n",
      "RooFit::Detail::RooNormalizedPdf::wrap_pdf_over_wrap_pdf_Int[pTV][ numerator=wrap_pdf denominator=wrap_pdf_Int[pTV] ]\n",
      "     getLogVal() top-level p.d.f evaluates to NaN @ numerator=wrap_pdf=0.0667251, denominator=wrap_pdf_Int[pTV]=6553.34\n",
      "\n",
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(wrap_pdf) Calculating sum-of-weights-squared correction matrix for covariance matrix\n"
     ]
    }
   ],
   "source": [
    "model = ROOT.RooWrapperPdf(\"wrap_pdf\", \"wrap_pdf\", morphfunc)\n",
    "fitres = model.fitTo(pseudo_dh, SumW2Error=True, Optimize=False, Save=True, PrintLevel=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0f9defe",
   "metadata": {},
   "source": [
    "run the fit\n",
    "Get the correlation matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "53a789d3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:13.927765Z",
     "iopub.status.busy": "2026-05-19T20:35:13.927623Z",
     "iopub.status.idle": "2026-05-19T20:35:14.038547Z",
     "shell.execute_reply": "2026-05-19T20:35:14.038057Z"
    }
   },
   "outputs": [],
   "source": [
    "hcorr = fitres.correlationHist()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93c0a10c",
   "metadata": {},
   "source": [
    "Extract postfit distribution and plot with initial histogram\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "7166f210",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:14.040489Z",
     "iopub.status.busy": "2026-05-19T20:35:14.040365Z",
     "iopub.status.idle": "2026-05-19T20:35:14.210413Z",
     "shell.execute_reply": "2026-05-19T20:35:14.209939Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x5630e1eef870>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:InputArguments -- RooAbsData::plotOn(pseudo_dh) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors\n",
      "[#1] INFO:Plotting -- RooPlot::updateFitRangeNorm: New event count of 7389.24 will supersede previous event count of 7388.38 for normalization of PDF projections\n"
     ]
    }
   ],
   "source": [
    "postfit_hist = morphfunc.createTH1(\"morphing_postfit_hist\")\n",
    "postfit_dh = ROOT.RooDataHist(\"morphing_postfit_dh\", \"morphing_postfit_dh\", [obsvar], postfit_hist)\n",
    "\n",
    "frame0 = obsvar.frame(Title=\"Input templates for p_{T}^{V}\")\n",
    "postfit_dh.plotOn(\n",
    "    frame0,\n",
    "    Name=\"postfit_dist\",\n",
    "    DrawOption=\"C\",\n",
    "    LineColor=\"b\",\n",
    "    DataError=None,\n",
    "    XErrorSize=0,\n",
    ")\n",
    "pseudo_dh.plotOn(frame0, Name=\"input\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73a6fef2",
   "metadata": {},
   "source": [
    "Draw plots on canvas\n",
    "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "4cf1dafe",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:14.212046Z",
     "iopub.status.busy": "2026-05-19T20:35:14.211917Z",
     "iopub.status.idle": "2026-05-19T20:35:14.542660Z",
     "shell.execute_reply": "2026-05-19T20:35:14.542106Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf712_lagrangianmorphfit.png has been created\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222914532\" style=\"width: 800px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222914532() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(36109,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222914532', 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_1779222914532();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "c1 = ROOT.TCanvas(\"fig3\", \"fig3\", 800, 400)\n",
    "c1.Divide(2, 1)\n",
    "\n",
    "c1.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "ROOT.gPad.SetRightMargin(0.05)\n",
    "\n",
    "model.paramOn(frame0, ROOT.RooFit.Layout(0.50, 0.75, 0.9))\n",
    "frame0.GetXaxis().SetTitle(\"p_{T}^{V}\")\n",
    "frame0.Draw()\n",
    "\n",
    "c1.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "ROOT.gPad.SetRightMargin(0.15)\n",
    "ROOT.gStyle.SetPaintTextFormat(\"4.1f\")\n",
    "ROOT.gStyle.SetOptStat(0)\n",
    "hcorr.SetMarkerSize(3.0)\n",
    "hcorr.SetTitle(\"correlation matrix\")\n",
    "hcorr.GetYaxis().SetTitleOffset(1.4)\n",
    "hcorr.GetYaxis().SetLabelSize(0.1)\n",
    "hcorr.GetXaxis().SetLabelSize(0.1)\n",
    "hcorr.GetYaxis().SetBinLabel(1, \"c_{HDD}\")\n",
    "hcorr.GetYaxis().SetBinLabel(2, \"c_{Hl^{(3)}}\")\n",
    "hcorr.GetYaxis().SetBinLabel(3, \"c_{Hq^{(3)}}\")\n",
    "hcorr.GetXaxis().SetBinLabel(3, \"c_{HDD}\")\n",
    "hcorr.GetXaxis().SetBinLabel(2, \"c_{Hl^{(3)}}\")\n",
    "hcorr.GetXaxis().SetBinLabel(1, \"c_{Hq^{(3)}}\")\n",
    "hcorr.GetYaxis().SetTitleOffset(1.4)\n",
    "hcorr.Draw(\"colz text\")\n",
    "\n",
    "c1.SaveAs(\"rf712_lagrangianmorphfit.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ba5c8d9",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ecdc4725",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:14.544828Z",
     "iopub.status.busy": "2026-05-19T20:35:14.544675Z",
     "iopub.status.idle": "2026-05-19T20:35:14.661532Z",
     "shell.execute_reply": "2026-05-19T20:35:14.661090Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222914659\" style=\"width: 800px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222914659() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(36109,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222914659', 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_1779222914659();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%jsroot on\n",
    "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
}
