Newer
Older
R_phipi / building_blocks / data_fitter_unbinned.ipynb
@Davide Lancierini Davide Lancierini on 15 Nov 2018 16 KB big changes
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/hep/davide/miniconda3/envs/root_env/lib/ROOT.py:301: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  return _orig_ihook( name, *args, **kwds )\n"
     ]
    }
   ],
   "source": [
    "import ROOT as r\n",
    "import root_numpy as rn\n",
    "import pickle\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import array as array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_index=1\n",
    "l_flv=['e','mu']\n",
    "\n",
    "data = np.load('/disk/lhcb_data/davide/Rphipi/selected_data/'+l_flv[l_index]+l_flv[l_index]+'/sel_data_NN_'+l_flv[l_index]+l_flv[l_index]+'.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#cut on mass\n",
    "cut_indices=[]\n",
    "\n",
    "lower_mass_cut=1790\n",
    "upper_mass_cut=2030\n",
    "\n",
    "for i in range(len(data)):\n",
    "    if lower_mass_cut<data[i]<upper_mass_cut:\n",
    "        cut_indices.append(i)\n",
    "        \n",
    "data_cut=data[cut_indices]/1000.  \n",
    "\n",
    "lower_mass_cut/=1000.\n",
    "upper_mass_cut/=1000."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_array=np.array([data_cut[i] for i in range(len(data_cut))], dtype=[('D_sel_M', np.float32)])\n",
    "\n",
    "plt.hist(data_cut,range=(lower_mass_cut,upper_mass_cut),bins=100);\n",
    "fig=plt.gcf();\n",
    "\n",
    "fig.set_size_inches(16,10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "rn.array2root(data_array,\n",
    "              filename='/disk/lhcb_data/davide/Rphipi/selected_data/'+l_flv[l_index]+l_flv[l_index]+'/sel_data_NN_'+l_flv[l_index]+l_flv[l_index]+'.root',\n",
    "              treename='D_M',\n",
    "              mode='recreate',\n",
    "             )\n",
    "f=r.TFile('/disk/lhcb_data/davide/Rphipi/selected_data/'+l_flv[l_index]+l_flv[l_index]+'/sel_data_NN_'+l_flv[l_index]+l_flv[l_index]+'.root')\n",
    "tree=f.Get(\"D_M\") "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "mass = np.array([0],dtype=np.float32)\n",
    "branch = tree.GetBranch(\"D_sel_M\")\n",
    "branch.SetAddress(mass)\n",
    "\n",
    "num_entries=tree.GetEntries()\n",
    "m = r.RooRealVar(\"m\",\"m\",lower_mass_cut,upper_mass_cut)\n",
    "l = r.RooArgSet(m)\n",
    "data_hist = r.RooDataSet(\"data histogram\", \"data\", l)\n",
    "\n",
    "\n",
    "for i in range(num_entries):\n",
    "    tree.GetEvent(i)\n",
    "    r.RooAbsRealLValue.__assign__(m, mass[0])\n",
    "    data_hist.add(l, 1.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Creating the signal PDF\n",
    "\n",
    "\n",
    "mean_dplus= r.RooRealVar(\"mean_D+\",\"mean_D+\",1.87,1.77,1.97)\n",
    "sigma_dplus = r.RooRealVar(\"sigma_D+\",\"sigma_D+\",0.020,0.,0.2)\n",
    "sig_dplus = r.RooGaussian(\"signal_D+\",\"signal_D+\", m, mean_dplus, sigma_dplus)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Creating the signal PDF\n",
    "\n",
    "mean_ds= r.RooRealVar(\"mean_Ds\",\"mean_Ds\",1.97,1.87,2.07)\n",
    "sigma_ds = r.RooRealVar(\"sigma_Ds\",\"sigma_Ds\",0.020,0.,0.2)\n",
    "sig_ds = r.RooGaussian(\"signal_Ds\",\"signal_Ds\", m, mean_ds, sigma_ds)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "coef0 = r.RooRealVar(\"c0\",\"coefficient #0\",1.0,-1.,1)\n",
    "coef1 = r.RooRealVar(\"c1\",\"coefficient #1\",0.1,-1.,1)\n",
    "coef2 = r.RooRealVar(\"c2\",\"coefficient #2\",-0.1,-1.,1)\n",
    "bkg = r.RooChebychev(\"bkg\",\"background p.d.f.\",m,r.RooArgList(coef0,coef1,coef2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Add 2 sources of signal\n",
    "\n",
    "# first add the sig and the peak together with fraction fpeak\n",
    "ns = r.RooRealVar(\"# of Ds sig events\",\"# of Ds sig events\",100.,0.,40000.)\n",
    "nplus = r.RooRealVar(\"# of Dplus sig events\",\"# of Dplus sig events\",100.,0.,40000.)\n",
    "nbkg = r.RooRealVar(\"# of bkg events\",\"# of bkg events\",100.,0.,40000.)\n",
    "# sigpeak(x) = fpeak*sig(x) + (1-fpeak)*bkg(x)\n",
    "model = r.RooAddPdf(\"model\",\"two mass peaks\",r.RooArgList(sig_ds,sig_dplus,bkg),r.RooArgList(ns,nplus,nbkg))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.fitTo(data_hist,r.RooFit.Extended())\n",
    "\n",
    "\n",
    "\n",
    "xframe = m.frame(r.RooFit.Title(\"Fit to \"+l_flv[l_index]+\" data\"))\n",
    "\n",
    "bkg_component = r.RooArgSet(bkg)\n",
    "data_hist.plotOn(xframe)\n",
    "model.plotOn(xframe,r.RooFit.Components(bkg_component),r.RooFit.LineStyle(2))\n",
    "model.plotOn(xframe)\n",
    "#sigpeaks.plotOn(xframe)\n",
    "xframe.Draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "NB=nbkg.getVal()\n",
    "NS=ns.getVal()\n",
    "Nplus=nplus.getVal()\n",
    "\n",
    "Nsig_from_MC=5881+9639"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "112.05993156721254"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(Nsig_from_MC)/np.sqrt(NB+Nsig_from_MC)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<ipython-input-14-c949510cd7b7>, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"<ipython-input-14-c949510cd7b7>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m    NS+\u001b[0m\n\u001b[0m       ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "NS+"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}