Newer
Older
R_phipi / building_blocks / BDT_select.ipynb
@Davide Lancierini Davide Lancierini on 15 Nov 2018 63 KB big changes
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import pickle\n",
    "import math\n",
    "\n",
    "trunc_normal= tf.truncated_normal_initializer(stddev=1)\n",
    "normal = tf.random_normal_initializer(stddev=1)\n",
    "\n",
    "from xgboost import XGBClassifier\n",
    "from architectures.data_processing import *\n",
    "from architectures.utils.toolbox import *\n",
    "from architectures.DNN import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_index=1\n",
    "l_flv=['e','mu']\n",
    "mother_ID=[\"Ds\",\"Dplus\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DATA LOADING & PREPROCESSING"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('/disk/lhcb_data/davide/Rphipi/NN_for_selection/'+l_flv[l_index]+l_flv[l_index]+'/'+'data_for_NN_'+l_flv[l_index]+l_flv[l_index]+'.pickle', 'rb') as f:\n",
    "    data_dict=pickle.load(f, encoding='latin1')\n",
    "data_dict[\"Ds_ENDVERTEX_CHI2\"]=data_dict[\"Ds_ENDVERTEX_CHI2\"]/data_dict[\"Ds_ENDVERTEX_NDOF\"]\n",
    "data_dict[\"Ds_OWNPV_CHI2\"]=data_dict[\"Ds_OWNPV_CHI2\"]/data_dict[\"Ds_OWNPV_NDOF\"]\n",
    "data_dict[\"Ds_IPCHI2_OWNPV\"]=data_dict[\"Ds_IPCHI2_OWNPV\"]/data_dict[\"Ds_ENDVERTEX_NDOF\"]\n",
    "\n",
    "del data_dict[\"Ds_ENDVERTEX_NDOF\"]\n",
    "del data_dict[\"Ds_OWNPV_NDOF\"]\n",
    "\n",
    "data_dict[\"phi_ENDVERTEX_CHI2\"]=data_dict[\"phi_ENDVERTEX_CHI2\"]/data_dict[\"phi_ENDVERTEX_NDOF\"]\n",
    "#data_dict[\"phi_OWNPV_CHI2\"]=data_dict[\"phi_OWNPV_CHI2\"]/data_dict[\"phi_OWNPV_NDOF\"]\n",
    "data_dict[\"phi_IPCHI2_OWNPV\"]=data_dict[\"phi_IPCHI2_OWNPV\"]/data_dict[\"phi_ENDVERTEX_NDOF\"]\n",
    "\n",
    "del data_dict[\"phi_ENDVERTEX_NDOF\"]\n",
    "#del data_dict[\"phi_OWNPV_NDOF\"]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "'protocol' is an invalid keyword argument for this function",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-5-1c550638f0c3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mPATH\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'/variables_used.pkl'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'rb'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m         \u001b[0mbranches_needed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpickle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprotocol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;31m#Number of input features\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: 'protocol' is an invalid keyword argument for this function"
     ]
    }
   ],
   "source": [
    "task='TEST'\n",
    "\n",
    "test=0\n",
    "i=np.random.randint(6)\n",
    "PATH=l_flv[l_index]+'/BDTs/test_'+str(test)+'/NN_'+str(i)\n",
    "\n",
    "with open(PATH+'/variables_used.pkl', 'rb') as f:  \n",
    "        branches_needed = pickle.load(f)\n",
    "        \n",
    "#Number of input features\n",
    "m=data_dict[\"Ds_ConsD_M\"].shape[0]\n",
    "branches_needed.pop()\n",
    "dim=len(branches_needed)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = extract_array(data_dict, branches_needed, dim, m)\n",
    "\n",
    "data_mean=data.mean(axis=0)\n",
    "data_1=data-data_mean\n",
    "data_std=data_1.std(axis=0)\n",
    "data_2=data_1/data_std\n",
    "data_2.std(axis=0)\n",
    "#data_2=data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# NN SELECTION"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(PATH+'/hyper_parameters.pkl', 'rb') as f:  \n",
    "    hyper_dict = pickle.load(f)\n",
    "    #for key, item in hyper_dict.items():\n",
    "    #    print(key+':'+str(item))\n",
    "\n",
    "k=hyper_dict[\"k\"]\n",
    "LEARNING_RATE=hyper_dict[\"LEARNING_RATE\"]\n",
    "BETA1=hyper_dict[\"BETA1\"]\n",
    "BATCH_SIZE=hyper_dict[\"BATCH_SIZE\"]\n",
    "EPOCHS=hyper_dict[\"EPOCHS\"]\n",
    "VAL_PERIOD=hyper_dict[\"VAL_PERIOD\"]\n",
    "SEED=hyper_dict[\"SEED\"]\n",
    "sizes=hyper_dict[\"sizes\"]\n",
    "LAMBD=hyper_dict[\"LAMBD\"]\n",
    "PATH=hyper_dict[\"PATH\"]\n",
    "    \n",
    "if not os.path.exists(PATH+'/hyper_parameters.pkl'):\n",
    "    print(\"No saved sizes dict\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Input for propagation (?, 13)\n",
      "Logits shape (?, 2)\n",
      "Input for propagation (?, 13)\n",
      "Logits shape (?, 2)\n"
     ]
    }
   ],
   "source": [
    "tf.reset_default_graph()\n",
    "model_NN = DNN(dim, sizes,\n",
    "              lr=LEARNING_RATE, beta1=BETA1, lambd=LAMBD,\n",
    "              batch_size=BATCH_SIZE, epochs=EPOCHS,\n",
    "              save_sample=VAL_PERIOD, path=PATH, seed=SEED)\n",
    "\n",
    "vars_to_train=tf.trainable_variables()\n",
    "vars_all = tf.global_variables()\n",
    "vars_to_init = list(set(vars_all)-set(vars_to_train))\n",
    "init_op = tf.variables_initializer(vars_to_init)\n",
    "\n",
    "saver = tf.train.Saver()\n",
    "gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.33)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " Evaluate model on test set...\n",
      "INFO:tensorflow:Restoring parameters from mu/test_0/NN_4/NN_model.ckpt\n",
      "Model restored.\n"
     ]
    }
   ],
   "source": [
    "output_dict_NN={}\n",
    "batch_size=400\n",
    "n_batches = data.shape[0]//batch_size\n",
    "\n",
    "with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) as sess:\n",
    "    sess.run(init_op)\n",
    "    print('\\n Evaluate model on test set...')\n",
    "    saver.restore(sess,PATH+'/NN_model.ckpt')\n",
    "    print('Model restored.')\n",
    "    model_NN.set_session(sess)\n",
    "    for j in range(n_batches):\n",
    "        \n",
    "        small_dataset = data_2[j*batch_size:(j+1)*batch_size]\n",
    "        output_dict_NN[j] = model_NN.predict(small_dataset)\n",
    "        \n",
    "    if data.shape[0]%batch_size != 0:\n",
    "        output_dict_NN[j+1] = model_NN.predict(data_2[(j+1)*batch_size: data_2.shape[0]-1])\n",
    "        \n",
    "    output_NN=np.concatenate([output_dict_NN[i] for i in range(len(output_dict_NN))])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_cut=0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = data_dict[\"Ds_ConsD_M\"][np.where(output_NN[:,1]>x_cut)[0]]\n",
    "b = [data_dict[\"Ds_ConsD_M\"][i] for i in range(len(data_dict[\"Ds_ConsD_M\"]))]\n",
    "\n",
    "NN_selected=np.array([a[i][0] for i in range(len(a))])\n",
    "full = np.array([b[i][0] for i in range(len(b))])\n",
    "full=np.delete(full,np.where(full<0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7gAAAJYCAYAAABICkptAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XuYXWVhNvz7IRyEAjkQ5GRDKPD5QhuNNkUQsSAqAb+KSmkt6AtIQQQ1Vg6CFQJKCyoKalVEDdAKqa9FC2rkIAaovogmHBos+smLgXJQQhICWAskPN8fM8mb00xmJ3v23rPy+13XXDN7nfadXIuw73metVaptQYAAABGuk26HQAAAADaQcEFAACgERRcAAAAGkHBBQAAoBEUXAAAABpBwQUAAKARFFwAAAAaQcEFAACgERRcAAAAGmHTbgdoh/Hjx9eJEyd2OwYAAADDYO7cuU/UWrdf13aNKLgTJ07MnDlzuh0DAACAYVBKeXAo25miDAAAQCMouAAAADSCggsAAEAjKLgAAAA0goILAABAIyi4AAAANIKCCwAAQCMouAAAADTCpt0OAAAAtMezzz6bRYsW5emnn86yZcu6HQfWatSoUdlmm20ybty4bLHFFm09toILAAAN8Oyzz+ahhx7K2LFjM3HixGy22WYppXQ7Fqyi1prnn38+Tz31VB566KFMmDChrSXXFGUAAGiARYsWZezYsRk/fnw233xz5ZaeVErJ5ptvnvHjx2fs2LFZtGhRW4+v4AIAQAM8/fTT2XbbbbsdA4Zs2223zdNPP93WYyq4AADQAMuWLctmm23W7RgwZJtttlnbrxVXcAEAoCFMS2YkGY7zVcEFAACgERRcAAAAGkHBBQAAoBE8BxcAADYCV9/xULcjDOqoV03Y4GPMnz8/u+22W4455phcccUVGx5qEDNnzswnPvGJ3H///XnmmWcybdq0XHLJJcP6nqybEVwAAIAW3H777Tn66KPz9NNP5z3veU+mT5+eqVOndjvWOl1xxRUppaSUkjPOOGOt29xyyy0ppeQd73hH2/btJCO4AAAALfjud7+bWmv+8R//Ma9+9au7HWe9fPazn80pp5ySXXfdtaP7DjcjuAAAAC149NFHkyQ777xzl5Osnz322CPPPvtsPvzhD3d0305QcAEAgMb5+c9/nre85S0ZN25cfu/3fi+vec1rcuONNw64/cyZM3PQQQdl7NixedGLXpS99tor559/fp599tkV2yyfpnv55ZcnSXbbbbcV03bnz5+/Yru5c+fmiCOOyItf/OJsscUW2XXXXXPyySfnscceW+N9jz322JRS8sADD+Rzn/tcXvayl2XLLbfMgQceuMp2N9xwQw477LCMHz8+W2yxRXbfffecfvrpefLJJ1v+u/mLv/iLvOIVr8jMmTMzZ86cju3bCQouAADQKL/61a+y3377ZeHChXn3u9+dI488MnPnzs2hhx6ar3/962tsf/zxx+eoo47K/fffn7e97W055ZRTMm7cuJx99tmZOnVqli5dmiSZPHlypk+fnpe//OVJkmnTpmX69OmZPn16xowZkyT5zne+k1e/+tX59re/nde//vX54Ac/mJe+9KX54he/mClTpqxShFc2bdq0nH322Zk0aVKmTZuW/ffff8W6j370o5k6dWruuOOOvOlNb8r73//+7LHHHrnooouy//7756mnnmrp76eUkosuuii11px22mkd27cTXIMLAAA0ym233ZbTTjstn/zkJ1cse+9735v99tsvJ510Ug499NBsu+22SfpGZWfMmJG3vvWtueqqq7Lllluu2Ofcc8/Neeedl89//vOZNm1aJk+enMmTJ2f+/Pm555578oEPfCATJ05csf0zzzyTY489NkuXLs0tt9ySAw44YMW6j3/84znzzDNz4oknrnUk+c4778xdd92V3XbbbZXls2fPzvTp07Pffvtl1qxZK4r08uzHHXdcpk+fnosvvrilv6PXve51edOb3pTvfve7ue666/LmN7+5I/sONyO4AAArm33BwF/AiDB69Oicc845qyybMmVKjj766Dz55JP51re+tWL5Zz7zmWy66aaZMWPGKuU2Sc4+++xst912ueqqq4b0vtdee20WLlyYv/zLv1yl3CbJqaeemokTJ+amm27KQw+t+cimM844Y41ym/Td0ClJvvzlL69SbpO+6c2TJ08ecr7VfeITn8ioUaPyoQ99aMUodSf2HU5GcAEAgEZ55StfmW222WaN5QceeGCuvPLK3HXXXTnmmGPyX//1X7nnnnsyfvz4AZ9hu8UWW+S+++4b0vveeeedSfpGOFe36aab5rWvfW3mz5+fu+66KxMmrPrc33322Wetx7z99tuz2Wab5Rvf+Ea+8Y1vrLH+ueeey4IFC7Jw4cJst912Q8q53N57753jjz8+l112WS677LKcfPLJHdl3OCm4AABAo+ywww5rXb7jjjsmSZYsWZIkWbx4cWqtWbBgQc4777wNft/lx91pp53Wun758rXdGGp5ttUtXLgwS5cuXWe+Z555puWCm/Rd33v11VfnvPPOyzvf+c6O7TtcTFEGAAAa5Te/+c1al//6179O0jeFeeXvr3jFK1JrHfRrKJYfb/n7rG75XZSXb7eyUsqAxxw7duw6863vM2l32GGHnH766Xn88cdz4YUXdmzf4aLgAgAAjXLnnXfm6aefXmP5LbfckqSv0CbJ1ltvnT/8wz/Mz372syxatGiD33f5cZe/z8qWLl2aH/7wh0n6plAP1b777pvFixfnZz/72QbnG8hpp52WnXfeORdffHEefvjhju07HLpWcEspLyql/KSUck8p5WellPP6l+9WSrmjlPLLUsrXSymbdysjAAAw8ixZsiQf/ehHV1k2Z86cXHXVVRk9enTe+ta3rlj+wQ9+MM8991ze9a53rXXq8OLFi1dcW7suy5+7O3PmzPz4xz9eZd0ll1ySBx54IK9//evXuP52MH/zN3+TJDnhhBPy6KOPrrH+t7/97Rrv1aqtttoqH/vYx/K73/2u5anaG7LvcOjmNbjPJnldrfWZUspmSX5YSvlekg8mubjW+s+llEuTHJ/ki13MCQAAjCCvfe1r85WvfCV33HFH9t9//zz22GP5+te/nhdeeCFf+tKXVjwiKEne9a53Ze7cufnCF76Q3XffPYccckgmTJiQRYsW5Ve/+lVuu+22HHfccbn00kvX+b5bb711ZsyYkSOPPDJ/+qd/miOPPDITJkzI3Llzc+ONN2bHHXfMl770pZb+LAcffHAuvPDCnHXWWdlzzz1z2GGHZbfddsszzzyTBx98MLfeemte85rX5Prrr2/572llxx57bC655JLMmzevo/u2W9cKbu2byP5M/8vN+r9qktclOap/+ZVJzo2CCwAAG+SoVw191HCk22233XLppZfmzDPPzKWXXppnn302r3zlK3POOefkkEMOWWP7z3/+8zn00ENz6aWX5vvf/36efPLJjBs3LhMmTMjpp5+ed7zjHUN+78MPPzw/+tGP8vd///e54YYbsmTJkuy444456aSTcvbZZ2fnnXdu+c/zoQ99KPvvv38++9nP5oc//GGuvfbajB49OrvssktOPPHEHHXUUes+yDpssskm+eQnP5mpU6d2dN92K0O9YHpY3ryUUUnmJtkjyeeTfDLJj2ute/Sv//0k36u1/tFa9j0xyYlJMmHChD9+8MEHO5YbAGiwwZ53e9BZncsBLbrvvvuy1157dTsGtGSo520pZW6tdcq6tuvqTaZqrctqrZOTvCTJPknW9idbawOvtV5Wa51Sa52y/fbbD2dMAAAARoCeuItyrfXJJLck2TfJmFLK8qnTL0my5pXUAAAAsJpu3kV5+1LKmP6ft0zy+iT3JZmd5M/7NzsmybXdSQgAAMBI0s27KO+U5Mr+63A3SfK/aq3fKaX8R5J/LqWcn+SuJF/tYkYAAABGiG7eRfnfk7xiLcsfSN/1uAAAADBkPXENLgAAAGwoBRcAAIBGUHABAABoBAUXAACARlBwAQAAaAQFFwAAgEZQcAEAAGgEBRcAAIBG2LTbAQAAgA6YfUG3EwzuoLO69tZz5szJWWedlbvuuisLFy7My1/+8tx9991dy8P6M4ILAABstJ566qm86U1vyk9+8pO8/e1vz/Tp03PSSSclSY499tiUUjJ//vzuhkxy7rnnppSSUkq+8IUvrHWbK664IqWUfOQjH2nbviONEVwAAGCj9ZOf/CSPP/54/u7v/i4f/vCHux1nSM4999y84x3vyLbbbtvRfUcCI7gAAMBG69FHH02S7Lzzzl1OMjR77LFHFixYkI9//OMd3XekUHABAIDGuOKKK3LEEUfkD/7gD7Lllltm2223zf7775+vfe1rq2w3f/78lFJyzDHHJEmOO+64FdN4l0/XvfLKK5Mku+2224p1EydOXOU4ixYtyllnnZW99torW265ZUaPHp2DDz44N95441qzLT/+9ddfnwMPPDCjR49OKWXIf773ve992XnnnXPxxRfn4YcfbunvZkP2HSlMUQYAABrjPe95T/bee++89rWvzU477ZSFCxdm1qxZeec735lf/OIX+djHPpYkGTNmTKZPn56777471157bQ4//PBMnjw5STJ58uRMnz49//qv/5p77rkn06ZNy5gxY1bst9yDDz6YAw88MPPnz88BBxyQqVOn5re//W2+853vZOrUqfnSl76UE044YY2M//Iv/5Lrr78+hx56aE466aSWrvHdaqut8rGPfSzHH398/vZv/3ZFCR/ufUcKBRcAAGiMe++9N7vvvvsqy5577rkceuihufDCC3PSSSdll112yZgxY3LuuefmiiuuyLXXXpu3vOUtOfbYY1fsM3ny5MyfPz/33HNPPvCBD6wxcpskxxxzTB588MHMnDkzb3/721csf/LJJ3PggQfm/e9/f9785jdnhx12WGW/WbNmZdasWZk6dep6/RmPPfbYfOYzn8nXvva1/M3f/M2KYj7c+44EpigDAACNsXq5TZLNN988p5xySpYuXZqbb765Le9zzz335NZbb80RRxyxSrlN+kZ5zzvvvPz3f/93rrnmmjX2Pfzww9e73CbJJptskk984hN54YUXctppp3Vs35HACC4AANAYDz30UD7+8Y/n5ptvzkMPPZTf/e53q6x/5JFH2vI+t99+e5JkyZIlOffcc9dYv2DBgiTJfffdt8a6ffbZZ4Pf/5BDDskb3/jG3HjjjZk1a1YOO+ywjuzb6xRcAACgER544IHss88+Wbx4cQ444IC88Y1vzOjRozNq1KjMnz8/V155ZZ599tm2vNfChQuTJDfddFNuuummAbd75pln1li24447tiXDRRddlMmTJ+eMM87IIYcc0rF9e5mCCwAANMKnP/3pLFy4MJdffvkq19MmycyZM9t6U6XRo0cnST7zmc/k/e9/f0v7tnLX5MFMmjQpxxxzTC6//PLMmDEjm222WUf27WWuwQUAABrh/vvvT5IcccQRa6y79dZbWz7eqFGjkiTLli1bY92+++6bJPm3f/u3lo/bTueff3622mqrnHPOOfntb3/bsX17lYILAAA0wvI7Hd9yyy2rLL/hhhvyla98peXjbbfddkn6rutd3ZQpU3LAAQfkm9/8ZmbMmLHW/efNm5fHH3+85fdtxc4775xTTz01v/71r3PJJZd0bN9epeACAACNcPLJJ2fzzTfPkUcemaOPPjpnnHFGDjvssBx66KH58z//85aPd/DBBydJTjjhhJx55pk5//zz8w//8A8r1l999dXZfffdc/zxx2fy5Ml597vfnQ996EM5+uijM2nSpLzsZS/LAw880LY/30DOOOOM7LDDDitGsDu1by9yDS4AAGwMDjqr2wmG3cte9rLMnj07H/nIRzJr1qwsXbo0L3/5y/PNb34zY8aMyde//vWWjnfIIYfkU5/6VL785S/n4osvznPPPZddd901733v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\n",
      "text/plain": [
       "<Figure size 1152x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "full_plot=full/1000\n",
    "NN_selected_plot=NN_selected/1000\n",
    "plt.hist(full_plot,alpha=0.4,bins=120, range=(full_plot.min(),full_plot.max()),density=True,label='before NN');\n",
    "plt.hist(NN_selected_plot,alpha=0.5,bins=120, range=(full_plot.min(),full_plot.max()),density=True,label='after NN');\n",
    "plt.legend(fontsize=20)\n",
    "\n",
    "plt.xlabel('D reconstructed mass (GeV)', fontsize=17)\n",
    "plt.ylabel('# events (a.u)', fontsize=17)\n",
    "\n",
    "fig=plt.gcf();\n",
    "fig.set_size_inches(16,10)\n",
    "plt.savefig('/home/hep/davide/Rphipi/mu/test_'+str(test)+'/selected_data_NN.png', format='png', dpi=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.save('/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', NN_selected)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBOOST SELECTION"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "PATH=l_flv[l_index]+'/test_'+str(test)+'/XG_'+str(i)\n",
    "loaded_model = pickle.load(open(PATH+\"/XG_\"+str(i)+\"_.pickle.dat\", \"rb\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_XG=loaded_model.predict_proba(data_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = data_dict[\"Ds_ConsD_M\"][np.where(output_XG[:,1]>x_cut)[0]]\n",
    "b = [data_dict[\"Ds_ConsD_M\"][0:output_XG.shape[0]][i] for i in range(output_XG.shape[0])]\n",
    "\n",
    "XG_selected=np.array([a[i][0] for i in range(len(a))])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7gAAAJYCAYAAABICkptAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xm4l1W9N/73CgQ9RwJxJBUxGn5WFnnINByw4eTQc8zUX5qaqGlkljY5NaA2aJ1K01PHLBFz4PSUJWXmkGKWmQUqmo+nYxpaaIkyOFRMruePveEB2cDesNnfvW9fr+v6Xnvvtdb3vj/fHXnxZq17rVJrDQAAAPR1L2p1AQAAANAdBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEfq3uoDusNlmm9URI0a0ugwAAADWg+nTpz9Ra918TeMaEXBHjBiRadOmtboMAAAA1oNSysOdGWeJMgAAAI0g4AIAANAIAi4AAACNIOACAADQCAIuAAAAjSDgAgAA0AgCLgAAAI0g4AIAANAI/VtdAAAA0H0WLFiQOXPm5Omnn86SJUtaXQ6spF+/fhk0aFCGDh2agQMHduu1BVwAAGiIBQsW5JFHHskmm2ySESNGZIMNNkgppdVlwTK11ixatChPPfVUHnnkkQwfPrxbQ64lygAA0BBz5szJJptsks022ywDBgwQbul1SikZMGBANttss2yyySaZM2dOt15fwAUAgIZ4+umn8+IXv7jVZUCnvPjFL87TTz/drdcUcAEAoCGWLFmSDTbYoNVlQKdssMEG3f6cuIALAAANYlkyfcX6+LMq4AIAANAIAi4AAACNIOACAADQCM7BBQCAF4gr73ik1SWs1nveOHydrzFz5sxsv/32OfLIIzNp0qR1L2o1Jk+enC996Uv5wx/+kGeeeSYnnnhizjvvvPV6T1bPDC4AAEAX3X777TnssMPy9NNP5wMf+EAmTJiQvffeu9VlrdZzzz2XPffcM6WUTJ48ucMxDz30UAYNGpShQ4dm1qxZK/U/++yz+Y//+I/svffeGTZsWAYOHJiNN944r3jFK3LooYdm8uTJWbRo0fr+KKtkBhcAAKCLfvKTn6TWmu985zt505ve1OpyOuVFL3pRLr300rzuda/LBz/4wey+++7ZZpttlvUvWbIkRxxxRJ555plMnjw5W2+99Qrv/9WvfpV3v/vd+fOf/5wtt9wyb37zm7PtttvmueeeyyOPPJKpU6fmv/7rv/LVr341v/3tb3v64yURcAEAALrs0UcfTZK85CUvaXElXTNixIh87Wtfy1FHHZVx48blxhtvXHZcz9lnn51f/epXec973pNDDjlkhffdd9992XvvvfPss8/m85//fD7+8Y9nwIABK4xZsmRJfvjDH+brX/96j32e57NEGQAAaKT//u//zjvf+c4MHTo0//zP/5zddtstN9xwwyrHT548OXvttVc22WSTbLjhhtlhhx3yuc99LgsWLFg2ZtKkSSml5JJLLkmSbL/99imlpJSSmTNnLhs3ffr0HHjggdliiy0ycODAbLfddjn++OPz2GOPrXTfcePGpZSShx56KBdccEFe+9rXZqONNsrYsWNXGHf99ddn3333zWabbZaBAwdm5MiR+cQnPpF58+Z16fcybty4HHDAAbnpppvyta99LUkybdq0nHXWWdl22207DKgnnHBCnn766Zx66qk5/fTTVwq3SdKvX78cdNBBufHGG7tUT3cygwsAADTOH//4x+y66655zWtek/e///157LHH8t3vfjf77LNPrrzyyrz73e9eYfwxxxyTiRMnZptttsm73vWuDBkyJL/+9a/z6U9/OjfddFNuvPHG9O/fP6NGjcqECRNy9dVXZ8aMGTnxxBMzZMiQJFn29ZprrsmBBx6YWmsOOuigbLfddpk+fXr+8z//M1OmTMltt92WESNGrFTziSeemF/84hfZb7/9su+++6Zfv37L+s4666xMmDAhQ4cOzTve8Y5sscUWueeee/LlL3851157bW6//fa8+MUv7vTv56KLLsqvfvWrnHbaadltt91y+OGHZ/HixZk0adKyz7HUgw8+mFtuuSUbbbRRTj755DVeu3//1sVMARcAAGicW2+9NR//+Mfz7//+78vaTjjhhOy6664ZP3589tlnn2WBcNKkSZk4cWIOOOCAXHHFFdloo42WveeMM87ImWeema9//es58cQTM2rUqIwaNSozZ87MjBkzctJJJ60QVp955pmMGzcuixcvzi233JLdd999Wd8Xv/jFnHrqqTnuuOM6nEm+8847c9ddd2X77bdfoX3q1KmZMGFCdt1111x77bUrBNBJkyblqKOOyoQJE3Luued2+vez2Wab5eKLL8473vGO7LbbblmwYEE++tGP5s1vfvNKY2+77bYkyb/8y79k8ODBnb5HK1iiDACwvKlnr/oF9BmDBw/OZz7zmRXaRo8encMOOyzz5s3LD3/4w2XtX/va19K/f/9MnDhxhXCbJJ/+9Kez6aab5oorrujUfadMmZInn3wy7373u1cIt0nysY99LCNGjMiNN96YRx5Z+cimk08+eaVwmyTnn39+kuRb3/rWSrOr48aNy6hRozpd3/L222+/7LnnnlmwYEGGDx+eL3zhCx2O+8tf/pIkK206tdR5552XM844Y4XX8su1e5IZXAAAoHF22mmnDBo0aKX2sWPH5tJLL81dd92VI488Mn/7298yY8aMbLbZZqs8w3bgwIG5//77O3XfO++8M0k6nAnt379/9thjj8ycOTN33XVXhg9f8dzfnXfeucNr3n777dlggw3yve99L9/73vdW6l+4cGFmz56dJ598Mptuummn6kySm2++ObfeemuS5M9//nN+/etfZ88991xpXK01SZZtRvV85513Xh5++OEV2saOHdvhMuz1TcAFAAAaZ8stt+ywfauttkqSzJ8/P0kyd+7c1Foze/bsnHnmmet836XXHTZsWIf9S9s72hhqaW3P9+STT2bx4sVrrO+ZZ57pdMCdN29exo0bl/79++f888/PCSeckHHjxuWee+5Z6R8Gltbc0bm4SVaYrT388MPXaja5u1iiDAAANM5f//rXDtuXLrdd+izp0q+vf/3rU2td7aszll5v6X2eb+kuyh09y7qqGdLBgwdnk002WWN92223XadqTJLjjz8+f/rTn3LmmWdm/PjxOeWUUzJz5sx85CMfWWnsmDFjkrTttPzUU091+h6tIOACAACNc+edd+bpp59eqf2WW25J0hZok2TjjTfOq1/96tx3332ZM2fOOt936XWX3md5ixcvzi9/+cskbUuoO2uXXXbJ3Llzc999961zfUny3e9+N5MnT86YMWNyyimnJGnbTGvUqFG5+OKLc80116wwfuTIkRk7dmz+/ve/r7BpV28k4AIAAI0zf/78nHXWWSu0TZs2LVdccUUGDx6cAw44YFn7Rz/60SxcuDBHH310h0uH586du+zZ2jVZeu7u5MmT8+tf/3qFvvPOOy8PPfRQ3vrWt670/O3qLJ1VPfbYY/Poo4+u1P/ss8+udK9VmTVrVj7wgQ9k4403zne+85286EVtkXCDDTbIZZddloEDB+bYY4/NE088scL7Lrjggmy88cb5whe+kC9+8YtZtGjRStd+7rnnWj7D6xlcAACgcfbYY498+9vfzh133JExY8YsOwf3ueeeyze/+c0Vzow9+uijM3369HzjG9/IyJEj8/a3vz3Dhw/PnDlz8sc//jG33nprjjrqqFx44YVrvO/GG2+ciRMn5uCDD86ee+6Zgw8+OMOHD8/06dNzww03ZKuttso3v/nNLn2Wt7zlLTnnnHNy2mmn5eUvf3n23XffbL/99nnmmWfy8MMP5+c//3l22223XHfddau9Tq0148aNy9y5c/Ptb387L33pS1fof81rXpPPfvazOfnkkzN+/Ph8//vfX6Hv+uuvz8EHH5xTTz015513Xvbaa68MHz48S5YsyV/+8pdMnTo1s2bNyvbbb59tt922S5+xuwi4AADwAvGeN3Z+1rCv23777XPhhRfm1FNPzYUXXpgFCxZkp512ymc+85m8/e1vX2n817/+9eyzzz658MIL87Of/Szz5s3L0KFDM3z48HziE5/I4Ycf3ul777///rntttvyhS98Iddff33mz5+frbbaKuPHj8+nP/3pvOQlL+ny5znllFMyZsyYnH/++fnlL3+ZKVOmZPDgwdl6661z3HHH5T3vec8ar3H++efnZz/7Wfbff/8cc8wxHY752Mc+lmuuuSZXXXVVLr/88hU+95ve9Kb8z//8TyZOnJgf//jHufnmmzNnzpxssMEGGTZsWMaMGZMDDjgg73rXuzJgwIAuf8buUDr7sHRvNnr06Dpt2rRWlwEANMHqzrvd67SeqwPWwv33358ddtih1WVAp3X2z2wpZXqtdfSaxnkGFwAAgEYQcAEAAGgEARcAAIBGaFnALaVsWEr5TSllRinlvlLKme3t25dS7iilPFBK+W4ppTVPJwMAANCntHIGd0GSN9daX5dkVJK9Sym7JPliknNrrS9PMjdJx9t7AQAAwHJaFnBrm2faf9yg/VWTvDnJ0gOXLk3yzhaUBwAAQB/T0mdwSyn9Sil3J3k8yY1JHkwyr9a6uH3In5Ns3ar6AAAA6DtaGnBrrUtqraOSbJNk5yQdHYDU4UG9pZTjSinTSinTZs+evT7LBAAAoA/oFbso11rnJbklyS5JhpRS+rd3bZPk0VW856Ja6+ha6+jNN9+8ZwoFAACg12rlLsqbl1KGtH+/UZK3Jrk/ydQkB7UPOzLJlNZUCAAAQF/Sf81D1pthSS4tpfRLW9D+37XWa0op/yfJf5VSPpfkriQXt7BGAAAA+oiWBdxa6z1JXt9B+0Npex4XAAAAOq1XPIMLAAAA66qVS5QBAICeNPXsVlewenud1rJbT5s2LaeddlruuuuuPPnkk3nd616Xu+++u2X1sHbM4AIAAC9oTz31VPbbb7/85je/ySGHHJIJEyZk/PjxSZJx48allJKZM2e2tMa//e1veeUrX5l+/frltttu63DM7bffnv79+2fkyJF55plnVuqfM2dOzjnnnIwdOzZbbLFFBgwYkEGDBuXVr351jjrqqPz4xz9OrR2e0tpnmMEFAABe0H7zm9/k8ccfz+c///mcfvrprS6nQ//0T/+Uyy67LGPGjMkRRxyRGTNmZNCgQcv6n3nmmRxxxBFJku985zvZeOONV3j/j370oxx55JGZN29eRowYkX333TfDhg3LwoUL8+CDD+bqq6/OpEmTctBBB+V73/tej3627iTgAgAAL2iPPvpokuQlL3lJiytZvZ133jmf/OQnc+aZZ+akk07KxRf/vwNnTjrppDz44IM5/fTTM2bMmBXed/PNN+fAAw9M//79861vfStHH310XvSiFRfz/uMf/8jll1+eG264oUc+y/piiTIAANAokyZNyoEHHpiXvvSl2WijjfLiF784Y8aMyeWXX77CuJkzZ6aUkiOPPDJJctRRR6WUklJKJk2alFJKLr300iTJ9ttvv6xvxIgRK1xnzpw5Oe2007LDDjtko402yuDBg/OWt7ylw7C49LqTJk3Kddddl7Fjx2bw4MEppXTqs33qU5/KG97whkycODFXX311kmTKlCm5+OKLs9NOO+WMM85YYfySJUsyfvz4LF68OOeff37e9773rRRuk2TDDTfM+973vlx55ZWdqqO3MoMLAAA0ygc+8IG86lWvyh577JFhw4blySefzLXXXpsjjjgiv//97/PZz342STJkyJBMmDAhd999d6ZMmZL9998/o0aNSpKMGjUqEyZMyNVXX50ZM2bkxBNPzJAhQ5a9b6mHH344Y8eOzcyZM7P77rtn7733zrPPPptrrrkme++9d775zW/m2GOPXanG73//+7nuuuuyzz77ZPz48Z1+xrd///657LLLstNOO+W4447LS1/60hx77LHZaKONcvnll2eDDTZYYfwtt9ySBx54INtuu22OPvroTl2/L+vb1QMAADzP7373u4wcOXKFtoULF2afffbJOeeck/Hjx2frrbfOkCFDcsYZZ2TSpEmZMmVK3vnOd2bcuHHL3jNq1KjMnDkzM2bMyEknnbTSzG2SHHnkkXn44YczefLkHHLIIcva582bl7Fjx+bDH/5w/u3f/i1bbrnlCu+79tprc+2112bvvffu8ud75StfmS996Us54YQTsvPOO2fBggU5//zzs8MOO6w0dumGVHvuuWf69evX5Xv1NZYoAwAAjfL8cJskAwYMyAc/+MEsXrw4N910U7fcZ8aMGfn5z3+eAw88cIVwm7TN8p555pn5xz/+kauuumql9+6///5rFW6XOv744zNixIgsWLAgb3zjG3PCCSd0OO4vf/lLkmTrrbfusP+MM85Y6TVv3ry1rqvVzOACAACN8sgjj+SLX/xibrrppjzyyCP5+9//vkL/rFmzuuU+t99+e5Jk/vz5Kz37miSzZ89Oktx///0r9e28887rdO9JkyYtW9Z8zz335IEHHsgrXvGKlcYtPfZnVc/4nnnmmSu1jRs3boVl2H2JgAsAADTGQw89lJ133jlz587N7rvvnn/913/N4MGD069fv8ycOTOXXnppFixY0C33evLJJ5MkN954Y2688cZVjuvoTNqtttpqre87c+bMZc8ET5gwIR/5yEfy3ve+N7fddttKy5CHDRuWZNWhfvlzb3fbbbdVnrHbVwi4AABAY3z1q1/Nk08+mUsuuWSF52mTZPLkyct2Re4OgwcPTpJ87Wtfy4c//OEuvbezuyY/33PPPZf3vve9efrpp3PllVfm0EMPzW9/+9tceeWVOfvss/OpT31qhfFLjwy65ZZb8txzz3W4g3KTNPvTAQAALyh/+MMfkiQHHnjgSn0///nPu3y9pTOiS5YsWalvl112SZL84he/6PJ119aXvvSl/OIXv8ghhxySQw89NEny9a9/Pdtss03OOuus3HXXXSuMHzt2bF72spflT3/6Uy655JIeq7NVBFwAAKAxlu50fMstt6zQfv311+fb3/52l6+36aabJml7rvf5Ro8end133z0/+MEPMnHixA7ff++99+bxxx/v8n07cvfdd2fChAnZeuut841vfGNZ+5AhQzJx4sQsXrw4RxxxxApLsPv165cLL7ww/fv3z4c+9KFccsklee6551a69qJFi/K3v/2tW+psJQEXAABojOOPPz4DBgzIwQcfnMMOOywnn3xy9t133+yzzz456KCDuny9t7zlLUmSY489Nqeeemo+97nP5T/+4z+W9V955ZUZOXJkjjnmmIwaNSrvf//7c8opp+Swww7LjjvumNe+9rV56KGH1vlz/eMf/8jhhx+eRYsWZdKkSdlkk01W6H/b296WD3zgA7nvvvvyyU9+cqXP8P3vfz8DBgzI0UcfnZEjR2bcuHE5/fTT89GPfjSHHHJIhg0blrvuuiuvfe1r++wGU4lncAEA4IVjr9NaXcF699rXvjZTp07Npz71qVx77bVZvHhxXve61+UHP/hBhgwZku9+97tdut7b3/72fOUrX8m3vvWtnHvuuVm4cGG22267ZcfybLPNNpk+fXouuOCCXHXVVbniiiuyZMmSbLXVVnnVq16VD33oQ9lxxx3X+XOddtppue+++/LhD384b33rWzsc8+///u/52c9+lnPPPTf/9m//lj322GNZ3/77758HH3wwF110UX7605/mJz/5SebNm5cNN9ww22yzTfbbb78cfPDB2Xffffv0c7pl+V2z+qrRo0fXadOmtboMAKAJpp696r4XQDigb7v//vuzww47tLoM6LTO/pktpUyvtY5e07i+G80BAABgOQIuAAAAjSDgAgAA0AgCLgAAAI0g4AIAANAIAi4AAACN4BxcAOCFaXXHAUEfVmtNKaXVZcAarY8ja83gAgBAQ/Tr1y+LFi1qdRnQKYsWLUq/fv269ZoCLgAANMSgQYPy1FNPtboM6JSnnnoqgwYN6tZrCrgAANAQQ4cOzdy5c/PEE09k4cKF62UJKKyLWmsWLlyYJ554InPnzs3QoUO79fqewQUAgIYYOHBghg8fnjlz5mTmzJlZsmRJq0uClfTr1y+DBg3K8OHDM3DgwG69toALAAANMnDgwAwbNizDhg1rdSnQ4yxRBgAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAA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\n",
      "text/plain": [
       "<Figure size 1152x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "full_plot=full/1000\n",
    "XG_selected_plot=XG_selected/1000\n",
    "\n",
    "plt.hist(full_plot,alpha=0.4,bins=120, range=(full_plot.min(),full_plot.max()),density=True,label='before XG');\n",
    "plt.hist(XG_selected_plot,alpha=0.5,bins=120, range=(full_plot.min(),full_plot.max()),density=True,label='after XG');\n",
    "plt.legend(fontsize=20)\n",
    "plt.xlabel('D reconstructed mass (GeV)', fontsize=17)\n",
    "plt.ylabel('# events (a.u)', fontsize=17)\n",
    "fig=plt.gcf();\n",
    "fig.set_size_inches(16,10)\n",
    "plt.savefig('/home/hep/davide/Rphipi/mu/test_'+str(test)+'/selected_data_XG.png', format='png', dpi=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.save('/disk/lhcb_data/davide/Rphipi/selected_data/'+l_flv[l_index]+l_flv[l_index]+'/'+'sel_data_XG_'+l_flv[l_index]+l_flv[l_index]+'.npy', NN_selected)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.bar(range(len(loaded_model.feature_importances_)), loaded_model.feature_importances_)\n",
    "plt.show()"
   ]
  },
  {
   "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
}