Newer
Older
R_phipi / BDT_select.ipynb
@Davide Lancierini Davide Lancierini on 23 Oct 2018 54 KB Debugging
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "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": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "l_index=0\n",
    "l_flv=['e','mu']\n",
    "mother_ID=[\"Ds\",\"Dplus\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DATA LOADING & PREPROCESSING"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "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": [],
   "source": [
    "task='TEST'\n",
    "\n",
    "test=0\n",
    "i=4\n",
    "PATH=l_flv[l_index]+'/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": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])"
      ]
     },
     "execution_count": 6,
     "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": 7,
   "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": 8,
   "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": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " Evaluate model on test set...\n",
      "INFO:tensorflow:Restoring parameters from e/test_0/NN_4/NN_model.ckpt\n",
      "Model restored.\n"
     ]
    }
   ],
   "source": [
    "output_dict_NN={}\n",
    "batch_size=200\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": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = data_dict[\"Ds_ConsD_M\"][0:output_NN.shape[0]][np.argmax(output_NN, axis=1).astype(np.bool)]\n",
    "b = [data_dict[\"Ds_ConsD_M\"][0:output_NN.shape[0]][i] for i in range(output_NN.shape[0])]\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": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7gAAAJYCAYAAABICkptAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XucXVV9N/7PMgGEAgkhyM2GIPD4QEWjTUVEKIhKgKeiRVoLWEAqIorxglxUCCitqFTAWxEpl1ZIfam0oEYuKpdqEZtweVCjjxRjCqiEJFy1hOD6/TGT/HKbyTnJmXPO7Lzfr9e8Zs5ee+/zzexkdj6z1l6r1FoDAAAAo91zel0AAAAAdIKACwAAQCMIuAAAADSCgAsAAEAjCLgAAAA0goALAABAIwi4AAAANIKACwAAQCMIuAAAADTC2F4X0AkTJ06skydP7nUZAAAAjIA5c+Y8UmvdZm37NSLgTp48ObNnz+51GQAAAIyAUsovW9nPEGUAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEcb2ugAAAKAznn766SxatChPPPFEnn322V6XA2s0ZsyYbLHFFpkwYUI22WSTjp67ZwG3lHJZkv+T5OFa64sGt30yyZ8lWZLkv5IcV2t9tFc1AgDAaPH0009n/vz52WqrrTJ58uRstNFGKaX0uixYSa01zzzzTB5//PHMnz8/kyZN6mjI7eUQ5SuSTFtl201JXlRrfXGS/5fkjG4XBQAAo9GiRYuy1VZbZeLEidl4442FW/pSKSUbb7xxJk6cmK222iqLFi3q6Pl7FnBrrbclWbTKthtrrUsHX/4gyfO7XhgAAIxCTzzxRLbccstelwEt23LLLfPEE0909Jz9PMnUW5N8a6jGUsoJpZTZpZTZCxYs6GJZAADQf5599tlstNFGvS4DWrbRRht1/Fnxvgy4pZQPJVma5Kqh9qm1XlJrnVprnbrNNtt0rzgAAOhThiUzmozE39e+m0W5lHJMBiafOrDWWntdDwAAAKNDXwXcUsq0JKcl+dNa6297XQ8AAACjR8+GKJdSZia5PckLSykPlFKOT/LZJFskuamUcncp5eJe1QcAAMDo0rMe3FrrX61h8z92vRAAANgAXH3H/F6XMKwj95q03ueYN29edt555xxzzDG54oor1r+oYcycOTOf+MQnct999+XJJ5/M9OnTc+GFF47oe7J2fTnJFAAAQL+6/fbbc9RRR+WJJ57IO97xjsyYMSPTpk3rdVlrdcUVV6SUklJKTj311DXuc8stt6SUkqOPPrpjx3ZTXz2DCwAA0O+++c1vptaaf/qnf8orX/nKXpezTj796U/nne98Z3baaaeuHjvS9OACAAC04aGHHkqS7LDDDj2uZN3suuuuefrpp/PBD36wq8d2g4ALAAA0zk9/+tO84Q1vyIQJE/IHf/AHedWrXpUbb7xxyP1nzpyZAw44IFtttVWe+9znZvfdd8+5556bp59+evk+y4bpXn755UmSnXfeefmw3Xnz5i3fb86cOTn88MPzvOc9L5tsskl22mmnnHTSSfnVr3612vsee+yxKaXk/vvvz2c+85m8+MUvzqabbpr9999/pf1uuOGGHHLIIZk4cWI22WST7LLLLvnABz6QRx99tO3vzV/8xV/kpS99aWbOnJnZs2d37dhuEHABAIBG+cUvfpG99947CxcuzNvf/vYcccQRmTNnTg4++OB8+ctfXm3/448/PkceeWTuu+++/Pmf/3ne+c53ZsKECTnzzDMzbdq0LF26NEkyZcqUzJgxIy95yUuSJNOnT8+MGTMyY8aMjB8/PknyjW98I6985Svz9a9/Pa95zWvyvve9Ly984QvzD//wD5k6depKQXhF06dPz5lnnpk999wz06dPzz777LO87SMf+UimTZuWO+64I4ceemje/e53Z9ddd83555+fffbZJ48//nhb359SSs4///zUWnPKKad07dhu8AwuAADQKLfddltOOeWUfPKTn1y+7V3velf23nvvnHjiiTn44IOz5ZZbJhnolb3sssvyxje+MVdddVU23XTT5cecffbZOeecc/K5z30u06dPz5QpUzJlypTMmzcv99xzT97znvdk8uTJy/d/8sknc+yxx2bp0qW55ZZbsu+++y5v+/jHP57TTz89J5xwwhp7ku+8887cdddd2XnnnVfafvPNN2fGjBnZe++9M2vWrOVBelntxx13XGbMmJELLrigre/Rq1/96hx66KH55je/meuuuy6vf/3ru3LsSNODCwCjzc0fG/oDgIwbNy5nnXXWStumTp2ao446Ko8++mj+9V//dfn2iy66KGPHjs1ll122UrhNkjPPPDNbb711rrrqqpbe99prr83ChQvzl3/5lyuF2yR5//vfn8mTJ+emm27K/PmrL9l06qmnrhZuk4EJnZLki1/84krhNhkY3jxlypSW61vVJz7xiYwZMyannXba8l7qbhw7kvTgAgAAjfKyl70sW2yxxWrb999//1x55ZW56667cswxx+S3v/1t7rnnnkycOHHINWw32WSTzJ07t6X3vfPOO5MM9HCuauzYsdlvv/0yb9683HXXXZk0aeV1f1/+8pev8Zy33357Ntpoo3zlK1/JV77yldXalyxZkgULFmThwoXZeuutW6pzmT322CPHH398LrnkklxyySU56aSTunLsSBJwAQCARtl2223XuH277bZLkjz22GNJksWLF6fWmgULFuScc85Z7/dddt7tt99+je3Ltq9pYqhlta1q4cKFWbp06Vrre/LJJ9sOuMnA871XX311zjnnnLzlLW/p2rEjxRBlAACgUX7zm9+scfuvf/3rJANDmFf8/NKXvjS11mE/WrHsfMveZ1XLZlFett+KSilDnnOrrbZaa33ruibttttumw984AN5+OGHc95553Xt2JEi4AIAAI1y55135oknnlht+y233JJkINAmyeabb54/+qM/yo9//OMsWrRovd932XmXvc+Kli5dmu9973tJBoZQt+oVr3hFFi9enB//+MfrXd9QTjnllOywww654IIL8sADD3Tt2JEg4AIAAI3y2GOP5SMf+chK22bPnp2rrroq48aNyxvf+Mbl29/3vvdlyZIleetb37rGocOLFy9e/mzt2ixbd3fmzJn5wQ9+sFLbhRdemPvvvz+vec1rVnv+djjvfe97kyRve9vb8tBDD63W/tRTT632Xu3abLPN8tGPfjS/+93v2h6qvT7HjgTP4AIAAI2y33775dJLL80dd9yRffbZJ7/61a/y5S9/Ob///e/zhS98YfkSQUny1re+NXPmzMnnP//57LLLLjnooIMyadKkLFq0KL/4xS9y22235bjjjsvFF1+81vfdfPPNc9lll+WII47In/7pn+aII47IpEmTMmfOnNx4443Zbrvt8oUvfKGtP8uBBx6Y8847L2eccUZ22223HHLIIdl5553z5JNP5pe//GVuvfXWvOpVr8r111/f9vdpRccee2wuvPDC3HvvvV09ttMEXAAA2AAcuVfrvYaj3c4775yLL744p59+ei6++OI8/fTTednLXpazzjorBx100Gr7f+5zn8vBBx+ciy++ON/+9rfz6KOPZsKECZk0aVI+8IEP5Oijj275vQ877LB8//vfz9/93d/lhhtuyGOPPZbtttsuJ554Ys4888zssMMObf95TjvttOyzzz759Kc/ne9973u59tprM27cuOy444454YQTcuSRR7Z9zlU95znPySc/+clMmzatq8d2Wmn1gel+NnXq1Dp79uxelwEA3THcercHnNG9OoC+Mnfu3Oy+++69LgPa0urf21LKnFrr1LXt5xlcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGmFsrwsAAAC64OaP9bqC4R1wRs/eevbs2TnjjDNy1113ZeHChXnJS16Su+++u2f1sO704AIAABusxx9/PIceemh++MMf5s1vfnNmzJiRE088MUly7LHHppSSefPm9bbIJGeffXZKKSml5POf//wa97niiitSSsmHP/zhjh072ujBBQAANlg//OEP8/DDD+dv//Zv88EPfrDX5bTk7LPPztFHH50tt9yyq8eOBnpwAQCADdZDDz2UJNlhhx16XElrdt111yxYsCAf//jHu3rsaCHgAgAAjXHFFVfk8MMPzwte8IJsuumm2XLLLbPPPvvkS1/60kr7zZs3L6WUHHPMMUmS4447bvkw3mXDda+88sokyc4777y8bfLkySudZ9GiRTnjjDOy++67Z9NNN824ceNy4IEH5sYbb1xjbcvOf/3112f//ffPuHHjUkpp+c938sknZ4cddsgFF1yQBx54oK3vzfocO1oYogwAADTGO97xjuyxxx7Zb7/9sv3222fhwoWZNWtW3vKWt+RnP/tZPvrRjyZJxo8fnxkzZuTuu+/Otddem8MOOyxTpkxJkkyZMiUzZszIv/3bv+Wee+7J9OnTM378+OXHLfPLX/4y+++/f+bNm5d9990306ZNy1NPPZVvfOMbmTZtWr7whS/kbW9722o1fvWrX83111+fgw8+OCeeeGJbz/huttlm+ehHP5rjjz8+H/rQh5aH8JE+drQQcAEAgMb40Y9+lF122WWlbUuWLMnBBx+c8847LyeeeGJ23HHHjB8/PmeffXauuOKKXHvttXnDG96QY489dvkxU6ZMybx583LPPffkPe95z2o9t0lyzDHH5Je//GVmzpyZN7/5zcu3P/roo9l///3z7ne/O69//euz7bbbrnTcrFmzMmvWrEybNm2d/ozHHntsLrroonzpS1/Ke9/73uXBfKSPHQ0MUQYAABpj1XCbJBtvvHHe+c53ZunSpfnOd77Tkfe55557cuutt+bwww9fKdwmA72855xzTv7nf/4nX/va11Y79rDDDlvncJskz3nOc/KJT3wiv//973PKKad07djRQA8uAADQGPPnz8/HP/7xfOc738n8+fPzu9/9bqX2Bx98sCPvc/vttydJHnvssZx99tmrtS9YsCBJMnfu3NXaXv7yl6/3+x900EF53etelxtvvDGzZs3KIYcc0pVj+52ACwAANML999+fl7/85Vm8eHH23XffvO51r8u4ceMyZsyYzJs3L1deeWWefvrpjrzXwoULkyQ33XRTbrrppiH3e/LJJ1fbtt1223WkhvPPPz9TpkzJqaeemoMOOqhrx/YzARcAAGiET33qU1m4cGEuv/zylZ6nTZKZM2d2dFKlcePGJUkuuuiivPvd727r2HZmTR7OnnvumWOOOSaXX355Lrvssmy00UZdObafeQYXAABohPvuuy9Jcvjhh6/Wduutt7Z9vjFjxiRJnn322dXaXvGKVyRJ/v3f/73t83bSueeem8022yxnnXVWnnrqqa4d268EXAAAoBGWzXR8yy23rLT9hhtuyKWXXtr2+bbeeuskA8/1rmrq1KnZd999c8011+Syyy5b4/H33ntvHn744bbftx077LBD3v/+9+fXv/51Lrzwwq4d268EXAAAoBFOOumkbLzxxjniiCNy1FFH5dRTT80hhxySgw8+OG9605vaPt+BBx6YJHnb296W008/Peeee24++9nPLm+/+uqrs8suu+T444/PlClT8va3vz2nnXZajjrqqOy555558YtfnPvvv79jf76hnHrqqdl2222X92B369h+5BlcAADYEBxwRq8rGHEvfvGLc/PNN+fDH/5wZs2alaVLl+YlL3lJrrnmmowfPz5f/vKX2zrfQQcdlL//+7/PF7/4xVxwwQVZsmRJdtppp7zrXe9Kkjz/+c/PnDlz8pnPfCZf+9rXctVVV+XZZ5/Ndtttlz322CMnn3xy9txzz5H4o65k8803zznnnJMTTzyx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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": 12,
   "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": 13,
   "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": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_XG=loaded_model.predict_proba(data_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = data_dict[\"Ds_ConsD_M\"][0:output_XG.shape[0]][np.argmax(output_XG, axis=1).astype(np.bool)]\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": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7gAAAJYCAYAAABICkptAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xm0lmW9B/zvFQjaEUHEAQfEbHitNI6HNMMBs45TJzP1zRwSLY08ljY5NKE2aLNDdswUMVNOb1paZg45ZJlaoJJ5rGMaklpHFHCqGK/3DzYsEfZmb9jsZ+/bz2etZ22e+7qe+/49tluLL9dUaq0BAACAvu5lrS4AAAAAuoOACwAAQCMIuAAAADSCgAsAAEAjCLgAAAA0goALAABAIwi4AAAANIKACwAAQCMIuAAAADRC/1YX0B2GDRtWR44c2eoyAAAAWAOmTp36ZK11w5X1a0TAHTlyZKZMmdLqMgAAAFgDSimPdKafKcoAAAA0goALAABAIwi4AAAANIKACwAAQCMIuAAAADSCgAsAAEAjCLgAAAA0goALAABAI/RvdQEAAED3mTt3bmbNmpVnn302CxcubHU5sJx+/fpl0KBBGTp0aAYOHNit9xZwAQCgIebOnZsZM2Zk/fXXz8iRI7PWWmullNLqsmCpWmvmz5+fZ555JjNmzMiIESO6NeSaogwAAA0xa9asrL/++hk2bFgGDBgg3NLrlFIyYMCADBs2LOuvv35mzZrVrfcXcAEAoCGeffbZrLfeeq0uAzplvfXWy7PPPtut9xRwAQCgIRYuXJi11lqr1WVAp6y11lrdvk5cwAUAgAYxLZm+Yk38rgq4AAAANIKACwAAQCMIuAAAADSCc3ABAOAl4vK7ZrS6hA4dsuOI1b7H9OnTs9VWW+WII47IpEmTVr+oDkyePDlf/vKX86c//SnPPfdcjj/++Jx11llr9Jl0zAguAABAF91xxx059NBD8+yzz+aDH/xgJkyYkL322qvVZXVo0aJF2W233VJKyeTJk1fY5+GHH86gQYMydOjQPPbYY8u1P//88/nmN7+ZvfbaK8OHD8/AgQOz7rrr5tWvfnXe8573ZPLkyZk/f/6a/irtMoILAADQRT/96U9Ta813v/vdvPnNb251OZ3yspe9LJdcckne8IY35D//8z+zyy67ZPPNN1/avnDhwhx++OF57rnnMnny5Gy22WbLfP7Xv/513v3ud+fRRx/NxhtvnLe85S3ZYostsmjRosyYMSO33HJL/vu//ztf//rX89vf/ranv14SARcAAKDLHn/88STJpptu2uJKumbkyJE5++yzc+SRR2bcuHG58cYblx7Xc8YZZ+TXv/51DjnkkBx88MHLfO7+++/PXnvtleeffz5f+MIX8vGPfzwDBgxYps/ChQvzox/9KOedd16PfZ8XM0UZAABopD/84Q955zvfmaFDh+Zf/uVfsvPOO+eGG25ot//kyZOz++67Z/3118/aa6+dbbbZJp///Oczd+7cpX0mTZqUUkouvvjiJMlWW22VUkpKKZk+ffrSflOnTs0BBxyQjTbaKAMHDsyWW26ZY489Nn/961+Xe+64ceNSSsnDDz+cc889N9ttt13WWWedjB07dpl+119/ffbZZ58MGzYsAwcOzNZbb51PfOITmTNnTpf+u4wbNy77779/brrpppx99tlJkilTpuT000/PFltsscKAetxxx+XZZ5/NySefnE9+8pPLhdsk6devXw488MDceOONXaqnOxnBBQAAGufPf/5zdtppp7z+9a/PBz7wgfz1r3/N97///ey99965/PLL8+53v3uZ/u973/syceLEbL755nnXu96VIUOG5M4778xnPvOZ3HTTTbnxxhvTv3//jBo1KhMmTMhVV12VadOm5fjjj8+QIUOSZOnPa665JgcccEBqrTnwwAOz5ZZbZurUqfmv//qvXH311bn99tszcuTI5Wo+/vjj88tf/jL77rtv9tlnn/Tr129p2+mnn54JEyZk6NChefvb356NNtoov/vd7/LVr3411157be64446st956nf7vc8EFF+TXv/51TjnllOy888457LDDsmDBgkyaNGnp91jioYceyq233pp11lknJ5544krv3b9/62KmgAsAADTObbfdlo9//OP5yle+svTacccdl5122injx4/P3nvvvTQQTpo0KRMnTsz++++fyy67LOuss87Sz5x66qk57bTTct555+X444/PqFGjMmrUqEyfPj3Tpk3LCSecsExYfe655zJu3LgsWLAgt956a3bZZZelbV/60pdy8skn55hjjlnhSPLdd9+de+65J1tttdUy12+55ZZMmDAhO+20U6699tplAuikSZNy5JFHZsKECfnGN77R6f8+w4YNy0UXXZS3v/3t2XnnnTN37tx89KMfzVve8pbl+t5+++1Jkn/7t3/L4MGDO/2MVjBFGQD6mlvOaP8FQJJk8ODB+exnP7vMtdGjR+fQQw/NnDlz8qMf/Wjp9bPPPjv9+/fPxIkTlwm3SfKZz3wmG2ywQS677LJOPffqq6/OU089lXe/+93LhNsk+djHPpaRI0fmxhtvzIwZyx/ZdOKJJy4XbpPknHPOSZJ85zvfWW50ddy4cRk1alSn63uhfffdN7vttlvmzp2bESNG5Itf/OIK+/3tb39LkuU2nVrirLPOyqmnnrrM64XTtXuSEVwAAKBxtt9++wwaNGi562PHjs0ll1ySe+65J0cccUT+/ve/Z9q0aRk2bFi7Z9gOHDgwDzzwQKeee/fddyfJCkdC+/fvn1133TXTp0/PPffckxEjlj33d4cddljhPe+4446stdZa+cEPfpAf/OAHy7XPmzcvM2fOzFNPPZUNNtigU3Umyc0335zbbrstSfLoo4/mzjvvzG677bZcv1prkizdjOrFzjrrrDzyyCPLXBs7duwKp2GvaQIuAADQOBtvvPEKr2+yySZJkqeffjpJMnv27NRaM3PmzJx22mmr/dwl9x0+fPgK25dcX9HGUEtqe7GnnnoqCxYsWGl9zz33XKcD7pw5czJu3Lj0798/55xzTo477riMGzcuv/vd75b7h4ElNa/oXNwky4zWHnbYYas0mtxdTFEGAAAa5//+7/9WeH3JdNsla0mX/PzXf/3X1Fo7fHXGkvstec6LLdlFeUVrWdsbIR08eHDWX3/9lda35ZZbdqrGJDn22GPzl7/8JaeddlrGjx+fk046KdOnT89HPvKR5fqOGTMmyeKdlp955plOP6MVBFwAAKBx7r777jz77LPLXb/11luTLA60SbLuuuvmda97Xe6///7MmjVrtZ+75L5LnvNCCxYsyK9+9aski6dQd9ab3vSmzJ49O/fff/9q15ck3//+9zN58uSMGTMmJ510UpLFm2mNGjUqF110Ua655ppl+m+99dYZO3Zs/vGPfyyzaVdvJOACAACN8/TTT+f0009f5tqUKVNy2WWXZfDgwdl///2XXv/oRz+aefPm5aijjlrh1OHZs2cvXVu7MkvO3Z08eXLuvPPOZdrOOuusPPzww3nrW9+63PrbjiwZVT366KPz+OOPL9f+/PPPL/es9jz22GP54Ac/mHXXXTff/e5387KXLY6Ea621Vi699NIMHDgwRx99dJ588sllPnfuuedm3XXXzRe/+MV86Utfyvz585e796JFi1o+wmsNLgAA0Di77rprLrzwwtx1110ZM2bM0nNwFy1alG9/+9vLnBl71FFHZerUqfnWt76VrbfeOnvuuWdGjBiRWbNm5c9//nNuu+22HHnkkTn//PNX+tx11103EydOzEEHHZTddtstBx10UEaMGJGpU6fmhhtuyCabbJJvf/vbXfoue+yxR84888yccsopedWrXpV99tknW221VZ577rk88sgj+cUvfpGdd9451113XYf3qbVm3LhxmT17di688MK84hWvWKb99a9/fT73uc/lxBNPzPjx43PFFVcs03b99dfnoIMOysknn5yzzjoru+++e0aMGJGFCxfmb3/7W2655ZY89thj2WqrrbLFFlt06Tt2FwEXAABeIg7ZsfOjhn3dVlttlfPPPz8nn3xyzj///MydOzfbb799PvvZz2bPPfdcrv95552XvffeO+eff35+/vOfZ86cORk6dGhGjBiRT3ziEznssMM6/ez99tsvt99+e774xS/m+uuvz9NPP51NNtkk48ePz2c+85lsuummXf4+J510UsaMGZNzzjknv/rVr3L11Vdn8ODB2WyzzXLMMcfkkEMOWek9zjnnnPz85z/Pfvvtl/e9730r7POxj30s11xzTa688sp873vfW+Z7v/nNb87//u//ZuLEifnJT36Sm2++ObNmzcpaa62V4cOHZ8yYMdl///3zrne9KwMGDOjyd+wOpbOLpXuz0aNH1ylTprS6DADoGR2dd7v7KT1XB9DrPPDAA9lmm21aXQZ0Wmd/Z0spU2uto1fWzxpcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGqF/qwsAAAB6yC1ntLqCju1+SssePWXKlJxyyim555578tRTT+UNb3hD7r333pbVw6oxggsAALykPfPMM9l3333zm9/8JgcffHAmTJiQ8ePHJ0nGjRuXUkqmT5/e0hr//ve/5zWveU369euX22+/fYV97rjjjvTv3z9bb711nnvuueXaZ82alTPPPDNjx47NRhttlAEDBmTQoEF53etelyOPPDI/+clPUmtd019ljWrZCG4pZWKStyd5otb6+rZrX0nyH0nmJXkoyZG11jmtqhEAAGi+3/zmN3niiSfyhS98IZ/85CdbXc4KvfzlL8+ll16aMWPG5PDDD8+0adMyaNCgpe3PPfdcDj/88CTJd7/73ay77rrLfP7HP/5xjjjiiMyZMycjR47MPvvsk+HDh2fevHl56KGHctVVV2XSpEk58MAD84Mf/KBHv1t3auUI7qQke73o2o1JXl9r3S7J/yZp3RwFAADgJeHxxx9Pkmy66aYtrqRjO+ywQz71qU/lz3/+c0444YRl2k444YQ89NBDOemkkzJmzJhl2m6++eYccMAB+ec//5nvfOc7eeihhzJp0qScccYZ+drXvparrroqf/3rX/Od73wnpZSe/ErdrmUBt9Z6W5JZL7p2Q611QdvbO5Ns3uOFAQAAfdqkSZNywAEH5BWveEXWWWedrLfeehkzZky+973vLdNv+vTpKaXkiCOOSJIceeSRKaWklJJJkyallJJLLrkkSbLVVlstbRs5cuQy95k1a1ZOOeWUbLPNNllnnXUyePDg7LHHHrnhhhtWWNuS+1933XUZO3ZsBg8e3Olg+elPfzpvfOMbM3HixFx11VVJkquvvjoXXXRRtt9++5x66qnL9F+4cGHGjx+fBQsW5Jxzzsn73//+vOxly8fAtddeO+9///tz+eWXd6qO3qo3bzJ1VJLvt7oIAACgb/ngBz+Y1772tdl1110zfPjwPPXUU7n22mtz+OGH549//GM+97nPJUmGDBmSCRMm5N57783VV1+d/fbbL6NGjUqSjBo1KhMmTMhVV12VadOm5fjjj8+QIUOWfm6JRx55JGPHjs306dOzyy67ZK+99srzzz+fa665JnvttVe+/e1v5+ijj16uxiuuuCLXXXdd9t5774wfP77Ta3z79++fSy+9NNtvv32OOeaYvOIVr8jRRx+dddZZJ9/73vey1lprLdP/1ltvzYMPPpgtttgiRx11VKfu35f1yupLKZ9KsiDJZR30OSbJMUkyYsSIHqoMAADo7X7/+99n6623XubavHnzsvfee+fMM8/M+PHjs9lmm2XIkCE59dRTM2nSpFx99dV55zvfmXHjxi39zKhRozJ9+vRMmzYtJ5xwwnIjt0lyxBFH5JFHHsnkyZNz8MEHL70+Z86cjB07Nh/+8Ifzjne8IxtvvPEyn7v22mtz7bXXZq+9Xrxqc+Ve85rX5Mtf/nKOO+647LDDDpk7d27OOeecbLPNNsv1XbIh1W677ZZ+/fp1+Vl9Ta/bRbmUckQWbz51aO1gC69a6wW11tG11tEbbrhhzxUIAAD0ai8Ot0kyYMCA/Od//mcWLFiQm266qVueM23atPziF7/IAQccsEy4TRaP8p522mn55z//mSuvvHK5z+63336rFG6XOPbYYzNy5MjMnTs3O+64Y4477rgV9vvb3/6WJNlss81W2H7qqacu95ozp+/u89urRnBLKXslOSnJbrXWv7e6HgAAoO+ZMWNGvvSlL+Wmm27KjBkz8o9//GOZ9scee6xbnnPHHXckSZ5++unl1r4mycyZM5MkDzzwwHJtO+yww2o9e9KkSUunNf/ud7/Lgw8+mFe/+tXL9VsyZtjeGt/TTjttuWvjxo1bZhp2X9LKY4ImJxmbZFgp5dEkE7J41+SBSW5s+x/gzlrr+FbVCAAA9C0PP/xwdthhh8yePTu77LJL/v3f/z2DBw9Ov379Mn369FxyySWZO3dutzzrqaeeSpLceOONufHGG9vtt6IzaTfZZJNVfu706dOXrgmeMGFCPvKRj+S9731vbr/99uWmIQ8fPjxJ+6H+hZNmd95553bP2O0rWhZwa63vWcHli3q8EAAAoDG+/vWv56mnnsrFF1+8zHraJJk8efLSXZG7w+DBg5MkZ599dj784Q936bOrehzPokWL8t73vjfPPvtsLr/88rznPe/Jb3/721x++eU544wz8ulPf3qZ/kuODLr11luzaNGiFe6g3CTN/nYAAMBLyp/+9KckyQEHHLBc2y9+8Ysu32/JiOjChQuXa3vTm96UJPnlL3/Z5fuuqi9/+cv55S9/mYMPPjjvec/iMcPzzjsvm2++eU4//fTcc889y/QfO3ZsXvnKV+Yvf/lLLr744h6rs1UEXAAAoDGW7HR86623LnP9+uuvz4UXXtjl+22wwQZJFq/rfbHRo0dnl112yQ9/+MNMnDhxhZ+/77778sQTT3T5uSty7733ZsKECdlss83yrW99a+n1IUOGZOLEiVmwYEEOP/zwZaZg9+vXL+eff3769++fD33oQ7n44ouzaNGi5e49f/78/P3vfX8bJAEXAABojGOPPTYDBgzIQQcdlEMPPTQnnnhi9tlnn+y999458MADu3y/PfbYI0ly9NFH5+STT87nP//5fPOb31zafvnll2frrbfO+973vowaNSof+MAHctJJJ+XQQw/Ntttum+222y4PP/zwan+vf/7znznssMMyf/78TJo0Keuvv/4y7W9729vywQ9+MPfff38+9alPLfcdrrjiigwYMCBHHXVUtt5664wbNy6f/OQn89GPfjQHH3xwhg8fnnvuuSfbbbddn91gKulluygDAABr0O6ntLqCNW677bbLLbfckk9/+tO59tprs2DBgrzhDW/ID3/4wwwZMiTf//73u3S/PffcM1/72tfyne98J9/4xjcyb968bLnllkuP5dl8880zderUnHvuubnyyitz2WWXZeHChdlkk03y2te+Nh/60Iey7bbbrvb3OuWUU3L//ffnwx/+cN761reusM9XvvKV/PznP883vvGNvOMd78iuu+66tG2//fbLQw89lAsuuCA/+9nP8tOf/jRz5szJ2muvnc033zz77rtvDjrooOyzzz59ep1u6eCo2T5j9OjRdcqUKa0uAwB6xi1ntN/2EvjLK9C+Bx54INtss02ry4BO6+zvbCllaq119Mr69d1oDgAAAC8g4AIAANAIAi4AAACNIOACAADQCAIuAAAAjSDgAgAA0AgCLgAANEgTjgHlpWFN/K4KuAAA0BD9+vXL/PnzW10GdMr8+fPTr1+/br2ngAsAAA0xaNCgPPPMM60uAzrlmWeeyaBBg7r1ngIuAAA0xNChQzN79uw8+eSTmTdvnunK9Dq11sybNy9PPvlkZs+enaFDh3br/ft3690AAICWGThwYEaMGJFZs2Zl+vTpWbhwYatLguX069cvgwYNyogRIzJw4MBuvbeACwAADTJw4MAMHz48w4cPb3Up0ONMUQYAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHABQAAoBEEXAAAABpBwAUAAKARBFwAAAAaQcAFAACgEQRcAAAAGkHA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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": 17,
   "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": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}