Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions bin/convert_unfolding
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
# in read speed between fine-binned and asymmetric is a factor of 200!
# TODO: create the combined histograms as well.
from src.cross_section_measurement.lib import convert_unfolding_histograms
import config.cross_section_measurement_7TeV as config_7TeV
import config.cross_section_measurement_8TeV as config_8TeV
from config import XSectionConfig
from tools.Timer import Timer
from multiprocessing import Pool

config_7TeV = XSectionConfig(7)
config_8TeV = XSectionConfig(8)

# it takes ~ 20 min to do all files
files_to_load = [config_7TeV.unfolding_madgraph_raw,
config_7TeV.unfolding_matching_down_raw,
Expand Down
20 changes: 10 additions & 10 deletions bin/x_02_all_vars
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#!/bin/bash
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding &> logs/MET_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -v HT &> logs/HT_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -v ST &> logs/ST_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -v MT &> logs/MT_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -v WPT &> logs/WPT_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py &> logs/MET_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -v HT &> logs/HT_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -v ST &> logs/ST_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -v MT &> logs/MT_unfold_8TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -v WPT &> logs/WPT_unfold_8TeV.log &
# 7 TeV
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -c 7 &> logs/MET_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -c 7 -v HT &> logs/HT_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -c 7 -v ST &> logs/ST_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -c 7 -v MT &> logs/MT_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py --combine-before-unfolding -c 7 -v WPT &> logs/WPT_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -c 7 &> logs/MET_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -c 7 -v HT &> logs/HT_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -c 7 -v ST &> logs/ST_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -c 7 -v MT &> logs/MT_unfold_7TeV.log &
python src/cross_section_measurement/02_unfold_and_measure.py -c 7 -v WPT &> logs/WPT_unfold_7TeV.log &
1 change: 0 additions & 1 deletion bin/x_05_all_vars
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#!/bin/bash
mkdir -p plots
python src/cross_section_measurement/05_make_tables.py &> logs/MET_table_8TeV.log &
python src/cross_section_measurement/05_make_tables.py -v HT &> logs/HT_table_8TeV.log &
python src/cross_section_measurement/05_make_tables.py -v ST &> logs/ST_table_8TeV.log &
Expand Down
9 changes: 8 additions & 1 deletion config/CMS.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@
'horizontalalignment': 'right'
}

y_axis_title_small = {
'fontsize':40,
'position' : (0, 1.),
'verticalalignment': 'bottom',
'horizontalalignment': 'right'
}

axis_label_major = {
'which':'major',
'labelsize':40,
Expand All @@ -36,7 +43,7 @@
'pad': 12
}

legend_properties = {'size':40}
legend_properties = {'size':35}

figsize = (16,16)
dpi = 400
Expand Down
12 changes: 6 additions & 6 deletions config/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,18 +182,18 @@ def __fill_defaults__( self ):
# optimal regularisation parameters
self.k_values_electron = {
'MET' : 3,
'HT' : 7,
'ST' : 6,
'HT' : 4,
'ST' : 3,
'MT' : 2,
'WPT' : 3
}

self.k_values_muon = {
'MET' : 3,
'HT' : 6,
'ST' : 6,
'HT' : 4,
'ST' : 3,
'MT' : 2,
'WPT' : 6
'WPT' : 3
}

self.k_values_combined = {
Expand Down Expand Up @@ -242,7 +242,7 @@ def __fill_defaults_8TeV__( self ):
middle = self.middle
path_to_files = self.path_to_files

self.new_luminosity = self.luminosity # pb^-1
self.new_luminosity = 19712 # pb^-1
self.ttbar_xsection = 245.8 # pb

self.data_file_electron = path_to_files + 'central/SingleElectron' + middle + '.root'
Expand Down
6 changes: 3 additions & 3 deletions config/latex_labels.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@

measurements_latex = {'unfolded': 'unfolded',
'measured': 'measured',
'MADGRAPH': '$t\\bar{t}$ (MadGraph)',
'MCATNLO': '$t\\bar{t}$ (MC@NLO)',
'POWHEG': '$t\\bar{t}$ (POWHEG)',
'MADGRAPH': '$t\\bar{t}$ (MadGraph+Pythia)',
'MCATNLO': '$t\\bar{t}$ (MC@NLO+Herwig)',
'POWHEG': '$t\\bar{t}$ (POWHEG+Pythia)',
'matchingdown': '$t\\bar{t}$ (matching down)',
'matchingup': '$t\\bar{t}$ (matching up)',
'scaledown': '$t\\bar{t}$ ($Q^{2}$ down)',
Expand Down
76 changes: 69 additions & 7 deletions src/cross_section_measurement/04_make_plots_matplotlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from config import XSectionConfig
from tools.file_utilities import read_data_from_JSON, make_folder_if_not_exists
from tools.hist_utilities import value_error_tuplelist_to_hist, \
value_tuplelist_to_hist, value_errors_tuplelist_to_graph
value_tuplelist_to_hist, value_errors_tuplelist_to_graph, graph_to_value_errors_tuplelist
from math import sqrt
# rootpy & matplotlib
from ROOT import kRed, kGreen, kMagenta, kBlue
Expand All @@ -18,6 +18,8 @@
mpl.use( 'agg' )
import rootpy.plotting.root2matplotlib as rplt
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib.ticker import MultipleLocator
from config import CMS
from matplotlib import rc
rc( 'font', **CMS.font )
Expand Down Expand Up @@ -258,7 +260,7 @@ def get_cms_labels( channel ):
return label


def make_plots( histograms, category, output_folder, histname, show_before_unfolding = False ):
def make_plots( histograms, category, output_folder, histname, show_ratio = True, show_before_unfolding = False ):
global variable, k_values

channel = 'electron'
Expand Down Expand Up @@ -286,11 +288,16 @@ def make_plots( histograms, category, output_folder, histname, show_before_unfol
hist_measured.marker = 'o'
hist_measured.color = 'red'

plt.figure( figsize = ( 16, 16 ), dpi = 200, facecolor = 'white' )
axes = plt.axes()
plt.figure( figsize = CMS.figsize, dpi = CMS.dpi, facecolor = CMS.facecolor )
if show_ratio:
gs = gridspec.GridSpec( 2, 1, height_ratios = [5, 1] )
axes = plt.subplot( gs[0] )
else:
axes = plt.axes()
plt.xlabel( '$%s$ [GeV]' % variables_latex[variable], CMS.x_axis_title )

axes.minorticks_on()

plt.xlabel( '$%s$ [GeV]' % variables_latex[variable], CMS.x_axis_title )
plt.ylabel( r'$\frac{1}{\sigma} \frac{d\sigma}{d' + variables_latex[variable] + '} \left[\mathrm{GeV}^{-1}\\right]$', CMS.y_axis_title )
plt.tick_params( **CMS.axis_label_major )
plt.tick_params( **CMS.axis_label_minor )
Expand Down Expand Up @@ -341,9 +348,64 @@ def make_plots( histograms, category, output_folder, histname, show_before_unfol
new_handles.append( handle )
new_labels.append( label )

plt.legend( new_handles, new_labels, numpoints = 1, loc = 'upper right', prop = CMS.legend_properties )
legend_location = 'upper right'
if variable == 'MT':
legend_location = 'upper left'
plt.legend( new_handles, new_labels, numpoints = 1, loc = legend_location, prop = CMS.legend_properties )
plt.title( get_cms_labels( channel ), CMS.title )
plt.tight_layout()

if show_ratio:
plt.setp( axes.get_xticklabels(), visible = False )
ax1 = plt.subplot( gs[1] )
ax1.minorticks_on()
#ax1.grid( True, 'major', linewidth = 1 )
# setting the x_limits identical to the main plot
x_limits = axes.get_xlim()
ax1.set_xlim(x_limits)
ax1.yaxis.set_major_locator( MultipleLocator( 0.5 ) )
ax1.yaxis.set_minor_locator( MultipleLocator( 0.1 ) )

plt.xlabel( '$%s$ [GeV]' % variables_latex[variable], CMS.x_axis_title )
plt.tick_params( **CMS.axis_label_major )
plt.tick_params( **CMS.axis_label_minor )
plt.ylabel( '$\\frac{\\textrm{theory}}{\\textrm{data}}$', CMS.y_axis_title_small )
ax1.yaxis.set_label_coords(-0.115, 0.8)
#draw a horizontal line at y=1 for data
plt.axhline(y = 1, color = 'black', linewidth = 1)

for key, hist in sorted( histograms.iteritems() ):
if not 'unfolded' in key and not 'measured' in key:
ratio = hist.Clone()
ratio.Divide( hist_data ) #divide by data
rplt.hist( ratio, axes = ax1, label = 'do_not_show' )

stat_lower = hist_data.Clone()
stat_upper = hist_data.Clone()
syst_lower = hist_data.Clone()
syst_upper = hist_data.Clone()

# plot error bands on data in the ratio plot
for bin_i in range( 1, hist_data.GetNbinsX() + 1 ):
stat_errors = graph_to_value_errors_tuplelist(hist_data)
stat_lower.SetBinContent( bin_i, 1 - stat_errors[bin_i-1][1]/stat_errors[bin_i-1][0] )
stat_upper.SetBinContent( bin_i, 1 + stat_errors[bin_i-1][2]/stat_errors[bin_i-1][0] )
if category == 'central':
syst_errors = graph_to_value_errors_tuplelist(hist_data_with_systematics)
syst_lower.SetBinContent( bin_i, 1 - syst_errors[bin_i-1][1]/syst_errors[bin_i-1][0] )
syst_upper.SetBinContent( bin_i, 1 + syst_errors[bin_i-1][2]/syst_errors[bin_i-1][0] )

if category == 'central':
rplt.fill_between( syst_lower, syst_upper, ax1, facecolor = 'yellow', alpha = 0.5 )

rplt.fill_between( stat_upper, stat_lower, ax1, facecolor = '0.75', alpha = 0.5 )

# p1 = plt.Rectangle((0, 0), 1, 1, fc="yellow")
# p2 = plt.Rectangle((0, 0), 1, 1, fc="0.75")
# plt.legend([p1, p2], ['Stat. $\\oplus$ Syst.', 'Stat.'], loc = 'upper left', prop = {'size':20})
ax1.set_ylim( ymin = 0.5, ymax = 1.5 )

if CMS.tight_layout:
plt.tight_layout()

path = output_folder + str( measurement_config.centre_of_mass_energy ) + 'TeV/' + variable + '/' + category
make_folder_if_not_exists( path )
Expand Down
19 changes: 10 additions & 9 deletions src/unfolding_tests/compare_unfolding_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def run_test( h_truth, h_measured, h_response, h_data, h_fakes = None, variable
result = calculate_normalised_xsection(
hist_to_value_error_tuplelist( unfolded_data ),
bin_widths[variable],
normalise_to_one = True )
normalise_to_one = False )
h_result = value_error_tuplelist_to_hist( result, bin_edges[variable] )
k_value_results[k_value] = deepcopy( h_result )

Expand All @@ -87,7 +87,7 @@ def run_test( h_truth, h_measured, h_response, h_data, h_fakes = None, variable
result = calculate_normalised_xsection(
hist_to_value_error_tuplelist( unfolded_data ),
bin_widths[variable],
normalise_to_one = True )
normalise_to_one = False)
h_result = value_error_tuplelist_to_hist( result, bin_edges[variable] )
tau_value_results[tau_value] = deepcopy( h_result )

Expand All @@ -112,11 +112,11 @@ def compare( central_mc, expected_result = None, measured_result = None, results
title_template = 'CMS Simulation at $\sqrt{s}$ = %d TeV \n %s'
title = title_template % ( centre_of_mass, channel_label )

models = {'central' : central_mc}
models = {latex_labels.measurements_latex['MADGRAPH'] : central_mc}
if expected_result:
models['expected'] = expected_result
if measured_result:
models['measured'] = measured_result
models.update({'expected' : expected_result})
if measured_result and test != 'data':
models.update({'measured' : measured_result})

measurements = collections.OrderedDict()
for key, value in results['k_value_results'].iteritems():
Expand Down Expand Up @@ -213,6 +213,7 @@ def compare( central_mc, expected_result = None, measured_result = None, results

if test == 'data':
h_data = get_data_histogram( channel, variable, met_type )
h_expected = deepcopy( h_data )
elif test == 'bias':
h_truth_bias, h_measured_bias, _, h_fakes = get_unfold_histogram_tuple(
inputfile = input_file_bias,
Expand All @@ -233,19 +234,19 @@ def compare( central_mc, expected_result = None, measured_result = None, results
central_mc_result = calculate_normalised_xsection(
hist_to_value_error_tuplelist( h_truth ),
bin_widths[variable],
normalise_to_one = True )
normalise_to_one = False )
central_mc = value_error_tuplelist_to_hist( central_mc_result, bin_edges[variable] )
if h_expected:
expected_result = calculate_normalised_xsection(
hist_to_value_error_tuplelist( h_expected ),
bin_widths[variable],
normalise_to_one = True )
normalise_to_one = False )
h_expected = value_error_tuplelist_to_hist( expected_result, bin_edges[variable] )

data_result = calculate_normalised_xsection(
hist_to_value_error_tuplelist( h_data ),
bin_widths[variable],
normalise_to_one = True )
normalise_to_one = False )
h_data = value_error_tuplelist_to_hist( data_result, bin_edges[variable] )

compare( central_mc = central_mc, expected_result = h_expected, measured_result = h_data,
Expand Down
2 changes: 1 addition & 1 deletion src/unfolding_tests/tau_value_determination.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ def draw_l_shape( l_shape, best_tau, x_value, y_value, channel, variable ):
plt.savefig( 'plots/tau_from_L_shape_%s_channel_%s_MC.png' % ( channel, variable ) )

def get_data_histogram( channel, variable, met_type ):
fit_result_input = '../cross_section_measurement/data/8TeV/%(variable)s/fit_results/central/fit_results_%(channel)s_%(met_type)s.txt'
fit_result_input = '../../data/8TeV/%(variable)s/fit_results/central/fit_results_%(channel)s_%(met_type)s.txt'
fit_results = read_data_from_JSON( fit_result_input % {'channel': channel, 'variable': variable, 'met_type':met_type} )
fit_data = fit_results['TTJet']
h_data = value_error_tuplelist_to_hist( fit_data, bin_edges[variable] )
Expand Down