Newer
Older
HCAL_project / HCAL_bicycleGAN.ipynb
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import scipy as sp\n",
    "import numpy as np\n",
    "import os \n",
    "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"1\"\n",
    "\n",
    "import pickle\n",
    "\n",
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "from datetime import datetime\n",
    "\n",
    "from architectures.bicycle_GAN import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "task='TRAIN'\n",
    "#task='TEST'\n",
    "\n",
    "# Option to save and restore hyperparameters\n",
    "\n",
    "PATH='test11'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "if task =='TRAIN' and os.path.exists(PATH+'/hyper_parameters.pkl'):\n",
    "    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",
    "    reco_path = hyper_dict['reco_path']\n",
    "    true_path = hyper_dict['true_path']\n",
    "    n_batches = hyper_dict['n_batches']\n",
    "    test_size = hyper_dict['test_size']\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",
    "    SAVE_SAMPLE_PERIOD = hyper_dict['SAVE_SAMPLE_PERIOD']\n",
    "    SEED = hyper_dict['SEED']\n",
    "    d_sizes = hyper_dict['d_sizes']\n",
    "    g_sizes_enc = hyper_dict['g_sizes_enc']\n",
    "    g_sizes_dec = hyper_dict['g_sizes_dec']\n",
    "    e_sizes = hyper_dict['e_sizes']\n",
    "    cost_type = hyper_dict['cost_type']\n",
    "    validating_size=hyper_dict['validating_size']\n",
    "    cycl_weight=hyper_dict['cycl_weight']\n",
    "    latent_weight=hyper_dict['latent_weight']\n",
    "    kl_weight=hyper_dict['kl_weight']\n",
    "    discr_steps=hyper_dict['discr_steps']\n",
    "    gen_steps=hyper_dict['gen_steps']\n",
    "    vae_steps=hyper_dict['vae_steps']\n",
    "    \n",
    "elif task=='TRAIN' and not os.path.exists(PATH+'/hyper_parameters.pkl'):\n",
    "    \n",
    "    reco_path = '/disk/lhcb_data/davide/HCAL_project_full_event/reco/'\n",
    "    true_path = '/disk/lhcb_data/davide/HCAL_project_full_event/true/'\n",
    "    #reco_path = '/disk/lhcb_data/davide/HCAL_project_single_pion/piplus_cells_inout/piplus/reco/'\n",
    "    #true_path = '/disk/lhcb_data/davide/HCAL_project_single_pion/piplus_cells_inout/piplus/true/'\n",
    "    n_batches = 2\n",
    "    test_size = 1000\n",
    "    validating_size=1000\n",
    "    \n",
    "    LEARNING_RATE = 4e-5\n",
    "    BETA1 = 0.5\n",
    "    BATCH_SIZE = 32\n",
    "    EPOCHS = 4\n",
    "    SAVE_SAMPLE_PERIOD = 400\n",
    "    SEED = 1\n",
    "    cost_type='FEATURE'\n",
    "    \n",
    "    latent_weight=1\n",
    "    cycl_weight=1\n",
    "    kl_weight=1\n",
    "    discr_steps=1\n",
    "    gen_steps=1\n",
    "    vae_steps=1\n",
    "\n",
    "    latent_dims=128\n",
    "    ndf = 16\n",
    "    ngf = 16\n",
    "    nef = 16\n",
    "    s = 2\n",
    "    f = 4\n",
    "    d = 0.7\n",
    "    \n",
    "    stddev_d=0.02\n",
    "    stddev_g=0.02\n",
    "    stddev_e=0.02\n",
    "\n",
    "\n",
    "    g_sizes_enc={\n",
    "        'latent_dims':latent_dims,\n",
    "    \n",
    "        'conv_layers': [\n",
    "                            (ngf/2, f,   s,  False, 1, lrelu, tf.truncated_normal_initializer(stddev_g)), #(batch, 52, 64, 1) =>  (batch, 26, 32, ngf)\n",
    "                            (ngf,   f,   s, 'bn',  d,  lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 26, 32, ngf) => (batch, 13, 16, ngf*2)\n",
    "                            (ngf*2, f,   s, 'bn',  1,  lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 13, 16, ngf*4) => (batch, 7, 8, ngf*4)\n",
    "                            (ngf*4, f,   s, 'bn',  1,  lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 7, 8, ngf*4) => (batch, 4, 4, ngf*4)\n",
    "                            (ngf*8, f,   s, 'bn',  d,  lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 4, 4, ngf*4) => (batch, 2, 2, ngf*4)\n",
    "                        \n",
    "                       ],\n",
    "    }\n",
    "    \n",
    "    g_sizes_dec={\n",
    "    \n",
    "         \n",
    "         'deconv_layers': [\n",
    "    \n",
    "                            (ngf*4, f,   s,  'bn',   1, lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 1, 1, ngf*4) => (batch, 2, 2, ngf*4*2)\n",
    "                            (ngf*2, f,   s,  'bn',   d, lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 2, 2, ngf*4*2) => (batch, 4, 4, ngf*4*2)\n",
    "                            (ngf,   f,   s,  'bn',   1, lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 4, 4, ngf*4*2) => (batch, 7, 8, ngf*4*2)\n",
    "                            (ngf/2, f,   s,  'bn',   1, lrelu, tf.truncated_normal_initializer(stddev_g)),#(batch, 7, 8, ngf*4*2) => (batch, 13, 16, ngf*2*2)\n",
    "                            (1,     f,   s,   False, d, tf.identity, tf.truncated_normal_initializer(stddev_g)),#(batch, 26, 32, ngf*2) => (batch, 52, 64, 1)\n",
    "                       \n",
    "                         ],  \n",
    "    }\n",
    "    \n",
    "    \n",
    "    d_sizes={\n",
    "        \n",
    "         'conv_layers': [\n",
    "                             (ndf/2,  f, s,  False, 1, lrelu, tf.truncated_normal_initializer(stddev_d)), #(batch, 52, 64, 2) => (batch, 26, 32, ndf)\n",
    "                             (ndf,    f, s, 'bn',   d, lrelu, tf.truncated_normal_initializer(stddev_d)), #(batch, 26, 32, ndf) => (batch, 13, 16, ndf*2)\n",
    "                             (ndf*2,  f, s, 'bn',   1, lrelu, tf.truncated_normal_initializer(stddev_d)), #(batch, 13, 16, ndf*2) => (batch, 7, 8, ndf*4)\n",
    "                             (ndf*4,  f, s, 'bn',   d, lrelu, tf.truncated_normal_initializer(stddev_d)), #(batch, 7, 8, ndf*4) => (batch, 7, 8, ndf*8)\n",
    "                             (ndf*8,  f, 1, 'bn',   1, lrelu, tf.truncated_normal_initializer(stddev_d)), #(batch, 7, 8, ndf*8) => (batch, 7, 8, ndf*8)\n",
    "                             \n",
    "                        ],\n",
    "                        \n",
    "         \n",
    "         'dense_layers': [\n",
    "                             (ndf*32, 'bn',  d, lrelu, tf.truncated_normal_initializer(stddev_d)),\n",
    "                             (ndf*4,  'bn',  d, lrelu, tf.truncated_normal_initializer(stddev_d)),             \n",
    "                             (ndf,   False,  d, lrelu, tf.truncated_normal_initializer(stddev_d))],\n",
    "        \n",
    "         'readout_layer_w_init':tf.truncated_normal_initializer(stddev_d),\n",
    "    }\n",
    "    \n",
    "\n",
    "    \n",
    "    e_sizes={\n",
    "        'latent_dims':latent_dims,\n",
    "        \n",
    "        'conv_layers':[\n",
    "            \n",
    "                            (nef/2, f,   s,   False, 1, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                            (nef,   f,   s,   'bn',  1, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                            (nef*2, f,   s,   'bn',  d, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                            (nef*4, f,   s,   'bn',  1, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                            (nef*8, f,   s,   'bn',  d, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                        ],\n",
    "\n",
    "        \n",
    "        'dense_layers':[    \n",
    "                            (nef*16, 'bn',   d, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                            (nef*8,  'bn',   d, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                            (nef,     False, d, lrelu, tf.random_normal_initializer(stddev_e)),\n",
    "                      \n",
    "                        ],\n",
    "        'readout_layer_w_init':tf.random_normal_initializer(stddev_e)\n",
    "        \n",
    "    }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "if task == 'TEST' and os.path.exists(PATH+'/hyper_parameters.pkl'):\n",
    "    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",
    "    reco_path = hyper_dict['reco_path']\n",
    "    true_path = hyper_dict['true_path']\n",
    "    #true_path_K = hyper_dict['true_path_K']\n",
    "    n_batches = hyper_dict['n_batches']\n",
    "    test_size = hyper_dict['test_size']\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",
    "    SAVE_SAMPLE_PERIOD = hyper_dict['SAVE_SAMPLE_PERIOD']\n",
    "    SEED = hyper_dict['SEED']\n",
    "    d_sizes = hyper_dict['d_sizes']\n",
    "    g_sizes_enc = hyper_dict['g_sizes_enc']\n",
    "    g_sizes_dec = hyper_dict['g_sizes_dec']\n",
    "    e_sizes = hyper_dict['e_sizes']\n",
    "    cost_type = hyper_dict['cost_type']\n",
    "    validating_size=hyper_dict['validating_size']\n",
    "    cycl_weight=hyper_dict['cycl_weight']\n",
    "    latent_weight=hyper_dict['latent_weight']\n",
    "    kl_weight=hyper_dict['kl_weight']\n",
    "    discr_steps=hyper_dict['discr_steps']\n",
    "    gen_steps=hyper_dict['gen_steps']\n",
    "    vae_steps=hyper_dict['vae_steps']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "start_batch=0\n",
    "train_true, test_true, train_TIS_true, test_TIS_true, train_TOS_true, test_TOS_true, train_reco, test_reco = load_data(true_path, reco_path, n_batches, start_batch,  test_size=test_size)\n",
    "    \n",
    "train_true, train_reco = delete_undetected_events_double(train_true, train_reco)\n",
    "test_true, test_reco = delete_undetected_events_double(test_true, test_reco)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#train_true=train_true/1000.\n",
    "#train_reco=train_reco/1000.\n",
    "#\n",
    "#test_true=test_true/1000.\n",
    "#test_reco=test_reco/1000."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 792x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "draw_one_sample(train_true,train_reco)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def HCAL():\n",
    "\n",
    "    \n",
    "    tf.reset_default_graph()\n",
    "    tf.add_check_numerics_ops()\n",
    "    \n",
    "    _, n_H_A, n_W_A ,n_C = train_true.shape\n",
    "    _, n_H_B, n_W_B ,n_C = train_reco.shape\n",
    "    gan = bicycle_GAN(n_H_A, n_W_A, n_H_B, n_W_B, n_C,\n",
    "                   min_true=min_true, max_true=max_true, \n",
    "                   min_reco=min_reco, max_reco=max_reco,\n",
    "                   d_sizes=d_sizes, g_sizes_enc=g_sizes_enc, g_sizes_dec=g_sizes_dec, e_sizes=e_sizes,\n",
    "                   lr=LEARNING_RATE, beta1=BETA1,\n",
    "                   cost_type=cost_type, cycl_weight=cycl_weight, latent_weight=latent_weight, kl_weight=kl_weight,\n",
    "                   discr_steps=discr_steps, gen_steps=gen_steps, vae_steps=vae_steps,\n",
    "                   batch_size=BATCH_SIZE, epochs=EPOCHS,\n",
    "                   save_sample=SAVE_SAMPLE_PERIOD, path=PATH, seed= SEED)\n",
    "    \n",
    "    vars_to_train= tf.trainable_variables()\n",
    "    \n",
    "    if task == 'TRAIN':\n",
    "    \n",
    "        init_op = tf.global_variables_initializer()\n",
    "    \n",
    "    \n",
    "    if task == 'TEST':\n",
    "    \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",
    "    # Add ops to save and restore all the variables.\n",
    "    \n",
    "    gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.15)\n",
    "    \n",
    "    with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options )) as sess:\n",
    "        \n",
    "        sess.run(init_op)\n",
    "        \n",
    "        if task=='TRAIN':\n",
    "            \n",
    "            if os.path.exists(PATH+'/'+PATH+'bicycle.ckpt.index'):\n",
    "                saver.restore(sess,PATH+'/'+PATH+'bicycle.ckpt')\n",
    "                print('Model restored.')\n",
    "                \n",
    "            gan.set_session(sess)\n",
    "            gan.fit(train_true,train_reco, validating_size)\n",
    "            \n",
    "            save_all = saver.save(sess, PATH+'/'+PATH+'bicycle.ckpt')\n",
    "            print(\"Model saved in path: %s\" % save_all)\n",
    "                  \n",
    "                       \n",
    "        if task=='TEST':\n",
    "            \n",
    "            print('\\n Evaluate model on test set...')\n",
    "            \n",
    "            if os.path.exists(PATH+'/'+PATH+'bicycle.ckpt.index'):\n",
    "                saver.restore(sess, PATH+'/'+PATH+'bicycle.ckpt')\n",
    "                \n",
    "            print('Model restored.')\n",
    "            \n",
    "            gan.set_session(sess)\n",
    "        \n",
    "        #test_reco_NN=gan.get_samples_A_to_B(test_true.reshape(test_true.shape[0],n_H_A,n_W_A,n_C))\n",
    "        test_reco_NN=np.zeros_like(test_true)\n",
    "        t0 = datetime.now()\n",
    "        for i in range(len(test_true)):\n",
    "            test_reco_NN[i]=gan.get_sample_A_to_B(test_true[i].reshape(1,n_H_A,n_W_A,n_C))\n",
    "        per_evt_time=(datetime.now() - t0)/len(test_reco)\n",
    "        print('Per event simulation time {0}'.format(per_evt_time))\n",
    "        done = False\n",
    "\n",
    "        while not done:\n",
    "            plt.clf()\n",
    "            #j = int(input(\"Input event number\"))\n",
    "\n",
    "            draw_nn_sample(test_true, test_reco, 1,\n",
    "                              f=gan.get_sample_A_to_B, save=True, is_training=False, PATH=PATH)\n",
    "            \n",
    "            ans = input(\"Generate another?\")\n",
    "            if ans and ans[0] in ('n' , 'N'):\n",
    "                done = True\n",
    "        \n",
    "        return test_reco_NN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Convolutional Network architecture detected for discriminator B\n",
      "Convolutional Network architecture detected for encoder B\n",
      "Encoder_B\n",
      "Convolution\n",
      "Input for convolution shape  (?, 52, 64, 1)\n",
      "Encoder output shape (?, 128)\n",
      "Generator_A_to_B\n",
      "Input for generator encoded shape (?, 52, 64, 1)\n",
      "Output of generator encoder, \n",
      " and input for generator decoder shape (?, 1, 1, 1024)\n",
      "Generator output shape (?, 52, 64, 1)\n",
      "Generator_A_to_B\n",
      "Input for generator encoded shape (?, 52, 64, 1)\n",
      "Output of generator encoder, \n",
      " and input for generator decoder shape (?, 1, 1, 1024)\n",
      "Generator output shape (?, 52, 64, 1)\n",
      "Encoder_B\n",
      "Convolution\n",
      "Input for convolution shape  (?, 52, 64, 1)\n",
      "Encoder output shape (?, 128)\n",
      "Discriminator_B\n",
      "Input for convolution shape  (?, 52, 64, 1)\n",
      "minibatch features shape (?, 10)\n",
      "Feature output shape (?, 64)\n",
      "Logits shape (?, 1)\n",
      "Discriminator_B\n",
      "Input for convolution shape  (?, 52, 64, 1)\n",
      "minibatch features shape (?, 10)\n",
      "Feature output shape (?, 64)\n",
      "Logits shape (?, 1)\n",
      "Discriminator_B\n",
      "Input for convolution shape  (?, 52, 64, 1)\n",
      "minibatch features shape (?, 10)\n",
      "Feature output shape (?, 64)\n",
      "Logits shape (?, 1)\n",
      "Generator_A_to_B\n",
      "Input for generator encoded shape (?, 52, 64, 1)\n",
      "Output of generator encoder, \n",
      " and input for generator decoder shape (?, 1, 1, 1024)\n",
      "Generator output shape (?, 52, 64, 1)\n",
      "\n",
      " ****** \n",
      "\n",
      "Training bicycleGAN with a total of 38000 samples distributed in 1187 batches of size 32\n",
      "\n",
      "The validation set consists of 1000 images\n",
      "The learning rate is 4e-05, and every 400 batches a generated sample will be saved to test11\n",
      "\n",
      " ****** \n",
      "\n",
      "Epoch: 0\n",
      "At iter: 400  -  dt: 0:00:00.220792 - d_acc: 0.55, - d_acc_enc: 0.67\n",
      "Discriminator cost 39.1, Generator cost 2117, VAE Cost 2724, KL divergence cost 1788\n",
      "Saving a sample...\n",
      "At iter: 800  -  dt: 0:00:00.335084 - d_acc: 0.41, - d_acc_enc: 0.53\n",
      "Discriminator cost 55.4, Generator cost 936.6, VAE Cost 3188, KL divergence cost 2038\n",
      "Saving a sample...\n",
      "Printing validation set histograms at epoch 0\n",
      "ET Distribution plots are being printed...\n",
      "Done\n",
      "Resolution plots are being printed...\n",
      "Done\n",
      "Epoch: 1\n",
      "At iter: 1200  -  dt: 0:00:00.261578 - d_acc: 0.48, - d_acc_enc: 0.61\n",
      "Discriminator cost 41.5, Generator cost 1153, VAE Cost 2441, KL divergence cost 1839\n",
      "Saving a sample...\n",
      "At iter: 1600  -  dt: 0:00:00.338094 - d_acc: 0.58, - d_acc_enc: 0.77\n",
      "Discriminator cost 29.82, Generator cost 451, VAE Cost 2171, KL divergence cost 1646\n",
      "Saving a sample...\n",
      "At iter: 2000  -  dt: 0:00:00.337647 - d_acc: 0.55, - d_acc_enc: 0.69\n",
      "Discriminator cost 27.23, Generator cost 448.8, VAE Cost 1555, KL divergence cost 1172\n",
      "Saving a sample...\n",
      "Printing validation set histograms at epoch 1\n",
      "ET Distribution plots are being printed...\n",
      "Done\n",
      "Resolution plots are being printed...\n",
      "Done\n",
      "Epoch: 2\n",
      "At iter: 2400  -  dt: 0:00:00.258182 - d_acc: 0.45, - d_acc_enc: 0.77\n",
      "Discriminator cost 28.38, Generator cost 583, VAE Cost 1556, KL divergence cost 1319\n",
      "Saving a sample...\n",
      "At iter: 2800  -  dt: 0:00:00.801696 - d_acc: 0.55, - d_acc_enc: 0.69\n",
      "Discriminator cost 25.6, Generator cost 375.7, VAE Cost 1093, KL divergence cost 801\n",
      "Saving a sample...\n",
      "At iter: 3200  -  dt: 0:00:00.346768 - d_acc: 0.47, - d_acc_enc: 0.61\n",
      "Discriminator cost 19.62, Generator cost 323.6, VAE Cost 1117, KL divergence cost 866\n",
      "Saving a sample...\n",
      "Printing validation set histograms at epoch 2\n",
      "ET Distribution plots are being printed...\n",
      "Done\n",
      "Resolution plots are being printed...\n",
      "Done\n",
      "Epoch: 3\n",
      "At iter: 3600  -  dt: 0:00:00.259401 - d_acc: 0.42, - d_acc_enc: 0.56\n",
      "Discriminator cost 28.89, Generator cost 337.9, VAE Cost 1047, KL divergence cost 834.6\n",
      "Saving a sample...\n",
      "At iter: 4000  -  dt: 0:00:00.336109 - d_acc: 0.50, - d_acc_enc: 0.67\n",
      "Discriminator cost 18.27, Generator cost 336.2, VAE Cost 891.9, KL divergence cost 670.5\n",
      "Saving a sample...\n",
      "At iter: 4400  -  dt: 0:00:00.337731 - d_acc: 0.45, - d_acc_enc: 0.64\n",
      "Discriminator cost 17.73, Generator cost 348.3, VAE Cost 915.9, KL divergence cost 722.8\n",
      "Saving a sample...\n",
      "Printing validation set histograms at epoch 3\n",
      "ET Distribution plots are being printed...\n",
      "Done\n",
      "Resolution plots are being printed...\n",
      "Done\n",
      "Model saved in path: test11/test11bicycle.ckpt\n",
      "Per event simulation time 0:00:00.003212\n"
     ]
    }
   ],
   "source": [
    "if __name__=='__main__':\n",
    "    \n",
    "    if task == 'TRAIN':\n",
    "        if not os.path.exists(PATH):\n",
    "            os.mkdir(PATH)\n",
    "            \n",
    "        elif os.path.exists(PATH):\n",
    "            if os.path.exists(PATH+'/checkpoint'):\n",
    "                ans = input('A previous checkpoint already exists, choose the action to perform \\n \\n 1) Overwrite the current model saved at '+PATH+'/checkpoint \\n 2) Start training a new model \\n 3) Restore and continue training the previous model \\n ')\n",
    "                \n",
    "                if ans == '1':\n",
    "                    print('Overwriting existing model in '+PATH)\n",
    "                    for file in os.listdir(PATH):\n",
    "                        file_path = os.path.join(PATH, file)\n",
    "                        try:\n",
    "                            if os.path.isfile(file_path):\n",
    "                                os.unlink(file_path)\n",
    "                            #elif os.path.isdir(file_path): shutil.rmtree(file_path)\n",
    "                        except Exception as e:\n",
    "                            print(e)\n",
    "                            \n",
    "                elif ans == '2':\n",
    "                    PATH = input('Specify the name of the model, a new directory will be created.\\n')\n",
    "                    os.mkdir(PATH)    \n",
    "        \n",
    "        test_reco_NN = HCAL()\n",
    "   \n",
    "    elif task == 'TEST':\n",
    "        if not os.path.exists(PATH+'/checkpoint'):\n",
    "            print('No checkpoint to test')\n",
    "        else:\n",
    "            test_reco_NN = HCAL()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(6279.8237, 1587.4055)"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_reco_NN[:,12:40,16:48,:].max(),test_reco_NN[:,0:12,0:16,:].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "61.562237"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_reco.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [],
   "source": [
    "scale=test_reco_NN.std()/test_reco.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "18.508837"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_reco_MC_hist= test_reco.reshape(test_reco.shape[0],test_reco.shape[1]*test_reco.shape[2])\n",
    "test_reco_MC_hist = np.sum(test_reco_MC_hist,axis=1)\n",
    "max_MC_hist = np.max(test_reco_MC_hist)\n",
    "\n",
    "test_reco_NN_test=test_reco_NN/1.5\n",
    "test_reco_NN_hist= test_reco_NN_test.reshape(test_reco_NN.shape[0],test_reco_NN.shape[1]*test_reco_NN.shape[2])\n",
    "test_reco_NN_hist = np.sum(test_reco_NN_hist,axis=1)\n",
    "max_NN_hist = np.max(test_reco_NN_hist)\n",
    "\n",
    "test_true_hist= test_true.reshape(test_true.shape[0],test_true.shape[1]*test_true.shape[2])\n",
    "test_true_hist = np.sum(test_true_hist,axis=1)\n",
    "max_true_hist = np.max(test_true_hist)\n",
    "\n",
    "#test_reco_NN_hist_rescaled=(test_reco_NN_hist/max_NN_hist)*max_MC_hist\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.3242261"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_NN_hist/max_MC_hist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "diffNN = test_reco_NN_hist-test_true_hist\n",
    "diffMC = test_reco_MC_hist-test_true_hist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtwAAAFZCAYAAACrPPifAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcZFV9///Xm2EXWRSQ0WEYDSpR/P40wTURUVQEUQyKuEUwiUQTNAY1LAEFd9wIASOiUdxRERVQJKACrihGjcriCowjIMsIDvtyfn+cW0xNTXVX9XTf6q7p1/PxuI+uOvfUrVO3qj716XPPuTelFCRJkiS1Y53ZboAkSZK0NjPhliRJklpkwi1JkiS1yIRbkiRJapEJtyRJktQiE25JkiSpRSbcI5DkyCSla7kqyRlJ/t8stumyJO+e4mO2bl7Lkp7yXZrXteNMtnGuSXJSkgtH+HxrtF+THJDkOTPYjh2bduwySZ1WPwPN57Uk+fc+657Y9d1a0rNu0yRvSnJRkluS/CnJ+Umen8T4pwkZt9cOxu05Ebdf2FO+SVO+f1fZSU3ZB/ps58IkJ7XRxlHyB2d0bgAe3yyvAR4CnJ3kPrPaqqnZGngjsKSn/H+pr+vXo27QiL0Z2H+2GzGEA4AZC9xzyArghX3KX9CsW0WSrYHvAf8AfBjYA9inKfsQ8KzWWqq1hXF7/Bm3Z99hSTJk3f2TPKDV1sySdWe7AfPInaWU7zW3v5fkMuC7wDOAT81aq2ZAKeVGahKzViulrO0/THPdGcC+SXYspfwMIMkC4HnAacCLeuq/H9gC2KmUsqyr/KtJjgc2G0GbNd6M22POuD3rzgV2AfYCvjig7kXAlsDrqf/grlXs4Z49P2n+bttdmOQ+ST6Q5Ooktyb5TpLH9tT5+yQ/bw6RX5vkvCQP71q/ZZKPJrkuyc1Jzk2y02SNaeqc0lN2z+Gm5nDkT5tV3+gcZu2t1/XYjZP8Z3MY9tYkP0jy9H7PmeRFSX6V5MYkZyZZNKCtC5N8OMlvmn3wiyRvSbJ+T71Dm+3e2uzPrybZZpLtLkry2SR/aLb76yRv7lq/yqHJJPs3r/svmtdyc5IfN/fvleQjSW5o2tl7SG21Q8Nd29tkkja+ttmXNzSv6fQk23fvU+Avgf2y8lD4/l3r/6H57NyW5PIk/9bnOf4pydIkNyU5HVg4UXv6uH/qYfebklyR5BVd231mkruTPLDn+R7YlD97wLaXAd+i9mh3PAXYhJpwd29zO+BvgLf1JNsAlFKuKKX8tLdcGsC4bdw2bjOluP1D4KvAasMB+7gFeC9wQOoRyrWKCffsWdz8/W2nIMkGwDnA06j/4T0HuAY4pxNwkuwMnAB8Atgd+DvgO6zaW/dFYDfgdcC+1Pf5G91f8DVwJfDi5vY/s/Iw60Q+CLwMeCs18VkKfDnJX/fUeyxwIPBa6iG1vwBOHNCWLYHrgYOoPU3vap7ruE6FJC8FDqN+eXcDXgn8CrjXJNv9GPWH9ADqvn0rsMGAtgB8FPg08FwgwCnAfwO/p/a+XgB8bNAP0pAWAcdTewteDiwAvp2k8/7/E3AJ8BVWvkdfBkjyemqv7xeBPZvbb05yYGfjSfYC3kftTd6b+mP94Sm077+B/2seeybw/iR7Nuu+St0n+/U8Zn/q5/wrQ2z/06yacL8QOB24qafeztT34qtTaLs0iHG7Mm5PzXyP228BdkryjCHq/hdwK/VzsnYppbi0vABHAtdSh/CsC/wZcDbwI2CDrnp/D9wOPLirbF3qGLt3NfdfB/xwkud6BlCAJ3WV3Yv6xfhAV9llwLu77p8LnNKzrV2abe3Y3N+xub/LgHp/DtwN7NdVZx3gZ8BZPc95A7BFV9lrmm1tNIX9uy51OMGtwPpN2fHA56f4Pq0AnjXJ+pOAC7vu79+0tft17tGUfbirbDPgDuCVE+3/nu1t0m+/9mnPAmAj4E/AS7vKLwRO6qm7afP63thT/ibgKmBBc//7wJk9dT7Y732f4DNwYk/52cD3uu6/hZqspLmffvuiz/YvA94NbNXsy0cD6wPLqQnOns3zL2nqH9Lc32Cy7bq4TLRg3AbjtnG7TD9ud31uvtnc3qR53v37vU/U796Nnc9Yv30zjos93KNzX+qX9w7qf+yPAvYupdzWVeep1MMvv02ybpLOGPvzgM6hxR8Dj0pyTJKdew/HAY8BrimlnNcpKKXcRP3Pt7eXoi2Ppn4hP9fVhrub+71t+EEpZXnX/YuavxNOmkj1mjRnnqDu009SezU6PVA/BvZIclSSx6SO9R3kx8Dbm0OEiwfWXulrXbd/1fz9eqeglHID9Ydz2hNBkjwuydlJrgPuBG6mBq+HDHjo46k/4J/rfLaaz9fXgfsBi5p99CjgSz2PPXUKTfxCn8f+Zdf+/zCwHTXQAzy5uf+RYTZeSrmmafMLqElKqD0yEz5kqFZL/Rm3jdvG7WnG7cZbgL9O8qQh6h7b/H31FLY/55lwj84N1ID2OOAfqb1zn8qqpybbsll/R8/yMpoxg6WUc5r7O1P/Y7w2yX8l6RxyWwhc3ef5rwZGNbN+IbCilHJznzZs3ByC7fhjT53bm78bTrL91wDvoQaJvag/Vv/c87gPUw9NPp96aPDqJG8eEMD3pf4nfQxweeq4vl0nqd/vNdzep6xTPtlrGqj5Mfkf6o/iPwJ/Rf1M/WGIbW/Z/P05q362vtGUb0vtPV632V633vuT6ffYdTvPX0r5DfVz+7Jm/cuA75dSfj6F5ziZ+r6+CPhiT/LT0Rm3PZUfYKmXcdu4bdyegbjdfAcuYIix3M0/c+8HXp1JxsaPG89SMjp3llI6EzcuaP7D/xj1NGWfacqvpwaOV/Z5/D1JRSnlo8BHk2xFHXN1DPXwyyHUMXv9Jhvcr9n+RG6l/ph0W9NAfyWwSZKNe4L3/YCbJ0iQpmIf4HOllHu+uEke1l2h6Zk5BjgmybbUcYxvpSZiJ/TbaKmT6/ZvfkwfQz2sdVqSxaWU66bZ5l5rsr+fAWwM7NX0ftH0dgzzPnXe+z3p/8N+KbXX5U5W//xMZfJKv8feST003/Eh4INJDqV+fl87he1D7X05gfo5eOYEdc6n9m7vxsreK2mqjNvG7W7G7TWP21Dfy9Oo79Mg7wFeRR3fvlawh3v2fIL6X+vBXWVfA7YHriilXNizrHZGhVLKNaWUDwDfBDqB6wJg62aSDlBnnlMTk29N0p7fATv0lD2t5/4wvRgAP6AmO8/rakOa+5O1YVgb0fVD1nhxv4oApZSlpZR3UBOvh01Ur6v+3aWeCuwoaqDcbhptncjvqGMmu/Xu714bUcdY3tlV9nxW/8e5X6/Md6kzwO/f57N1YSnlT6WUu6iHZ/fqeezeA9rV7W/63P9hs+2OU5s2nkyNQSdPYfudQ71HA5+nTlbrV+dyak/aYUlWm62fZNskj5jK80oYt6fDuL3SvIvbAKWU06ln+jl8iLp/oI5DP4i6D8eePdyzpJRSkrwN+GSSXUspX6P2nLwCODf11EO/oY4hfAxwVSnlmCRHUf8zPpf63+ejgCdRe0kopZyV5NvAZ5IcAlxHnbCzEXVW+ES+APx9kmOos6OfTO0d7HYF9cu/X5IbgDu6en+6X9vFST4NHJ9kU2rAfDn1h6FfL9BUnU091HQBdWLSi6k/ePdIvVrV9dTzzN7QvJ4Hs+oPZXf9zYCzqO/BL6jjCl9LnZhy8Qy0udcXgOOSHEb9odsbePjkD+Hr1Ak3H0ny303917H6YdBLgN2S7EZ9/39bSrkuyZHAsamnzDufGjQfAjy5lNIJuG8DTk3y/qaNT6L20Axr9yRvpY5f3Zv6Y7TKD0Ep5dYkn6QeTv50KaW3/QOVUt4wRLVXNu24MMl7qeNsN6C+pn8GXsrKU6ZJAxm3p8W4Pc/jdldbPzOwVvUu6nfrftT9Pd5mcgamS/+FZrZ7n/IF1CDRPQN8M+qEgaXU/yZ/R/3P8q+a9XtSe1SuoR7eupQatNO1ja2oAWg5NdCeBzy657kvY/XZ1oc2z/snak/Os+mZbU0Nkr9o2laasl361NuYerqnq6m9GhcCu/U837kMmGE/wf7chDpZ4/pm+RArz1LRmXG/P/DtZv3N1FMe/f0k29yA+t905xDdtdQJS4/oqnMS/We7b9JVtqQp23Oy/Q2sRz311VXN+3Qs9bRWk852pyaJv27e1+9RT8/Vu+0HUXt+b2D1meAvoSaetzTPewFwUE9bD6R+7m6mnvLp6Qw/23036iTGm5tt/NME9Z/a1H/qkN+hVV5jn/WrnKWk5/v0ZuqP2a3Uz/b51NOyLZjt2OAydxeM28Zt43Zv/WnHbeo/DBf3eY2rvE9d5Sc2dU+a7Zgw3aVzihdJGpkk76ROdnpgqeM2JUlzmHF7ehxSImlkkjyUOh7zlcBRBm1JmtuM2zPDHm5JI5N6CePHUmeq/20p5fbJHyFJmk3G7Zlhwi1JkiS1yNMCSpIkSS0y4ZYkSZJatNZNmtxyyy3LkiVLZrsZkrRGfvjDH15bStlqttsxSsZtSeNq2Ji91iXcS5Ys4cILVzunvySNhSSXz3YbRs24LWlcDRuzHVIiSZIktciEW5IkSWqRCbckSZLUIhNuSZIkqUUm3JIkSVKLTLglSZKkFplwS5IkSS0y4ZYkSZJaZMItSZIktciEW5IkSWqRCbckSZLUIhNuSVOycNFikky6LFy0eLabKQm/r9Jcse5sN0DSeLlq2VK2O/iMSetcfvSeI2qNpMn4fZXmBnu4JUmSpBaZcEvzhIeWJUmaHQ4pkeYJDy1LkjQ77OGWJEmSWmTCLUmSJLXIhFuSJElqkQm3JEmS1CITbkmSJKlFJtySJElSi0y4JUmSpBaZcEuSJEktMuGWJEmSWmTCLUmSJLXIhFuSJElqkQm3JEmS1CITbmkOW7hoMUkmXRYuWjzbzZQkSZNYd7YbIGliVy1bynYHnzFpncuP3nNErZEkSWvCHm5JkiSpRSbckiRJUotMuCVJkqQWmXBLkiRJLTLhliRJklpkwi1JkiS1yIRbkiRJapEJtyRJktQiE25JkiSpRSbckiRJUotMuCVJkqQWjTzhTvKCJP+bZEWSZUk+luT+PXWS5LAkS5PckuT8JI8cdVslSZKk6Rppwp3k2cCnge8AewEHAzsDZyTpbsshwBHA0cCzgBXAOUm2GWV7pTYtXLSYJJMukiRp/K074ud7EfC/pZQDOwVJbgS+BDwUuDjJhtSE++2llOObOt8FLgMOBA4fcZulVly1bCnbHXzGpHUuP3rPEbVGkiS1ZdRDStYDbugp+2Pzt9Od9wRgU+CznQqllJuA04Hd226gJEmSNJNGnXB/GHhikpcm2TTJQ4C3AN8opVzU1NkBuAv4Zc9jL27WSZKmKck+SU5r5tKsSPLDJC/sU+/lSX6Z5Namzq596jwgyRea7Vyb5PgkG4/mlUjS3DfShLuU8mVgf+BEak/3pcACYO+ualsAK0opd/U8fDmwcZL1R9BUSVrbHUSdH/OvwLOBbwCfSvKqToUkLwBOAD5GPcL4c+qcmx276qwLnAVsB+wL/AuwDzXOS5IY8RjuJE+mBu9jgTOB+wFHAl9I8tSuJLv0e/hE65IcABwAsHjx4hlutTTHLVjPCZZaE88qpVzbdf/rzRmjDgKOa8qOAj5aSnkzQJLzgEdR59m8pKmzD/DnwPallN829e4ATk5yVCml92ilJM07o540+R7gtFLKwZ2CJD8GLqGeteRUak/2vZMs6Onl3hy4uZRyR+9GSykn0vSm7LTTTv2SdWntddcdAydfghMwtaqeZLvjR9RYTJIHAQ+h9lh3HnN3ks91l1F7vn/QSbYbXwRuB57B6sMDJWneGfUY7h2AH3cXlFIuBW4B/qwpuoQ6zGT7Po+9pO0GStI89gSgez4NrB53Lwbuk2Srrnqr1Cml3A78GufdSBIw+oT7cuAvuguS/DmwEfW0f1DP0X0j9TBlp87G1PNxnzmSVkrSPNNMhtwLeF9TtEXz9489VZf3rN+iT51OvS36lHee74AkFya58JprrlmzRs9znstfGh+jHlJyAnBMkt+zcgz3G6jJ9lcASim3JnkHcESS5dSek4Oo/xwc12+jkqQ1l2QJ8CngS6WUk3pW9w7T6zefZqJ5NxMO8XMo4PR5Ln9pfIw64f5P6ri+VwKvoPaKfAs4tDnXdsc7qAn2ocB9gQuBp5VSrh5tcyVp7ZbkPtQOkCtYORESVvZkb86q10/YvPn7x656m7O6zenf8y1J885IE+5SSgHe3yyD6r21WSSNimc8mVea4XpnAOsDz+zp+OiMy96BOhyQrvvXl1Ku6aq3yljt5vStD6Ie1ZSkeW/UPdyS5rIhznjiIeq1Q3P+7M8BDwb+qpTyh+71pZTfJPkFdT7NWc1j1mnud8+nORN4UZLtSimdxPzZwAbAV9t9FZI0Hky4JWl++i9gD+op/u6T5HFd635USrmNep2ETyS5DPg2sB81QX9RV91TgH8HTk1yBLAZcAzwKc/BLUmVCbckzU9Pb/4e22fdA4HLSimfTrIJcDBwBPVKk3uWUn7WqVhKuSPJM4Djgc8CtwEnA69vs/GSNE5MuCVpHiqlLBmy3geBDw6o8zvgOTPQLElaK436PNySJEnSvGLCLUmSJLXIhFuSJElqkQm3JEmS1CITbkmSJKlFJtySJElSi0y4JUmSpBaZcEuSJEktMuGWJEmSWmTCLUmSJLXIhFuSJElqkQm3JEmS1CITbkmSJKlFJtySJElSi0y4JUmSpBaZcEuSJEktMuGWJEmSWmTCLUmSJLXIhFuSJElqkQm3JEmS1CITbkmSJKlFJtySJElSi0y4JUmSpBaZcEuSJEktMuGWJEmSWmTCLUmSJLXIhFuSJElqkQm3JEmS1CITbkkzb8F6JBm4LFy0eLZbKklS69ad7QZIWgvddQfbHXzGwGqXH73nCBojSdLssodbkiRJapEJtyRJktQiE25JkiSpRSbckiRJUotMuCVJkqQWmXBLkjSfeRpPqXWeFlCSpPnM03hKrbOHW5IkSWrRpAl3ksVJ1htVYyRJ/RmPJWl8Derh/i3wKIAkX0+yw3SfMMm6SQ5J8ssktyX5XZJjeuokyWFJlia5Jcn5SR453eeWpDE24/FYkjQag8Zw3wJs3NzeBdh0Bp7zI8CuwFHAJcC2wMN66hwCHAG8vqlzEHBOkh1LKVfNQBskady0EY8lSSMwKOH+EXBskrOb+69KcuUEdUsp5eDJNpbkGcALgP+vlHLRBHU2pCbcby+lHN+UfRe4DDgQOHxAmyVpbTSj8RggyfbUjo3HATsC3yyl7NJT5zJgu56HXl1K2aan3sOA44DHA38EPgQcVUq5a1A7JGltNyjhfjnwbmAvoFB7pm+boG4BBgX4vwO+PlGy3XgCtefms/dsuJSbkpwO7I4Jt8bAwkWLuWrZ0tluhtYuMx2PAR4O7AF8D1h/knqfoibTHbd3r0yyBXAOcFHTvj8D3kMdtmjMljTvTZpwl1IuAfYESHI38JxSyven8XyPBU5Lcjzw0ub5vwocWEr5fVNnB+Au4Jc9j70Y2Hcazy2NzFXLlg48zZan2NJUtBCPAU4vpXyp2eYpwJYT1LuylPK9SbbzCmAjYO9Syo3A2Uk2BY5M8s6mTJLmrUFnKememPMy6qSd6dgG2B94JHVoycuAvwS+kCRNnS2AFX0OQy4HNk4yWS+MJK2VWojHlFLunu42GrsDZ/Uk1idTk/AnzdBzSNLYGnSWkicCmze3Pww8cJrPl2bZq5TylVLKZ4C/BR4DPKWrXpngsX3XJTkgyYVJLrzmmmum2URJmpNmOh5Pxd8luT3JDUlOSdI7pnsH6gT3e5RSrgBubtZJ0rw2aAz3UmCfJCuoCe8Dm9t9DRibDbWX+jellOu6yr5FHQ/4MOBrTZ17J1nQ08u9OXBzKeWOPs97InAiwE477dQvWZekcTfT8XhYX6KO8f4d8OfAG4FvJnlEKeWGps4W1ImSvZY36yRpXhuUcL8d+C/gNdSe5U9NUC/N+gUDtncxsMEEj+8c2ryk2c72wKVddVbrQZGkeWSm4/FQSin/0nX3m0m+A/yYOqzlP7qrTtKW1VckBwAHACxevHgmmipJc9agSZMfTHIa8GDgfOCfqbPQ19QZwFFJtiylXNuU7QysB/ykuf8d4EZgH+AtAEk2Bp5F04stSfNNC/F4TdvxsySXAn/RVbyclcNdum1G/55vj0xKmlcG9XBTSrkauDrJUcCXus4msiZOBF4NnJ7kbcC9gaOBc0op32qe79Yk7wCOSLKclRe+WYdVT0slSfPKDMfjaTen6/Yl9IzVTrItcC88MilJgxPujlLKUdN9slLKjUmeAvwndQb77dTxgf/aU/Ud1AT7UOC+wIXA05ofG0ma12YiHq+pJDsCDwU+0FV8JvD6JPcupfypKduXenXM80bcREmacyZNuJN8Fji0lPLr5vakSinPH6LOr6gXWpisTgHe2iySNO+1EY+b4XqdePwAYNMkz2vufwV4MvAS6nDA31N7sQ8HrgBO6trUCdSjl6cmORp4EHAk8F7PwS1Jg3u4t6KOrwbYmgkmv0iSWtdGPN4a+FxPWef+A6lnRtmaOjlyc+A66sXKDutOpEspy5PsChwPnE4dt30MNemWpHlv0KTJJ3fd3qX11kiaXxasx8prXvW3zQO25crfXTGiBs1dbcTjUsplrLzGwUR2HXJbF7Hq9RQkSY2hx3BL0oy76w62O/iMSatcfvSeI2qMJEntGDSG+w1T2Vgp5U3Ta44kqR/jsSSNr0E93K/qub8RsHFzewWwSXP75mYxwGutt3DRYq5atnS2m6H5x3gsSWNq0BjurTq3kzwe+CR1hvqpzfmyNwSeC7wZeHGbDZXmiquWLXUYhEbOeCxJ42sqY7j/E3hbKeWeywmXUm4FPpnkXsD7WPXKY5KkdhiPJWmMrDOFujtSz8PazzLgz6ffHEnSEIzHkjRGppJw/wI4KMkG3YXNYcyDgEtnsmGSpAkZjyVpjExlSMmrqFce+12Ss4E/UC+I8DTqxJ3dZ755kqQ+jMeSNEaG7uEupZwPPBj4CLAQ2K35+xHgwc16SVLLjMeSNF4GnYd7Z+B/SykrAEopVwL/NoqGSZJWMh5L0vga1MP9DeBho2iIJGlSxmNJGlODEu6MpBWSpEGMx5I0pqZylhJJkiRJUzTMWUr2SLLDMBsrpXxsmu2RJE3MeCxJY2iYhPsNQ26rAAZ4SWqP8ViSxtAwCfeTgQvbbogkaSDjsSSNoWES7ltKKTe13hJJ0iDGY0kaQ06alCRJklpkwi1J0hyzcNFikky6SBofkw4pKaWYkEvSHGA8nl+uWraU7Q4+Y9I6lx+954haI2m6Jg3gSX6R5P913U+SDydZ3FPvMUlub6uRkjTfGY8laXwN6jHZHtiwp/5+wJY99QIsmMF2SZJWZTyWpDG1JocoHTgmSXOD8ViSxoBjAiVJkqQWmXBLjWHOCuCZASRJ0lQNc+Gb5ybZqbm9DvWSwfskeVxXnSUz3TBp1IY5KwB4ZgDNKuOxJI2hYRLu1/cpO7hPWZlmWyRJkzMeS9IY8jzckjQGjMeSNL4M4JIkSVKLJu3h7r2gwiCllCum1xxJUj/GY0kaX4PGcF/G1MYCerEFSWrHZRiPJWksDUq4n9V1e1PgncDFwKnAH4CtgecCO9B/Mo8kaWYYjyVpTA2aNPnlzu0kJwFnlFJe2VPthCQnAM8ETp7xFkqSjMeSNMamMmlyb2pPSj+fB549/eZIkoZgPJakMTKVhPsW4K8nWPdE4NbpN0eSNATjsSSNkWEufNPxfuCIJPcFTmPlmMG9gH8E3jrzzZMk9WE8lqQxMnTCXUo5Msly4N+Af6LOlg9wFfC6Usp/tNNESVI347EkjZep9HBTSjk2yXHAtsA21OC+tJRydxuNkyT1ZzyWpPEx6MI33wW+DHy5lPIjgCaYX94skqQRMB5L0vgaNGnyC8BTgQuSLEvywSTPSXKvEbRNkrSS8ViSxtSkCXcp5Z2llF2ArYCDgPWBDwDXJfmfJP+SZPv2mylJ85vxWJLG11CnBSyl3FBK+UwpZT/qWMFdgO8BLwV+keTSJO9N8pSpPHmSByRZkaQk2aSrPEkOS7I0yS1Jzk/yyKlsW5LWRm3FY0lSe6ZyHm4ASvW9UsobSil/CSwC3gUsoR7ynIp3ASv6lB8CHAEcTb2c8QrgnCTbTLW9krS2mm48TrJ9kg8k+UmSu5Kc26fOUB0gSR6W5GtJbk7y+yRvSrJg+q9SksbflBPuXqWU35dSPlRK2RvYctjHJXki8Azg3T3lG1IT7reXUo4vpZwD7EM97dWB022vJK2t1iAePxzYA/hFs/QzsAMkyRbAOdQ4vRfwJuC1wFFr+FIkaa0y6CwlL53KxkopHxumXtPrcRw1KP+xZ/UTgE2Bz3Zt96YkpwO7A4dPpU2StDZoKR6fXkr5UrP9U+hJ0ns7QJqy7wKXUTtAOvH4FcBGwN6llBuBs5NsChyZ5J1NmSTNW4POw33SENsoXbeHSripwXlD4H3Ai3vW7QDcBfyyp/xiYN8hty9Ja5uThqgzpXg8xDm7h+0A2R04qyexPpnaK/4k4PTBTZektdegISX3HrDsCpxLvcLZpcM8YXMp4jcDB5VS7uhTZQtgRSnlrp7y5cDGSdbvs80DklyY5MJrrrlmmGZI0riZ8Xg8hMk6QHboqXdJd4VSyhXAzT31JGleGnRawJv6LcBfAJ+njtnbgtrz/PAhn/OtwAWllK9M9tR9yjLRulLKiaWUnUopO2211VZDNkOSxkdL8XiQYTtAtmD14YGdelvMUFskaWxN6dLuSZ4O/DvwROACYK9SyhlTePzDgb8Ddk6yeVO8cfN3syR3UQP0vZMs6AnymwM3T9ArLknzynTj8RQM2wEyUb1+5SQ5ADgAYPHixdNpnyTNeUOdpSTJs5NcAHwVuBt4Winl8WsQ3B8MrAd8l5pYL6eO4wb4HXUi5SXAAqD3Ag6rHbKUpPlmBuPxMO7pAOkp7+0AWd6U9dqM/j3fHpmUNK8MOkvJvsBhwI7U4P7XpZTvTONVyf5PAAAd4klEQVT5vgU8uafsGcDB1FNT/Qa4HLiReirAtzTt2Jh6OqoTp/HckjS2WojHw+juAOkeF97bAXIJPWO1k2wL3As7SiRp4JCST1MPB54L/Bx4TpLnTFC3lFIOnmxjpZRrm23dI8mS5uY3SykrmrJ3AEckWU4N1gdRe+OPG9BeSVpbzWg8HtJ3GK4D5Ezg9UnuXUr5U1O2L3ALcN4MtEOSxtqghPsKaoB/ULNMplB7qmfCO6gJ9qHAfYELqYdNr56h7WueWbhoMVctWzrbzZCmY8bjcZM879HcfQCwaZLnNfe/Ukq5ecgOkBOAVwOnJjm6ad+RwHs9B7ckDUi4SylL2m5AKeUkes4vW0op1LOZvLXt59f8cNWypWx38ORDXC8/es8RtUaaupbi8dbA53rKOvcfSL3AzcAOkFLK8iS7AsdTz7n9R+AYatItSfPeoDHcO09hW6WU8s1ptkeS1Ecb8biUchkrzzgy4YYYogOklHIR8JQptFGS5o1BQ0rOpR6a7HcKqH6ne+qdyS5JmhnnYjyWpLE0KOF+RNfthcCHqbPjTwX+QD0c+VxgN+r5tSVJ7TAeS9KYGjSG++ed20neBnyslHJ4T7WvJnkL8Brqlc4kSTPMeCxJ42uoC980dmXi0zudB+wy7dZIkoZhPJakMTKVhPt6YK8J1v1Ns16S1D7jsSSNkUFjuLu9Azi+uVDNaawcM7gXsDtw4Ew3TpLUl/FYksbI0Al3KeW/kiyjXlr4+OaxdwI/BvYupXyxnSZKkroZjyVpvEylh5tSypeALyVZB9gKuKaUcncrLZMkTch4LEnjY0oJd0cT1L3MuiTNMuOxJM19U5k0KUmSJGmKTLglSZKkFplwS5IkSS0y4ZYkSZJaZMItSZIktciEW5IkSWqRCbckSZLUIhNuSZIkqUUm3JIkSVKLTLglSZKkFplwS5IkSS0y4ZYkSZJaZMItSZIktciEW5IkSWqRCbckSZLUIhNuSZIkqUUm3JLmtgXrkWTSZeGixbPdSkmSJrTubDdAkiZ11x1sd/AZk1a5/Og9R9QYSZKmzh5uSZIkqUUm3JIkSVKLTLglSZKkFplwS5IkSS0y4ZYkSZJaZMItSZIktciEW5IkSWqRCbckSZLUIhNuSZIkqUUm3Bp7CxctHnjpb0mSpNnipd019q5attRLf0saGwsXLeaqZUtnuxmSRsiEW5KkEbKTQJp/HFKiOc3hIpIkadzZw605zZ4gSZI07kbaw51knySnJVmWZEWSHyZ5YZ96L0/yyyS3NnV2HWU7JUmSpJky6iElBwErgH8Fng18A/hUkld1KiR5AXAC8DFgd+DnwBlJdhxxWyVp3kuyf5LSZ3lFV50kOSzJ0iS3JDk/ySNns92SNJeMekjJs0op13bd/3qS+1MT8eOasqOAj5ZS3gyQ5DzgUcAhwEtG2VhJ0j2eAtzSdf83XbcPAY4AXg9cQo3p5yTZsZRy1eiaKElz00h7uHuS7Y4fAVsDJHkQ8BDgs12PuRv4HLW3W2uJYSZDOiFSmlN+UEr5XtfyB4AkG1IT7reXUo4vpZwD7AMU4MBZbK8kzRlzYdLkE4CLmts7NH8v6alzMXCfJFuVUq4ZWcvUmmEmQ4ITIqUx8ARgU1btKLkpyenUjpLDZ6thkjRXzOppAZvJkHsB72uKtmj+/rGn6vKe9ZKk0fp1kjuTXJrkH7vKdwDuAn7ZU/9iVnaiSNK8Nms93EmWAJ8CvlRKOalndemtPkF5Z1sHAAcALF68eMbaKEniSur47O8DC4AXAick2biUcgy1I2RFKeWunsctBzZOsn4p5faRtliS5phZSbiT3Ac4E7iCVSdCdnqyNwdu6CrfvPnb2/MNQCnlROBEgJ122qlvUi5JmrpSylnAWV1FZybZADg8ybGdan0eakeJJDVGPqQkycbAGcD6wDNLKTd1re6M3e49DLkDcL3jtyVpTjgFuA+whNpRcu8kC3rqbA7cXEq5o98GSiknllJ2KqXstNVWW7XaWEmabaO+8M261DOOPBjYvTPLvaOU8hvgF9QZ7p3HrNPcP3OETdU0eDl2ad4o1I6SBcD2Pet2YPUJ8JI0L416SMl/AXsA/0I968jjutb9qJRyG3Ak8IkklwHfBvajJugvGm1Ttaa8HLu01nsucC1wOXWM943UjpG3wD1HMp9FM9RPkua7USfcT2/+Httn3QOBy0opn06yCXAwdaLOz4E9Syk/G1EbJUmNJJ+nTpj8P2pP9r7N8urmOgm3JnkHcESS5ay88M06rLygmSTNayNNuEspS4as90Hgg+22RpI0hEuBvwO2pU6EvAh4aSnl41113kFNsA8F7gtcCDytlHL1iNsqSXPSXLjwjSRpjiqlHAYcNqBOAd7aLJKkHrN64RtJmhEL1hs4UXfhIk89J02L3zNpjdnDLWn83XWHE3Wltvk9k9aYPdySJElSi0y4JUmSpBaZcEuSJEktMuGWJEmSWmTCLUmSJLXIhFuSJElqkQm3JEmS1CITbkmSJKlFJtySJElSi0y4JUmSpBaZcEuSJEktMuGWJGkGLFy0mCQDF0nzz7qz3QBJktYGVy1bynYHnzGw3uVH7zmC1kiaS+zhliRJklpkwi1JkiS1yIRbkiRJapEJtyRJktQiE25JkiSpRSbckiRpZixYb+BpERcuWjzbrZRGztMCSpKkmXHXHQNPjehpETUf2cMtSZIktciEW5IkSWqRCbckSZLUIhNuSZIkqUUm3JLmB8+eIEmaJZ6lRNL84NkTJEmzxB5uTcnCRYsH9hJKkiRpJXu4NSVXLVtqL6EkaU5YuGgxVy1bOmmdbR6wLVf+7ooRtUjqz4RbkqQBhknsNHp2AmlcmHBLkjSAid0MaiYwT8Zeaa1tTLglSdLoOIFZ85CTJiVJkqQW2cMtSZLmliGGnUjjxIRbkiTNLUMMOwGHnmh8OKREkiRJapEJtyRJktQiE25J0rzmFXQ1jGE+JwsXLZ7tZmqOcgz3PDDsBRsWrL8hd91+6whaJElzh+fY1jD8nGg6TLjngWGCBNRAYTCRJEmaWQ4pkSRJmmOGGcKy7gYbOcxlTMzZHu4kDwOOAx4P/BH4EHBUKeWuWW3YEIYZwuFla6Xx5Xd8deMcs7WWG+Wl5Ic8f/gwzzfsEBaPTI+HOZlwJ9kCOAe4CNgL+DPgPdQe+cNnsWlDcZyXtHbzO76qcY/ZWsuN8lLynj9cE5iTCTfwCmAjYO9Syo3A2Uk2BY5M8s6mTJI0NxizJWkSc3UM9+7AWT1B+mRqQH9SG084U2OlZvL0UTPVJklDag4H+52aspHHbGlGDfHdl6ZjrvZw7wB8vbuglHJFkpubdafP9BPO1FipTr251CYPXUlD8nDwmhp5zB7WsKdF1Tw3ymEnMPRY71E+13ybdzJqczXh3oI66abX8madJGnuGHnMnkoibaeE5py5OK783X8zI5NLZ2pS+bDf8VG2aTpSSmlt42sqyR3A60opx/aULwNOKqX8e0/5AcABzd2HApeOpKGjtSVw7Ww3Yh5wP7fPfTy57UopW812I6ZiqjG7WTfduO3nqH3u4/a5j9vX9j4eKmbP1R7u5cDmfco3o08vSinlRODEths1m5JcWErZabbbsbZzP7fPfbxWmlLMhunHbT9H7XMft8993L65so/n6qTJS6jj/u6RZFvgXs06SdLcYcyWpEnM1YT7TGC3JPfuKtsXuAU4b3aaJEmagDFbkiYxVxPuE4DbgFOTPLUZ63ck8N55fD7XtXrIzBzifm6f+3jtMxsx289R+9zH7XMft29O7OM5OWkS7rlM8PGsepngI71MsCTNPcZsSZrYnE24JUmSpLXBXB1Soj6SvCZJSXJKn3UPSPKFJCuSXJvk+CQbz0Y7x02STZMcleT7SW5IclWzLx/Sp+5mST6SZHlT95NJ7jsb7R43SR6W5GtJbk7y+yRvSrJgttuluSvJvklOTXJlE/v2n6DeUPEvycuT/DLJrUl+mGTX1l/EmPF7uuaSbJ/kA0l+kuSuJOf2qZMkhyVZmuSWJOcneWSfer4PPZLsk+S0JMua7/oPk7ywT72B3/PZyJlMuMdEkq2BNwDX9Fm3LnAWsB11otK/APswR8YtjYHFwMup+/B5wD8CC4ELmjMtdPsMsAvwD8D+wKOBL46qoeMqyRbAOUAB9gLeBLwWOGo226U573nAEmDCq3YMG/+SvIA61vxj1EvR/xw4I8mObTR8HPk9nbaHA3sAv2iWfg4BjgCOBp4FrADOSbJNp4Lvw4QOou6vfwWeDXwD+FSSV3UqDPM9n7WcqZTiMgYL8N/Ax4FzgVN61r0QuAt4YFfZ84G7gQfPdtvn+kI9ddlGPWX3oX6x39hV9nhqANy5q+wxTdlTZ/t1zOUFOJR6ruZNu8r+Dbi5u8zFpXsB1mn+btJ8z/bvU2eo+Ee9sM6Hu7cN/BT4xGy/zrmy+D2d9v5bp+v2KcC5Pes3BG4A3tBVdi9qR9pbfB8G7t8t+5R9Cvht1/2B3/PZypns4R4DSR5N/TAcMkGV3YEflFJ+21X2ReB24BktN2/slVJuKqXc0lN2PXA5sHVX8e7A1aWU87vqfR/4bbNOE9sdOKusesaKk4GNgCfNTpM015VS7h6i2sD4l+RBwEOAz/Zs+3P43e3m93Qahvi8PgHYlFU/hzcBp7Pq59D3oY9SSr+rRf6I5nd6Ct/zWcmZTLjnuCShzvx/Zyll2QTVdqDn4hKllNuBX9NzMQoNJ8lWwPbARV3Fq+3nxsW4nwfp9xm9gtpj477TdAwT/zp/e7+/FwP3ab7v8nvath2oPau/7Cnv/Q3xfRjeE1j5Oz3s93xWciYT7rnvZcA2wLsnqbMF/S+fvLxZp6l7D3VIycldZe7nNee+U1uG+Wx1/vbWW96zfr7ze9quLYAVZfVTZS4HNk6yflc934cBmsmQewHva4qG/Z7Pyv5dt60Nq78km1En5E2qlHJJU/dtwKt7hzz0e0i/p5ugfK03lf3c57GvBF4CPLeUcl3vQ/o93QTlWpX7bp6bzvdy0EP6PV2f8t77meTx85Xf03ZNtH971/k+TCLJEur47S+VUk7qWT3M93zk+9eEe/T2AT44RL0AhwFLgf9JsnlTvi6wXnP/T81/ysuBzftsY3P6/xc3H0xlP6+8kzwbOA44uJTyhZ66y4F+h57n834e1kSf0c1w380na/S9HGCY+Le8q+yGnjrgZ7DD72m7lgP3TrKgp5d7c+DmUsodXfV8HyaQ5D7AmcAV1M6xjmG/57OSMzmkZMRKKR8qpWTQ0lR/KLAT9cPRWf6Kejqc5dSzZkAdi7TKuKPm0NSD6D/meK03xf0MQJInUIeQnFBKeVefza62nxsTje3WSv0+o9tSZ+i77+aJNfleDmGY+Nf52/v93QG4vpSy2ulW5ym/p+26BFhAnR/Urfc3xPdhAs25ss8A1gee2Uw67Rj2ez4rOZMJ99x2OPDknuUnwPnN7Z829c4EHp1ku67HPhvYAPjqyFo7xpI8nPol/irw6gmqnQlsk+Svux63E/VLembrjRxvZwK7Jbl3V9m+wC3AebPTJK0lBsa/UspvqOdF3qdTIck6zX2/uyv5PW3Xd4AbWfVzuDH1fNzdn0Pfhz6a82d/DngwsHsp5Q/d66fwPZ+VnMlLu4+Z5spV15ZSntdVth711Di3UU+ovxlwDHBOKeUl/bajlZqLCv2QOnbrpcCtXatvLKVc1FX3q9TTDr2Oes7Oo4E/lFKeOLoWj5/mQg4XAT+j7rMHAe8F/qOUcvhstk1zV5KHAQ+jnr/449TJUecC15RSzmvqDBX/mivSfQJ4I/BtYD9qEvPoUsrPRvSS5jS/p9PTJM97NHdfSz0F4Bub+18ppdyc5FDq5/T11N7Ug4DHAg8vpVzdbMf3oY8kJ1IvUvcvwPd7Vv+olHLbMN/zWcuZ2jrBt0s7C30ufNOUL6KeR3IFcB31h2nj2W7vOCzUK0eWCZZze+puDnyEOs7rRuqkjdVOxu/Sdz8/DPg6tZfmSuDNwILZbpfL3F2AI4f8Xg4V/6g/1r+i/tD+L7DrbL/Gubb4PZ3WvlsyyW/JkqZOgH8Hftfs428Cj/J9GGr/XjZo/zb1Bn7PZyNnsodbkiRJapFjuCVJkqQWmXBLkiRJLTLhliRJklpkwi1JkiS1yIRbkiRJapEJtyRJktQiE+4RS3JkkjLB8pIB6zvLubP9OibT1c4X91n3t531fdbdL8l/JPl1ktuSLE9yZpLdZqhdre37JFs3j18yE22d4mu6dkCdc5OcMqo2dT3v6Une2FO2TpKXJflmkj8muT3JZUk+lOT/TWHb6yW5Pslxk9T5WZKvNLffl+S/1/zVaL6aZzH78T3lOzblu3SVnduUHdpnO9cmOXKG2mS8HiHjdfvWne0GzFM3AM/oU/4r6hXVui8t+irgKcDfdJXd2F7TZswK4IXAJ3vKX9Cs26S7MMlDgW8ANwHvpl5la1PqVbtOS/KYUspPZqBdbe37ralXtjqXenL+ueSfgDtG+YRJHgs8mXqVr07ZOsBngT2BD1CvoPYn6pU79wN+kmTdUspdg7ZfSrkjyeeBfZK8pvcxSR4OPLx5DoB3AZckeXsp5VfTfoGab+ZDzAY4HHjmkHX/NcmxpZSbW2yP8XoEjNejYcI9O+4spXxvkvW/69xI8jzgtgH1J5Rko1LKLWvy2Gk6HXheki1KKcubttwHeBrwOeBFPfU/CVwPPKGU0h0kT0/yfuqVHWfCyPb9REb9npSuS9OP0KuBL5VSru8qexX1x/DppZSvdZWfB3wwyT9M8Tk+DfwD9UqhX+tZ90LgVuqVxCilXJbkW8ArqZdclqZiPsTsc4E9kjyqlPKjAXW/C/wFcADwHy22yXg9GsbrEXBIyVokyZLmMNqLk3wsyR+piW9n/T8k+XnqcI3Lk/xbn23snOQbSVYkuaE5vPWorvWPTPK1JDenDvn4ZJL79WnOd4HfA8/tKntuU/bd3ucE/hI4tCfZBqCU8n+llCumuDtGpjks+dPm7jc6hzObdbs093dLclqSFcDxzbrXJvlBs5+vbg7pbd9n+3+T5PtJbklyXZKvJNlugrYkyXHNe/PYpmyVQ5Sdw5pJHpXke817+aMkT+zZ1gZJ3t8cSrwuybuSvKbz2ibZH/emBurew6KvAT7fE7zvUUr5UHfPR5INk7wzydLmM/uTJHt0PeRc6iWPX9Bnc/sCZ5RS/tRV9nngxU3PjTTr5ljMPpV6ZPHfh2j674GPAK9LssGUX/gsMl6v1gbj9YisNS9k3CRZt3eZwc2/m3roZx/gbc3zvR54P/U/yD2b229OcmBXm3ah/ud5B/WQ0b7AN4EHNOu3on5pNqb2UL8KeBJwdpL1e9pQgM9Q/3PteCFwcp/2Pgm4CzhnzV7u1LSw768EOuPV/xl4fLN0+2/gJ8Czm9sAi6jBfC/g5cAC4NtJNutq699Sfwh/DTwfeBnwC2CrPq9rHeBEakB7SinlgknavDHwUeqhwucCtwFfSLJxV513AvsDRzWvbzHD9TY8AdgI+E5X27YFlgD/M8TjO05pnv9twLOAH1CHFz0SoJRyN/WQ595J1ut6rp2A7ak9Kt2+A9wPeMQU2iAB8yZmv436fXrYEG0+mvp9etlUX+xUGK8B4/XaoZTiMsIFOJIa2PotS/rUfzdw2ZDbXtJs5ws95ZtSx02/saf8TcBVwILm/neBC4FMsP13UId2bNpV9pjmOV/YVVaAA4FHURPpbZrlLuCRzbrSVf8E4Mox3/c7NtvZpad8l6b8mAGPX0ANen8CXtqUrQMsA04d8JqubR7/8eb9fHhPnXOBU/rsh6d0lT2yKXtGc/++wC3A67vqBPh593s3QZsOA67pKXtss/3desrXoQ5t6yxpyndt6j+pp/75wOf6bPeZPe/bDcCGPY9dF7gTeHnbnzWXtWdpOW4sYW7F7AXU8dEfb8pXi2vd8QQ4CfgtsG5z/1rgyDHY78brlfWM1yNa7OGeHTcAj+6z/H6Gtv/lnvuPB+4FfK6nl+Dr1P8gFyW5F/XL8NHSfNr7eAzwP6Vr2Ecp5fvUSSd/3Vu51HGAv6T22jwf+GUp5ccTbHvSw14TSZ1F3d37Megz3fa+n0jve0KSxyU5O8l11MByM3Uy6UOaKg8F7k89dDuZBdQjB7sAO5dSfj5Ee+6gBvaOzrjBRc3fR1AnJZ3WqdB8Lk5nsG2oPyrd0tlMT/l/Nm3pLJ0JW0+l/hh9u+cz+zVgp642XQD8htqzR5JQP2tfKKXc2v1EpZQ7qcnHNkO8BqnbfInZd1GT9Bcm+bMh2v02ak/qamek6sd4DRiv5228dtLk7LizlHJhi9u/uuf+ls3fib7Y21J7n0M93DaRhRNs42rgPhM85jPUQ2ah/3ASqL0CWyXZsPdLN4Q3UGebdxxF7RGYSNv7fiKrvCdJFlMP130f+EfqD8jt1EC/YVPtvs3fyd4TqIcbd6eOt/vFkO25sdRDfACUUm6vse+e5+4EuWt6Htd7v58NqYc8uy1r/i7qKX8ntZdsIV0/FtTP7Db0n63fOyv+ZODAJBtS5wJsy+qHJztuY+VrlIY1n2L2x6hx9WBqgjWhUsovmvHGhyb5+GR1G8Zr4/W8jdcm3Gun3v9KOzOP92T1wA5wKXB3syycZLtXUk+n1Ot+wA8neMzJwBHN7b+boM651EOlu9KnZ2GAE4Ezuu633fOxpnrfk2dQA+9epZSboI5VZNUfweuav5O9J1APa+4LfDnJlaWUQ2agvVc1f7di5eenc3+Q64HNuwtKKUuTXAY8HfhwV/kVwBVZ/Xy411OD/nOGeL5PUw+L7kE9tdU1rD4LvmNzVn090lwwZ2J2k8y9i3qo/9RJtt3xVuDHwPOGqGu8Nl7P23htwj0/fJc6vuv+pZQJE9okFwAvTXL8BIcoLwBemeTepZlNnOTR1HGI3+q3zVLKxUlObG5fMkGdbyb5IfC2JOeXVWcqk+QRwB9LKUv7PPb3zI2gfXvzd9j/xjei/lje2VX2fFb9Tl5KDWL7MeDQYCnla0n2AU5N8qdSyluHbMdEfko9TdNe1F6NzuG/Zw3x2EuB+yfZoJTS3XPyH8B7kuxSSjl3wDa+Rp3ws2Kiz01HKeVnSX5GnRT2V9Qxg3f21msmkG1MncQkzWWzFrMbH6SerWS1s6L0KqX8X5LTqUlUBtQ1XmO8nq/x2oR7dqyb5HF9ypeWUpb1KZ+WUsofU6/+dWzq6YnOp05+eAjw5FJK50IBh1DPFHJmkyTfRB1LeGEp5QzgvdTzYp6V5Gjq+LV3UL/sn5/k+V8xRDNfTL3wzYVJjmHlhW92o84IfyywWsK9Btra91dQfyD3S3IDcMeAQ6Ffp47l+0jqFbUeDryOrvONl1LuTj0N2CeTfJLaM1CoF3f4dO/2SymnN7PkP5nkxlLKhFf1GqSUcl2SDwJHJbkDuJg6435TBo+3/zawHnVcYXcbjwN2pn6+PgCcTe3t2ZqVvWM3NX/PBs6ink3haOph8U2pk4U2LKX0XuXu08BbqD/4Ex2e3Klp+3cmWC9NZL7F7FuTvJeVFyIZ5K3U5H6mGa+HYLweE6OepTnfFyafeX14n/prMuN9zwnWv4R6GPEWYDk1QB7UU+dJ1OB+MzWYfAN4ZNf6R1GDT2f9p4D79WyjAAdO0s5VzlLSVb4NcCx1UsVtTRvPAvae6/u+qf9i6n/jt3deHytnve/Yp/5LqaePugX4HvWfisuAd/fU27t5326lHrb8MrBd12u6tqf+31PHze3f3D+X1We9X9unPau8b9Ten/dTJy4tp47nPJJ6tGHQvvgpcESf8nWoQ4u+Rb0K3O3Na/448PieuhtQx3j+qql3FfXKcs/ss90HNu2/gonP2HAs8I2Z+Cy5zJ+lzbjBHI7Z1OT8OiY5S0lP/f9p6h451/d7U994vfKxxusRLJ1TukjSQEnOAdYrpTxpQL1/Bf6+lLLjaFo2uSQLgMuBQ0opn5jt9khS24zXc4tDSiT1leTJ1F6c/6UectyXOrF1nyEefiJwSJKnllJGckGjAfah9kxNdKYcSRpbxuu5z4Rb0kRWUGedH0o9XPlL6mHP3ksAr6aUclOS/ajnEp4LQu3BWW1yjiStBYzXc5xDSiRJkqQWeaVJSZIkqUUm3JIkSVKLTLglSZKkFplwS5IkSS0y4ZYkSZJaZMItSZIktej/B4pMsCtIMAiOAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 864x360 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plt.subplot(1,2,1)\n",
    "plt.tick_params(labelsize=15);\n",
    "h_reco = plt.hist(diffMC/1000,bins=30,edgecolor='black');\n",
    "plt.xlabel('ET recoMC - ET tracking (GeV)', fontsize=15)\n",
    "plt.ylabel('dN/dETdiff', fontsize=15)\n",
    "plt.title('Resolution as simulated by MC', fontsize=15)\n",
    "plt.subplot(1,2,2)\n",
    "plt.tick_params(labelsize=15);\n",
    "h_nn = plt.hist(diffNN/1000,bins=30, edgecolor='black');\n",
    "plt.xlabel('ET recoNN - ET tracking (GeV)', fontsize=15)\n",
    "plt.ylabel('dN/dETdiff', fontsize=15)\n",
    "plt.title('Resolution as simulated by NN', fontsize=15)\n",
    "fig = plt.gcf()\n",
    "fig.set_size_inches(12,5)\n",
    "plt.savefig(PATH+'/resolution.eps', format='eps', dpi=100)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1296x432 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(1,3,1)\n",
    "plt.tick_params(labelsize=12);\n",
    "h_reco = plt.hist(test_true_hist/1000, range=(0,140),bins=30, edgecolor='black');\n",
    "plt.xlabel('E_T (GeV)', fontsize=15)\n",
    "plt.ylabel('dN/dE_T', fontsize=15)\n",
    "plt.title('Pion E_T from tracking', fontsize=15)\n",
    "plt.subplot(1,3,2)\n",
    "plt.tick_params(labelsize=12);\n",
    "h_reco = plt.hist(test_reco_MC_hist/1000, range=(0,140), bins=30,  edgecolor='black');\n",
    "plt.xlabel('E_T (GeV)', fontsize=15)\n",
    "\n",
    "plt.title('Pion Reco E_T from Geant4', fontsize=15)\n",
    "plt.subplot(1,3,3)\n",
    "plt.tick_params(labelsize=12);\n",
    "h_nn = plt.hist(test_reco_NN_hist/1000, range=(0,140), bins=30,  edgecolor='black');\n",
    "plt.xlabel('E_T (GeV)', fontsize=15)\n",
    "\n",
    "plt.title('Pion Reco E_T from BicycleGAN', fontsize=15)\n",
    "fig = plt.gcf()\n",
    "fig.set_size_inches(18,6)\n",
    "plt.savefig(PATH+'/distribution.eps', format='eps', dpi=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "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.hist2d(test_true_hist/1000,test_reco_NN_hist/1000,bins=30);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "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.hist2d(test_true_hist/1000,test_reco_MC_hist/1000,bins=30);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "idx = np.arange(0,140, step=140/30)\n",
    "diff=plt.bar(idx, \n",
    "             height=(h_nn[0]-h_reco[0]), edgecolor='black', \n",
    "             linewidth=1, color='lightblue',width = 3.4, align = 'edge') \n",
    "plt.xlabel('E (GeV)')\n",
    "plt.ylabel('dN/dE')\n",
    "plt.title(\"NN output - MC output\")\n",
    "fig = plt.gcf()\n",
    "fig.set_size_inches(12,4)\n",
    "plt.savefig(PATH+'/difference.eps', format='eps',dpi=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "17.12299"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_reco_NN.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "11.471488"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_reco.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfgAAAF3CAYAAABJzllyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xt8FOXZ//HvxTkKApqomEhjWxQ5RgSLohVPFAURPNRDq1RU2srB4qHGakushyJSsSie8QH7s2pFVCxFAQv6qNiHoEEQrQqkGKQSEKjIMXD9/thJXMjmsEs2m0w+79crr+zOzD1z7WThu3PP7Nzm7gIAAOHSKNUFAACAmkfAAwAQQgQ8AAAhRMADABBCBDwAACFEwAMAEEIEPAAAIUTAAwAQQgQ8AAAhRMADABBCTVJdwP5IT0/37OzsVJcBAECtWbx48Xp3z6hquXod8NnZ2crPz091GQAA1Boz+3d1lqOLHgCAECLgAQAIIQIeAIAQqtfn4GPZtWuXioqKtH379lSXAiRNixYtlJWVpaZNm6a6FAB1VOgCvqioSK1atVJ2drbMLNXlADXO3bVhwwYVFRXpqKOOSnU5AOqo0HXRb9++XYcccgjhjtAyMx1yyCH0UgGoVOgCXhLhjtDjPQ6gKqEM+FQzM91www1lzydMmKC8vDxJUl5eng444ACtW7eubH7Lli1ru8S9/Pe//1VmZqZGjhy53+sqLCxUly5dJEkLFizQwIEDq922cePGysnJKfsZN26chgwZopycHH3/+99X69aty+a988471V5vdna2unbtWtZ29OjR5ZZ56aWXtHz58mqvsyqx/qZffPGFLrzwwhrbBgBUJnTn4PfVZ9w/tGbTthpbX2abNL2de3qlyzRv3lwzZszQLbfcovT09HLz09PT9cc//lH33HNPjdW1P37729/q1FNPTXUZSktLU0FBQcx5CxYs0IQJE/S3v/0toXXPnz8/5t+i1EsvvaSBAweqU6dO5eaVlJSoSZP9/6dyxBFHaPr06fu9HgCojtAH/JpN21Q4bkCNrS87d1aVyzRp0kTDhw/XxIkTddddd5WbP2zYME2dOlU333yzDj744ArX07JlS40YMULz5s1T27Ztdffdd+vXv/61Vq9erfvvv1+DBg1SYWGhLr/8cn3zzTeSpAcffFAnnXSSXnzxRU2ePFlz587Vf/7zH5166ql68803dfjhh++1jcWLF+vLL79U//79K7wr4KJFi3Tdddfpm2++UfPmzfX666/rgAMOUG5urhYsWKAdO3ZoxIgR+vnPf17ha3njjTd03XXXSYr0cLz55ptq1apVlfuyNrzzzjuaOXOm3njjDd1555164YUXdNVVV+mkk07S22+/rUGDBunoo4/WnXfeqZ07d+qQQw7R008/rcMOO0xbtmzRqFGjlJ+fLzPT2LFjdcEFF5Ste/369Tr33HN12223qXPnzho4cKCWLVumqVOnaubMmdq6datWrFihIUOGaPz48ZKkKVOm6J577tERRxyhDh06qHnz5nrwwQdTtXsA1FOhD/hUGTFihLp166Zf//rX5ea1bNlSw4YN05/+9CfdfvvtFa7jm2++Ud++fXXPPfdoyJAhuu222zR37lwtX75cQ4cO1aBBg3TooYdq7ty5atGihT799FNdeumlys/P15AhQ/TCCy9o8uTJevXVV3X77beXC/c9e/bohhtu0J///Ge9/vrrMWvYuXOnLr74Yj333HPq1auX/vvf/yotLU1TpkxR69attWjRIu3YsUN9+vRRv379Kjw3PGHCBE2ePFl9+vTRli1b1KJFi3LLbNu2TTk5OWXPb7nlFl188cUV7p94nHbaaWrcuLEkaejQoRozZkzZvJNOOkmDBg3SwIED9+pC37Rpk9544w1J0saNG/Xuu+/KzPTEE09o/Pjx+uMf/6g77rhDrVu31tKlS8uWK/Xll19q0KBBuvPOO3XWWWepsLBwr5oKCgr0/vvvq3nz5jrmmGM0atQoNW7cWHfccYfee+89tWrVSqeffrq6d+9eI/sAQMNCwCfJQQcdpCuuuEKTJk1SWlpaufmjR49WTk7OXufq99WsWTP1799fktS1a1c1b95cTZs2VdeuXcvCYteuXRo5cqQKCgrUuHFjffLJJ2XtH3jgAXXp0kW9e/fWpZdeWm79Dz30kM455xwdeeSRFdbwr3/9S+3atVOvXr3KXpckzZkzRx988EFZl/PmzZv16aef6uijj465nj59+uj666/XT37yE51//vnKysoqt0xlXfT7q6ou+liiP1wUFRXp4osv1tq1a7Vz586yr6fNmzdPzz77bNlybdu2lRT5u5xxxhmaPHlyhac/zjjjDLVu3VqS1KlTJ/373//W+vXrdeqpp5b17Fx00UV7/U0BoLq4yC6JfvWrX2nKlCll3efR2rRpo8suu0wPPfRQhe2bNm1adkTcqFEjNW/evOxxSUmJJGnixIk67LDDtGTJEuXn52vnzp1l7desWaNGjRrpyy+/1J49e8qtf+HChXrwwQeVnZ2tG2+8UU899ZRyc3P3WsbdYx6Vu7seeOABFRQUqKCgQKtWrVK/fv0qfC25ubl64okntG3bNvXu3Vsff/xxhcvG6/PPPy+7gO6RRx6psfUeeOCBZY9HjRqlkSNHaunSpXr00UfLvqJW0f5p0qSJjj/+eL322msVrr/07ylFLjAsKSmRu9dY/QAaNo7gk+jggw/Wj3/8Y02ZMkXDhg0rN//6669Xr169ysI6EZs3b1ZWVpYaNWqkadOmaffu3ZIiF4ZdeeWV+stf/qKnnnpK9913n2688ca92j799NNlj6dOnar8/HyNGzdur2U6duyoL774QosWLVKvXr309ddfKy0tTT/60Y/08MMP6/TTT1fTpk31ySefKDMzs8I6V6xYoa5du6pr165auHChPv74Y3Xs2DHh1x3tyCOP3O8j/1atWunrr7+ucP7mzZvLXt+0adPKpvfr108PPvig7r//fkmRLvq2bdvKzPTkk0/qoosu0rhx48p9cKrICSecoDFjxmjjxo1q1aqVXnjhBXXt2nU/XhlqQ6IX81bnol0gUQR8kt1www0VXiCVnp6uIUOGaOLEiQmv/9prr9UFF1yg559/XqeddlrZUefdd9+tU045RaeccopycnLUq1cvDRgwQMcee2xc62/WrJmee+45jRo1Stu2bVNaWprmzZunq6++WoWFherRo4fcXRkZGXrppZcqXM/999+v+fPnq3HjxurUqZPOPvvscsvsew6+f//+5T5wJCr6HHy3bt301FNP7TX/kksu0TXXXKNJkybFvNI9Ly9PF110kTIzM9W7d2+tWrVKknTbbbdpxIgR6tKlixo3bqyxY8fq/PPPlxQ5Kn/22Wd17rnn6qCDDtI555xTZZ2ZmZn6zW9+ox/84Ac64ogj1KlTp7JufNRdiV7MW52LdoFEWX3uEuzZs6fve+X3Rx99tFeIpeJrcsD+2LJli1q2bKmSkhINGTJEw4YN05AhQ8ott+97HalTNPZ7yrL18bfzdGXdviIJFSHMzGyxu/esarnQH8ETxqhv8vLyNG/ePG3fvl39+vXT4MGDU10SqpBl66W8zfG3y6N3BskT+oAH6psJEyakugTUYZzvR3UR8ABQj3C+H9XF1+QAAAghAh4AgBAi4AEACCECPgnMTJdffnnZ85KSEmVkZOw1dOrs2bPVs2dPHXvsserYsWO5m9DUtgkTJsjMtH59/F/12dfPfvazsu+S9+3bt8JBbPaVl5enzMzMvYaMfe6558oet2zZUsccc4xycnJ0xRVXVLueqVOnKiMjY6/17js07KZNmyq9q2C88vLyYl4s97vf/U7z5s2rse0AQEXCf5HdxK7S5tU1t77W7aUxSytd5MADD9SyZcvKbgwzd+7cve7ytmzZMo0cOVKzZs1Sx44dVVJSoscee6zmaozT559/rrlz56p9+/Ypq6HUmDFjyn3YKb0nfN++fTVhwgT17Fnl1z/Lufjiiysdka004K+99tpy83bv3l12k5z99fvf/75G1gMAVQl/wG9endD3UytUze+tnn322Zo1a5YuvPBCPfPMM7r00kv1v//7v5Kk8ePH69Zbby27VWuTJk1iBkteXp5WrVqltWvX6pNPPtF9992nd999V7Nnz1ZmZqZeeeUVNW3aVL///e/1yiuvaNu2bTrppJP06KOPavfu3TrxxBN17733qm/fvrrlllvUqFGjmMPXjhkzRuPHj9d5550X87Xs3r1bN998s1577TWZma655hqNGjVKixcv1vXXX68tW7YoPT1dU6dOVbt27Spcx1VXXVU2rOqwYcP2GtEt1XJzc7VixQrl5OTorLPO0oABA3T77berXbt2Kigo0PLlyzV48GB9/vnn2r59u6677joNHz5ckvTqq6/qN7/5jXbv3q309PRyI/M9/vjjmjFjhmbMmKFf/vKXZaPWZWdna+jQoXrllVe0a9cuPf/88+rYsaOKi4t12WWXacOGDerVq5deffVVLV68OO7BchBObzUfLeVdlkC7dEk1N3Q26gF3r7c/xx9/vO9r+fLle08Ye1C5ZfZLNdZ34IEH+pIlS/yCCy7wbdu2effu3X3+/Pk+YMAAd3c/7rjjvKCgoOpNjR3rffr08Z07d3pBQYGnpaX53//+d3d3Hzx4sL/44ovu7r5hw4ayNj/96U995syZ7u6+bNky79ixo8+ZM8dzcnJ8x44d5bbx8ssv++jRo93d/Tvf+Y4XFxeXW+ahhx7y888/33ft2lW2vZ07d/qJJ57o69atc3f3Z5991q+88kp3dx86dKg///zz7u5+6qmn+qJFizw/P9/PPPPMsnVu3Lgx5us94ogjvHv37t69e3fv27fvXvNL1xWv//mf//H09PSy9Xbv3t23bt261zKrVq3yzp07lz2fP3++H3DAAb5y5cqyaaX7eevWrd65c2dfv369r1u3zrOyssqWK11m7Nixfu+99/oDDzzg5557rm/fvr3cvvnOd77jkyZNcnf3yZMn+1VXXeXu7iNGjPC7777b3d1nz57tkmL+Xcq915E6if4/k0i72twW6iRJ+V6NjAz/EXyKdOvWTYWFhXrmmWeqdQ/yipx99tllQ8Tu3r17r+FjS4eMnT9/vsaPH6+tW7fqq6++UufOnXXuueeqc+fOuvzyy3Xuuedq4cKFatas2V7r3rp1q+666y7NmTOn0hrmzZunX/ziF2rSJPJ2Ofjgg7Vs2TItW7ZMZ511lqTIEXpFR++S9N3vflcrV67UqFGjNGDAgApHnovVRV8Tquqij+WEE04oGxZWkiZNmqQXX3xRUuS0xqeffqri4mL98Ic/LFuudJhXSfrzn/+srKwsvfTSS2ratGnMbZTet/7444/XjBkzJElvvfVW2Xb69+9fNgQtAMSDi+ySaNCgQbrxxhvLjcXeuXNnLV68uFrriB4idt/hY0tKSrR9+3Zde+21mj59upYuXaprrrmmbChTSVq6dKnatGmjL7/8sty6V6xYoVWrVql79+7Kzs5WUVGRevToof/85z97LecxhkR1d3Xu3LlsuNilS5dW+kGhbdu2WrJkifr27avJkyfr6quvrtbrr65bb7217AK6mhI9XOyCBQs0b948LVy4UEuWLNFxxx2n7du3VzhcrCR16dJFhYWFKioqqnAbpX/f0uFiJTFkLIAakbSAN7MnzWydmS2LMe9GM3MzSw+em5lNMrPPzOwDM+uRrLpq07Bhw/S73/2u3HCfN910k+6++2598sknkqQ9e/bovvvuS2gbpWGenp6uLVu27DUS2owZM7Rhwwa9+eabGj16tDZt2rRX265du2rdunUqLCxUYWGhsrKy9N577+nwww/fa7l+/frpkUceKQugr776Ssccc4yKi4u1cOFCSdKuXbv04YcfVljn+vXrtWfPHl1wwQW644479N577yX0eity1113lX3YSER1hott27atDjjgAH388cd69913JUknnnii3njjjbLR5b766quyNscdd5weffRRDRo0SF988UW1azn55JP117/+VZI0Z84cbdy4MZGXBKCBS+YR/FRJ/fedaGZHSjpLUvSl7WdL6hD8DJf0cBLrqjVZWVm67rrryk3v1q2b7r//fl166aU69thj1aVLF61duzahbbRp00bXXHONunbtqsGDB6tXr16SIoGam5urKVOm6Oijj9bIkSNj1lIdV199tdq3b69u3bqpe/fu+stf/qJmzZpp+vTpuvnmm9W9e3fl5OTonXfeqXAda9asUd++fZWTk6Of/exn+sMf/hBzuYkTJ+71dbbS0xD7K/rrdrFqPeSQQ9SnTx916dJFN910U7n2/fv3V0lJibp166bf/va36t27tyQpIyNDjz32mM4//3x179697Ir/UieffLImTJigAQMGVPsriGPHjtWcOXPUo0cPzZ49W+3atVOrVq0SfOUAGqqkDhdrZtmS/ubuXaKmTZd0h6SXJfV09/Vm9qikBe7+TLDMvyT1dfdKU686w8Wm4mtywP7YsWOHGjdurCZNmmjhwoX65S9/GbNnguFi65C81gl9WyeRYWYTHmI2wRpR99TJ4WLNbJCkNe6+ZJ/zlpmSPo96XhRMS+ywNhphjHpm9erV+vGPf6w9e/aoWbNmevzxx1NdEpLk5B2T4h445uTcWSpMTjkImVoLeDM7QNKtkmJdPh3rKqWYXQtmNlyRbvw6cWMWoKZ16NBB77//fqrLAFDP1eZV9N+TdJSkJWZWKClL0ntmdrgiR+xHRi2bJSnmVUnu/pi793T3nhkZGUkuGQCA+qnWAt7dl7r7oe6e7e7ZioR6D3f/j6SZkq4IrqbvLWlzVeffq9hWzRQN1FG8xwFUJZlfk3tG0kJJx5hZkZldVcnif5e0UtJnkh6XVP6+rdXUokULbdiwgf8AEVrurg0bNqhFixapLgVAHZa0c/DufmkV87OjHrukETWx3aysLBUVFam4uLgmVgfUSS1atFBWVlaqywBQh4XuVrVNmzbd6/aiAAA0RNyqFgCAECLgAQAIIQIeAIAQIuABAAih0F1kBwD1RWabNGXnzoq7DVAdBDwApMjbuaenugSEGF30AACEEAEPAEAIEfAAAIQQAQ8AQAgR8AAAhBABDwBACBHwAACEEAEPAEAIEfAAAIQQAQ8A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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "four_cells_diff_NN= np.array([\n",
    "       four_cells(test_reco_NN_test[i]).sum()- test_true[i].sum()  for i in range(len(test_reco))\n",
    "])    \n",
    "four_cells_diff_MC= np.array([\n",
    "       four_cells(test_reco[i]).sum() - test_true[i].sum() for i in range(len(test_reco))\n",
    "])\n",
    "plt.hist(four_cells_diff_NN/1000, bins=30, range=(-200,30), label = 'NN max 4 cells ET - E tracking',histtype='step')\n",
    "plt.hist(four_cells_diff_MC/1000, bins=30, range=(-200,30), label = 'MC max 4 cells ET - E tracking', histtype='step')\n",
    "plt.legend(loc=2);\n",
    "plt.xlabel('Sum of 4 max cells ET  - ET true (GeV)')\n",
    "plt.ylabel('dN/dET')\n",
    "fig = plt.gcf()\n",
    "fig.set_size_inches(8,6)\n",
    "plt.savefig(PATH+'/four_cells_diff_combined.eps', format='eps', dpi=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "four cells diff mean 270.8730773925781, std 2287.71044921875\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "four_cells_diff= four_cells_diff_NN-four_cells_diff_MC\n",
    "plt.title('4 max_cells ET from Geant4  - 4 max cells ET from NN (GeV)')\n",
    "plt.hist((four_cells_diff)/1000, bins=30, range=(-10,10), label = 'MC-NN',  histtype='step');\n",
    "plt.xlabel('E_T (GeV)')\n",
    "plt.legend();\n",
    "print('four cells diff mean {0}, std {1}'.format(four_cells_diff.mean(), four_cells_diff.std()))\n",
    "fig = plt.gcf()\n",
    "fig.set_size_inches(8,6)\n",
    "plt.savefig(PATH+'/four_cells_diff.eps', format='eps', dpi=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "hyper_dict={'LEARNING_RATE':LEARNING_RATE,\n",
    "            'BETA1':BETA1,\n",
    "            'BATCH_SIZE':BATCH_SIZE,\n",
    "            'EPOCHS':EPOCHS,\n",
    "            'SAVE_SAMPLE_PERIOD':SAVE_SAMPLE_PERIOD,\n",
    "            'SEED':SEED,\n",
    "            'd_sizes':d_sizes,\n",
    "            'g_sizes_dec':g_sizes_dec,\n",
    "            'g_sizes_enc':g_sizes_enc,\n",
    "            'e_sizes':e_sizes,\n",
    "            'cost_type':cost_type,\n",
    "            'validating_size':validating_size,\n",
    "            'test_size':test_size,\n",
    "            'n_batches':n_batches,\n",
    "            'reco_path':reco_path,\n",
    "            'true_path':true_path,\n",
    "            'discr_steps':discr_steps,\n",
    "            'gen_steps':gen_steps,\n",
    "            'vae_steps':vae_steps,\n",
    "            'latent_weight':latent_weight,\n",
    "            'cycl_weight':cycl_weight,\n",
    "            'kl_weight':kl_weight,\n",
    "           }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(PATH+'/hyper_parameters.pkl', 'wb') as f:  \n",
    "    pickle.dump(hyper_dict, f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "b=(test_reco_NN_test-test_reco)/1000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "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.hist(b.sum(axis=(1,2,3)),bins=40);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-5.5727487"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.sum(axis=(1,2,3)).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "17.039783"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.sum(axis=(1,2,3)).std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1000, 52, 64, 1)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_reco_NN_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fd080107978>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(test_reco_NN_test[1].reshape(52,64))"
   ]
  },
  {
   "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
}