def read_fit_templates_and_results_as_histograms( category, channel ): global path_to_JSON, variable, met_type, phase_space templates = read_data_from_JSON( path_to_JSON + '/fit_results/' + category + '/templates_' + channel + '_' + met_type + '.txt' ) data_values = read_data_from_JSON( path_to_JSON + '/fit_results/' + category + '/initial_values_' + channel + '_' + met_type + '.txt' )['data'] fit_results = read_data_from_JSON( path_to_JSON + '/fit_results/' + category + '/fit_results_' + channel + '_' + met_type + '.txt' ) fit_variables = templates.keys() template_histograms = {fit_variable: {} for fit_variable in fit_variables} fit_results_histograms = {fit_variable: {} for fit_variable in fit_variables} variableBins = None if phase_space == 'VisiblePS': variableBins = variable_bins_visiblePS_ROOT elif phase_space == 'FullPS': variableBins = variable_bins_ROOT for bin_i, variable_bin in enumerate( variableBins[variable] ): for fit_variable in fit_variables: h_template_data = value_tuplelist_to_hist( templates[fit_variable]['data'][bin_i], fit_variable_bin_edges[fit_variable] ) h_template_ttjet = value_tuplelist_to_hist( templates[fit_variable]['TTJet'][bin_i], fit_variable_bin_edges[fit_variable] ) h_template_singletop = value_tuplelist_to_hist( templates[fit_variable]['SingleTop'][bin_i], fit_variable_bin_edges[fit_variable] ) h_template_VJets = value_tuplelist_to_hist( templates[fit_variable]['V+Jets'][bin_i], fit_variable_bin_edges[fit_variable] ) h_template_QCD = value_tuplelist_to_hist( templates[fit_variable]['QCD'][bin_i], fit_variable_bin_edges[fit_variable] ) template_histograms[fit_variable][variable_bin] = { 'TTJet' : h_template_ttjet, 'SingleTop' : h_template_singletop, 'V+Jets':h_template_VJets, 'QCD':h_template_QCD } h_data = h_template_data.Clone() h_ttjet = h_template_ttjet.Clone() h_singletop = h_template_singletop.Clone() h_VJets = h_template_VJets.Clone() h_QCD = h_template_QCD.Clone() data_normalisation = data_values[bin_i][0] n_ttjet = fit_results['TTJet'][bin_i][0] n_singletop = fit_results['SingleTop'][bin_i][0] VJets_normalisation = fit_results['V+Jets'][bin_i][0] QCD_normalisation = fit_results['QCD'][bin_i][0] h_data.Scale( data_normalisation ) h_ttjet.Scale( n_ttjet ) h_singletop.Scale( n_singletop ) h_VJets.Scale( VJets_normalisation ) h_QCD.Scale( QCD_normalisation ) h_background = h_VJets + h_QCD + h_singletop for bin_i_data in range( len( h_data ) ): h_data.SetBinError( bin_i_data + 1, sqrt( h_data.GetBinContent( bin_i_data + 1 ) ) ) fit_results_histograms[fit_variable][variable_bin] = { 'data' : h_data, 'signal' : h_ttjet, 'background' : h_background } return template_histograms, fit_results_histograms
def read_fit_templates_and_results_as_histograms(category, channel): global path_to_JSON, variable, met_type templates = read_data_from_JSON(path_to_JSON + '/' + variable + '/fit_results/' + category + '/templates_' + channel + '_' + met_type + '.txt') data_values = read_data_from_JSON(path_to_JSON + '/' + variable + '/fit_results/' + category + '/initial_values_' + channel + '_' + met_type + '.txt')['data'] fit_results = read_data_from_JSON(path_to_JSON + '/' + variable + '/fit_results/' + category + '/fit_results_' + channel + '_' + met_type + '.txt') template_histograms = {} fit_results_histograms = {} for bin_i, variable_bin in enumerate(variable_bins_ROOT[variable]): h_template_data = value_tuplelist_to_hist(templates['data'][bin_i], eta_bin_edges) h_template_signal = value_tuplelist_to_hist(templates['signal'][bin_i], eta_bin_edges) h_template_VJets = value_tuplelist_to_hist(templates['V+Jets'][bin_i], eta_bin_edges) h_template_QCD = value_tuplelist_to_hist(templates['QCD'][bin_i], eta_bin_edges) template_histograms[variable_bin] = { 'signal': h_template_signal, 'V+Jets': h_template_VJets, 'QCD': h_template_QCD } h_data = h_template_data.Clone() h_signal = h_template_signal.Clone() h_VJets = h_template_VJets.Clone() h_QCD = h_template_QCD.Clone() data_normalisation = data_values[bin_i] signal_normalisation = fit_results['signal'][bin_i][0] VJets_normalisation = fit_results['V+Jets'][bin_i][0] QCD_normalisation = fit_results['QCD'][bin_i][0] h_data.Scale(data_normalisation) h_signal.Scale(signal_normalisation) h_VJets.Scale(VJets_normalisation) h_QCD.Scale(QCD_normalisation) h_background = h_VJets + h_QCD for bin_i in range(len(h_data)): h_data.SetBinError(bin_i + 1, sqrt(h_data.GetBinContent(bin_i + 1))) fit_results_histograms[variable_bin] = { 'data': h_data, 'signal': h_signal, 'background': h_background } return template_histograms, fit_results_histograms
def makePurityStabilityPlots(input_file, histogram, bin_edges, channel, variable, isVisiblePhaseSpace): global output_folder, output_formats hist = get_histogram_from_file( histogram, input_file ) print "bin edges contents : ", bin_edges new_hist = rebin_2d( hist, bin_edges, bin_edges ).Clone() # get_bin_content = hist.ProjectionX().GetBinContent purities = calculate_purities( new_hist.Clone() ) stabilities = calculate_stabilities( new_hist.Clone() ) # n_events = [int( get_bin_content( i ) ) for i in range( 1, len( bin_edges ) )] print "purities contents : ", purities print "stabilities contents : ", stabilities hist_stability = value_tuplelist_to_hist(stabilities, bin_edges) hist_purity = value_tuplelist_to_hist(purities, bin_edges) hist_purity.color = 'red' hist_stability.color = 'blue' hist_stability.linewidth = 4 hist_purity.linewidth = 4 x_limits = [bin_edges[0], bin_edges[-1]] y_limits = [0,1] plt.figure( figsize = ( 20, 16 ), dpi = 200, facecolor = 'white' ) ax0 = plt.axes() ax0.minorticks_on() # ax0.grid( True, 'major', linewidth = 2 ) # ax0.grid( True, 'minor' ) plt.tick_params( **CMS.axis_label_major ) plt.tick_params( **CMS.axis_label_minor ) ax0.xaxis.labelpad = 12 ax0.yaxis.labelpad = 12 rplt.hist( hist_stability , stacked=False, axes = ax0, cmap = my_cmap, vmin = 1, label = 'Stability' ) rplt.hist( hist_purity, stacked=False, axes = ax0, cmap = my_cmap, vmin = 1, label = 'Purity' ) ax0.set_xlim( x_limits ) ax0.set_ylim( y_limits ) plt.tick_params( **CMS.axis_label_major ) plt.tick_params( **CMS.axis_label_minor ) x_title = '$' + variables_latex[variable] + '$ [GeV]' plt.xlabel( x_title, CMS.x_axis_title ) leg = plt.legend(loc=4,prop={'size':40}) plt.tight_layout() plt.savefig('test.pdf') save_as_name = 'purityStability_'+channel + '_' + variable + '_' + str(options.CoM) + 'TeV' for output_format in output_formats: plt.savefig( output_folder + save_as_name + '.' + output_format )
def read_fit_templates_and_results_as_histograms(category, channel): global path_to_JSON, variable, met_type templates = read_data_from_JSON( path_to_JSON + "/" + variable + "/fit_results/" + category + "/templates_" + channel + "_" + met_type + ".txt" ) data_values = read_data_from_JSON( path_to_JSON + "/" + variable + "/fit_results/" + category + "/initial_values_" + channel + "_" + met_type + ".txt" )["data"] fit_results = read_data_from_JSON( path_to_JSON + "/" + variable + "/fit_results/" + category + "/fit_results_" + channel + "_" + met_type + ".txt" ) template_histograms = {} fit_results_histograms = {} for bin_i, variable_bin in enumerate(variable_bins_ROOT[variable]): h_template_data = value_tuplelist_to_hist(templates["data"][bin_i], eta_bin_edges) h_template_signal = value_tuplelist_to_hist(templates["signal"][bin_i], eta_bin_edges) h_template_VJets = value_tuplelist_to_hist(templates["V+Jets"][bin_i], eta_bin_edges) h_template_QCD = value_tuplelist_to_hist(templates["QCD"][bin_i], eta_bin_edges) template_histograms[variable_bin] = { "signal": h_template_signal, "V+Jets": h_template_VJets, "QCD": h_template_QCD, } h_data = h_template_data.Clone() h_signal = h_template_signal.Clone() h_VJets = h_template_VJets.Clone() h_QCD = h_template_QCD.Clone() data_normalisation = data_values[bin_i] signal_normalisation = fit_results["signal"][bin_i][0] VJets_normalisation = fit_results["V+Jets"][bin_i][0] QCD_normalisation = fit_results["QCD"][bin_i][0] h_data.Scale(data_normalisation) h_signal.Scale(signal_normalisation) h_VJets.Scale(VJets_normalisation) h_QCD.Scale(QCD_normalisation) h_background = h_VJets + h_QCD for bin_i in range(len(h_data)): h_data.SetBinError(bin_i + 1, sqrt(h_data.GetBinContent(bin_i + 1))) fit_results_histograms[variable_bin] = {"data": h_data, "signal": h_signal, "background": h_background} return template_histograms, fit_results_histograms
def compare_combine_before_after_unfolding_uncertainties(): file_template = 'data/normalisation/background_subtraction/13TeV/' file_template += '{variable}/VisiblePS/central/' file_template += 'unfolded_normalisation_{channel}_RooUnfoldSvd.txt' variables = [ 'MET', 'HT', 'ST', 'NJets', 'lepton_pt', 'abs_lepton_eta', 'WPT' ] # variables = ['ST'] for variable in variables: beforeUnfolding = file_template.format( variable=variable, channel='combinedBeforeUnfolding') afterUnfolding = file_template.format(variable=variable, channel='combined') data = read_data_from_JSON(beforeUnfolding) before_unfolding = data['TTJet_measured'] beforeUnfolding_data = data['TTJet_unfolded'] afterUnfolding_data = read_data_from_JSON( afterUnfolding)['TTJet_unfolded'] before_unfolding = [e / v * 100 for v, e in before_unfolding] beforeUnfolding_data = [e / v * 100 for v, e in beforeUnfolding_data] afterUnfolding_data = [e / v * 100 for v, e in afterUnfolding_data] h_beforeUnfolding = value_tuplelist_to_hist(beforeUnfolding_data, bin_edges_vis[variable]) h_afterUnfolding = value_tuplelist_to_hist(afterUnfolding_data, bin_edges_vis[variable]) h_before_unfolding = value_tuplelist_to_hist(before_unfolding, bin_edges_vis[variable]) properties = Histogram_properties() properties.name = 'compare_combine_before_after_unfolding_uncertainties_{0}'.format( variable) properties.title = 'Comparison of unfolding uncertainties' properties.path = 'plots' properties.has_ratio = False properties.xerr = True properties.x_limits = (bin_edges_vis[variable][0], bin_edges_vis[variable][-1]) properties.x_axis_title = variables_latex[variable] properties.y_axis_title = 'relative uncertainty (\\%)' properties.legend_location = (0.98, 0.95) histograms = { 'Combine before unfolding': h_beforeUnfolding, 'Combine after unfolding': h_afterUnfolding, # 'before unfolding': h_before_unfolding } plot = Plot(histograms, properties) plot.draw_method = 'errorbar' compare_histograms(plot)
def compare_unfolding_uncertainties(): file_template = '/hdfs/TopQuarkGroup/run2/dpsData/' file_template += 'data/normalisation/background_subtraction/13TeV/' file_template += '{variable}/VisiblePS/central/' file_template += 'unfolded_normalisation_combined_RooUnfold{method}.txt' variables = [ 'MET', 'HT', 'ST', 'NJets', 'lepton_pt', 'abs_lepton_eta', 'WPT' ] # variables = ['ST'] for variable in variables: svd = file_template.format(variable=variable, method='Svd') bayes = file_template.format(variable=variable, method='Bayes') data = read_data_from_JSON(svd) before_unfolding = data['TTJet_measured_withoutFakes'] svd_data = data['TTJet_unfolded'] bayes_data = read_data_from_JSON(bayes)['TTJet_unfolded'] before_unfolding = [e / v * 100 for v, e in before_unfolding] svd_data = [e / v * 100 for v, e in svd_data] bayes_data = [e / v * 100 for v, e in bayes_data] h_svd = value_tuplelist_to_hist(svd_data, bin_edges_vis[variable]) h_bayes = value_tuplelist_to_hist(bayes_data, bin_edges_vis[variable]) h_before_unfolding = value_tuplelist_to_hist(before_unfolding, bin_edges_vis[variable]) properties = Histogram_properties() properties.name = 'compare_unfolding_uncertainties_{0}'.format( variable) properties.title = 'Comparison of unfolding uncertainties' properties.path = 'plots' properties.has_ratio = False properties.xerr = True properties.x_limits = (bin_edges_vis[variable][0], bin_edges_vis[variable][-1]) properties.x_axis_title = variables_latex[variable] properties.y_axis_title = 'relative uncertainty (\\%)' properties.legend_location = (0.98, 0.95) histograms = { 'SVD': h_svd, 'Bayes': h_bayes, 'before unfolding': h_before_unfolding } plot = Plot(histograms, properties) plot.draw_method = 'errorbar' compare_histograms(plot)
def compare_combine_before_after_unfolding_uncertainties(): file_template = 'data/normalisation/background_subtraction/13TeV/' file_template += '{variable}/VisiblePS/central/' file_template += 'unfolded_normalisation_{channel}_RooUnfoldSvd.txt' variables = ['MET', 'HT', 'ST', 'NJets', 'lepton_pt', 'abs_lepton_eta', 'WPT'] # variables = ['ST'] for variable in variables: beforeUnfolding = file_template.format( variable=variable, channel='combinedBeforeUnfolding') afterUnfolding = file_template.format( variable=variable, channel='combined') data = read_data_from_JSON(beforeUnfolding) before_unfolding = data['TTJet_measured'] beforeUnfolding_data = data['TTJet_unfolded'] afterUnfolding_data = read_data_from_JSON(afterUnfolding)['TTJet_unfolded'] before_unfolding = [e / v * 100 for v, e in before_unfolding] beforeUnfolding_data = [e / v * 100 for v, e in beforeUnfolding_data] afterUnfolding_data = [e / v * 100 for v, e in afterUnfolding_data] h_beforeUnfolding = value_tuplelist_to_hist( beforeUnfolding_data, bin_edges_vis[variable]) h_afterUnfolding = value_tuplelist_to_hist( afterUnfolding_data, bin_edges_vis[variable]) h_before_unfolding = value_tuplelist_to_hist( before_unfolding, bin_edges_vis[variable]) properties = Histogram_properties() properties.name = 'compare_combine_before_after_unfolding_uncertainties_{0}'.format( variable) properties.title = 'Comparison of unfolding uncertainties' properties.path = 'plots' properties.has_ratio = False properties.xerr = True properties.x_limits = ( bin_edges_vis[variable][0], bin_edges_vis[variable][-1]) properties.x_axis_title = variables_latex[variable] properties.y_axis_title = 'relative uncertainty (\\%)' properties.legend_location = (0.98, 0.95) histograms = {'Combine before unfolding': h_beforeUnfolding, 'Combine after unfolding': h_afterUnfolding, # 'before unfolding': h_before_unfolding } plot = Plot(histograms, properties) plot.draw_method = 'errorbar' compare_histograms(plot)
def compare_unfolding_uncertainties(): file_template = '/hdfs/TopQuarkGroup/run2/dpsData/' file_template += 'data/normalisation/background_subtraction/13TeV/' file_template += '{variable}/VisiblePS/central/' file_template += 'unfolded_normalisation_combined_RooUnfold{method}.txt' variables = ['MET', 'HT', 'ST', 'NJets', 'lepton_pt', 'abs_lepton_eta', 'WPT'] # variables = ['ST'] for variable in variables: svd = file_template.format( variable=variable, method='Svd') bayes = file_template.format( variable=variable, method='Bayes') data = read_data_from_JSON(svd) before_unfolding = data['TTJet_measured_withoutFakes'] svd_data = data['TTJet_unfolded'] bayes_data = read_data_from_JSON(bayes)['TTJet_unfolded'] before_unfolding = [e / v * 100 for v, e in before_unfolding] svd_data = [e / v * 100 for v, e in svd_data] bayes_data = [e / v * 100 for v, e in bayes_data] h_svd = value_tuplelist_to_hist( svd_data, bin_edges_vis[variable]) h_bayes = value_tuplelist_to_hist( bayes_data, bin_edges_vis[variable]) h_before_unfolding = value_tuplelist_to_hist( before_unfolding, bin_edges_vis[variable]) properties = Histogram_properties() properties.name = 'compare_unfolding_uncertainties_{0}'.format( variable) properties.title = 'Comparison of unfolding uncertainties' properties.path = 'plots' properties.has_ratio = False properties.xerr = True properties.x_limits = ( bin_edges_vis[variable][0], bin_edges_vis[variable][-1]) properties.x_axis_title = variables_latex[variable] properties.y_axis_title = 'relative uncertainty (\\%)' properties.legend_location = (0.98, 0.95) histograms = {'SVD': h_svd, 'Bayes': h_bayes, 'before unfolding': h_before_unfolding} plot = Plot(histograms, properties) plot.draw_method = 'errorbar' compare_histograms(plot)
def run_test ( test_data ): ''' Used the test_data to fit the number of events for each process ''' global config data_scale = 1.2 fit_data_collection = FitDataCollection() for fit_variable, fit_input in test_data.iteritems(): # create the histograms mc_histograms = {} for sample, h_input in fit_input.iteritems(): mc_histograms[sample] = value_tuplelist_to_hist( h_input['distribution'], fit_variable_bin_edges[fit_variable] ) real_data = sum( mc_histograms[sample] for sample in mc_histograms.keys() ) # scale data so that the fit does not start in the minimum real_data.Scale( data_scale ) fit_data = FitData( real_data, mc_histograms, fit_boundaries = config.fit_boundaries[fit_variable] ) fit_data_collection.add( fit_data, fit_variable ) # do fit fitter = Minuit( fit_data_collection ) fitter.fit() fit_results = fitter.results # calculate chi2 for each sample chi2_results = {} for sample in fit_results.keys(): true_normalisation = fit_input[sample]['normalisation'] * data_scale # fit_result, fit_error = fit_results[sample] # chi2 = pow( true_normalisation - fit_result, 2 ) / pow( fit_error, 2 ) fit_result, _ = fit_results[sample] chi2 = pow( true_normalisation - fit_result, 2 ) chi2_results[sample] = chi2 return chi2_results
def run_test(test_data): ''' Used the test_data to fit the number of events for each process ''' global config data_scale = 1.2 fit_data_collection = FitDataCollection() for fit_variable, fit_input in test_data.iteritems(): # create the histograms mc_histograms = {} for sample, h_input in fit_input.iteritems(): mc_histograms[sample] = value_tuplelist_to_hist( h_input['distribution'], fit_variable_bin_edges[fit_variable]) real_data = sum(mc_histograms[sample] for sample in mc_histograms.keys()) # scale data so that the fit does not start in the minimum real_data.Scale(data_scale) fit_data = FitData(real_data, mc_histograms, fit_boundaries=config.fit_boundaries[fit_variable]) fit_data_collection.add(fit_data, fit_variable) # do fit fitter = Minuit(fit_data_collection) fitter.fit() fit_results = fitter.results # calculate chi2 for each sample chi2_results = {} for sample in fit_results.keys(): true_normalisation = fit_input[sample]['normalisation'] * data_scale # fit_result, fit_error = fit_results[sample] # chi2 = pow( true_normalisation - fit_result, 2 ) / pow( fit_error, 2 ) fit_result, _ = fit_results[sample] chi2 = pow(true_normalisation - fit_result, 2) chi2_results[sample] = chi2 return chi2_results
def plot_results(results): ''' Takes results fo the form: {centre-of-mass-energy: { channel : { variable : { fit_variable : { test : { sample : []}, } } } } } ''' global options output_base = 'plots/fit_checks/chi2' for COMEnergy in results.keys(): tmp_result_1 = results[COMEnergy] for channel in tmp_result_1.keys(): tmp_result_2 = tmp_result_1[channel] for variable in tmp_result_2.keys(): tmp_result_3 = tmp_result_2[variable] for fit_variable in tmp_result_3.keys(): tmp_result_4 = tmp_result_3[fit_variable] # histograms should be {sample: {test : histogram}} histograms = {} for test, chi2 in tmp_result_4.iteritems(): for sample in chi2.keys(): if not histograms.has_key(sample): histograms[sample] = {} # reverse order of test and sample histograms[sample][test] = value_tuplelist_to_hist( chi2[sample], bin_edges[variable]) for sample in histograms.keys(): hist_properties = Histogram_properties() hist_properties.name = sample.replace('+', '') + '_chi2' hist_properties.title = '$\\chi^2$ distribution for fit output (' + sample + ')' hist_properties.x_axis_title = '$' + latex_labels.variables_latex[ variable] + '$ [TeV]' hist_properties.y_axis_title = '$\chi^2 = \\left({N_{fit}} - N_{{exp}}\\right)^2$' hist_properties.set_log_y = True hist_properties.y_limits = (1e-20, 1e20) path = output_base + '/' + COMEnergy + 'TeV/' + channel + '/' + variable + '/' + fit_variable + '/' if options.test: path = output_base + '/test/' measurements = {} for test, histogram in histograms[sample].iteritems(): measurements[test.replace('_', ' ')] = histogram compare_measurements( {}, measurements, show_measurement_errors=False, histogram_properties=hist_properties, save_folder=path, save_as=['pdf'])
def read_fit_templates_and_results_as_histograms(category, channel): global path_to_JSON, variable, met_type templates = read_data_from_JSON(path_to_JSON + '/fit_results/' + category + '/templates_' + channel + '_' + met_type + '.txt') data_values = read_data_from_JSON(path_to_JSON + '/fit_results/' + category + '/initial_values_' + channel + '_' + met_type + '.txt')['data'] fit_results = read_data_from_JSON(path_to_JSON + '/fit_results/' + category + '/fit_results_' + channel + '_' + met_type + '.txt') template_histograms = {} fit_results_histograms = {} for bin_i, variable_bin in enumerate(variable_bins_ROOT[variable]): h_template_data = value_tuplelist_to_hist(templates['data'][bin_i], eta_bin_edges) h_template_signal = value_tuplelist_to_hist(templates['signal'][bin_i], eta_bin_edges) h_template_VJets = value_tuplelist_to_hist(templates['V+Jets'][bin_i], eta_bin_edges) h_template_QCD = value_tuplelist_to_hist(templates['QCD'][bin_i], eta_bin_edges) template_histograms[variable_bin] = { 'signal':h_template_signal, 'V+Jets':h_template_VJets, 'QCD':h_template_QCD } h_data = h_template_data.Clone() h_signal = h_template_signal.Clone() h_VJets = h_template_VJets.Clone() h_QCD = h_template_QCD.Clone() data_normalisation = data_values[bin_i] signal_normalisation = fit_results['signal'][bin_i][0] VJets_normalisation = fit_results['V+Jets'][bin_i][0] QCD_normalisation = fit_results['QCD'][bin_i][0] h_data.Scale(data_normalisation) h_signal.Scale(signal_normalisation) h_VJets.Scale(VJets_normalisation) h_QCD.Scale(QCD_normalisation) h_background = h_VJets + h_QCD for bin_i in range(len(h_data)): h_data.SetBinError(bin_i+1, sqrt(h_data.GetBinContent(bin_i+1))) fit_results_histograms[variable_bin] = { 'data':h_data, 'signal':h_signal, 'background':h_background } return template_histograms, fit_results_histograms
def plot_results ( results ): ''' Takes results fo the form: {centre-of-mass-energy: { channel : { variable : { fit_variable : { test : { sample : []}, } } } } } ''' global options output_base = 'plots/fit_checks/chi2' for COMEnergy in results.keys(): tmp_result_1 = results[COMEnergy] for channel in tmp_result_1.keys(): tmp_result_2 = tmp_result_1[channel] for variable in tmp_result_2.keys(): tmp_result_3 = tmp_result_2[variable] for fit_variable in tmp_result_3.keys(): tmp_result_4 = tmp_result_3[fit_variable] # histograms should be {sample: {test : histogram}} histograms = {} for test, chi2 in tmp_result_4.iteritems(): for sample in chi2.keys(): if not histograms.has_key(sample): histograms[sample] = {} # reverse order of test and sample histograms[sample][test] = value_tuplelist_to_hist(chi2[sample], bin_edges[variable]) for sample in histograms.keys(): hist_properties = Histogram_properties() hist_properties.name = sample.replace('+', '') + '_chi2' hist_properties.title = '$\\chi^2$ distribution for fit output (' + sample + ')' hist_properties.x_axis_title = '$' + latex_labels.variables_latex[variable] + '$ [TeV]' hist_properties.y_axis_title = '$\chi^2 = \\left({N_{fit}} - N_{{exp}}\\right)^2$' hist_properties.set_log_y = True hist_properties.y_limits = (1e-20, 1e20) path = output_base + '/' + COMEnergy + 'TeV/' + channel + '/' + variable + '/' + fit_variable + '/' if options.test: path = output_base + '/test/' measurements = {} for test, histogram in histograms[sample].iteritems(): measurements[test.replace('_',' ')] = histogram compare_measurements({}, measurements, show_measurement_errors = False, histogram_properties = hist_properties, save_folder = path, save_as = ['pdf'])
def makePurityStabilityPlots(input_file, histogram, bin_edges, channel, variable, isVisiblePhaseSpace): global output_folder, output_formats hist = get_histogram_from_file(histogram, input_file) # get_bin_content = hist.ProjectionX().GetBinContent purities = calculate_purities(hist.Clone()) stabilities = calculate_stabilities(hist.Clone()) # n_events = [int( get_bin_content( i ) ) for i in range( 1, len( bin_edges ) )] hist_stability = value_tuplelist_to_hist(stabilities, bin_edges) hist_purity = value_tuplelist_to_hist(purities, bin_edges) hist_purity.color = 'red' hist_stability.color = 'blue' hist_stability.linewidth = 4 hist_purity.linewidth = 4 x_limits = [bin_edges[0], bin_edges[-1]] y_limits = [0, 1] plt.figure(figsize=(20, 16), dpi=200, facecolor='white') ax0 = plt.axes() ax0.minorticks_on() # ax0.grid( True, 'major', linewidth = 2 ) # ax0.grid( True, 'minor' ) plt.tick_params(**CMS.axis_label_major) plt.tick_params(**CMS.axis_label_minor) ax0.xaxis.labelpad = 12 ax0.yaxis.labelpad = 12 rplt.hist(hist_stability, stacked=False, axes=ax0, cmap=my_cmap, vmin=1, label='Stability') rplt.hist(hist_purity, stacked=False, axes=ax0, cmap=my_cmap, vmin=1, label='Purity') ax0.set_xlim(x_limits) ax0.set_ylim(y_limits) plt.tick_params(**CMS.axis_label_major) plt.tick_params(**CMS.axis_label_minor) x_title = '$' + variables_latex[variable] + '$ [GeV]' plt.xlabel(x_title, CMS.x_axis_title) leg = plt.legend(loc=4, prop={'size': 40}) plt.tight_layout() plt.savefig('test.pdf') save_as_name = 'purityStability_' + channel + '_' + variable + '_' + str( options.CoM) + 'TeV' for output_format in output_formats: plt.savefig(output_folder + save_as_name + '.' + output_format)