In [1]:
import tensorflow as tf
import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import numpy as np
import json

In [2]:
import sys
sys.path.insert(0, "../python")
import InputsProducer
import ParametrizedModel as pm


Welcome to JupyROOT 6.18/02

In [3]:
from InputsProducer import SampleType as st
from matplotlib.backends.backend_pdf import PdfPages
import statsmodels.stats.proportion

In [5]:
# 2016
# VBF non res
# VBFHHTo2B2Tau_CV_0_5_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_5_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_0
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_2
# VBFHHTo2B2Tau_CV_1_C2V_2_C3_1
nodes_values_2016_vbf = [1,2,3,4,5,6]
nodes_labels_2016_vbf = ['CV_0_5_C2V_1_C3_1', 'CV_1_5_C2V_1_C3_1', 'CV_1_C2V_1_C3_0' , 'CV_1_C2V_1_C3_1', 'CV_1_C2V_1_C3_2', 'CV_1_C2V_1_C3_2']


# ggF non res
nodes_label_2016 = ['SM', 'box', '2','9','10','11','12','13']
# nodes_values_2016 = [0,1,2,9,10,11,12,13]
nodes_values_2016 = [0,1,2,3,4,5,6,7]


# ggF res Graviton
mass_points_graviton_2016 = [250, 260, 270,280,300,320,340,350,400,450,500,550,600,650,750,800]
mass_points_graviton_2016_labels = [250, '', '', '',280,'', '', '', '',350,'',450,500,550,600,650,750,800]

# ggF res Graviton
mass_points_radion_2016 = [250, 260, 270,280,300,320,340,350,400,450,500,550,600,650,800, 900]
mass_points_radion_2016_labels = [250, '', '', 270, '' ,300,'', '', 350, 400,'',500,600,650,800, 900]

In [6]:
# 2017
# VBF non res
# VBFHHTo2B2Tau_CV_1_5_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_0
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_2
# VBFHHTo2B2Tau_CV_1_C2V_2_C3_1
nodes_values_2017_vbf = [1,2,3,4,5]
nodes_labels_2017_vbf = ['CV_1_5_C2V_1_C3_1' , 'CV_1_C2V_1_C3_0','CV_1_C2V_1_C3_1' ,'CV_1_C2V_1_C3_2', 'CV_1_C2V_2_C3_1']

# ggF non res
nodes_labels_2017 = ['SM', 2,3,4,7,9,12]
nodes_values_2017 = [0,1,2,3,4,5,6]

# ggF res Graviton
mass_points_graviton_2017 = [250,260,270,280,350,400,450,550,600,650,750,800]
mass_points_graviton_2017_labels = [250,'', '',280,350,400,450,550,600,650,750,800]

# ggF res Graviton
mass_points_radion_2017 = [250,260,270,280,300,320,350,400,450,500,550,600,650,700,750,800,850,900,1000,1250,1500,1750,2000,2500,3000]
mass_points_radion_2017_labels = [250,'', '', '',300,'',350,400,450,500,'',600,'',700,'',800,'','',1000,1250,1500,'',2000,2500,3000]

# VBF res Graviton
mass_points_graviton_vbf_2017 = [250,260,270,280,300,320,350,400,450,500,600,650,700,750,850,900,1000,1750,2000]
mass_points_graviton_vbf_2017_labels = [250,'', '', '',300,'',350,400,450,500,600,'',700,'',850,'',1000,'',2000]

# VBF res Graviton
mass_points_radion_vbf_2017 = [250,270,280,300,350,400,450,500,550,600,650,700,750,800,850,900,1000,1250,1500,1750,2000,3000]
mass_points_radion_vbf_2017_labels = [250,'', '',300,350,400,'',500,'',600,'',700,'',800,'','',1000,1250,1500,'',2000,3000]

In [7]:
# 2018
# VBF non res
# VBFHHTo2B2Tau_CV_0_5_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_5_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_0
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_1
# VBFHHTo2B2Tau_CV_1_C2V_1_C3_2
# VBFHHTo2B2Tau_CV_1_C2V_2_C3_1

nodes_values_2018_vbf = [1,2,3,4,5,6]
nodes_labels_2018_vbf = ['CV_0_5_C2V_1_C3_1','CV_1_5_C2V_1_C3_1','CV_1_C2V_1_C3_0','CV_1_C2V_1_C3_1','CV_1_C2V_1_C3_2','CV_1_C2V_2_C3_1']


# ggF non res
nodes_labels_2018 = ['SM',2,3,4,5,6,7,8,9,10,11,12]
nodes_values_2018 = [0,1,2,3,4,5,6,7,8,9,10,11]

# ggF res Graviton
mass_points_graviton_2018 = [250,260,270,280,300,320,350,400,450,500,550,600,650,700,750,800,850,900,1000,1250,1500,1750,2000,2500,3000]
mass_points_graviton_2018_labels = [250,'', '', '',300,'',350,400,'',500,'',600,'',700,'',800,'',900,'',1250,1500,'',2000,2500,3000]

# ggF res Radion
mass_points_radion_2018 = [250,260,270,280,300,320,350,400,450,500,550,600,650,700,750,800,850,900,1000,1250,1500,1750,2000,2500,3000]
mass_points_radion_2018_labels = [250,'', '', '',300,'',350,400,450,500,'',600,'',700,'',800,'',900,'',1250,1500,'',2000,2500,3000]

# VBF res Graviton
mass_points_graviton_vbf_2018 = [250,260,270,280,300,320,350,400,450,500,600,650,700,750,850,900,1000,1200,1750,2000]
mass_points_graviton_vbf_2018_labels = [250,'', '', '',300,'','',400,'',500,'','',700,'','',900,'',1200,'',2000]

# VBF res Radion
mass_points_radion_vbf_2018 = [250,260,270,280,300,320,350,400,450,500,550,600,650,700,750,800,900,1000,1250,1500,1750,2000,3000]
mass_points_radion_vbf_2018_labels = [250,'','','',350,'',450,500,550,600,'',700,'',800,'','',1250,'','',2000,3000]

In [8]:
def sel_acc(y_true, y_pred, n_positions, n_exp):
    pred_sorted = tf.argsort(y_pred, axis=1, direction='DESCENDING')
    n_evt = tf.shape(y_true)[0]
    evt_id = tf.range(n_evt)
    matches_vec = []
    for n in range(n_positions):
        index = tf.transpose(tf.stack([evt_id, tf.reshape(pred_sorted[:, n], shape=(n_evt,))]))
        matches_vec.append(tf.gather_nd(y_true, index))
    matches_sum = tf.add_n(matches_vec)
    valid = tf.cast(tf.equal(matches_sum, n_exp), tf.float32)
    n_valid = tf.reduce_sum(valid)
    return n_valid / tf.cast(n_evt, tf.float32), n_valid, tf.cast(n_evt, tf.float32)

def sel_acc_2(y_true, y_pred):
    return sel_acc(y_true, y_pred, 2, 2)

In [9]:
score_info = {}

In [10]:
def acc_prod(point, sample_type, spin, year, discr, channel, new_method, deep_csv, res):
    index = []
    for node in range(0, len(point)) :
        if res == True :
            index.append((Z[:, 0, 0] == sample_type) & (Z[:, 0, 1] == spin) & (Z[:, 0, 2] == point[node]) & (Z[:, 0, 4] == year) & (Z[:, 0, 5] == channel))
        if res == False :
            index.append((Z[:, 0, 0] == sample_type) & (Z[:, 0, 3] == point[node]) & (Z[:, 0, 4] == year) & (Z[:, 0, 5] == channel))
    acc = []
    valid = []
    n_evt_sample = []
    for idx in range(0, len(index)):
        pred = Y[index[idx], : , 0]
        if new_method == True : 
            y_pred = predictions[index[idx]]
        elif new_method == False and deep_csv == False:
            y_pred = X[index[idx], : , discr]
        elif new_method == False and deep_csv == True:
            y_pred = data[index[idx], : , -1]
            
        ratio, n_valid, n_evt = sel_acc_2(pred, y_pred)
        x = ratio.numpy()
        
#         x = sel_acc_2(pred, y_pred).numpy()
#         print(x)
        acc.append(x)
        valid.append(n_valid)
        n_evt_sample.append(n_evt)
#         score_info[name_tag] = {'acc':acc , 'valid': valid, 'n_evt_sample': n_evt_sample}
    return acc, valid, n_evt_sample

In [11]:
# When there scores are going to be read from 1 json

with open('new_score_17_04_2020_par_1_TF1_v2.json') as json_file:
    new = json.load(json_file)

In [13]:
def CreatePlotsReadDic(x, x_labels, sample_type, spin, year, discr , channel, res, fig_name, x_axis_label,sample_title,pdf, log_xscale, name_tag):

    oneSigma = 0.682689492137

    acc = new[name_tag]['HH-btag']['acc']
    acc_df = new[name_tag]['DF']['acc']
    acc_deepcsv = new[name_tag]['DeepCSV']['acc']
    
    #Parity 0
    ci_low, ci_up = statsmodels.stats.proportion.proportion_confint(new[name_tag]['HH-btag']['valid'], new[name_tag]['HH-btag']['n_evt_sample'], alpha=oneSigma, method='beta')
    error = [ acc - ci_low, ci_up - acc ]

    ci_low_df, ci_up_df = statsmodels.stats.proportion.proportion_confint(new[name_tag]['DF']['valid'], new[name_tag]['DF']['n_evt_sample'], alpha=oneSigma, method='beta')
    error_df = [ acc_df - ci_low_df, ci_up_df - acc_df]
    
    ci_low_deepcsv, ci_up_deepcsv = statsmodels.stats.proportion.proportion_confint(new[name_tag]['DeepCSV']['valid'], new[name_tag]['DeepCSV']['n_evt_sample'], alpha=oneSigma, method='beta')
    error_deepcsv = [ acc_deepcsv - ci_low_deepcsv, ci_up_deepcsv - acc_deepcsv]
        
    fig = plt.figure(figsize=(7, 6))
    ay = plt.gca()
        
    ay.errorbar(x, acc, xerr=None, yerr=error, fmt='o', markersize=4, color='Blue') 
    ay.errorbar(x, acc_df, xerr=None, yerr=error_df, fmt='o', markersize=4, color='Orange') 
    ay.errorbar(x, acc_deepcsv, xerr=0, yerr=error_deepcsv, fmt='o',markersize=4, color='Green') 
 

    if log_xscale:
        ay.set_xscale('log')
    plt.title('Selection Purity of {}'.format(sample_title))
    plt.ylabel("Purity")
    plt.xlabel(x_axis_label)
    
    ay.legend(('HH-btag', 'DeepFlavour','DeepCSV' ))
    plt.draw()
    plt.show()
    pdf.savefig(fig, bbox_inches='tight')

    plt.close()

In [14]:
# 2016
with PdfPages('selection_purity_one_file_2016.pdf') as pdf:
    channel_name = ['ETau', 'MuTau', 'TauTau']
    for channel in range(3):
        CreatePlotsReadDic(nodes_values_2016, nodes_label_2016, st.ggHH_NonRes, 0, 2016, 6, channel, False, 'plots/2016/non_res{}.pdf'.format(channel_name[channel]), 'node', 'Non Res ggF {}'.format(channel_name[channel]), pdf, False, 'ggHH_NonRes_{}_2016'.format(channel))
        CreatePlotsReadDic(nodes_values_2016_vbf, nodes_labels_2016_vbf, st.VBFHH_NonRes, 0, 2016, 6, channel, False, 'plots/2016/non_res_vbf_{}.pdf'.format(channel_name[channel]), 'node', 'Non Res VBF {}'.format(channel_name[channel]), pdf, True, 'VBFHH_NonRes{}_2016'.format(channel))
        CreatePlotsReadDic(mass_points_graviton_2016, mass_points_graviton_2016_labels, st.ggHH_Res, 2, 2016, 6, channel, True, 'plots/2016/graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-2 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_R_{}_2016'.format(channel))
        CreatePlotsReadDic(mass_points_radion_2016, mass_points_radion_2016_labels, st.ggHH_Res, 0, 2016, 6, channel, True, 'plots/2016/radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-0 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_G_{}_2016'.format(channel))



In [ ]:
#2017
# args = x, x_labels, sample_type, spin, year, discr , channel, res, fig_name, x_axis_label,sample_title,pdf, log_xscale, name_tag
with PdfPages('selection_purity_one_file_2017.pdf') as pdf:
    channel_name = ['ETau', 'MuTau', 'TauTau']
    for channel in range(3):
        CreatePlotsReadDic(nodes_values_2017, nodes_labels_2017, st.ggHH_NonRes, 0, 2017, 6, channel, False, 'plots/2017/non_res{}.pdf'.format(channel_name[channel]), 'node', 'Non Res ggF {}'.format(channel_name[channel]), pdf, False, 'ggHH_NonRes_{}_2017'.format(channel))
        CreatePlotsReadDic(nodes_values_2017_vbf, nodes_labels_2017_vbf, st.VBFHH_NonRes, 0, 2017, 6, channel, False, 'plots/2017/non_res_vbf_{}.pdf'.format(channel_name[channel]), 'node', 'Non Res VBF {}'.format(channel_name[channel]), pdf, True, 'VBFHH_NonRes_{}_2017'.format(channel))
        CreatePlotsReadDic(mass_points_graviton_2017, mass_points_graviton_2017_labels, st.ggHH_Res, 2, 2017, 6, channel, True, 'plots/2017/graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'Graviton {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_R_{}_2017'.format(channel))
        CreatePlotsReadDic(mass_points_radion_2017, mass_points_radion_2017_labels, st.ggHH_Res, 0, 2017, 6, channel, True, 'plots/2017/radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-0 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_G_{}_2017'.format(channel))
        CreatePlotsReadDic(mass_points_graviton_vbf_2017, mass_points_graviton_vbf_2017_labels, st.VBFHH_Res, 2, 2017, 6, channel, True, 'plots/2017/VBF_graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'VBF spin-2 {}'.format(channel_name[channel]), pdf, True, 'VBFHH_Res_R_{}_2017'.format(channel))
        CreatePlotsReadDic(mass_points_radion_vbf_2017, mass_points_radion_vbf_2017_labels, st.VBFHH_Res, 0, 2017, 6, channel, True, 'plots/2017/VBF_radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'VBF spin-0 {}'.format(channel_name[channel]), pdf, True, 'VBFHH_Res_G_{}_2017'.format(channel))

In [ ]:
# When there scores are going to be read from 2 json and calcualted the mean in between ()

with open('new_score_14_04_2020_par_0.json') as json_file:
    score_info_p0 = json.load(json_file)
    
with open('new_score_14_04_2020_par_1.json') as json_file:
    score_info_p1 = json.load(json_file)

In [ ]:
def CreatePlotsReadDicMean(x, x_labels, sample_type, spin, year, discr , channel, res, fig_name, x_axis_label,sample_title,pdf, res_vbf, name_tag):

    oneSigma = 0.682689492137
    #Parity 0
    acc_par0 = score_info_p0[name_tag]['HH-btag']['acc']
    acc_df_par0 = score_info_p0[name_tag]['DF']['acc']
    acc_deepcsv_par0 = score_info_p0[name_tag]['DeepCSV']['acc']
    #Parity 1
    acc_par1 = score_info_p1[name_tag]['HH-btag']['acc']
    acc_df_par1 = score_info_p1[name_tag]['DF']['acc']
    acc_deepcsv_par1 = score_info_p1[name_tag]['DeepCSV']['acc']
    
    #mean
    acc_mean = (np.array(acc_par0) + np.array(acc_par1)) / 2.0
    acc_mean_df = (np.array(acc_df_par0) + np.array(acc_df_par1)) / 2.0
    acc_mean_deepcsv = (np.array(acc_deepcsv_par0) + np.array(acc_deepcsv_par1)) / 2.0

    #error HH-btag
    ci_low_par1, ci_up_par1 = statsmodels.stats.proportion.proportion_confint(score_info_p1[name_tag]['HH-btag']['valid'], 
                                                                              score_info_p1[name_tag]['HH-btag']['n_evt_sample'], 
                                                                              alpha=oneSigma, method='beta')
    
    ci_low_par0, ci_up_par0 = statsmodels.stats.proportion.proportion_confint(score_info_p0[name_tag]['HH-btag']['valid'], 
                                                                              score_info_p0[name_tag]['HH-btag']['n_evt_sample'], 
                                                                              alpha=oneSigma, method='beta')
    
    ci_low_total, ci_up_total = statsmodels.stats.proportion.proportion_confint(np.add(score_info_p0[name_tag]['HH-btag']['valid'], 
                                                                                       score_info_p1[name_tag]['HH-btag']['valid']),
                                                                                np.add(score_info_p0[name_tag]['HH-btag']['n_evt_sample'], 
                                                                                       score_info_p1[name_tag]['HH-btag']['n_evt_sample']), 
                                                                                alpha=oneSigma, method='beta')
     
    d_error_low = np.sqrt( ci_low_total**2 + (ci_low_total - np.minimum(ci_low_par0, ci_low_par1))**2 )
    d_error_up = np.sqrt( ci_up_total**2 + (ci_up_total - np.maximum(ci_up_par0, ci_up_par1))**2 )
    
 
    #error DeepFlavour 
    
    ci_low_df_par1, ci_up_df_par1 = statsmodels.stats.proportion.proportion_confint(score_info_p1[name_tag]['DF']['valid'], 
                                                                                    score_info_p1[name_tag]['DF']['n_evt_sample'], 
                                                                                    alpha=oneSigma, method='beta')
    
    ci_low_df_par0, ci_up_df_par0 = statsmodels.stats.proportion.proportion_confint(score_info_p0[name_tag]['DF']['valid'], 
                                                                                    score_info_p0[name_tag]['DF']['n_evt_sample'], 
                                                                                    alpha=oneSigma, method='beta')
    
    ci_low_total_df, ci_up_total_df = statsmodels.stats.proportion.proportion_confint(np.add(score_info_p0[name_tag]['DF']['valid'], 
                                                                                            score_info_p1[name_tag]['DF']['valid']),
                                                                                      np.add(score_info_p0[name_tag]['DF']['n_evt_sample'], 
                                                                                            score_info_p1[name_tag]['DF']['n_evt_sample']), 
                                                                                      alpha=oneSigma, method='beta')

    d_error_low_df = np.sqrt( ci_low_total_df**2 + (ci_low_total_df - np.minimum(ci_low_df_par0, ci_low_df_par1))**2 )
    d_error_up_df = np.sqrt( ci_up_total_df**2 + (ci_up_total_df - np.maximum(ci_up_df_par0, ci_up_df_par1))**2 )

   #error DeepCSV
    
    ci_low_depcsv_par1, ci_up_depcsv_par1 = statsmodels.stats.proportion.proportion_confint(score_info_p1[name_tag]['DeepCSV']['valid'], 
                                                                                    score_info_p1[name_tag]['DeepCSV']['n_evt_sample'], 
                                                                                    alpha=oneSigma, method='beta')
    
    ci_low_depcsv_par0, ci_up_depcsv_par0 = statsmodels.stats.proportion.proportion_confint(score_info_p0[name_tag]['DeepCSV']['valid'], 
                                                                                    score_info_p0[name_tag]['DeepCSV']['n_evt_sample'], 
                                                                                    alpha=oneSigma, method='beta')
    
    ci_low_total_depcsv, ci_up_total_depcsv = statsmodels.stats.proportion.proportion_confint(np.add(score_info_p0[name_tag]['DeepCSV']['valid'], 
                                                                                            score_info_p1[name_tag]['DeepCSV']['valid']),
                                                                                      np.add(score_info_p0[name_tag]['DeepCSV']['n_evt_sample'], 
                                                                                            score_info_p1[name_tag]['DeepCSV']['n_evt_sample']), 
                                                                                      alpha=oneSigma, method='beta')
    d_error_low_depcsv = np.sqrt( ci_low_total_depcsv**2 + (ci_low_total_depcsv - np.minimum(ci_low_depcsv_par0, ci_low_depcsv_par1))**2 )
    d_error_up_depcsv = np.sqrt( ci_up_total_depcsv**2 + (ci_up_total_depcsv - np.maximum(ci_up_depcsv_par0, ci_up_depcsv_par1))**2 )

    fig = plt.figure(figsize=(9, 6))

    ay = plt.gca()
    
    if res:
        ay.set_xscale('log')
        ay.get_xaxis().get_major_formatter().labelOnlyBase = False
#         xticks = ay.xaxis.get_major_ticks()
#         xticks[0].label1.set_visible(False)
#         xticks[-1].label1.set_visible(False)

        ay.plot(x, acc_mean, 'or', color='blue', markersize=4)
        ay.fill_between(x, d_error_low,d_error_up, color='lightsteelblue', alpha=0.2)
        
        ay.plot(x, acc_mean_deepcsv, 'or', color='green', markersize=4)
        ay.fill_between(x, d_error_low_depcsv,d_error_up_depcsv, color='aquamarine', alpha=0.2)
     

        ay.plot(x, acc_mean_df, 'or', color='orange', markersize=4)
        ay.fill_between(x, d_error_low_df,d_error_up_df, color='moccasin', alpha=0.2)

        
#         ay.set_xscale('log')
#         ay.get_xaxis().get_major_formatter().labelOnlyBase = False
#         xticks = ay.xaxis.get_major_ticks()
#         xticks[0].label1.set_visible(False)
#         xticks[-1].label1.set_visible(False)
        plt.xticks(x, x_labels, rotation=0, fontsize = 11)

    else: 
        error = [ acc_mean - d_error_low, d_error_up - acc_mean ]
        error_df = [ acc_mean_df - d_error_low_df, d_error_up_df - acc_mean_df ]
        error_deepcsv = [ acc_mean_deepcsv - d_error_low_depcsv, d_error_up_depcsv - acc_mean_deepcsv ]
        
        ay.errorbar(x, acc_mean, xerr=None, yerr=error, fmt='o', markersize=4, color='Blue') 
        ay.errorbar(x, acc_mean_df, xerr=None, yerr=error_df, fmt='o', markersize=4, color='Orange') 
        ay.errorbar(x, acc_mean_deepcsv, xerr=None, yerr=error_deepcsv, fmt='o',markersize=4, color='Green') 

        if res_vbf:
            plt.xticks(x, x_labels, rotation=45)
        else:
            plt.xticks(x, x_labels)

    plt.title('Selection Purity of {}'.format(sample_title), fontsize=25)
    plt.ylabel("Purity", fontsize=20)
    plt.xlabel(x_axis_label, fontsize=20)
    
#     ay.legend(('HH-btag', 'DeepFlavour','DeepCSV' ), fontsize='large', loc=(0.5,0.5))
    plt.draw()
    plt.show()
    pdf.savefig(fig, bbox_inches='tight')

    plt.close()

In [ ]:
# 2016
# args = x, x_labels, sample_type, spin, year, discr , channel, res, fig_name, x_axis_label,sample_title,pdf, log_xscale, name_tag
with PdfPages('selection_purity_2016.pdf') as pdf:
    channel_name = ['ETau', 'MuTau', 'TauTau']
    for channel in range(3):
        CreatePlotsReadDicMean(nodes_values_2016, nodes_label_2016, st.ggHH_NonRes, 0, 2016, 6, channel, False, 'plots/2016/non_res{}.pdf'.format(channel_name[channel]), 'node', 'Non Res ggHH {}'.format(channel_name[channel]), pdf, False, 'ggHH_NonRes_{}_2016'.format(channel))
        CreatePlotsReadDicMean(nodes_values_2016_vbf, nodes_labels_2016_vbf, st.VBFHH_NonRes, 0, 2016, 6, channel, False, 'plots/2016/non_res_vbf_{}.pdf'.format(channel_name[channel]), 'node', 'Non Res VBF {}'.format(channel_name[channel]), pdf, True, 'VBFHH_NonRes{}_2016'.format(channel))
        CreatePlotsReadDicMean(mass_points_graviton_2016, mass_points_graviton_2016_labels, st.ggHH_Res, 2, 2016, 6, channel, True, 'plots/2016/graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-2 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_R_{}_2016'.format(channel))
        CreatePlotsReadDicMean(mass_points_radion_2016, mass_points_radion_2016_labels, st.ggHH_Res, 0, 2016, 6, channel, True, 'plots/2016/radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-0 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_G_{}_2016'.format(channel))

In [ ]:
#2017
# args = x, x_labels, sample_type, spin, year, discr , channel, res, fig_name, x_axis_label,sample_title,pdf, log_xscale, name_tag
with PdfPages('selection_purity_2017.pdf') as pdf:
    channel_name = ['ETau', 'MuTau', 'TauTau']
    for channel in range(3):
        CreatePlotsReadDicMean(nodes_values_2017, nodes_labels_2017, st.ggHH_NonRes, 0, 2017, 6, channel, False, 'plots/2017/non_res{}.pdf'.format(channel_name[channel]), 'node', 'Non Res ggHH {}'.format(channel_name[channel]), pdf, False, 'ggHH_NonRes_{}_2017'.format(channel))
        CreatePlotsReadDicMean(nodes_values_2017_vbf, nodes_labels_2017_vbf, st.VBFHH_NonRes, 0, 2017, 6, channel, False, 'plots/2017/non_res_vbf_{}.pdf'.format(channel_name[channel]), 'node', 'Non Res VBF {}'.format(channel_name[channel]), pdf, True, 'VBFHH_NonRes_{}_2017'.format(channel))
        CreatePlotsReadDicMean(mass_points_graviton_2017, mass_points_graviton_2017_labels, st.ggHH_Res, 2, 2017, 6, channel, True, 'plots/2017/graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-2 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_R_{}_2017'.format(channel))
        CreatePlotsReadDicMean(mass_points_radion_2017, mass_points_radion_2017_labels, st.ggHH_Res, 0, 2017, 6, channel, True, 'plots/2017/radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-0 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_G_{}_2017'.format(channel))
        CreatePlotsReadDicMean(mass_points_graviton_vbf_2017, mass_points_graviton_vbf_2017_labels, st.VBFHH_Res, 2, 2017, 6, channel, True, 'plots/2017/VBF_graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'VBF spin-2 {}'.format(channel_name[channel]), pdf, True, 'VBFHH_Res_R_{}_2017'.format(channel))
        CreatePlotsReadDicMean(mass_points_radion_vbf_2017, mass_points_radion_vbf_2017_labels, st.VBFHH_Res, 0, 2017, 6, channel, True, 'plots/2017/VBF_radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'VBF spin-0 {}'.format(channel_name[channel]), pdf, True, 'VBFHH_Res_G_{}_2017'.format(channel))

In [ ]:
#2018
# args = x, x_labels, sample_type, spin, year, discr , channel, res, fig_name, x_axis_label,sample_title,pdf, log_xscale, name_tag
with PdfPages('selection_purity_2018.pdf') as pdf:
    channel_name = ['ETau', 'MuTau', 'TauTau']
    for channel in range(3):
        CreatePlotsReadDicMean(nodes_values_2018, nodes_labels_2018, st.ggHH_NonRes, 0, 2018, 6, channel, False, 'plots/2018/non_res{}.pdf'.format(channel_name[channel]), 'node', 'Non Res ggHH {}'.format(channel_name[channel]), pdf, False, 'ggHH_NonRes_{}_2018'.format(channel))
        CreatePlotsReadDicMean(nodes_values_2018_vbf, nodes_labels_2018_vbf, st.VBFHH_NonRes, 0, 2018, 6, channel, False, 'plots/2018/non_res_vbf_{}.pdf'.format(channel_name[channel]), 'node', 'Non Res VBF {}'.format(channel_name[channel]), pdf, True, 'VBFHH_NonRes_{}_2018'.format(channel))
        CreatePlotsReadDicMean(mass_points_graviton_2018, mass_points_graviton_2018_labels, st.ggHH_Res, 2, 2018, 6, channel, True, 'plots/2018/graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-2 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_R_{}_2018'.format(channel))
        CreatePlotsReadDicMean(mass_points_radion_2018, mass_points_radion_2018_labels, st.ggHH_Res, 0, 2018, 6, channel, True, 'plots/2018/radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'spin-0 {}'.format(channel_name[channel]), pdf, False, 'ggHH_Res_G_{}_2018'.format(channel))
        CreatePlotsReadDicMean(mass_points_graviton_vbf_2018, mass_points_graviton_vbf_2018_labels, st.VBFHH_Res, 2, 2018, 6, channel, True, 'plots/2018/VBF_graviton_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'VBF spin-2 {}'.format(channel_name[channel]), pdf, True, 'VBFHH_Res_R_{}_2018'.format(channel))
        CreatePlotsReadDicMean(mass_points_radion_vbf_2018, mass_points_radion_vbf_2018_labels, st.VBFHH_Res, 0, 2018, 6, channel, True, 'plots/2018/VBF_radion_{}.pdf'.format(channel_name[channel]), 'mass [GeV]', 'VBF spin-0 {}'.format(channel_name[channel]), pdf, True, 'VBFHH_Res_G_{}_2018'.format(channel))