def ggTauTau_inclusive_preselection(events, photons, electrons, muons, taus, options, debug): cut_diagnostics = utils.CutDiagnostics(events = events, debug = debug, cut_set = "[analysis_selections.py : ggTauTau_inclusive_preselection]") # Get number of electrons, muons, taus selected_electrons = electrons[lepton_selections.select_electrons(events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons(events, photons, muons, options, debug)] selected_taus = taus[tau_selections.select_taus(events, photons, selected_muons, selected_electrons, taus, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_taus = awkward.num(selected_taus) # Require >= 1 lep/tau n_leptons_and_taus = n_electrons + n_muons + n_taus lep_tau_cut = n_leptons_and_taus >= options["n_leptons_and_taus"] # Require OS leptons/taus for events with 2 leptons/taus sum_charge = awkward.sum(selected_electrons.charge, axis=1) + awkward.sum(selected_muons.charge, axis=1) + awkward.sum(selected_taus.charge, axis=1) charge_cut = sum_charge == 0 two_leptons = n_leptons_and_taus == 2 not_two_leptons = n_leptons_and_taus != 2 os_cut = (two_leptons & charge_cut) | not_two_leptons # only require 2 OS leptons if there are ==2 leptons in the event all_cuts = lep_tau_cut & os_cut cut_diagnostics.add_cuts([lep_tau_cut, os_cut, all_cuts], ["N_leptons + N_taus >= 1", "OS dileptons", "all"]) return events[all_cuts], photons[all_cuts], selected_electrons[all_cuts], selected_muons[all_cuts], selected_taus[all_cuts]
def diphoton_preselection_full(events, photons, options, debug): cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[photon_selections.py : diphoton_preselection]") selected_photons = photons[photon_selections.select_photons( events, photons, options, debug)]
def tth_hadronic_preselection(events, photons, electrons, muons, jets, options, debug): cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[analysis_selections.py : tth_hadronic_preselection]") # Get number of electrons, muons selected_electrons = electrons[lepton_selections.select_electrons( events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons( events, photons, muons, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_leptons = n_electrons + n_muons # Get number of jets selected_jets = jets[jet_selections.select_jets(events, photons, selected_electrons, selected_muons, None, jets, options, debug)] n_jets = awkward.num(selected_jets) # Get number of b-jets selected_bjets = selected_jets[jet_selections.select_bjets( selected_jets, options, debug)] n_bjets = awkward.num(selected_bjets) lep_cut = n_leptons == 0 jet_cut = n_jets >= 3 bjet_cut = n_bjets >= 1 all_cuts = lep_cut & jet_cut & bjet_cut cut_diagnostics.add_cuts( [lep_cut, jet_cut, bjet_cut, all_cuts], ["N_leptons == 0", "N_jets >= 3", "N_bjets >= 1", "all"]) # Keep only selected events selected_events = events[all_cuts] selected_photons = photons[all_cuts] selected_electrons = selected_electrons[all_cuts] selected_muons = selected_muons[all_cuts] selected_jets = selected_jets[all_cuts] # Calculate event-level variables selected_events = lepton_selections.set_electrons(selected_events, selected_electrons, debug) selected_events = lepton_selections.set_muons(selected_events, selected_muons, debug) selected_events = jet_selections.set_jets(selected_events, selected_jets, options, debug) return selected_events
def tth_leptonic_preselection(events, photons, electrons, muons, jets, options, debug): """ Performs tth leptonic preselection, requiring >= 1 lepton and >= 1 jet Assumes diphoton preselection has already been applied. Also calculates relevant event-level variables. """ cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[analysis_selections.py : tth_leptonic_preselection]") # Get number of electrons, muons selected_electrons = electrons[lepton_selections.select_electrons( events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons( events, photons, muons, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_leptons = n_electrons + n_muons # Get number of jets selected_jets = jets[jet_selections.select_jets(events, photons, selected_electrons, selected_muons, None, jets, options, debug)] n_jets = awkward.num(selected_jets) lep_cut = n_leptons >= 1 jet_cut = n_jets >= 1 all_cuts = lep_cut & jet_cut cut_diagnostics.add_cuts([lep_cut, jet_cut, all_cuts], ["N_leptons >= 1", "N_jets >= 1", "all"]) # Keep only selected events selected_events = events[all_cuts] selected_photons = photons[all_cuts] selected_electrons = selected_electrons[all_cuts] selected_muons = selected_muons[all_cuts] selected_jets = selected_jets[all_cuts] # Calculate event-level variables selected_events = lepton_selections.set_electrons(selected_events, selected_electrons, debug) selected_events = lepton_selections.set_muons(selected_events, selected_muons, debug) selected_events = jet_selections.set_jets(selected_events, selected_jets, options, debug) return selected_events
def diphoton_preselection(events, photons, options, debug): # Initialize cut diagnostics tool for debugging cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[photon_selections.py : diphoton_preselection]") selected_photons = photons[photon_selections.select_photons( events, photons, options, debug)] ### mgg cut ### resonant = options["resonant"] if resonant: mgg_mask = numpy.array( events.ggMass > options["diphotons"]["mgg_lower"]) & numpy.array( events.ggMass < options["diphotons"]["mgg_upper"]) else: sideband_low = numpy.array( events.ggMass > options["diphotons"]["mgg_lower"]) & numpy.array( events.ggMass < options["diphotons"]["mgg_sideband_lower"]) sideband_high = numpy.array( events.ggMass > options["diphotons"]["mgg_sideband_upper"] ) & numpy.array(events.ggMass < options["diphotons"]["mgg_upper"]) mgg_mask = sideband_low | sideband_high ### pt/mgg cuts ### lead_pt_mgg_requirement = (selected_photons.pt / events.ggMass ) > options["photons"]["lead_pt_mgg_cut"] sublead_pt_mgg_requirement = (selected_photons.pt / events.ggMass ) > options["photons"]["sublead_pt_mgg_cut"] lead_pt_mgg_cut = awkward.num( selected_photons[lead_pt_mgg_requirement] ) >= 1 # at least 1 photon passing lead requirement sublead_pt_mgg_cut = awkward.num( selected_photons[sublead_pt_mgg_requirement] ) >= 2 # at least 2 photon passing sublead requirement pt_mgg_cut = lead_pt_mgg_cut & sublead_pt_mgg_cut ### 2 good selected_photons ### n_photon_cut = awkward.num( selected_photons ) == 2 # can regain a few % of signal if we set to >= 2 (probably e's that are reconstructed as selected_photons) all_cuts = mgg_mask & pt_mgg_cut & n_photon_cut cut_diagnostics.add_cuts([mgg_mask, pt_mgg_cut, n_photon_cut, all_cuts], [ "mgg in [100, 180]" if resonant else "mgg in [100, 120] or [130, 180]", "lead (sublead) pt/mgg > 0.33 (0.25)", "2 good photons", "all" ]) return events[all_cuts], selected_photons[all_cuts]
def diphoton_preselection(events, debug): cut_diagnostics = utils.CutDiagnostics( n_events_initial=len(events), debug=debug, cut_set="[photon_selections.py : diphoton_preselection]") # mgg cut mgg_mask = numpy.array(events.ggMass > 100) & numpy.array( events.ggMass < 180) events = events[mgg_mask] cut_diagnostics.add_cut(len(events), cut_name="mgg cut") # pt/mgg cuts pt_mgg_cut1 = (events.Photon_pt / events.ggMass) > 0.33 pt_mgg_cut2 = (events.Photon_pt / events.ggMass) > 0.25 n_pho1 = awkward.num(events.Photon_pt[pt_mgg_cut1]) n_pho2 = awkward.num(events.Photon_pt[pt_mgg_cut2]) pt_mgg_mask = numpy.array(n_pho1 >= 1) & numpy.array(n_pho2 >= 2) events = events[pt_mgg_mask] cut_diagnostics.add_cut(len(events), cut_name="pt/mgg cut") # pho id mva cuts pho_idmva_cut = events.Photon_mvaID > -0.7 n_pho = awkward.num(events.Photon_pt[pho_idmva_cut]) pho_idmva_mask = numpy.array(n_pho >= 2) events = events[pho_idmva_mask] cut_diagnostics.add_cut(len(events), cut_name="photon id mva cut") # electron veto cuts eveto_cut = events.Photon_electronVeto == 1 n_pho = awkward.num(events.Photon_pt[eveto_cut]) eveto_mask = numpy.array(n_pho >= 2) events = events[eveto_mask] cut_diagnostics.add_cut(len(events), cut_name="electron veto cut") return events
def tth_leptonic_preselection(events, photons, electrons, muons, jets, options, debug): cut_diagnostics = utils.CutDiagnostics(events = events, debug = debug, cut_set = "[analysis_selections.py : tth_leptonic_preselection]") # Get number of electrons, muons selected_electrons = electrons[lepton_selections.select_electrons(events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons(events, photons, muons, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_leptons = n_electrons + n_muons # Get number of jets selected_jets = jets[jet_selections.select_jets(events, photons, selected_electrons, selected_muons, None, jets, options, debug)] n_jets = awkward.num(selected_jets) lep_cut = n_leptons >= 1 jet_cut = n_jets >= 1 all_cuts = lep_cut & jet_cut cut_diagnostics.add_cuts([lep_cut, jet_cut, all_cuts], ["N_leptons >= 1", "N_jets >= 1", "all"]) return events[all_cuts], photons[all_cuts], selected_electrons[all_cuts], selected_muons[all_cuts], selected_jets[all_cuts]
def diphoton_preselection(events, selected_photons, options, debug): # Initialize cut diagnostics tool for debugging cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[photon_selections.py : diphoton_preselection]") ### mgg cut ### resonant = options["resonant"] if resonant: mgg_mask = numpy.array( events.gg_mass > options["diphotons"]["mgg_lower"]) & numpy.array( events.gg_mass < options["diphotons"]["mgg_upper"]) else: sideband_low = numpy.array( events.gg_mass > options["diphotons"]["mgg_lower"]) & numpy.array( events.gg_mass < options["diphotons"]["mgg_sideband_lower"]) sideband_high = numpy.array( events.gg_mass > options["diphotons"]["mgg_sideband_upper"] ) & numpy.array(events.gg_mass < options["diphotons"]["mgg_upper"]) mgg_mask = sideband_low | sideband_high lead_pt_mgg_cut = selected_photons.pt[:, 0] / events.gg_mass > options[ "photons"]["lead_pt_mgg_cut"] sublead_pt_mgg_cut = selected_photons.pt[:, 1] / events.gg_mass > options[ "photons"]["sublead_pt_mgg_cut"] pt_mgg_cut = lead_pt_mgg_cut & sublead_pt_mgg_cut lead_idmva_cut = selected_photons.mvaID[:, 0] > options["photons"][ "idmva_cut"] sublead_idmva_cut = selected_photons.mvaID[:, 1] > options["photons"][ "idmva_cut"] idmva_cut = lead_idmva_cut & sublead_idmva_cut lead_eveto_cut = selected_photons.electronVeto[:, 0] > options["photons"][ "eveto_cut"] sublead_eveto_cut = selected_photons.electronVeto[:, 1] > options[ "photons"]["eveto_cut"] eveto_cut = lead_eveto_cut & sublead_eveto_cut lead_eta_cut1 = abs(selected_photons.eta[:, 0]) < options["photons"]["eta"] lead_eta_cut2 = abs(selected_photons.eta[:, 0] ) < options["photons"]["transition_region_eta"][0] lead_eta_cut3 = abs(selected_photons.eta[:, 0] ) > options["photons"]["transition_region_eta"][1] lead_eta_cut = lead_eta_cut1 & (lead_eta_cut2 | lead_eta_cut3) sublead_eta_cut1 = abs(selected_photons.eta[:, 1]) < options["photons"]["eta"] sublead_eta_cut2 = abs(selected_photons.eta[:, 1] ) < options["photons"]["transition_region_eta"][0] sublead_eta_cut3 = abs(selected_photons.eta[:, 1] ) > options["photons"]["transition_region_eta"][1] sublead_eta_cut = sublead_eta_cut1 & (sublead_eta_cut2 | sublead_eta_cut3) eta_cut = lead_eta_cut & sublead_eta_cut if options["data"]: if options["year"] == 2016: trigger_cut = events.HLT_Diphoton30_18_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90 == True elif options["year"] == 2017 or options["year"] == 2018: trigger_cut = events.HLT_Diphoton30_22_R9Id_OR_IsoCaloId_AND_HE_R9Id_Mass90 == True else: trigger_cut = events.gg_mass > 0 all_cuts = mgg_mask & pt_mgg_cut & idmva_cut & eveto_cut & eta_cut & trigger_cut cut_diagnostics.add_cuts([ mgg_mask, pt_mgg_cut, idmva_cut, eveto_cut, eta_cut, trigger_cut, all_cuts ], [ "mgg in [100, 180]" if resonant else "mgg in [100, 120] or [130, 180]", "lead (sublead) pt/mgg > 0.33 (0.25)", "pho idmva > -0.7", "eveto cut", "eta cut", "trigger", "all" ]) selected_events = events[all_cuts] selected_photons = selected_photons[all_cuts] # Calculate event-level photon/diphoton variables selected_events = photon_selections.set_photons(selected_events, selected_photons, debug) selected_events = set_diphotons(selected_events, selected_photons, debug) return selected_events, selected_photons
def ggbb_preselection(events, photons, electrons, muons, jets, fatjets, options, debug): cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[analysis_selections.py : ggbb_preselection]") # Get number of electrons, muons selected_electrons = electrons[lepton_selections.select_electrons( events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons( events, photons, muons, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_leptons = n_electrons + n_muons # Get number of jets selected_jets = jets[jet_selections.select_jets(events, photons, selected_electrons, selected_muons, None, jets, options, debug)] n_jets = awkward.num(selected_jets) # Get number of b-jets selected_bjets = selected_jets[jet_selections.select_bjets( selected_jets, options, debug)] n_bjets = awkward.num(selected_bjets) # Get fat jets selected_fatjets = fatjets[jet_selections.select_fatjets( events, photons, fatjets, options, debug)] n_fatjets = awkward.num(selected_fatjets) lep_cut = n_leptons == 0 if options["boosted"]: jet_cut = n_bjets < 2 fatjet_cut = n_fatjets == 1 all_cuts = lep_cut & jet_cut & fatjet_cut cut_diagnostics.add_cuts( [lep_cut, jet_cut, fatjet_cut, all_cuts], ["N_leptons == 0", "N_b-jets < 2", "N_fatjets == 1", "all"]) else: jet_cut = n_bjets == 2 all_cuts = lep_cut & jet_cut cut_diagnostics.add_cuts([lep_cut, jet_cut, all_cuts], ["N_leptons == 0", "N_b-jets == 2", "all"]) # Keep only selected events selected_events = events[all_cuts] selected_photons = photons[all_cuts] selected_jets = selected_jets[all_cuts] selected_fatjets = selected_fatjets[all_cuts] # Calculate event-level variables selected_events = jet_selections.set_jets(selected_events, selected_jets, options, debug) selected_events = jet_selections.set_fatjets(selected_events, selected_fatjets, options, debug) return selected_events
def ggTauTau_inclusive_preselection(events, photons, electrons, muons, taus, jets, dR, genPart, Category_pairsLoose, options, debug): """ Performs inclusive ggTauTau preselection, requiring >=1 (leptons + tau_h). Assumes diphoton preselection has already been applied. Also calculates relevant event-level variables. """ cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[analysis_selections.py : ggTauTau_inclusive_preselection]") # Get number of electrons, muons, taus selected_electrons = electrons[lepton_selections.select_electrons( events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons( events, photons, muons, options, debug)] selected_taus = taus[tau_selections.select_taus(events, photons, selected_muons, selected_electrons, taus, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_taus = awkward.num(selected_taus) # Require >= 1 lep/tau n_leptons_and_taus = n_electrons + n_muons + n_taus # only events with hadronic taus (no leptonic taus!!!!!!!!!!) atleast_one_had_tau_cut = (n_taus >= 1) # Require OS leptons/taus for events with 2 leptons/taus sum_charge = awkward.sum(selected_electrons.charge, axis=1) + awkward.sum( selected_muons.charge, axis=1) + awkward.sum(selected_taus.charge, axis=1) charge_cut = sum_charge == 0 two_leptons = n_leptons_and_taus == 2 not_two_leptons = n_leptons_and_taus != 2 os_cut = ( two_leptons & charge_cut ) | not_two_leptons # only require 2 OS leptons if there are ==2 leptons in the event # Select jets (don't cut on jet quantities for selection, but they will be useful for BDT training) selected_jets = jets[jet_selections.select_jets(events, photons, selected_electrons, selected_muons, selected_taus, jets, options, debug)] all_cuts = os_cut & atleast_one_had_tau_cut cut_diagnostics.add_cuts([atleast_one_had_tau_cut, os_cut, all_cuts], ["N_taus >= 1", "OS dileptons", "all"]) # Keep only selected events selected_events = events[all_cuts] selected_photons = photons[all_cuts] selected_electrons = selected_electrons[all_cuts] selected_muons = selected_muons[all_cuts] selected_taus = selected_taus[all_cuts] selected_jets = selected_jets[all_cuts] dR = dR[all_cuts] # Calculate event-level variables selected_events = lepton_selections.set_electrons(selected_events, selected_electrons, debug) selected_events = lepton_selections.set_muons(selected_events, selected_muons, debug) selected_events = tau_selections.set_taus(selected_events, selected_taus, debug) selected_events = jet_selections.set_jets(selected_events, selected_jets, options, debug) if genPart is not None: genPart = genPart[all_cuts] selected_events = gen_selections.set_genZ(selected_events, genPart, options, debug) else: selected_events["genZ_decayMode"] = awkward.from_numpy( numpy.ones(len(selected_events)) * -1) selected_events["tau_motherID"] = awkward.from_numpy( numpy.ones(len(selected_events)) * -1) selected_events = compound_selections.compound_selections( selected_events, options, debug) return selected_events
def ggTauTau_inclusive_preselection(events, photons, electrons, muons, taus, jets, options, debug): """ Performs inclusive ggTauTau preselection, requiring >=1 (leptons + tau_h). Assumes diphoton preselection has already been applied. Also calculates relevant event-level variables. """ cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[analysis_selections.py : ggTauTau_inclusive_preselection]") # Get number of electrons, muons, taus selected_electrons = electrons[lepton_selections.select_electrons( events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons( events, photons, muons, options, debug)] selected_taus = taus[tau_selections.select_taus(events, photons, selected_muons, selected_electrons, taus, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_taus = awkward.num(selected_taus) # Require >= 1 lep/tau n_leptons_and_taus = n_electrons + n_muons + n_taus lep_tau_cut = n_leptons_and_taus >= options["n_leptons_and_taus"] # Require OS leptons/taus for events with 2 leptons/taus sum_charge = awkward.sum(selected_electrons.charge, axis=1) + awkward.sum( selected_muons.charge, axis=1) + awkward.sum(selected_taus.charge, axis=1) charge_cut = sum_charge == 0 two_leptons = n_leptons_and_taus == 2 not_two_leptons = n_leptons_and_taus != 2 os_cut = ( two_leptons & charge_cut ) | not_two_leptons # only require 2 OS leptons if there are ==2 leptons in the event # Select jets (don't cut on jet quantities for selection, but they will be useful for BDT training) selected_jets = jets[jet_selections.select_jets(events, photons, selected_electrons, selected_muons, selected_taus, jets, options, debug)] all_cuts = lep_tau_cut & os_cut cut_diagnostics.add_cuts( [lep_tau_cut, os_cut, all_cuts], ["N_leptons + N_taus >= 1", "OS dileptons", "all"]) # Keep only selected events selected_events = events[all_cuts] selected_photons = photons[all_cuts] selected_electrons = selected_electrons[all_cuts] selected_muons = selected_muons[all_cuts] selected_taus = selected_taus[all_cuts] selected_jets = selected_jets[all_cuts] # Calculate event-level variables selected_events = lepton_selections.set_electrons(selected_events, selected_electrons, debug) selected_events = lepton_selections.set_muons(selected_events, selected_muons, debug) selected_events = tau_selections.set_taus(selected_events, selected_taus, debug) selected_events = jet_selections.set_jets(selected_events, selected_jets, options, debug) # TODO: add calculation HH->ggTauTau specific variables (e.g. H->TauTau kinematics) here return selected_events
def ggbb_preselection(events, photons, electrons, muons, jets, fatjets, genparts, options, debug): cut_diagnostics = utils.CutDiagnostics( events=events, debug=debug, cut_set="[analysis_selections.py : ggbb_preselection]") # Get number of electrons, muons selected_electrons = electrons[lepton_selections.select_electrons( events, photons, electrons, options, debug)] selected_muons = muons[lepton_selections.select_muons( events, photons, muons, options, debug)] n_electrons = awkward.num(selected_electrons) n_muons = awkward.num(selected_muons) n_leptons = n_electrons + n_muons # Get number of jets selected_jets = jets[jet_selections.select_jets(events, photons, selected_electrons, selected_muons, None, jets, options, debug)] n_jets = awkward.num(selected_jets) # Get number of b-jets selected_bjets = selected_jets[jet_selections.select_bjets( selected_jets, options, debug)] n_bjets = awkward.num(selected_bjets) # Get fat jets selected_fatjets = fatjets[jet_selections.select_fatjets( events, photons, fatjets, options, debug)] n_fatjets = awkward.num(selected_fatjets) lep_cut = n_leptons == 0 if options["boosted"]: # jet_cut = n_bjets < 2 # This is not wanted fatjet_cut = n_fatjets >= 1 all_cuts = lep_cut & fatjet_cut cut_diagnostics.add_cuts([lep_cut, fatjet_cut, all_cuts], ["N_leptons == 0", "N_fatjets >= 1", "all"]) else: jet_cut = n_bjets == 2 all_cuts = lep_cut & jet_cut cut_diagnostics.add_cuts([lep_cut, jet_cut, all_cuts], ["N_leptons == 0", "N_b-jets == 2", "all"]) # Keep only selected events selected_events = events[all_cuts] selected_photons = photons[all_cuts] selected_jets = selected_jets[all_cuts] selected_bjets = selected_bjets[all_cuts] selected_fatjets = selected_fatjets[all_cuts] # # Lead FatJet pt cut fatjet_pt_cut = selected_fatjets.pt[:, 0] >= 350 # # Keep only selected events II # selected_events = selected_events[fatjet_pt_cut] # selected_photons = selected_photons[fatjet_pt_cut] # selected_jets = selected_jets[fatjet_pt_cut] # selected_bjets = selected_bjets[fatjet_pt_cut] # selected_fatjets = selected_fatjets[fatjet_pt_cut] # cut_diagnostics.add_cuts([fatjet_pt_cut], ["Lead FatJet pt > 350 GeV"]) # Filter mjj #TODO Fix the "nearest" function # mjj_cut = mjj_selections.mjj_filter(events,selected_fatjets,selected_jets,[120,130],debug) # selected_events = events[mjj_cut] # selected_photons = photons[mjj_cut] # selected_jets = selected_jets[mjj_cut] # selected_bjets = selected_fatjets[mjj_cut] # selected_fatjets = selected_fatjets[mjj_cut] # Calculate event-level variables if genparts is not None: selected_genparts = genparts[all_cuts] # selected_genparts = selected_genparts[mjj_cut] # selected_genparts = selected_genparts[fatjet_pt_cut] # selected_events = selected_events[gen_selections.filter_genHbb(selected_events,selected_genparts,options,debug)] selected_events = gen_selections.set_genInfo(selected_events, selected_genparts, options, debug) selected_events = jet_selections.set_fatjets(selected_events, selected_fatjets, selected_genparts, options, debug) else: selected_events = jet_selections.set_fatjets( selected_events, selected_fatjets, genparts, options, debug) #FIXME genparts is None here selected_events = jet_selections.set_jets(selected_events, selected_jets, options, debug) selected_events = helicity_selections.set_helicity(selected_events, selected_photons, selected_fatjets, selected_bjets, options, debug) return selected_events