Newer
Older
R_phipi / BDT_select_and_fit.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\n",
    "from xgboost import XGBClassifier\n",
    "from tools.data_processing import *\n",
    "from tools.select_and_fit_funct import select_and_fit, plot_MC_vs_data\n",
    "import os"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PATHs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_index=0\n",
    "mother_index_fit=2\n",
    "l_flv=['e','mu']\n",
    "mother_ID=[\"Ds\",\"Dplus\",\"both\"]\n",
    "test=4\n",
    "\n",
    "\n",
    "BDT_PATH=l_flv[l_index]+'/BDTs/test_'+str(test)\n",
    "FIT_PATH=l_flv[l_index]+'/fits'\n",
    "with open(BDT_PATH+'/variables_used.pickle', 'rb') as f:  \n",
    "        branches_needed_0 = pickle.load(f)\n",
    "        \n",
    "branches_needed=['cos_thetal']+branches_needed_0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data loading, applying mass cuts, preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(34845, 2035, 1295)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#MC_Dplus_sig_dict, MC_Ds_sig_dict, _ = load_datasets(l_index)\n",
    "\n",
    "with open('/disk/lhcb_data/davide/Rphipi/data_for_BDT_selection/'+l_flv[l_index]+l_flv[l_index]+'/'+'data_for_BDT_selection_'+l_flv[l_index]+l_flv[l_index]+'.pickle', 'rb') as f:\n",
    "    data_dict=pickle.load(f)\n",
    "with open('/disk/lhcb_data/davide/Rphipi/MC/for_fit/'+l_flv[l_index]+l_flv[l_index]+'/MC_'+mother_ID[1]+'_'+l_flv[l_index]+l_flv[l_index]+'.pickle', 'rb') as f:\n",
    "    MC_Dplus_tuple_dict=pickle.load(f)\n",
    "with open('/disk/lhcb_data/davide/Rphipi/MC/for_fit/'+l_flv[l_index]+l_flv[l_index]+'/MC_'+mother_ID[0]+'_'+l_flv[l_index]+l_flv[l_index]+'.pickle', 'rb') as f:\n",
    "    MC_Ds_tuple_dict=pickle.load(f)\n",
    "    \n",
    "    \n",
    "\"\"\"\n",
    "Normalising the chi2s in data and MC\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "MC_Dplus_tuple_dict, MC_Ds_tuple_dict, data_dict = norm_chi2(MC_Dplus_tuple_dict, MC_Ds_tuple_dict, data_dict)\n",
    "\n",
    "\n",
    "\"\"\"\n",
    "Applying mass cuts on data, \n",
    "retrieving mass distributions for sig MC and data\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "if l_index==1:\n",
    "    if mother_index_fit==0:\n",
    "        #fitting only the Ds\n",
    "        lower_cut=1930\n",
    "        upper_cut=2010\n",
    "    if mother_index_fit==1:\n",
    "        #fitting only the Dplus\n",
    "        lower_cut=1810\n",
    "        upper_cut=1930\n",
    "    if mother_index_fit==2:\n",
    "        lower_cut=1810\n",
    "        upper_cut=2040\n",
    "\n",
    "if l_index==0:\n",
    "    if mother_index_fit==0:\n",
    "        #fitting only the Ds\n",
    "        lower_cut=1900\n",
    "        upper_cut=2040\n",
    "    if mother_index_fit==1:\n",
    "        #fitting only the Dplus\n",
    "        lower_cut=1780\n",
    "        upper_cut=1930\n",
    "    if mother_index_fit==2:\n",
    "        lower_cut=1750\n",
    "        upper_cut=2100\n",
    "        \n",
    "        \n",
    "data_mass, mc_Dplus_mass, mc_Ds_mass, data_dict = mass_cut_for_fit(lower_cut, upper_cut, mother_index_fit=mother_index_fit, l_index=l_index,\n",
    "                                                 branches_needed=branches_needed, \n",
    "                                                 data_dict=data_dict, MC_Dplus_dict=MC_Dplus_tuple_dict, MC_Ds_dict=MC_Ds_tuple_dict)\n",
    "\n",
    "\n",
    "\"\"\"\n",
    "Preprocessing\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "\n",
    "\n",
    "data_to_select, mc_Dplus_to_select, mc_Ds_to_select = preprocess_for_XGBoost(MC_Dplus_tuple_dict, MC_Ds_tuple_dict, data_dict, branches_needed, mother_index_fit=mother_index_fit)\n",
    "    \n",
    "    \n",
    "plt.hist(np.concatenate((mc_Dplus_mass, mc_Ds_mass)),bins=70,density=True,alpha=0.7);\n",
    "plt.hist(data_mass,bins=70,density=True,alpha=0.4);\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Just RooFit it!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "BDT cut at 0.1 fit\n",
      "BDT selection..\n",
      "(340, 476)\n",
      "BDT Signal selection efficiency: 0.245045045045\n",
      "chi2 1.10479563477\n",
      "Saving fit results...\n"
     ]
    }
   ],
   "source": [
    "#Just fit it!\n",
    "\n",
    "#if __name__=='__main__':\n",
    "\n",
    "  # parser = argparse.ArgumentParser(description='Fit at different BDT cuts')\n",
    "  # parser.add_argument('-x_cut', metavar='BDT cut', type =float, help='BDT cut')\n",
    "  # args = parser.parse_args()\n",
    "    \n",
    "x_cut_values = np.linspace(0.10,0.90,num=10)\n",
    "fit_results={}\n",
    "splots={}\n",
    "#Just fit it!\n",
    "for i, x_cut in enumerate(x_cut_values[0:1]):\n",
    "    \n",
    "    if not os.path.exists(FIT_PATH+'/'+mother_ID[mother_index_fit]+'/{0}/'.format(i)):\n",
    "        os.mkdir(FIT_PATH+'/'+mother_ID[mother_index_fit]+'/{0}/'.format(i))\n",
    "    \n",
    "    fit_results[i], splots[i] = select_and_fit(BDT_PATH, mother_index_fit, l_index, lower_cut, upper_cut,\n",
    "                                               data_mass, mc_Dplus_mass, mc_Ds_mass, data_to_select, mc_Dplus_to_select, mc_Ds_to_select,\n",
    "                                               data_dict, MC_Dplus_tuple_dict, MC_Ds_tuple_dict, branches_needed,\n",
    "                                               x_cut, i, test)\n",
    "\n",
    "    with open(FIT_PATH+'/'+mother_ID[mother_index_fit]+'/fit_results_{0}.txt'.format(i), 'w') as f:\n",
    "        print('Saving fit results...')\n",
    "        for key, value in fit_results[i].items():\n",
    "            f.write('%s:%s\\n' % (key, value))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "sw_idx=0\n",
    "with open('/disk/lhcb_data/davide/Rphipi/BDT_selected_data/'+l_flv[l_index]+l_flv[l_index]+'/BDT_sel_data_'+l_flv[l_index]+l_flv[l_index]+'_geom_var.pickle', 'rb') as f:\n",
    "    data_cut=pickle.load(f)\n",
    "with open('/disk/lhcb_data/davide/Rphipi/MC/for_fit/'+l_flv[l_index]+l_flv[l_index]+'/MC_'+mother_ID[1]+'_'+l_flv[l_index]+l_flv[l_index]+'_geom_var.pickle', 'rb') as f:\n",
    "    MC_Dplus_cut=pickle.load(f)\n",
    "with open('/disk/lhcb_data/davide/Rphipi/MC/for_fit/'+l_flv[l_index]+l_flv[l_index]+'/MC_'+mother_ID[0]+'_'+l_flv[l_index]+l_flv[l_index]+'_geom_var.pickle', 'rb') as f:\n",
    "    MC_Ds_cut=pickle.load(f)\n",
    "\n",
    "key=data_cut.keys()[0]\n",
    "nentries=data_cut[key].shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_weights={}\n",
    "if mother_ID[mother_index_fit]=='Dplus':\n",
    "    data_weights[0]=np.array([splots[sw_idx].GetSWeight(i, \"nDplus_sw\") for i in range(nentries)])\n",
    "\n",
    "if mother_ID[mother_index_fit]=='Ds':\n",
    "    data_weights[1]=np.array([splots[sw_idx].GetSWeight(i, \"nDs_sw\") for i in range(nentries)])\n",
    "\n",
    "if mother_ID[mother_index_fit]=='both':\n",
    "    data_weights[0]=np.array([splots[sw_idx].GetSWeight(i, \"nDs_sw\") for i in range(nentries)])\n",
    "    data_weights[1]=np.array([splots[sw_idx].GetSWeight(i, \"nDplus_sw\") for i in range(nentries)])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saved: e/fits/both/0/Ds_sweighted_cos_thetal_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_Ds_ENDVERTEX_CHI2_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_Ds_IPCHI2_OWNPV_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_Ds_OWNPV_CHI2_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_Ds_DIRA_OWNPV_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_Ds_PT_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_Ds_FD_OWNPV_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_Ds_FDCHI2_OWNPV_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_pi_PT_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_e_plus_PT_0.png\n",
      "Saved: e/fits/both/0/Ds_sweighted_e_minus_PT_0.png\n"
     ]
    }
   ],
   "source": [
    "for variable in branches_needed:\n",
    "\n",
    "    plot_MC_vs_data(data_cut, data_weights, MC_Ds_cut, \n",
    "                variable, \n",
    "                sw_idx=sw_idx, l_index=l_index, mother_index_fit=mother_index_fit)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.hist(data_cut[\"cos_thetal\"], weights=data_weights_Ds, density=True,\n",
    "#         histtype='step', hatch='/', fill='True', linewidth='2', \n",
    "#         alpha=0.65,  bins=70, label='Weighted data Cos(theta_l)');\n",
    "#\n",
    "#plt.hist(MC_Ds_cut[\"cos_thetal\"],density=True, \n",
    "#         histtype='step', hatch='\\\\', fill='True', linewidth='2', \n",
    "#         alpha=0.45, bins=70, label='MC Ds Cos(theta_l)');\n",
    "#plt.legend(fontsize=12)\n",
    "#fig=plt.gcf()\n",
    "#fig.set_size_inches(10,6)"
   ]
  }
 ],
 "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
}