def HWW_base_process_selection(channel, era): HWW_base_process_weights = MC_base_process_selection( channel, era).weights + [ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("crossSectionPerEventWeight", "crossSectionPerEventWeight"), ] return Selection(name="HTT", weights=HWW_base_process_weights)
def WH_process_selection(channel, era): return Selection(name = "WH125", weights = HTT_base_process_selection(channel, era).weights + [ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("(abs(crossSectionPerEventWeight - 0.052685) < 0.001)*0.051607+" "(abs(crossSectionPerEventWeight - 0.03342) < 0.001)*0.032728576", "crossSectionPerEventWeight")], cuts = [("(htxs_stage1p1cat>=300)&&(htxs_stage1p1cat<=305)", "htxs_match")])
def DY_process_selection(channel, era): DY_process_weights = MC_base_process_selection(channel, era).weights DY_process_weights.extend([ dy_stitching_weight(era), ("zPtReweightWeight", "zPtReweightWeight"), ]) return Selection(name="DY", weights=DY_process_weights)
def ggH125_process_selection(channel, era): ggH125_weights = HTT_base_process_selection(channel, era).weights + [ ("ggh_NNLO_weight", "gghNNLO"), ggh_stitching_weight(era), ] ggH125_cuts = [("(htxs_stage1p1cat>=100)&&(htxs_stage1p1cat<=113)", "htxs")] return Selection(name = "ggH125", weights = ggH125_weights, cuts = ggH125_cuts)
def ZH_process_selection(channel, era): return Selection(name = "ZH125", weights = HTT_base_process_selection(channel, era).weights + [ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("(abs(crossSectionPerEventWeight - 0.04774) < 0.001)*0.04683+" "(abs(crossSectionPerEventWeight - 0.0007771) < 0.00001)*0.0007666+" "(abs(crossSectionPerEventWeight - 0.0015391) < 0.0001)*0.00151848", "crossSectionPerEventWeight")], cuts = [("(htxs_stage1p1cat>=400)&&(htxs_stage1p1cat<=405)", "htxs_match")])
def TT_process_selection(channel, era): TT_process_weights = MC_base_process_selection(channel, era).weights TT_process_weights.extend([ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("crossSectionPerEventWeight", "crossSectionPerEventWeight"), ("topPtReweightWeightTTH", "topPtReweightWeight"), ]) return Selection(name="TT", weights=TT_process_weights)
def W_process_selection(channel, era): W_process_weights = MC_base_process_selection(channel, era).weights W_process_weights.append( W_stitching_weight(era) ) return Selection( name = "W", weights = W_process_weights )
def ggHWW_process_selection(channel, era): if era in ["2016", "2017"]: ggHWW_weights = HWW_base_process_selection(channel, era).weights else: ggHWW_weights = MC_base_process_selection(channel, era).weights + [ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("1.1019558", "crossSectionPerEventWeight"), ] return Selection(name="ggHWW125", weights=ggHWW_weights)
def VVJ_process_selection(channel): ct = "" if "mt" in channel or "et" in channel: ct = "(gen_match_2 == 6 && gen_match_2 == 6)" elif "tt" in channel: ct = "(gen_match_1 == 6 || gen_match_2 == 6)" elif "em" in channel: ct = "0.0 == 1.0" return Selection(name="VVJ", cuts=[(ct, "vv_fakes")])
def qqHWW_process_selection(channel, era): if era in ["2016", "2017"]: qqHWW_weights = HWW_base_process_selection(channel, era).weights else: qqHWW_weights = MC_base_process_selection(channel, era).weights + [ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("0.0857883", "crossSectionPerEventWeight"), ] return Selection(name="qqHWW125", weights=qqHWW_weights)
def ttH_process_selection(channel, era): if era in ["2016", "2017"]: ttH_weights = HTT_process_selection(channel, era).weights else: ttH_weights = HTT_base_process_selection(channel, era).weights + [ ("4.569757345884934e-08", "numberGeneratedEventsWeight"), ("crossSectionPerEventWeight", "crossSectionPerEventWeight")] return Selection(name = "ttH125", weights = ttH_weights)
def SUSYggH_powheg_process_selection(channel, era): if era == "2017": SUSYggH_weights = [weight if weight.name != "puweight" else Weight("puWeight_updated", "puweight") for weight in HTT_base_process_selection(channel, era).weights ] + [ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ] else: SUSYggH_weights = HTT_base_process_selection(channel, era).weights + [ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ] return Selection(name="SUSYggH", weights=SUSYggH_weights)
def VV_process_selection(channel, era): VV_process_weights = MC_base_process_selection(channel, era).weights VV_process_weights.extend([ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("crossSectionPerEventWeight", "crossSectionPerEventWeight"), ]) return Selection( name = "VV", weights = VV_process_weights )
def qqH125_process_selection(channel): qqH125_weights = HTT_base_process_selection(channel).weights + [( "(((htxs_stage1p1cat>=200&&htxs_stage1p1cat<=202)||abs(crossSectionPerEventWeight-0.05544)<0.001||abs(crossSectionPerEventWeight-0.052685)<0.001||abs(crossSectionPerEventWeight-0.03342)<0.001)*crossSectionPerEventWeight*numberGeneratedEventsWeight+(abs(crossSectionPerEventWeight-0.05544)>=0.001&&abs(crossSectionPerEventWeight-0.052685)>=0.001&&abs(crossSectionPerEventWeight-0.03342)>=0.001)*(" "(htxs_stage1p1cat>=203&&htxs_stage1p1cat<=205)*8.70e-9+" "(htxs_stage1p1cat==206)*8.61e-9+" "(htxs_stage1p1cat>=207&&htxs_stage1p1cat<=210)*1.79e-8" "))", "qqh_stitching_weight")] qqH125_cuts = [("(htxs_stage1p1cat>=200)&&(htxs_stage1p1cat<=210)", "qqH125")] return Selection(name="qqH125", weights=qqH125_weights, cuts=qqH125_cuts)
def ZTT_embedded_process_selection(channel, era): ztt_embedded_weights = [ ("generatorWeight*(generatorWeight<=1.0)", "simulation_sf" ), # Issue with way too large generator weights in 2016 ("muonEffTrgWeight*muonEffIDWeight_1*muonEffIDWeight_2", "scale_factor"), ] if "mt" in channel: ztt_embedded_weights.extend([ ("gen_match_1==4 && gen_match_2==5", "emb_veto"), ("embeddedDecayModeWeight", "decayMode_SF"), ("idWeight_1*isoWeight_1", "lepton_sf"), tau_by_iso_id_weight(channel), triggerweight_emb(channel, era), ]) elif "et" in channel: ztt_embedded_weights.extend([ ("gen_match_1==3 && gen_match_2==5", "emb_veto"), ("embeddedDecayModeWeight", "decayMode_SF"), ("idWeight_1*isoWeight_1", "lepton_sf"), tau_by_iso_id_weight(channel), triggerweight_emb(channel, era), ]) if "2017" in era: ztt_embedded_weights.extend([ ("(pt_1<28)*((abs(eta_1)<=1.5)*0.852469262576+(abs(eta_1)>1.5)*0.689309270861)+(pt_1>=28)", "low_crossele_nonclosure_weight"), ("(pt_1>=28)*(pt_1<40)*((abs(eta_1)<=1.5)*0.950127109065+(abs(eta_1)>1.5)*0.870372483259)+(pt_1<28)+(pt_1>=40)", "low_singleelectron_nonclosure_weight"), ]) elif "tt" in channel: ztt_embedded_weights.extend([ ("embeddedDecayModeWeight", "decayMode_SF"), ("gen_match_1==5 && gen_match_2==5", "emb_veto"), tau_by_iso_id_weight(channel), triggerweight_emb(channel, era), ]) elif "em" in channel: ztt_embedded_weights.extend([ ("(gen_match_1==3 && gen_match_2==4)", "emb_gen_match"), ("idWeight_1*isoWeight_1*idWeight_2*looseIsoWeight_2", "lepton_sf"), triggerweight_emb(channel, era), ]) if era == "2017": ztt_embedded_weights.append( ("0.99*trackWeight_1*trackWeight_2", "lepton_tracking_sf")) ztt_embedded_cuts = [( "((gen_match_1>2 && gen_match_1<6) && (gen_match_2>2 && gen_match_2<6))", "dy_genuine_tau")] return Selection(name="Embedded", cuts=ztt_embedded_cuts, weights=ztt_embedded_weights)
def VVT_process_selection(channel): if "mt" in channel: tt_cut = "gen_match_1==4 && gen_match_2==5" elif "et" in channel: tt_cut = "gen_match_1==3 && gen_match_2==5" elif "tt" in channel: tt_cut = "gen_match_1==5 && gen_match_2==5" elif "em" in channel: tt_cut = "gen_match_1==3 && gen_match_2==4" elif "mm" in channel: tt_cut = "gen_match_1==4 && gen_match_2==4" return Selection(name="VVT", cuts=[(tt_cut, "vvt_cut")])
def ZTT_embedded_process_selection(channel, era): ztt_embedded_weights = [ ("generatorWeight*(generatorWeight<=1.0)", "simulation_sf"), # Issue with way too large generator weights in 2016 ("muonEffTrgWeightIC*muonEffIDWeightIC_1*muonEffIDWeightIC_2", "scale_factor"), ] if "mt" in channel: if "2018" in era: ztt_embedded_weights = [ ("generatorWeight*(generatorWeight<=1.0)", "simulation_sf"), # Issue with way too large generator weights in 2016 ("muonEffTrgWeightIC*muonEffIDWeight_1*muonEffIDWeight_2", "scale_factor"), # Bug during ntuple production lead to overwrite of KIT ID weights by IC ones instead of writing it to new variable. ] ztt_embedded_weights.extend([ ("gen_match_1==4 && gen_match_2==5","emb_veto"), ("pt_2/genMatchedLep2Pt < 1.5","high_fakemet_veto"), ("(pt_2<100)*embeddedDecayModeWeight+(pt_2>=100)", "decayMode_SF"), ("idWeight_1*isoWeight_1", "lepton_sf"), tau_by_iso_id_weight(channel), triggerweight_emb(channel, era), fakemetweight_emb(channel, era), ]) elif "et" in channel: ztt_embedded_weights.extend([ ("gen_match_1==3 && gen_match_2==5","emb_veto"), ("pt_2/genMatchedLep2Pt < 1.5","high_fakemet_veto"), ("(pt_2<100)*embeddedDecayModeWeight+(pt_2>=100)", "decayMode_SF"), ("idWeight_1*isoWeight_1", "lepton_sf"), tau_by_iso_id_weight(channel), triggerweight_emb(channel, era), fakemetweight_emb(channel, era), ]) elif "tt" in channel: ztt_embedded_weights.extend([ ("(pt_1<100)*embeddedDecayModeWeight+(pt_1>=100)*(pt_2<100)*((decayMode_2==0)*0.975+(decayMode_2==1)*0.975*1.051+(decayMode_2==10)*0.975*0.975*0.975+(decayMode_2==11)*0.975*0.975*0.975*1.051)+(pt_2>=100)", "decayMode_SF"), ("pt_1/genMatchedLep1Pt < 1.5 && pt_2/genMatchedLep2Pt < 1.5","high_fakemet_veto"), ("gen_match_1==5 && gen_match_2==5","emb_veto"), tau_by_iso_id_weight(channel), triggerweight_emb(channel, era), fakemetweight_emb(channel, era), ]) elif "em" in channel: ztt_embedded_weights.extend([ ("(gen_match_1==3 && gen_match_2==4)", "emb_gen_match"), ("idWeight_1*isoWeight_1*idWeight_2*looseIsoWeight_2", "lepton_sf"), triggerweight_emb(channel, era), ]) if era == "2017": ztt_embedded_weights.append(("0.99*trackWeight_1*trackWeight_2", "lepton_tracking_sf")) ztt_embedded_cuts = [("((gen_match_1>2 && gen_match_1<6) && (gen_match_2>2 && gen_match_2<6))", "dy_genuine_tau")] return Selection(name = "Embedded", cuts = ztt_embedded_cuts, weights = ztt_embedded_weights)
def HWW_process_selection(channel, era): HWW_process_weights = MC_base_process_selection(channel, era).weights HWW_process_weights.extend([ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ]) if era == "2018": HWW_process_weights.append(("0.0857883*(abs(numberGeneratedEventsWeight - 2e-06) < 1e-07) + 1.1019558*(abs(numberGeneratedEventsWeight - 2e-06) >= 1e-07)", "crossSectionPerEventWeight")) else: HWW_process_weights.append(("crossSectionPerEventWeight", "crossSectionPerEventWeight")) return Selection( name = "HWW", weights = HWW_process_weights )
def ggH125_process_selection(channel): ggH125_weights = HTT_base_process_selection(channel).weights + [ ("ggh_NNLO_weight", "gghNNLO"), ("1.01", "bbh_inclusion_weight"), ("((htxs_stage1p1cat==100||htxs_stage1p1cat==102||htxs_stage1p1cat==103)*crossSectionPerEventWeight*8.210e-8+" "(htxs_stage1p1cat==101)*2.17e-8+" "(htxs_stage1p1cat==104||htxs_stage1p1cat==105)*4.39e-8+" "(htxs_stage1p1cat==106)*1.19e-8+" "(htxs_stage1p1cat>=107&&htxs_stage1p1cat<=109)*4.91e-8+" "(htxs_stage1p1cat>=110&&htxs_stage1p1cat<=113)*7.90e-9" ")", "ggh_stitching_weight") ] ggH125_cuts = [("(htxs_stage1p1cat>=100)&&(htxs_stage1p1cat<=113)", "htxs") ] return Selection(name="ggH125", weights=ggH125_weights, cuts=ggH125_cuts)
def VV_process_selection(channel, era): VV_process_weights = MC_base_process_selection(channel, era).weights if era in ["2017", "2018"]: VV_process_weights.extend([ ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("crossSectionPerEventWeight", "crossSectionPerEventWeight"), ]) else: VV_process_weights.extend([ ("1.252790591041545e-07*(abs(crossSectionPerEventWeight - 118.7) < 0.01) + 5.029933132068942e-07*(abs(crossSectionPerEventWeight - 12.14) < 0.01) + 2.501519047441559e-07*(abs(crossSectionPerEventWeight - 22.82) < 0.01) + numberGeneratedEventsWeight*(abs(crossSectionPerEventWeight - 118.7) > 0.01 && abs(crossSectionPerEventWeight - 12.14) > 0.01 && abs(crossSectionPerEventWeight - 22.82) > 0.01)", "numberGeneratedEventsWeight"), ("crossSectionPerEventWeight", "crossSectionPerEventWeight"), ]) return Selection(name="VV", weights=VV_process_weights)
def HTT_base_process_selection(channel): return Selection(name="HTT_base", weights=[("generatorWeight", "generatorWeight"), ("puweight", "puweight"), ("idWeight_1*idWeight_2", "idweight"), ("isoWeight_1*isoWeight_2", "isoweight"), ("trackWeight_1*trackWeight_2", "trackweight"), triggerweight(channel), ("eleTauFakeRateWeight*muTauFakeRateWeight", "leptonTauFakeRateWeight"), tau_by_iso_id_weight(channel), ele_hlt_Z_vtx_weight(channel), ("prefiringweight", "prefireWeight"), lumi_weight])
def W_process_selection(channel): return Selection( name="W", weights= [("generatorWeight", "generatorWeight"), ("((0.000824363*((npartons <= 0 || npartons >= 5)*1.0 + (npartons == 1)*0.1713 + (npartons == 2)*0.1062 + (npartons == 3)*0.0652 + (npartons == 4)*0.0645)) * (genbosonmass>=0.0) + numberGeneratedEventsWeight * crossSectionPerEventWeight * (genbosonmass<0.0))", "wj_stitching_weight"), ("puweight", "puweight"), ("idWeight_1*idWeight_2", "idweight"), ("isoWeight_1*isoWeight_2", "isoweight"), ("trackWeight_1*trackWeight_2", "trackweight"), triggerweight(channel), ("eleTauFakeRateWeight*muTauFakeRateWeight", "leptonTauFakeRateWeight"), tau_by_iso_id_weight(channel), ele_hlt_Z_vtx_weight(channel), ("prefiringweight", "prefireWeight"), lumi_weight])
def DY_base_process_selection(channel): return Selection( name="DY_base", weights= [("generatorWeight", "generatorWeight"), ("puweight", "puweight"), ("idWeight_1*idWeight_2", "idweight"), ("isoWeight_1*isoWeight_2", "isoweight"), ("trackWeight_1*trackWeight_2", "trackweight"), triggerweight(channel), ("eleTauFakeRateWeight*muTauFakeRateWeight", "leptonTauFakeRateWeight"), ("(gen_match_2==1 || gen_match_2==3)*(((abs(eta_1) < 1.46) * 0.88) + ((abs(eta_1) > 1.5588) * 0.51))+!(gen_match_2==1 || gen_match_2==3)", "eletauFakeRateWeightFix"), tau_by_iso_id_weight(channel), ele_hlt_Z_vtx_weight(channel), ("zPtReweightWeight", "zPtReweightWeight"), ("prefiringweight", "prefireWeight"), lumi_weight])
def HWW_process_selection(channel): return Selection( name="HWW", weights= [("generatorWeight", "generatorWeight"), ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("0.0857883*(abs(numberGeneratedEventsWeight - 2e-06) < 1e-07) + 1.1019558*(abs(numberGeneratedEventsWeight - 2e-06) >= 1e-07)", "crossSectionPerEventWeight"), ("puweight", "puweight"), ("idWeight_1*idWeight_2", "idweight"), ("isoWeight_1*isoWeight_2", "isoweight"), ("trackWeight_1*trackWeight_2", "trackweight"), triggerweight(channel), ("eleTauFakeRateWeight*muTauFakeRateWeight", "leptonTauFakeRateWeight"), tau_by_iso_id_weight(channel), ele_hlt_Z_vtx_weight(channel), ("prefiringweight", "prefireWeight"), lumi_weight])
def VV_process_selection(channel): return Selection(name="VV", weights=[("generatorWeight", "generatorWeight"), ("numberGeneratedEventsWeight", "numberGeneratedEventsWeight"), ("puweight", "puweight"), ("idWeight_1*idWeight_2", "idweight"), ("isoWeight_1*isoWeight_2", "isoweight"), ("trackWeight_1*trackWeight_2", "trackweight"), triggerweight(channel), ("eleTauFakeRateWeight*muTauFakeRateWeight", "leptonTauFakeRateWeight"), tau_by_iso_id_weight(channel), ele_hlt_Z_vtx_weight(channel), ("crossSectionPerEventWeight", "crossSectionPerEventWeight"), ("prefiringweight", "prefireWeight"), lumi_weight])
def VVL_process_selection(channel): if "mt" in channel: emb_veto = "!(gen_match_1==4 && gen_match_2==5)" ff_veto = "!(gen_match_2 == 6)" elif "et" in channel: emb_veto = "!(gen_match_1==3 && gen_match_2==5)" ff_veto = "!(gen_match_2 == 6)" elif "tt" in channel: emb_veto = "!(gen_match_1==5 && gen_match_2==5)" ff_veto = "!(gen_match_1 == 6 || gen_match_2 == 6)" elif "em" in channel: emb_veto = "!(gen_match_1==3 && gen_match_2==4)" ff_veto = "(1.0)" elif "mm" in channel: emb_veto = "!(gen_match_1==4 && gen_match_2==4)" ff_veto = "(1.0)" return Selection(name="VVL", cuts=[("{} && {}".format(emb_veto, ff_veto), "tt_emb_and_ff_veto")])
def MC_base_process_selection(channel, era): MC_base_process_weights = [ ("generatorWeight", "generatorWeight"), ("puweight", "puweight"), ("idWeight_1*idWeight_2", "idweight"), ("isoWeight_1*isoWeight_2", "isoweight"), ("trackWeight_1*trackWeight_2", "trackweight"), ("eleTauFakeRateWeight*muTauFakeRateWeight", "leptonTauFakeRateWeight"), triggerweight(channel, era), tau_by_iso_id_weight(channel), ele_hlt_Z_vtx_weight( channel, era ), # only used in the et channel in 2017 per function definition. ele_reco_weight( channel, era ), # only used in the et, em channels in 2016 per function definition. prefiring_weight( era), # only used in 2016 and 2017 per function definition. lumi_weight(era), ] return Selection(name="MC base", weights=MC_base_process_weights)
'VBFHToTauTauM125_RunIIAutumn18MiniAOD_102X_13TeV_MINIAOD_powheg-pythia8_ext1-v1', 'ZHToTauTauM125_RunIIAutumn18MiniAOD_102X_13TeV_MINIAOD_powheg-pythia8_v2', 'WminusHToTauTauM125_RunIIAutumn18MiniAOD_102X_13TeV_MINIAOD_powheg-pythia8_v2', 'WplusHToTauTauM125_RunIIAutumn18MiniAOD_102X_13TeV_MINIAOD_powheg-pythia8_v2' ] } # Selections channel = Selection(name = 'mt', cuts = [ ('flagMETFilter == 1', 'METFilter'), ('extraelec_veto<0.5', 'extraelec_veto'), ('extramuon_veto<0.5', 'extramuon_veto'), ('dilepton_veto<0.5', 'dilepton_veto'), ('byTightDeepTau2017v2p1VSmu_2>0.5', 'againstMuonDiscriminator'), ('byVVLooseDeepTau2017v2p1VSe_2>0.5', 'againstElectronDiscriminator'), ('byTightDeepTau2017v2p1VSjet_2>0.5', 'tau_iso'), ('iso_1<0.15', 'muon_iso'), ('q_1*q_2<0', 'os'), ('((pt_2>30) && ((trg_singlemuon_27 == 1) || (trg_singlemuon_24 == 1))) || ((pt_1<25) && (trg_crossmuon_mu20tau27_hps == 1 || trg_crossmuon_mu20tau27 == 1))', 'trg_selection') ]) # TODO: Add the correct trigger weight string (see below) #triggerweight = '((trg_singlemuon_27 || trg_singlemuon_24)*((((pt_1>=25)&&(pt_1<28))*trigger_24_Weight_1)+((pt_1>=28)*(trigger_24_27_Weight_1)))+(pt_1 > 21 && pt_1 < 25 && trg_crossmuon_mu20tau27_hps)*(crossTriggerDataEfficiencyWeight_1*((byTightDeepTau2017v2p1VSjet_2<0.5 && byVLooseDeepTau2017v2p1VSjet_2>0.5)*crossTriggerCorrectedDataEfficiencyWeight_vloose_DeepTau_2 + (byTightDeepTau2017v2p1VSjet_2>0.5)*crossTriggerCorrectedDataEfficiencyWeight_tight_DeepTau_2))/(crossTriggerMCEfficiencyWeight_1*((byTightDeepTau2017v2p1VSjet_2<0.5 && byVLooseDeepTau2017v2p1VSjet_2>0.5)*crossTriggerCorrectedMCEfficiencyWeight_vloose_DeepTau_2 + (byTightDeepTau2017v2p1VSjet_2>0.5)*crossTriggerCorrectedMCEfficiencyWeight_tight_DeepTau_2)))' triggerweight = '(crossTriggerMCWeight_1*(crossTriggerMCWeight_1<10 && crossTriggerMCWeight_1>0.1)+(crossTriggerMCWeight_1>10 || crossTriggerMCWeight_1<0.1))*(pt_1<25) + (trigger_24_27_Weight_1*(pt_1>25))' mc = Selection(name = 'mc', weights = [ ('generatorWeight', 'generatorWeight'), ('puweight', 'puweight'),
def channel_selection(channel): if "mt" in channel: return Selection( name="mt", cuts =[("flagMETFilter == 1", "METFilter"), ("extraelec_veto<0.5", "extraelec_veto"), ("extramuon_veto<0.5", "extramuon_veto" ), ("dilepton_veto<0.5", "dilepton_veto" ), ("byTightDeepTau2017v2p1VSmu_2>0.5", "againstMuonDiscriminator"), ("byVVLooseDeepTau2017v2p1VSe_2>0.5", "againstElectronDiscriminator"), ("byTightDeepTau2017v2p1VSjet_2>0.5", "tau_iso"), ("iso_1<0.15", "muon_iso"), ("q_1*q_2<0", "os"), ("pt_2>30 && ((trg_singlemuon_27 == 1) || (trg_singlemuon_24 == 1) || (pt_1 < 25 && trg_crossmuon_mu20tau27 == 1))", "trg_selection")]) elif "et" in channel: return Selection( name="et", cuts =[("flagMETFilter == 1", "METFilter"), ("extraelec_veto<0.5", "extraelec_veto"), ("extramuon_veto<0.5", "extramuon_veto" ), ("dilepton_veto<0.5", "dilepton_veto" ), ("againstMuonLoose3_2>0.5", "againstMuonDiscriminator"), ("againstElectronTightMVA6_2>0.5", "againstElectronDiscriminator"), ("byTightIsolationMVArun2017v2DBoldDMwLT2017_2>0.5", "tau_iso"), ("iso_1<0.15", "ele_iso"), ("q_1*q_2<0", "os"), ("pt_2>30 && pt_1 > 25 && (((trg_singleelectron_35 == 1) || (trg_singleelectron_32 == 1) || ((trg_singleelectron_27 == 1))) || (abs(eta_1)>1.5 && isEmbedded)) || (pt_1>25 && pt_1<28 && pt_2>35 && ((isEmbedded && (abs(eta_1)>1.5)) || (trg_crossele_ele24tau30 == 1)))", "trg_selection")]) elif "tt" in channel: return Selection( name="tt", cuts= [("flagMETFilter == 1", "METFilter"), ("extraelec_veto<0.5", "extraelec_veto"), ("extramuon_veto<0.5", "extramuon_veto"), ("dilepton_veto<0.5", "dilepton_veto"), ("againstMuonLoose3_1>0.5 && againstMuonLoose3_2>0.5", "againstMuonDiscriminator"), ("againstElectronVLooseMVA6_1>0.5 && againstElectronVLooseMVA6_2>0.5", "againstElectronDiscriminator"), ("byTightIsolationMVArun2017v2DBoldDMwLT2017_1>0.5", "tau_1_iso"), ("byTightIsolationMVArun2017v2DBoldDMwLT2017_2>0.5", "tau_2_iso"), ("(trg_doubletau_35_tightiso_tightid == 1) || (trg_doubletau_40_mediso_tightid == 1) || (trg_doubletau_40_tightiso == 1)", "trg_selection"), ("q_1*q_2<0", "os")]) elif "em" in channel: return Selection( name="em", cuts =[("flagMETFilter == 1", "METFilter"), ("extraelec_veto<0.5", "extraelec_veto"), ("extramuon_veto<0.5", "extramuon_veto" ), ("dilepton_veto<0.5", "dilepton_veto" ), ("iso_1<0.15", "ele_iso" ), ("iso_2<0.2", "muon_iso" ), ("q_1*q_2<0", "os" ), ("pt_2>10 && ((trg_muonelectron_mu23ele12 == 1) || (trg_muonelectron_mu8ele23 == 1))", "trg_selection")])
def ttH_process_selection(channel): return Selection(name="ttH", weights=HTT_process_selection(channel).weights)