Skip to content
Snippets Groups Projects
Commit 7c1e4ffa authored by Nico Harringer's avatar Nico Harringer
Browse files

Merge branch '135-improving-fiducial_xsec_calculator' into 'master'

Resolve "Improving fiducial_xsec_calculator"

Closes #135

See merge request HiggsDNA-project/HiggsDNA!247
parents fe618a07 5b020b51
No related branches found
No related tags found
1 merge request!247Resolve "Improving fiducial_xsec_calculator"
Pipeline #7771154 passed
...@@ -3,7 +3,7 @@ from higgs_dna.systematics import object_corrections as available_object_correct ...@@ -3,7 +3,7 @@ from higgs_dna.systematics import object_corrections as available_object_correct
from higgs_dna.systematics import weight_corrections as available_weight_corrections from higgs_dna.systematics import weight_corrections as available_weight_corrections
from higgs_dna.utils.dumping_utils import diphoton_ak_array, dump_ak_array, diphoton_list_to_pandas, dump_pandas from higgs_dna.utils.dumping_utils import diphoton_ak_array, dump_ak_array, diphoton_list_to_pandas, dump_pandas
from higgs_dna.tools.gen_helpers import get_fiducial_flag, get_genJets from higgs_dna.tools.gen_helpers import get_fiducial_flag, get_genJets, get_higgs_gen_attributes
from higgs_dna.utils.misc_utils import choose_jet from higgs_dna.utils.misc_utils import choose_jet
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
...@@ -134,6 +134,7 @@ class ParticleLevelProcessor(HggBaseProcessor): ...@@ -134,6 +134,7 @@ class ParticleLevelProcessor(HggBaseProcessor):
diphotons['fiducialClassicalFlag'] = get_fiducial_flag(events, flavour='Classical') diphotons['fiducialClassicalFlag'] = get_fiducial_flag(events, flavour='Classical')
diphotons['fiducialGeometricFlag'] = get_fiducial_flag(events, flavour='Geometric') diphotons['fiducialGeometricFlag'] = get_fiducial_flag(events, flavour='Geometric')
diphotons['PTH'], diphotons['YH'] = get_higgs_gen_attributes(events)
genJets = get_genJets(self, events, pt_cut=30., eta_cut=2.5) genJets = get_genJets(self, events, pt_cut=30., eta_cut=2.5)
diphotons['NJ'] = awkward.num(genJets) diphotons['NJ'] = awkward.num(genJets)
...@@ -153,11 +154,16 @@ class ParticleLevelProcessor(HggBaseProcessor): ...@@ -153,11 +154,16 @@ class ParticleLevelProcessor(HggBaseProcessor):
diphotons["genWeight"] = events.genWeight diphotons["genWeight"] = events.genWeight
diphotons["dZ"] = events.GenVtx.z - events.PV.z diphotons["dZ"] = events.GenVtx.z - events.PV.z
# Necessary for differential xsec measurements in final fits ("truth" variables) # Necessary for differential xsec measurements in final fits ("truth" variables)
diphotons["HTXS_Higgs_pt"] = events.HTXS.Higgs_pt # diphotons["HTXS_Higgs_pt"] = events.HTXS.Higgs_pt
diphotons["HTXS_Higgs_y"] = events.HTXS.Higgs_y # diphotons["HTXS_Higgs_y"] = events.HTXS.Higgs_y
diphotons["HTXS_njets30"] = events.HTXS.njets30 # Need to clarify if this variable is suitable, does it fulfill abs(eta_j) < 2.5? Probably not # diphotons["HTXS_njets30"] = events.HTXS.njets30 # Need to clarify if this variable is suitable, does it fulfill abs(eta_j) < 2.5? Probably not
# Preparation for HTXS measurements later, start with stage 0 to disentangle VH into WH and ZH for final fits # Preparation for HTXS measurements later, start with stage 0 to disentangle VH into WH and ZH for final fits
diphotons["HTXS_stage_0"] = events.HTXS.stage_0 # diphotons["HTXS_stage_0"] = events.HTXS.stage_0
for i in range(9):
diphotons["LHEScaleWeight_" + str(i)] = events.LHEScaleWeight[:,i]
for i in range(103):
diphotons["LHEPdfWeight_" + str(i)] = events.LHEPdfWeight[:,i]
# return if there is no surviving events # return if there is no surviving events
if len(diphotons) == 0: if len(diphotons) == 0:
......
### Examples of command line
# python fiducial_xsec_calculator.py PATH_TO_FOLDER_WITH_ParticleLevelProcessor_OUTPUT --process all --bin '|0|0.15|0.3|0.6|0.9|2.5|' --era all --obs YH
## Without NNLOPS reweighing
# python fiducial_xsec_calculator.py /work/atarabin/HiggsDNA/prod/particleLevel/ --process ggH --bin '|0|1|2|3|100|' --era all --obs NJ --weight "genWeight"
## POWHEG
# python fiducial_xsec_calculator.py /work/atarabin/HiggsDNA/prod/particleLevel/ --process ggH --bin '|0|15|30|45|80|120|200|350|1000|' --era all --powheg
## For inclusive XS
# python fiducial_xsec_calculator.py /work/atarabin/HiggsDNA/prod/particleLevel/ --process all --bin '|0|500|' --era all
import argparse import argparse
import awkward as ak import awkward as ak
import numpy as np import numpy as np
...@@ -13,8 +21,9 @@ parser.add_argument('path', type = str, help = "Path to the top-level folder con ...@@ -13,8 +21,9 @@ parser.add_argument('path', type = str, help = "Path to the top-level folder con
parser.add_argument('--process', type = str, choices = available_processes, default = 'ggH', help = "Please specify the process(es) for which you want to calculate the inclusive fiducial xsec.") parser.add_argument('--process', type = str, choices = available_processes, default = 'ggH', help = "Please specify the process(es) for which you want to calculate the inclusive fiducial xsec.")
parser.add_argument('--year', type = str, choices = available_years, default = '2022', help = 'Please specify the desired year if you want to combine samples from multiple eras.') parser.add_argument('--year', type = str, choices = available_years, default = '2022', help = 'Please specify the desired year if you want to combine samples from multiple eras.')
parser.add_argument('--era', type = str, choices = available_eras, default = 'postEE', help = "Please specify the era(s) that you want to run over. If you specify 'all', an inverse variance weighting is performed to increase the precision.") parser.add_argument('--era', type = str, choices = available_eras, default = 'postEE', help = "Please specify the era(s) that you want to run over. If you specify 'all', an inverse variance weighting is performed to increase the precision.")
parser.add_argument('--bin', type = str, default = '|0|5000|', help = "Bin boundaries of the differential XS.") parser.add_argument('--bin', type = str, default = '|0|5000|', help = "Bin boundaries of the differential XS. The default")
parser.add_argument('--obs', type = str, default = 'PTH', help = "Name of the differential observable.") parser.add_argument('--obs', type = str, default = 'PTH', help = "Name of the differential observable: PTH, YH, NJ")
parser.add_argument('--weight', type = str, default = 'weight', help = "Weight to use.")
parser.add_argument('--powheg', action="store_true", help="To process powheg sample.") parser.add_argument('--powheg', action="store_true", help="To process powheg sample.")
args = parser.parse_args() args = parser.parse_args()
...@@ -48,6 +57,30 @@ XS_map = {'13': {'ggH': 48.58, 'VBFH': 3.782, 'VH': 2.2569, 'ttH': 0.5071}, ...@@ -48,6 +57,30 @@ XS_map = {'13': {'ggH': 48.58, 'VBFH': 3.782, 'VH': 2.2569, 'ttH': 0.5071},
'13p6': {'ggH': 51.96, 'VBFH': 4.067, 'VH': 2.3781, 'ttH': 0.5638}, '13p6': {'ggH': 51.96, 'VBFH': 4.067, 'VH': 2.3781, 'ttH': 0.5638},
'14': {'ggH': 54.67, 'VBFH': 4.278, 'VH': 2.4991, 'ttH': 0.6137},} '14': {'ggH': 54.67, 'VBFH': 4.278, 'VH': 2.4991, 'ttH': 0.6137},}
XS_map_scale_up = {'13': {},
'13p6': {'ggH': 53.98644, 'VBFH': 4.087335, 'VH': 2.3376723, 'ttH': 0.597628},
'14': {},}
XS_map_scale_dn = {'13': {},
'13p6': {'ggH': 49.93356, 'VBFH': 4.054799, 'VH': 2.4185277, 'ttH': 0.5113666},
'14': {},}
XS_map_pdf_up = {'13': {},
'13p6': {'ggH': 52.94724, 'VBFH': 4.152407, 'VH': 2.4137715, 'ttH': 0.580714},
'14': {},}
XS_map_pdf_dn = {'13': {},
'13p6': {'ggH': 50.97276, 'VBFH': 3.981593, 'VH': 2.3424285, 'ttH': 0.546886},
'14': {},}
XS_map_alphaS_up = {'13': {},
'13p6': {'ggH': 53.31096, 'VBFH': 4.087335, 'VH': 2.3995029, 'ttH': 0.575076},
'14': {},}
XS_map_alphaS_dn = {'13': {},
'13p6': {'ggH': 50.60904, 'VBFH': 4.046665, 'VH': 2.3566971, 'ttH': 0.552524},
'14': {},}
# This depends on how you named your samples in HiggsDNA # This depends on how you named your samples in HiggsDNA
processMap = {'ggH': 'GluGluHtoGG', processMap = {'ggH': 'GluGluHtoGG',
...@@ -63,13 +96,37 @@ mass_points = [120,125,130] # The fiducial acceptance should be extrapolated at ...@@ -63,13 +96,37 @@ mass_points = [120,125,130] # The fiducial acceptance should be extrapolated at
mass_powheg = {120:125, 125:125, 130:125} mass_powheg = {120:125, 125:125, 130:125}
fid_xsecs_per_bin = {} fid_xsecs_per_bin = {}
fid_xsecs_per_bin_scale_up = {}
fid_xsecs_per_bin_scale_dn = {}
fid_xsecs_per_bin_pdf_up = {}
fid_xsecs_per_bin_pdf_dn = {}
fid_xsecs_per_bin_alpha_up = {}
fid_xsecs_per_bin_alpha_dn = {}
for b in range(len(obs_bins)-1): for b in range(len(obs_bins)-1):
fid_xsecs_per_bin_process = {} fid_xsecs_per_bin_process = {}
fid_xsecs_per_bin_process_scale_up = {}
fid_xsecs_per_bin_process_scale_dn = {}
fid_xsecs_per_bin_process_pdf_up = {}
fid_xsecs_per_bin_process_pdf_dn = {}
fid_xsecs_per_bin_process_alpha_up = {}
fid_xsecs_per_bin_process_alpha_dn = {}
for process in processes: for process in processes:
print(f'INFO: Now extracting fraction of in-fiducial events for process {process} ...') print(f'INFO: Now extracting fraction of in-fiducial events for process {process} ...')
in_frac_per_mass = {} in_frac_per_mass = {}
in_frac_per_mass_scale_up = {}
in_frac_per_mass_scale_dn = {}
in_frac_per_mass_pdf_up = {}
in_frac_per_mass_pdf_dn = {}
in_frac_per_mass_alpha_up = {}
in_frac_per_mass_alpha_dn = {}
for mass in mass_points: for mass in mass_points:
in_frac_per_mass_era = {} in_frac_per_mass_era = {}
in_frac_per_mass_era_scale_up = {}
in_frac_per_mass_era_scale_dn = {}
in_frac_per_mass_era_pdf_up = {}
in_frac_per_mass_era_pdf_dn = {}
in_frac_per_mass_era_alpha_up = {}
in_frac_per_mass_era_alpha_dn = {}
sumw2_tmp = [] sumw2_tmp = []
for era in eras: for era in eras:
print(f'INFO: Now extracting numbers for era {era}, process {process}, and bin {b} ...') print(f'INFO: Now extracting numbers for era {era}, process {process}, and bin {b} ...')
...@@ -78,37 +135,163 @@ for b in range(len(obs_bins)-1): ...@@ -78,37 +135,163 @@ for b in range(len(obs_bins)-1):
if args.powheg: process_string = path_folder + processMap[process] + '_M-' + str(mass_powheg[mass]) + '_powheg' if args.powheg: process_string = path_folder + processMap[process] + '_M-' + str(mass_powheg[mass]) + '_powheg'
arr = ak.from_parquet(process_string) arr = ak.from_parquet(process_string)
# Calculating the relevant fractions # Calculating the relevant fractions
inFiducialFlag = (arr.fiducialGeometricFlag == True) & (abs(arr[args.obs]) > obs_bins[b]) & (abs(arr[args.obs]) <= obs_bins[b+1]) # Only for this type of tagger right now, can be customised in the future inFiducialFlag = (arr.fiducialGeometricFlag == True) & (abs(arr[args.obs]) >= obs_bins[b]) & (abs(arr[args.obs]) < obs_bins[b+1]) # Only for this type of tagger right now, can be customised in the future
sumwAll = ak.sum(arr.weight)
sumwIn = ak.sum(arr.weight[(inFiducialFlag)]) sumwAll = ak.sum(arr[args.weight])
sumwIn = ak.sum(arr[args.weight][(inFiducialFlag)])
in_frac = sumwIn/sumwAll in_frac = sumwIn/sumwAll
in_frac_scale = []
for i in [0,1,3,5,7,8]:
sumwAll = ak.sum(arr[args.weight] * arr["LHEScaleWeight_"+str(i)])
sumwIn = ak.sum(arr[args.weight][(inFiducialFlag)] * arr["LHEScaleWeight_"+str(i)][(inFiducialFlag)])
in_frac_scale.append(sumwIn/sumwAll)
in_frac_scale_up = max(in_frac_scale)
in_frac_scale_dn = min(in_frac_scale)
in_frac_pdf = []
for i in range(1,101):
sumwAll = ak.sum(arr[args.weight] * arr["LHEPdfWeight_"+str(i)])
sumwIn = ak.sum(arr[args.weight][(inFiducialFlag)] * arr["LHEPdfWeight_"+str(i)][(inFiducialFlag)])
in_frac_pdf.append(sumwIn/sumwAll)
in_frac_pdf = np.array(in_frac_pdf)
## Formula taken from https://arxiv.org/pdf/1510.03865 (Eq. 20)
in_frac_pdf = np.sqrt(np.sum(np.square(in_frac_pdf - in_frac)))
in_frac_pdf_up = in_frac + in_frac_pdf
in_frac_pdf_dn = in_frac - in_frac_pdf
sumwAll = ak.sum(arr[args.weight] * arr["LHEPdfWeight_101"])
sumwIn = ak.sum(arr[args.weight][(inFiducialFlag)] * arr["LHEPdfWeight_101"][(inFiducialFlag)])
in_frac_alpha_up = sumwIn/sumwAll
sumwAll = ak.sum(arr[args.weight] * arr["LHEPdfWeight_102"])
sumwIn = ak.sum(arr[args.weight][(inFiducialFlag)] * arr["LHEPdfWeight_102"][(inFiducialFlag)])
in_frac_alpha_dn = sumwIn/sumwAll
print(f"INFO: Fraction of in-fiducial events: {in_frac} ...") print(f"INFO: Fraction of in-fiducial events: {in_frac} ...")
print(f"INFO: Fraction of in-fiducial events scale up: {in_frac_scale_up} ...")
print(f"INFO: Fraction of in-fiducial events scale dn: {in_frac_scale_dn} ...")
print(f"INFO: Fraction of in-fiducial events pdf up: {in_frac_pdf_up} ...")
print(f"INFO: Fraction of in-fiducial events pdf dn: {in_frac_pdf_dn} ...")
print(f"INFO: Fraction of in-fiducial events alpha up: {in_frac_alpha_up} ...")
print(f"INFO: Fraction of in-fiducial events alpha dn: {in_frac_alpha_dn} ...")
sumw2 = ak.sum(arr.weight[(inFiducialFlag)]**2) # This is the MC stat variance sumw2 = ak.sum(arr[args.weight][(inFiducialFlag)]**2) # This is the MC stat variance
sumw2_tmp.append(sumw2) sumw2_tmp.append(sumw2)
in_frac_per_mass_era[era] = in_frac * 1/sumw2 in_frac_per_mass_era[era] = in_frac * 1/sumw2
in_frac_per_mass_era_scale_up[era] = in_frac_scale_up * 1/sumw2
in_frac_per_mass_era_scale_dn[era] = in_frac_scale_dn * 1/sumw2
in_frac_per_mass_era_pdf_up[era] = in_frac_pdf_up * 1/sumw2
in_frac_per_mass_era_pdf_dn[era] = in_frac_pdf_dn * 1/sumw2
in_frac_per_mass_era_alpha_up[era] = in_frac_alpha_up * 1/sumw2
in_frac_per_mass_era_alpha_dn[era] = in_frac_alpha_dn * 1/sumw2
sumw2_tmp = np.asarray(sumw2_tmp) sumw2_tmp = np.asarray(sumw2_tmp)
result = np.sum(np.asarray([in_frac_per_mass_era[era] for era in eras])) result = np.sum(np.asarray([in_frac_per_mass_era[era] for era in eras]))
in_frac_per_mass[mass] = result / np.sum(1/sumw2_tmp) in_frac_per_mass[mass] = result / np.sum(1/sumw2_tmp)
result = np.sum(np.asarray([in_frac_per_mass_era_scale_up[era] for era in eras]))
in_frac_per_mass_scale_up[mass] = result / np.sum(1/sumw2_tmp)
result = np.sum(np.asarray([in_frac_per_mass_era_scale_dn[era] for era in eras]))
in_frac_per_mass_scale_dn[mass] = result / np.sum(1/sumw2_tmp)
result = np.sum(np.asarray([in_frac_per_mass_era_pdf_up[era] for era in eras]))
in_frac_per_mass_pdf_up[mass] = result / np.sum(1/sumw2_tmp)
result = np.sum(np.asarray([in_frac_per_mass_era_pdf_dn[era] for era in eras]))
in_frac_per_mass_pdf_dn[mass] = result / np.sum(1/sumw2_tmp)
result = np.sum(np.asarray([in_frac_per_mass_era_alpha_up[era] for era in eras]))
in_frac_per_mass_alpha_up[mass] = result / np.sum(1/sumw2_tmp)
result = np.sum(np.asarray([in_frac_per_mass_era_alpha_dn[era] for era in eras]))
in_frac_per_mass_alpha_dn[mass] = result / np.sum(1/sumw2_tmp)
points = [in_frac_per_mass[p] for p in mass_points] points = [in_frac_per_mass[p] for p in mass_points]
spline = interpolate.splrep(mass_points, points, k=2) spline = interpolate.splrep(mass_points, points, k=2)
fid_xsecs_per_bin_process[process] = float(interpolate.splev(125.38, spline)) * XS_map['13p6'][process] * 1000 * BR fid_xsecs_per_bin_process[process] = float(interpolate.splev(125.38, spline)) * XS_map['13p6'][process] * 1000 * BR
points = [in_frac_per_mass_scale_up[p] for p in mass_points]
spline = interpolate.splrep(mass_points, points, k=2)
fid_xsecs_per_bin_process_scale_up[process] = float(interpolate.splev(125.38, spline)) * XS_map_scale_up['13p6'][process] * 1000 * BR
points = [in_frac_per_mass_scale_dn[p] for p in mass_points]
spline = interpolate.splrep(mass_points, points, k=2)
fid_xsecs_per_bin_process_scale_dn[process] = float(interpolate.splev(125.38, spline)) * XS_map_scale_dn['13p6'][process] * 1000 * BR
points = [in_frac_per_mass_pdf_up[p] for p in mass_points]
spline = interpolate.splrep(mass_points, points, k=2)
fid_xsecs_per_bin_process_pdf_up[process] = float(interpolate.splev(125.38, spline)) * XS_map_pdf_up['13p6'][process] * 1000 * BR
points = [in_frac_per_mass_pdf_dn[p] for p in mass_points]
spline = interpolate.splrep(mass_points, points, k=2)
fid_xsecs_per_bin_process_pdf_dn[process] = float(interpolate.splev(125.38, spline)) * XS_map_pdf_dn['13p6'][process] * 1000 * BR
points = [in_frac_per_mass_alpha_up[p] for p in mass_points]
spline = interpolate.splrep(mass_points, points, k=2)
fid_xsecs_per_bin_process_alpha_up[process] = float(interpolate.splev(125.38, spline)) * XS_map_alphaS_up['13p6'][process] * 1000 * BR
points = [in_frac_per_mass_alpha_dn[p] for p in mass_points]
spline = interpolate.splrep(mass_points, points, k=2)
fid_xsecs_per_bin_process_alpha_dn[process] = float(interpolate.splev(125.38, spline)) * XS_map_alphaS_dn['13p6'][process] * 1000 * BR
fid_xsecs_per_bin[b] = np.sum(np.asarray([fid_xsecs_per_bin_process[process] for process in processes])) fid_xsecs_per_bin[b] = np.sum(np.asarray([fid_xsecs_per_bin_process[process] for process in processes]))
print(f"The fiducial cross section for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin[b]} fb") print(f"The fiducial cross section for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin[b]} fb")
fid_xsecs_per_bin_scale_up[b] = np.sum(np.asarray([fid_xsecs_per_bin_process_scale_up[process] for process in processes]))
print(f"The fiducial cross section (scale_up) for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin_scale_up[b]} fb")
fid_xsecs_per_bin_scale_dn[b] = np.sum(np.asarray([fid_xsecs_per_bin_process_scale_dn[process] for process in processes]))
print(f"The fiducial cross section (scale_dn) for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin_scale_dn[b]} fb")
fid_xsecs_per_bin_pdf_up[b] = np.sum(np.asarray([fid_xsecs_per_bin_process_pdf_up[process] for process in processes]))
print(f"The fiducial cross section (pdf_up) for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin_pdf_up[b]} fb")
fid_xsecs_per_bin_pdf_dn[b] = np.sum(np.asarray([fid_xsecs_per_bin_process_pdf_dn[process] for process in processes]))
print(f"The fiducial cross section (pdf_dn) for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin_pdf_dn[b]} fb")
fid_xsecs_per_bin_alpha_up[b] = np.sum(np.asarray([fid_xsecs_per_bin_process_alpha_up[process] for process in processes]))
print(f"The fiducial cross section (alpha_up) for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin_alpha_up[b]} fb")
fid_xsecs_per_bin_alpha_dn[b] = np.sum(np.asarray([fid_xsecs_per_bin_process_alpha_dn[process] for process in processes]))
print(f"The fiducial cross section (alpha_dn) for {args.obs} in [{obs_bins[b]},{obs_bins[b+1]}] is: {fid_xsecs_per_bin_alpha_dn[b]} fb")
final_fid_xsec = np.sum(np.asarray([fid_xsecs_per_bin[b] for b in range(len(obs_bins)-1)])) final_fid_xsec = np.sum(np.asarray([fid_xsecs_per_bin[b] for b in range(len(obs_bins)-1)]))
print(f"The inclusive fiducial cross section is given by: {final_fid_xsec} fb") print(f"The inclusive fiducial cross section is given by: {final_fid_xsec} fb")
final_fid_xsec_scale_up = np.sum(np.asarray([fid_xsecs_per_bin_scale_up[b] for b in range(len(obs_bins)-1)]))
print(f"The inclusive fiducial cross section (scale up) is given by: {final_fid_xsec_scale_up} fb")
final_fid_xsec_scale_dn = np.sum(np.asarray([fid_xsecs_per_bin_scale_dn[b] for b in range(len(obs_bins)-1)]))
print(f"The inclusive fiducial cross section (scale dn) is given by: {final_fid_xsec_scale_dn} fb")
final_fid_xsec_pdf_up = np.sum(np.asarray([fid_xsecs_per_bin_pdf_up[b] for b in range(len(obs_bins)-1)]))
print(f"The inclusive fiducial cross section (pdf_up) is given by: {final_fid_xsec_pdf_up} fb")
final_fid_xsec_pdf_dn = np.sum(np.asarray([fid_xsecs_per_bin_pdf_dn[b] for b in range(len(obs_bins)-1)]))
print(f"The inclusive fiducial cross section (pdf_dn) is given by: {final_fid_xsec_pdf_dn} fb")
final_fid_xsec_alpha_up = np.sum(np.asarray([fid_xsecs_per_bin_alpha_up[b] for b in range(len(obs_bins)-1)]))
print(f"The inclusive fiducial cross section (alpha_up) is given by: {final_fid_xsec_alpha_up} fb")
final_fid_xsec_alpha_dn = np.sum(np.asarray([fid_xsecs_per_bin_alpha_dn[b] for b in range(len(obs_bins)-1)]))
print(f"The inclusive fiducial cross section (alpha_dn) is given by: {final_fid_xsec_alpha_dn} fb")
output = 'fidXS_'+args.obs+'_'+args.process output = 'fidXS_'+args.obs+'_'+args.process
if args.powheg: output += '_powheg' if args.powheg: output += '_powheg'
if args.weight != "weight": output += '_'+args.weight
with open(output+'.py', 'w') as f: with open(output+'.py', 'w') as f:
f.write('Boundaries = '+str(obs_bins)+' \n') f.write('Boundaries = '+str(obs_bins)+' \n')
f.write('fidXS = '+str(list(fid_xsecs_per_bin.values()))+' \n') f.write('fidXS = '+str(list(fid_xsecs_per_bin.values()))+' \n')
f.write('fidXS_scale_up = '+str(list(fid_xsecs_per_bin_scale_up.values()))+' \n')
f.write('fidXS_scale_dn = '+str(list(fid_xsecs_per_bin_scale_dn.values()))+' \n')
f.write('fidXS_pdf_up = '+str(list(fid_xsecs_per_bin_pdf_up.values()))+' \n')
f.write('fidXS_pdf_dn = '+str(list(fid_xsecs_per_bin_pdf_dn.values()))+' \n')
f.write('fidXS_alpha_up = '+str(list(fid_xsecs_per_bin_alpha_up.values()))+' \n')
f.write('fidXS_alpha_dn = '+str(list(fid_xsecs_per_bin_alpha_dn.values()))+' \n')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment