{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Rf 6 0 7_Fitresult\n",
    "Likelihood and minimization: demonstration of options of the RooFitResult class\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 Thursday, May 19, 2022 at 09:15 AM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Welcome to JupyROOT 6.27/01\n"
     ]
    }
   ],
   "source": [
    "from __future__ import print_function\n",
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create pdf, data\n",
    "--------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Declare observable x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", 0, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "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,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "mean = ROOT.RooRealVar(\"mean\", \"mean of gaussians\", 5, -10, 10)\n",
    "sigma1 = ROOT.RooRealVar(\"sigma1\", \"width of gaussians\", 0.5, 0.1, 10)\n",
    "sigma2 = ROOT.RooRealVar(\"sigma2\", \"width of gaussians\", 1, 0.1, 10)\n",
    "\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",
   "metadata": {},
   "source": [
    "Build Chebychev polynomial pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "a0 = ROOT.RooRealVar(\"a0\", \"a0\", 0.5, 0.0, 1.0)\n",
    "a1 = ROOT.RooRealVar(\"a1\", \"a1\", -0.2)\n",
    "bkg = ROOT.RooChebychev(\"bkg\", \"Background\", x, [a0, a1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sum the signal components into a composite signal pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "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",
   "metadata": {},
   "source": [
    "Sum the composite signal and background"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "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",
   "metadata": {},
   "source": [
    "Generate 1000 events"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] WARNING:Eval -- Evaluating RooAddPdf without a defined normalization set. This can lead to ambiguos coefficients definition and incorrect results. Use RooAddPdf::fixCoefNormalization(nset) to provide a normalization set for defining uniquely RooAddPdf coefficients!\n"
     ]
    }
   ],
   "source": [
    "data = model.generate({x}, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fit pdf to data, save fit result\n",
    "-------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Perform fit and save result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization\n",
      "[#1] INFO:Minimization --  The following expressions will be evaluated in cache-and-track mode: (bkg,sig1,sig2)\n",
      " **********\n",
      " **    1 **SET PRINT           1\n",
      " **********\n",
      " **********\n",
      " **    2 **SET NOGRAD\n",
      " **********\n",
      " PARAMETER DEFINITIONS:\n",
      "    NO.   NAME         VALUE      STEP SIZE      LIMITS\n",
      "     1 a0           5.00000e-01  1.00000e-01    0.00000e+00  1.00000e+00\n",
      "     2 bkgfrac      5.00000e-01  1.00000e-01    0.00000e+00  1.00000e+00\n",
      "     3 mean         5.00000e+00  2.00000e+00   -1.00000e+01  1.00000e+01\n",
      "     4 sig1frac     8.00000e-01  1.00000e-01    0.00000e+00  1.00000e+00\n",
      "     5 sigma1       5.00000e-01  2.00000e-01    1.00000e-01  1.00000e+01\n",
      "     6 sigma2       1.00000e+00  4.50000e-01    1.00000e-01  1.00000e+01\n",
      " **********\n",
      " **    3 **SET ERR         0.5\n",
      " **********\n",
      " **********\n",
      " **    4 **SET PRINT           1\n",
      " **********\n",
      " **********\n",
      " **    5 **SET STR           1\n",
      " **********\n",
      " NOW USING STRATEGY  1: TRY TO BALANCE SPEED AGAINST RELIABILITY\n",
      " **********\n",
      " **    6 **MIGRAD        3000           1\n",
      " **********\n",
      " FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4.\n",
      " START MIGRAD MINIMIZATION.  STRATEGY  1.  CONVERGENCE WHEN EDM .LT. 1.00e-03\n",
      " FCN=1890.61 FROM MIGRAD    STATUS=INITIATE       20 CALLS          21 TOTAL\n",
      "                     EDM= unknown      STRATEGY= 1      NO ERROR MATRIX       \n",
      "  EXT PARAMETER               CURRENT GUESS       STEP         FIRST   \n",
      "  NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE \n",
      "   1  a0           5.00000e-01   1.00000e-01   2.01358e-01  -1.79143e+01\n",
      "   2  bkgfrac      5.00000e-01   1.00000e-01   2.01358e-01   8.01836e+00\n",
      "   3  mean         5.00000e+00   2.00000e+00   2.35352e-01  -3.18732e+02\n",
      "   4  sig1frac     8.00000e-01   1.00000e-01   2.57889e-01   1.67753e+00\n",
      "   5  sigma1       5.00000e-01   2.00000e-01   1.06123e-01  -2.80511e+01\n",
      "   6  sigma2       1.00000e+00   4.50000e-01   1.63378e-01  -2.79262e+00\n",
      "                               ERR DEF= 0.5\n",
      " MIGRAD MINIMIZATION HAS CONVERGED.\n",
      " MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX.\n",
      " COVARIANCE MATRIX CALCULATED SUCCESSFULLY\n",
      " FCN=1885.34 FROM MIGRAD    STATUS=CONVERGED     177 CALLS         178 TOTAL\n",
      "                     EDM=0.000199951    STRATEGY= 1      ERROR MATRIX ACCURATE \n",
      "  EXT PARAMETER                                   STEP         FIRST   \n",
      "  NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE \n",
      "   1  a0           7.28245e-01   1.10053e-01   4.01494e-03  -5.30986e-04\n",
      "   2  bkgfrac      4.34386e-01   8.18255e-02   1.44990e-03  -2.37203e-02\n",
      "   3  mean         5.03463e+00   3.36192e-02   1.15677e-04  -1.36017e-01\n",
      "   4  sig1frac     7.78347e-01   9.66774e-02   3.39065e-03  -2.60523e-02\n",
      "   5  sigma1       5.23396e-01   4.47433e-02   4.30203e-04  -2.02274e-01\n",
      "   6  sigma2       1.77668e+00   1.13135e+00   3.09140e-03   2.51106e-02\n",
      "                               ERR DEF= 0.5\n",
      " EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  6    ERR DEF=0.5\n",
      "  1.237e-02 -7.217e-03 -1.043e-04 -4.043e-03  1.989e-03  1.052e-01 \n",
      " -7.217e-03  6.757e-03 -1.369e-04  4.830e-03 -1.372e-03 -8.173e-02 \n",
      " -1.043e-04 -1.369e-04  1.130e-03 -2.833e-04 -6.480e-05  3.890e-04 \n",
      " -4.043e-03  4.830e-03 -2.833e-04  9.520e-03  1.344e-03 -2.831e-02 \n",
      "  1.989e-03 -1.372e-03 -6.480e-05  1.344e-03  2.002e-03  2.936e-02 \n",
      "  1.052e-01 -8.173e-02  3.890e-04 -2.831e-02  2.936e-02  1.322e+00 \n",
      " PARAMETER  CORRELATION COEFFICIENTS  \n",
      "       NO.  GLOBAL      1      2      3      4      5      6\n",
      "        1  0.84288   1.000 -0.790 -0.028 -0.373  0.400  0.823\n",
      "        2  0.95650  -0.790  1.000 -0.050  0.602 -0.373 -0.865\n",
      "        3  0.13243  -0.028 -0.050  1.000 -0.086 -0.043  0.010\n",
      "        4  0.87689  -0.373  0.602 -0.086  1.000  0.308 -0.252\n",
      "        5  0.76698   0.400 -0.373 -0.043  0.308  1.000  0.571\n",
      "        6  0.94237   0.823 -0.865  0.010 -0.252  0.571  1.000\n",
      " **********\n",
      " **    7 **SET ERR         0.5\n",
      " **********\n",
      " **********\n",
      " **    8 **SET PRINT           1\n",
      " **********\n",
      " **********\n",
      " **    9 **HESSE        3000\n",
      " **********\n",
      " COVARIANCE MATRIX CALCULATED SUCCESSFULLY\n",
      " FCN=1885.34 FROM HESSE     STATUS=OK             40 CALLS         218 TOTAL\n",
      "                     EDM=0.000205499    STRATEGY= 1      ERROR MATRIX ACCURATE \n",
      "  EXT PARAMETER                                INTERNAL      INTERNAL  \n",
      "  NO.   NAME      VALUE            ERROR       STEP SIZE       VALUE   \n",
      "   1  a0           7.28245e-01   1.11109e-01   1.60598e-04   4.74047e-01\n",
      "   2  bkgfrac      4.34386e-01   8.36079e-02   2.89981e-04  -1.31608e-01\n",
      "   3  mean         5.03463e+00   3.36219e-02   2.31353e-05   5.27602e-01\n",
      "   4  sig1frac     7.78347e-01   9.69912e-02   6.78131e-04   5.90402e-01\n",
      "   5  sigma1       5.23396e-01   4.51307e-02   8.60406e-05  -1.15419e+00\n",
      "   6  sigma2       1.77668e+00   1.15533e+00   6.18281e-04  -7.22519e-01\n",
      "                               ERR DEF= 0.5\n",
      " EXTERNAL ERROR MATRIX.    NDIM=  25    NPAR=  6    ERR DEF=0.5\n",
      "  1.261e-02 -7.502e-03 -9.635e-05 -4.154e-03  2.084e-03  1.091e-01 \n",
      " -7.502e-03  7.058e-03 -1.441e-04  4.954e-03 -1.470e-03 -8.595e-02 \n",
      " -9.635e-05 -1.441e-04  1.130e-03 -2.873e-04 -6.383e-05  4.916e-04 \n",
      " -4.154e-03  4.954e-03 -2.873e-04  9.583e-03  1.310e-03 -3.000e-02 \n",
      "  2.084e-03 -1.470e-03 -6.383e-05  1.310e-03  2.037e-03  3.075e-02 \n",
      "  1.091e-01 -8.595e-02  4.916e-04 -3.000e-02  3.075e-02  1.380e+00 \n",
      " PARAMETER  CORRELATION COEFFICIENTS  \n",
      "       NO.  GLOBAL      1      2      3      4      5      6\n",
      "        1  0.84619   1.000 -0.795 -0.026 -0.378  0.411  0.827\n",
      "        2  0.95839  -0.795  1.000 -0.051  0.602 -0.388 -0.871\n",
      "        3  0.13303  -0.026 -0.051  1.000 -0.087 -0.042  0.012\n",
      "        4  0.87775  -0.378  0.602 -0.087  1.000  0.297 -0.261\n",
      "        5  0.77155   0.411 -0.388 -0.042  0.297  1.000  0.580\n",
      "        6  0.94489   0.827 -0.871  0.012 -0.261  0.580  1.000\n",
      "[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization\n"
     ]
    }
   ],
   "source": [
    "r = model.fitTo(data, Save=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Print fit results\n",
    "---------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Summary printing: Basic info plus final values of floating fit parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "  RooFitResult: minimized FCN value: 1885.34, estimated distance to minimum: 0.000205499\n",
      "                covariance matrix quality: Full, accurate covariance matrix\n",
      "                Status : MINIMIZE=0 HESSE=0 \n",
      "\n",
      "    Floating Parameter    FinalValue +/-  Error   \n",
      "  --------------------  --------------------------\n",
      "                    a0    7.2825e-01 +/-  1.11e-01\n",
      "               bkgfrac    4.3439e-01 +/-  8.36e-02\n",
      "                  mean    5.0346e+00 +/-  3.36e-02\n",
      "              sig1frac    7.7835e-01 +/-  9.70e-02\n",
      "                sigma1    5.2340e-01 +/-  4.51e-02\n",
      "                sigma2    1.7767e+00 +/-  1.16e+00\n",
      "\n"
     ]
    }
   ],
   "source": [
    "r.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Verbose printing: Basic info, of constant parameters, and\n",
    "final values of floating parameters, correlations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "  RooFitResult: minimized FCN value: 1885.34, estimated distance to minimum: 0.000205499\n",
      "                covariance matrix quality: Full, accurate covariance matrix\n",
      "                Status : MINIMIZE=0 HESSE=0 \n",
      "\n",
      "    Constant Parameter    Value     \n",
      "  --------------------  ------------\n",
      "                    a1   -2.0000e-01\n",
      "\n",
      "    Floating Parameter  InitialValue    FinalValue +/-  Error     GblCorr.\n",
      "  --------------------  ------------  --------------------------  --------\n",
      "                    a0    5.0000e-01    7.2825e-01 +/-  1.11e-01  <none>\n",
      "               bkgfrac    5.0000e-01    4.3439e-01 +/-  8.36e-02  <none>\n",
      "                  mean    5.0000e+00    5.0346e+00 +/-  3.36e-02  <none>\n",
      "              sig1frac    8.0000e-01    7.7835e-01 +/-  9.70e-02  <none>\n",
      "                sigma1    5.0000e-01    5.2340e-01 +/-  4.51e-02  <none>\n",
      "                sigma2    1.0000e+00    1.7767e+00 +/-  1.16e+00  <none>\n",
      "\n"
     ]
    }
   ],
   "source": [
    "r.Print(\"v\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualize correlation matrix\n",
    "-------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Construct 2D color plot of correlation matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "ROOT.gStyle.SetOptStat(0)\n",
    "ROOT.gStyle.SetPalette(1)\n",
    "hcorr = r.correlationHist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualize ellipse corresponding to single correlation matrix element"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x89099a0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame = ROOT.RooPlot(sigma1, sig1frac, 0.45, 0.60, 0.65, 0.90)\n",
    "frame.SetTitle(\"Covariance between sigma1 and sig1frac\")\n",
    "r.plotOn(frame, sigma1, sig1frac, \"ME12ABHV\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Access fit result information\n",
    "---------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Access basic information"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EDM =  0.00020549915143065197\n",
      "-log(L) minimum =  1885.343815305069\n"
     ]
    }
   ],
   "source": [
    "print(\"EDM = \", r.edm())\n",
    "print(\"-log(L) minimum = \", r.minNll())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Access list of final fit parameter values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "final value of floating parameters\n",
      "  1) RooRealVar::       a0 = 0.728245 +/- 0.111109\n",
      "  2) RooRealVar::  bkgfrac = 0.434386 +/- 0.0836079\n",
      "  3) RooRealVar::     mean = 5.03463 +/- 0.0336219\n",
      "  4) RooRealVar:: sig1frac = 0.778347 +/- 0.0969912\n",
      "  5) RooRealVar::   sigma1 = 0.523396 +/- 0.0451307\n",
      "  6) RooRealVar::   sigma2 = 1.77668 +/- 1.15533\n"
     ]
    }
   ],
   "source": [
    "print(\"final value of floating parameters\")\n",
    "r.floatParsFinal().Print(\"s\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Access correlation matrix elements"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "correlation between sig1frac and a0 is   -0.3778511951671703\n",
      "correlation between bkgfrac and mean is  -0.05102316430532121\n"
     ]
    }
   ],
   "source": [
    "print(\"correlation between sig1frac and a0 is  \", r.correlation(sig1frac, a0))\n",
    "print(\"correlation between bkgfrac and mean is \", r.correlation(\"bkgfrac\", \"mean\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Extract covariance and correlation matrix as ROOT.TMatrixDSym"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cor = r.correlationMatrix()\n",
    "cov = r.covarianceMatrix()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Print correlation, matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "correlation matrix\n",
      "covariance matrix\n",
      "\n",
      "6x6 matrix is as follows\n",
      "\n",
      "     |      0    |      1    |      2    |      3    |      4    |\n",
      "----------------------------------------------------------------------\n",
      "   0 |          1     -0.7952    -0.02552     -0.3779      0.4111 \n",
      "   1 |    -0.7952           1    -0.05102      0.6023     -0.3876 \n",
      "   2 |   -0.02552    -0.05102           1     -0.0873    -0.04206 \n",
      "   3 |    -0.3779      0.6023     -0.0873           1      0.2966 \n",
      "   4 |     0.4111     -0.3876    -0.04206      0.2966           1 \n",
      "   5 |     0.8272     -0.8708     0.01245     -0.2609      0.5799 \n",
      "\n",
      "\n",
      "     |      5    |\n",
      "----------------------------------------------------------------------\n",
      "   0 |     0.8272 \n",
      "   1 |    -0.8708 \n",
      "   2 |    0.01245 \n",
      "   3 |    -0.2609 \n",
      "   4 |     0.5799 \n",
      "   5 |          1 \n",
      "\n",
      "\n",
      "6x6 matrix is as follows\n",
      "\n",
      "     |      0    |      1    |      2    |      3    |      4    |\n",
      "----------------------------------------------------------------------\n",
      "   0 |    0.01261   -0.007502  -9.635e-05   -0.004154    0.002084 \n",
      "   1 |  -0.007502    0.007058  -0.0001441    0.004954    -0.00147 \n",
      "   2 | -9.635e-05  -0.0001441     0.00113  -0.0002873  -6.383e-05 \n",
      "   3 |  -0.004154    0.004954  -0.0002873    0.009583     0.00131 \n",
      "   4 |   0.002084    -0.00147  -6.383e-05     0.00131    0.002037 \n",
      "   5 |     0.1091    -0.08595   0.0004916       -0.03     0.03075 \n",
      "\n",
      "\n",
      "     |      5    |\n",
      "----------------------------------------------------------------------\n",
      "   0 |     0.1091 \n",
      "   1 |   -0.08595 \n",
      "   2 |  0.0004916 \n",
      "   3 |      -0.03 \n",
      "   4 |    0.03075 \n",
      "   5 |       1.38 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(\"correlation matrix\")\n",
    "cor.Print()\n",
    "print(\"covariance matrix\")\n",
    "cov.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Persist fit result in root file\n",
    "-------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Open ROOT file save save result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "f = ROOT.TFile(\"rf607_fitresult.root\", \"RECREATE\")\n",
    "r.Write(\"rf607\")\n",
    "f.Close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In a clean ROOT session retrieve the persisted fit result as follows:\n",
    "r = gDirectory.Get(\"rf607\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf607_fitresult.png has been created\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas(\"rf607_fitresult\", \"rf607_fitresult\", 800, 400)\n",
    "c.Divide(2)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "hcorr.GetYaxis().SetTitleOffset(1.4)\n",
    "hcorr.Draw(\"colz\")\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame.GetYaxis().SetTitleOffset(1.6)\n",
    "frame.Draw()\n",
    "\n",
    "c.SaveAs(\"rf607_fitresult.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image 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.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
