def __init__(self, additional_binnings=None): super(BinningsDict, self).__init__(additional_binnings=additional_binnings) self.binnings_dict["mt_reg_1"] = "-1.0 " + " ".join( [str(x / 100.0) for x in range(-90, 100, 5)]) + " 1.0" self.binnings_dict["mt_ztt_1"] = "-1.0 " + " ".join( [str(x / 100.0) for x in range(-90, 100, 5)]) + " 1.0" self.binnings_dict["mt_vbf_1"] = "-1.0 " + " ".join( [str(x / 100.0) for x in range(-90, 100, 5)]) + " 1.0" self.binnings_dict["mt_disc_1"] = "-1.0 " + " ".join( [str(x / 100.0) for x in range(-90, 100, 5)]) + " 1.0" self.binnings_dict["mt_ttj_1"] = "-1.0 " + " ".join( [str(x / 100.0) for x in range(-90, 100, 5)]) + " 1.0" self.binnings_dict["diLepMass"] = "50,0,250" self.binnings_dict["svfitMass"] = "50,0,250" self.binnings_dict["zmumu_selection_for_embedding_ZMass"] = "19,50,240" self.binnings_dict["zmumu_selection_for_embedding_integral"] = "1,0,1" for channel in ["tt", "mt", "et", "em", "mm", "ee"]: self.binnings_dict[channel + "_integral"] = "1,0.0,1.0" self.binnings_dict[channel + "_min_ll_jet_eta"] = "16,-8,8" self.binnings_dict[channel + "_diLepBoost"] = "25,0,2000" self.binnings_dict[channel + "_diLepDeltaR"] = "20,0,10" self.binnings_dict[channel + "_diLepJet1DeltaR"] = "20,0,10" self.binnings_dict[ channel + "_rhoNeutralChargedAsymmetry"] = "20,-1.00001,1.00001" self.binnings_dict[ channel + "_rhoNeutralChargedAsymmetry_1"] = "20,-1.00001,1.00001" self.binnings_dict[ channel + "_rhoNeutralChargedAsymmetry_2"] = "20,-1.00001,1.00001" for suffix in ["", "Svfit", "HHKinFit"]: self.binnings_dict[channel + "_visibleOverFullEnergy" + suffix] = "20,0.0,1.00001" self.binnings_dict[channel + "_visibleOverFullEnergy" + suffix + "_1"] = "20,0.0,1.00001" self.binnings_dict[channel + "_visibleOverFullEnergy" + suffix + "_2"] = "20,0.0,1.00001" self.binnings_dict[channel + "_visibleToFullAngleSvfit" + suffix] = "20,0.0,0.1" self.binnings_dict[channel + "_visibleToFullAngleSvfit" + suffix + "_1"] = "20,0.0,0.1" self.binnings_dict[channel + "_visibleToFullAngleSvfit" + suffix + "_2"] = "20,0.0,0.1" self.binnings_dict[channel + "tauPolarisationDiscriminator" + suffix] = "20,-1.00001,1.00001" for i in range(16): self.binnings_dict[ channel + "_MVATestMethod_%i" % i] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" for ch in ["ee_", "em_", "et_", "mm_", "mt_", "tt_"]: self.binnings_dict[ ch + "all_vs_all"] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" self.binnings_dict[ ch + "all_vs_zll"] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" self.binnings_dict[ ch + "all_vs_ztt"] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" self.binnings_dict[ ch + "ggh_vs_zll"] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" self.binnings_dict[ ch + "ggh_vs_ztt"] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" self.binnings_dict[ ch + "vbf_vs_zll"] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" self.binnings_dict[ ch + "vbf_vs_ztt"] = "-1.0 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.75 1" for metstring in ["met", "mva"]: for matrix in ["cov00", "cov11"]: self.binnings_dict[ch + metstring + matrix] = "25,0.0,1000.0" for matrix in ["cov01", "cov10"]: self.binnings_dict[ch + metstring + matrix] = "25,-500.0,500.0" self.binnings_dict[ch + "npu"] = "30,0.0,30.0" self.binnings_dict[ch + "npv"] = "30,0.0,30.0" self.binnings_dict[ch + "H_mass"] = "40,0.0,2000.0" self.binnings_dict[ch + "H_pt"] = "40,0.0,300.0" self.binnings_dict[ch + "ptvis"] = "40,0.0,300.0" self.binnings_dict[ch + "jpt_1"] = "20,20.0,250.0" self.binnings_dict[ch + "jpt_2"] = "20,20.0,250.0" self.binnings_dict["tt_decayMode_1"] = "11,0.0,11.0" self.binnings_dict["tt_decayMode_2"] = "11,0.0,11.0" self.binnings_dict["tt_eta_1"] = "30,-3,3" self.binnings_dict["tt_eta_2"] = "30,-3,3" self.binnings_dict["tt_eta_ll"] = "25,-5.0,5.0" self.binnings_dict["tt_eta_llmet"] = "25,-5.0,5.0" self.binnings_dict["tt_eta_sv"] = "25,-5.0,5.0" self.binnings_dict["tt_iso_1"] = "25,0.0,2.0" self.binnings_dict["tt_iso_2"] = "25,0.0,2.0" self.binnings_dict["tt_jdeta"] = "20,0.0,10.0" self.binnings_dict["tt_jdphi"] = "20,-3.2,3.2" self.binnings_dict["tt_jeta_1"] = "10,-4.7,4.7" self.binnings_dict["tt_jeta_2"] = "10,-4.7,4.7" self.binnings_dict["tt_jphi_1"] = "10,-3.2,3.2" self.binnings_dict["tt_jphi_2"] = "10,-3.2,3.2" self.binnings_dict["tt_m_1"] = "25,0.0,2.5" self.binnings_dict["tt_m_2"] = "25,0.0,2.5" self.binnings_dict["tt_m_ll"] = "60,0.0,300" self.binnings_dict["tt_m_llmet"] = "60,0.0,400" self.binnings_dict["tt_m_sv"] = "25,0.0,250" self.binnings_dict["tt_mt_tot"] = "30,0.0,300" self.binnings_dict["tt_met"] = "40,0.0,200.0" self.binnings_dict["tt_metphi"] = "32,-3.2,3.2" self.binnings_dict["tt_mjj"] = "20,0.0,1500.0" self.binnings_dict["tt_mt_1"] = "20,0.0,160" self.binnings_dict["tt_mt_lep1met"] = "30,0.0,300" self.binnings_dict["tt_mt_ll"] = "25,75.0,300" self.binnings_dict["tt_mt_llmet"] = "40,0.0,400" self.binnings_dict["tt_mvamet"] = "40,0.0,200.0" self.binnings_dict["tt_mvametphi"] = "32,-3.2,3.2" self.binnings_dict["tt_m_vis"] = "60,0.0,300" self.binnings_dict["tt_nJets30"] = "8,-0.5,7.5" self.binnings_dict["tt_njetspt30"] = "10,-0.5,9.5" self.binnings_dict["tt_njets"] = "8,-0.5,7.5" self.binnings_dict["tt_nbtag"] = "5,-0.5,4.5" self.binnings_dict["tt_njetingap"] = "5,-0.5,4.5" self.binnings_dict["tt_phi_1"] = "10,-3.2,3.2" self.binnings_dict["tt_phi_2"] = "10,-3.2,3.2" self.binnings_dict["tt_phi_ll"] = "32,-3.2,3.2" self.binnings_dict["tt_phi_llmet"] = "32,-3.2,3.2" self.binnings_dict["tt_phi_sv"] = "32,-3.2,3.2" self.binnings_dict["tt_pt_1"] = "25,0.0,100.0" self.binnings_dict["tt_pt_2"] = "25,0.0,100.0" self.binnings_dict["tt_pt_ll"] = "25,0.0,250" self.binnings_dict["tt_pt_llmet"] = "25,0.0,250" self.binnings_dict["tt_pt_sv"] = "25,0.0,250" self.binnings_dict["tt_pt_tt"] = "20,0.0,200" self.binnings_dict["tt_puweight"] = "20,0.0,2.0" self.binnings_dict["tt_rho"] = "25,0.0,50.0" self.binnings_dict["tt_svfitMass"] = "30,0.0,300" self.binnings_dict["tt_trigweight_1"] = "20,0.5,1.5" self.binnings_dict["tt_trigweight_2"] = "20,0.5,1.5" self.binnings_dict["tt_pZetaMissVis"] = "50,-150.0,100.0" self.binnings_dict["tt_pzetamiss"] = "50,-150.0,100.0" self.binnings_dict["tt_pzetavis"] = "20,0.0,100.0" self.binnings_dict["tt_metProjectionPar"] = "20,-100.0,300.0" self.binnings_dict["tt_metProjectionPerp"] = "50,-50.0,50.0" self.binnings_dict["tt_metProjectionPhi"] = "20,-3.141,3.141" self.binnings_dict["mt_decayMode_2"] = "11,0.0,11.0" self.binnings_dict["mt_eta_1"] = "30,-3,3" self.binnings_dict["mt_eta_2"] = "30,-3,3" self.binnings_dict["mt_eta_ll"] = "25,-5.0,5.0" self.binnings_dict["mt_eta_llmet"] = "25,-5.0,5.0" self.binnings_dict["mt_eta_sv"] = "25,-5.0,5.0" self.binnings_dict["mt_iso_1"] = "50,0.0,1.0" self.binnings_dict["mt_iso_2"] = "25,0.5,1.0" self.binnings_dict["mt_jdeta"] = "20,0.0,10.0" self.binnings_dict["mt_jdphi"] = "20,-3.2,3.2" self.binnings_dict["mt_jeta_1"] = "20,-4.7,4.7" self.binnings_dict["mt_jeta_2"] = "20,-4.7,4.7" self.binnings_dict["mt_jphi_1"] = "20,-3.2,3.2" self.binnings_dict["mt_jphi_2"] = "20,-3.2,3.2" self.binnings_dict["mt_m_1"] = "10,0.0,0.2" self.binnings_dict["mt_m_2"] = "25,0.0,2.5" self.binnings_dict["mt_m_ll"] = "60,0.0,300" self.binnings_dict["mt_m_llmet"] = "60,0.0,400" self.binnings_dict["mt_m_sv"] = "25,0.0,250" self.binnings_dict["mt_mt_tot"] = "30,0.0,300" self.binnings_dict["mt_met"] = "40,0.0,200.0" self.binnings_dict["mt_metphi"] = "32,-3.2,3.2" self.binnings_dict["mt_mjj"] = "20,0.0,1500.0" self.binnings_dict["mt_metProjectionPar"] = "20,-100.0,300.0" self.binnings_dict["mt_metProjectionPerp"] = "50,-50.0,50.0" self.binnings_dict["mt_metProjectionPhi"] = "20,-3.141,3.141" self.binnings_dict["mt_mt_1"] = "20,0.0,160" self.binnings_dict["mt_mt_2"] = "20,0.0,160" self.binnings_dict["mt_mt_tt"] = "30,0.0,300" self.binnings_dict["mt_mt_tot"] = "20,0.0,1000" self.binnings_dict["mt_mt_lep1met"] = "30,0.0,300" self.binnings_dict["mt_mt_ll"] = "25,75.0,300" self.binnings_dict["mt_mt_llmet"] = "40,0.0,400" self.binnings_dict["mt_mvamet"] = "40,0.0,200.0" self.binnings_dict["mt_mvametphi"] = "32,-3.2,3.2" self.binnings_dict["mt_m_vis"] = " ".join( [str(float(f)) for f in range(0, 200, 10) + range(200, 351, 25)]) self.binnings_dict["mt_nJets30"] = "8,-0.5,7.5" self.binnings_dict["mt_njetspt30"] = "10,-0.5,9.5" self.binnings_dict["mt_njets"] = "8,-0.5,7.5" self.binnings_dict["mt_nbtag"] = "5,-0.5,4.5" self.binnings_dict["mt_njetingap"] = "5,-0.5,4.5" self.binnings_dict["mt_phi_1"] = "20,-3.2,3.2" self.binnings_dict["mt_phi_2"] = "20,-3.2,3.2" self.binnings_dict["mt_phi_ll"] = "32,-3.2,3.2" self.binnings_dict["mt_phi_llmet"] = "32,-3.2,3.2" self.binnings_dict["mt_phi_sv"] = "32,-3.2,3.2" self.binnings_dict["mt_pt_1"] = "25,0.0,100.0" self.binnings_dict["mt_pt_2"] = "25,0.0,100.0" self.binnings_dict["mt_pt_ll"] = "25,0.0,250" self.binnings_dict["mt_pt_llmet"] = "25,0.0,250" self.binnings_dict["mt_pt_sv"] = "25,0.0,250" self.binnings_dict["mt_pt_tt"] = "20,0.0,200" self.binnings_dict["mt_puweight"] = "20,0.0,2.0" self.binnings_dict["mt_rho"] = "25,0.0,50.0" self.binnings_dict["mt_svfitMass"] = "30,0.0,300" self.binnings_dict["mt_trigweight_1"] = "20,0.5,1.5" self.binnings_dict["mt_trigweight_2"] = "20,0.5,1.5" self.binnings_dict["mt_pZetaMissVis"] = "50,-150.0,100.0" self.binnings_dict["mt_pzetamiss"] = "50,-150.0,100.0" self.binnings_dict["mt_pzetavis"] = "20,0.0,100.0" self.binnings_dict["mt_metProjectionPar"] = "21,-20.0,200.0" self.binnings_dict["mt_metProjectionPerp"] = "50,-50.0,50.0" self.binnings_dict["mt_metProjectionPhi"] = "20,-3.141,3.141" self.binnings_dict["mt_gen_match_1"] = "7,0,7" self.binnings_dict["mt_gen_match_2"] = "7,0,7" self.binnings_dict["et_decayMode_2"] = "11,0.0,11.0" self.binnings_dict["et_eta_1"] = "30,-3,3" self.binnings_dict["et_eta_2"] = "30,-3,3" self.binnings_dict["et_eta_ll"] = "25,-5.0,5.0" self.binnings_dict["et_eta_llmet"] = "25,-5.0,5.0" self.binnings_dict["et_eta_sv"] = "25,-5.0,5.0" self.binnings_dict["et_iso_1"] = "25,0.0,0.1" self.binnings_dict["et_iso_2"] = "25,0.0,2.0" self.binnings_dict["et_jdeta"] = "20,0.0,10.0" self.binnings_dict["et_jdphi"] = "20,-3.2,3.2" self.binnings_dict["et_jeta_1"] = "20,-4.7,4.7" self.binnings_dict["et_jeta_2"] = "20,-4.7,4.7" self.binnings_dict["et_jphi_1"] = "20,-3.2,3.2" self.binnings_dict["et_jphi_2"] = "20,-3.2,3.2" self.binnings_dict["et_m_1"] = "20,-0.2,0.2" self.binnings_dict["et_m_2"] = "25,0.0,2.5" self.binnings_dict["et_m_ll"] = "60,0.0,300" self.binnings_dict["et_m_llmet"] = "60,0.0,400" self.binnings_dict["et_m_sv"] = "25,0.0,250" self.binnings_dict["et_mt_tot"] = "30,0.0,300" self.binnings_dict["et_met"] = "40,0.0,200.0" self.binnings_dict["et_metphi"] = "32,-3.2,3.2" self.binnings_dict["et_metProjectionPar"] = "20,-100.0,300.0" self.binnings_dict["et_metProjectionPerp"] = "50,-50.0,50.0" self.binnings_dict["et_metProjectionPhi"] = "20,-3.141,3.141" self.binnings_dict["et_mt_1"] = "20,0.0,160" self.binnings_dict["et_mt_2"] = "20,0.0,160" self.binnings_dict["et_mt_tt"] = "30,0.0,300" self.binnings_dict["et_mt_tot"] = "20,0.0,1000" self.binnings_dict["et_mjj"] = "20,0.0,1500.0" self.binnings_dict["et_mt_lep1met"] = "30,0.0,300" self.binnings_dict["et_mt_ll"] = "25,75.0,300" self.binnings_dict["et_mt_llmet"] = "40,0.0,400" self.binnings_dict["et_mvamet"] = "40,0.0,200.0" self.binnings_dict["et_mvametphi"] = "32,-3.2,3.2" self.binnings_dict["et_m_vis"] = "60,0.0,300" self.binnings_dict["et_nJets30"] = "8,-0.5,7.5" self.binnings_dict["et_njetspt30"] = "10,-0.5,9.5" self.binnings_dict["et_njets"] = "8,-0.5,7.5" self.binnings_dict["et_nbtag"] = "5,-0.5,4.5" self.binnings_dict["et_njetingap"] = "5,-0.5,4.5" self.binnings_dict["et_phi_1"] = "20,-3.2,3.2" self.binnings_dict["et_phi_2"] = "20,-3.2,3.2" self.binnings_dict["et_phi_ll"] = "32,-3.2,3.2" self.binnings_dict["et_phi_llmet"] = "32,-3.2,3.2" self.binnings_dict["et_phi_sv"] = "32,-3.2,3.2" self.binnings_dict["et_pt_1"] = "25,0.0,100.0" self.binnings_dict["et_pt_2"] = "25,0.0,100.0" self.binnings_dict["et_pt_ll"] = "25,0.0,250" self.binnings_dict["et_pt_llmet"] = "25,0.0,250" self.binnings_dict["et_pt_sv"] = "25,0.0,250" self.binnings_dict["et_pt_tt"] = "20,0.0,200" self.binnings_dict["et_puweight"] = "20,0.0,2.0" self.binnings_dict["et_rho"] = "25,0.0,50.0" self.binnings_dict["et_svfitMass"] = "30,0.0,300" self.binnings_dict["et_trigweight_1"] = "20,0.5,1.5" self.binnings_dict["et_trigweight_2"] = "20,0.5,1.5" self.binnings_dict["et_pZetaMissVis"] = "50,-150.0,100.0" self.binnings_dict["et_pzetamiss"] = "50,-150.0,100.0" self.binnings_dict["et_pzetavis"] = "20,0.0,100.0" self.binnings_dict["et_metProjectionPar"] = "21,-20.0,200.0" self.binnings_dict["et_metProjectionPerp"] = "50,-50.0,50.0" self.binnings_dict["et_metProjectionPhi"] = "20,-3.141,3.141" self.binnings_dict["em_eta_1"] = "30,-3,3" self.binnings_dict["em_eta_2"] = "30,-3,3" self.binnings_dict["et_gen_match_1"] = "7,0,7" self.binnings_dict["et_gen_match_2"] = "7,0,7" self.binnings_dict["em_eta_ll"] = "25,-5.0,5.0" self.binnings_dict["em_eta_llmet"] = "25,-5.0,5.0" self.binnings_dict["em_eta_sv"] = "25,-5.0,5.0" self.binnings_dict["em_iso_1"] = "25,0.0,0.1" self.binnings_dict["em_iso_2"] = "25,0.0,0.1" self.binnings_dict["em_jdeta"] = "20,0.0,10.0" self.binnings_dict["em_jdphi"] = "20,-3.2,3.2" self.binnings_dict["em_jeta_1"] = "20,-4.7,4.7" self.binnings_dict["em_jeta_2"] = "20,-4.7,4.7" self.binnings_dict["em_jphi_1"] = "20,-3.2,3.2" self.binnings_dict["em_jphi_2"] = "20,-3.2,3.2" self.binnings_dict["em_m_1"] = "20,-0.2,0.2" self.binnings_dict["em_m_2"] = "10,0.0,0.2" self.binnings_dict["em_m_ll"] = "60,0.0,300" self.binnings_dict["em_m_llmet"] = "60,0.0,400" self.binnings_dict["em_m_sv"] = "25,0.0,250" self.binnings_dict["em_mt_tot"] = "30,0.0,300" self.binnings_dict["em_met"] = "40,0.0,200.0" self.binnings_dict["em_metphi"] = "32,-3.2,3.2" self.binnings_dict["em_mjj"] = "20,0.0,1500.0" self.binnings_dict["em_metProjectionPar"] = "20,-100.0,300.0" self.binnings_dict["em_metProjectionPerp"] = "50,-50.0,50.0" self.binnings_dict["em_metProjectionPhi"] = "20,-3.141,3.141" self.binnings_dict["em_mt_1"] = "20,0.0,160" self.binnings_dict["em_mt_2"] = "20,0.0,160" self.binnings_dict["em_mt_tt"] = "30,0.0,300" self.binnings_dict["em_mt_tot"] = "20,0.0,1000" self.binnings_dict["em_mt_lep1met"] = "30,0.0,300" self.binnings_dict["em_mt_ll"] = "25,75.0,300" self.binnings_dict["em_mt_llmet"] = "40,0.0,400" self.binnings_dict["em_mvamet"] = "40,0.0,200.0" self.binnings_dict["em_mvametphi"] = "32,-3.2,3.2" self.binnings_dict["em_m_vis"] = "60,0.0,300" self.binnings_dict["em_nJets30"] = "8,-0.5,7.5" self.binnings_dict["em_njetspt30"] = "10,-0.5,9.5" self.binnings_dict["em_njets"] = "8,-0.5,7.5" self.binnings_dict["em_nbtag"] = "5,-0.5,4.5" self.binnings_dict["em_njetingap"] = "5,-0.5,4.5" self.binnings_dict["em_phi_1"] = "20,-3.2,3.2" self.binnings_dict["em_phi_2"] = "20,-3.2,3.2" self.binnings_dict["em_phi_ll"] = "32,-3.2,3.2" self.binnings_dict["em_phi_llmet"] = "32,-3.2,3.2" self.binnings_dict["em_phi_sv"] = "32,-3.2,3.2" self.binnings_dict["em_pt_1"] = "25,0.0,100.0" self.binnings_dict["em_pt_2"] = "25,0.0,100.0" self.binnings_dict["em_pt_ll"] = "25,0.0,250" self.binnings_dict["em_pt_llmet"] = "25,0.0,250" self.binnings_dict["em_pt_sv"] = "25,0.0,250" self.binnings_dict["em_pt_tt"] = "20,0.0,200" self.binnings_dict["em_puweight"] = "20,0.0,2.0" self.binnings_dict["em_rho"] = "25,0.0,50.0" self.binnings_dict["em_svfitMass"] = "30,0.0,300" self.binnings_dict["em_trigweight_1"] = "20,0.5,1.5" self.binnings_dict["em_trigweight_2"] = "20,0.5,1.5" self.binnings_dict["em_pZetaMissVis"] = "50,-150.0,100.0" self.binnings_dict["em_pzetamiss"] = "50,-150.0,100.0" self.binnings_dict["em_pzetavis"] = "20,0.0,100.0" self.binnings_dict["mm_eta_1"] = "30,-3.0,3.0" self.binnings_dict["mm_eta_2"] = "30,-3.0,3.0" self.binnings_dict["mm_eta_ll"] = "25,-5.0,5.0" self.binnings_dict["mm_eta_llmet"] = "25,-5.0,5.0" self.binnings_dict["mm_eta_sv"] = "25,-5.0,5.0" self.binnings_dict["mm_iso_1"] = "25,0.0,0.1" self.binnings_dict["mm_iso_2"] = "25,0.0,0.1" self.binnings_dict["mm_jdeta"] = "20,0.0,10.0" self.binnings_dict["mm_jdphi"] = "20,-3.2,3.2" self.binnings_dict["mm_jeta_1"] = "20,-4.7,4.7" self.binnings_dict["mm_jeta_2"] = "20,-4.7,4.7" self.binnings_dict["mm_jphi_1"] = "20,-3.2,3.2" self.binnings_dict["mm_jphi_2"] = "20,-3.2,3.2" self.binnings_dict["mm_m_1"] = "10,0.0,0.2" self.binnings_dict["mm_m_2"] = "10,0.0,0.2" self.binnings_dict["mm_m_ll"] = "60,0.0,300" self.binnings_dict["mm_m_llmet"] = "60,0.0,400" self.binnings_dict["mm_m_sv"] = "25,0.0,250" self.binnings_dict["mm_met"] = "40,0.0,200.0" self.binnings_dict["mm_metphi"] = "32,-3.2,3.2" self.binnings_dict["mm_mjj"] = "20,0.0,1500.0" self.binnings_dict["mm_mt_1"] = "20,0.0,160" self.binnings_dict["mm_mt_lep1met"] = "30,0.0,300" self.binnings_dict["mm_mt_ll"] = "25,75.0,300" self.binnings_dict["mm_mt_llmet"] = "40,0.0,400" self.binnings_dict["mm_mvamet"] = "40,0.0,200.0" self.binnings_dict["mm_mvametphi"] = "32,-3.2,3.2" self.binnings_dict["mm_m_vis"] = "40,50,130" self.binnings_dict["mm_nJets30"] = "8,-0.5,7.5" self.binnings_dict["mm_njetspt30"] = "10,-0.5,9.5" self.binnings_dict["mm_njets"] = "8,-0.5,7.5" self.binnings_dict["mm_nbtag"] = "5,-0.5,4.5" self.binnings_dict["mm_njetingap"] = "5,-0.5,4.5" self.binnings_dict["mm_phi_1"] = "20,-3.2,3.2" self.binnings_dict["mm_phi_2"] = "20,-3.2,3.2" self.binnings_dict["mm_phi_ll"] = "32,-3.2,3.2" self.binnings_dict["mm_phi_llmet"] = "32,-3.2,3.2" self.binnings_dict["mm_phi_sv"] = "32,-3.2,3.2" self.binnings_dict["mm_pt_1"] = "25,0.0,100.0" self.binnings_dict["mm_pt_2"] = "25,0.0,100.0" self.binnings_dict["mm_pt_ll"] = "25,0.0,250" self.binnings_dict["mm_pt_llmet"] = "25,0.0,250" self.binnings_dict["mm_pt_sv"] = "25,0.0,250" self.binnings_dict["mm_pt_tt"] = "20,0.0,200" self.binnings_dict["mm_puweight"] = "20,0.0,2.0" self.binnings_dict["mm_rho"] = "25,0.0,50.0" self.binnings_dict["mm_svfitMass"] = "30,0.0,300" self.binnings_dict["mm_trigweight_1"] = "20,0.5,1.5" self.binnings_dict["mm_trigweight_2"] = "20,0.5,1.5" self.binnings_dict["ee_eta_1"] = "30,-3.0,3.0" self.binnings_dict["ee_eta_2"] = "30,-3.0,3.0" self.binnings_dict["ee_eta_ll"] = "25,-5.0,5.0" self.binnings_dict["ee_eta_llmet"] = "25,-5.0,5.0" self.binnings_dict["ee_eta_sv"] = "25,-5.0,5.0" self.binnings_dict["ee_iso_1"] = "25,0.0,0.1" self.binnings_dict["ee_iso_2"] = "25,0.0,0.1" self.binnings_dict["ee_jdeta"] = "20,0.0,10.0" self.binnings_dict["ee_jdphi"] = "20,-3.2,3.2" self.binnings_dict["ee_jeta_1"] = "20,-4.7,4.7" self.binnings_dict["ee_jeta_2"] = "20,-4.7,4.7" self.binnings_dict["ee_jphi_1"] = "20,-3.2,3.2" self.binnings_dict["ee_jphi_2"] = "20,-3.2,3.2" self.binnings_dict["ee_m_1"] = "20,-0.2,0.2" self.binnings_dict["ee_m_2"] = "20,-0.2,0.2" self.binnings_dict["ee_m_ll"] = "60,0.0,300" self.binnings_dict["ee_m_llmet"] = "60,0.0,400" self.binnings_dict["ee_m_sv"] = "25,0.0,250" self.binnings_dict["ee_met"] = "40,0.0,200.0" self.binnings_dict["ee_metphi"] = "32,-3.2,3.2" self.binnings_dict["ee_mjj"] = "20,0.0,1500.0" self.binnings_dict["ee_mt_1"] = "20,0.0,160" self.binnings_dict["ee_mt_lep1met"] = "30,0.0,300" self.binnings_dict["ee_mt_ll"] = "25,75.0,300" self.binnings_dict["ee_mt_llmet"] = "40,0.0,400" self.binnings_dict["ee_mvamet"] = "40,0.0,200.0" self.binnings_dict["ee_mvametphi"] = "32,-3.2,3.2" self.binnings_dict["ee_m_vis"] = "60,0.0,300" self.binnings_dict["ee_nJets30"] = "8,-0.5,7.5" self.binnings_dict["ee_njetspt30"] = "10,-0.5,9.5" self.binnings_dict["ee_njets"] = "8,-0.5,7.5" self.binnings_dict["ee_nbtag"] = "5,-0.5,4.5" self.binnings_dict["ee_njetingap"] = "5,-0.5,4.5" self.binnings_dict["ee_phi_1"] = "20,-3.2,3.2" self.binnings_dict["ee_phi_2"] = "20,-3.2,3.2" self.binnings_dict["ee_phi_ll"] = "32,-3.2,3.2" self.binnings_dict["ee_phi_llmet"] = "32,-3.2,3.2" self.binnings_dict["ee_phi_sv"] = "32,-3.2,3.2" self.binnings_dict["ee_pt_1"] = "25,0.0,100.0" self.binnings_dict["ee_pt_2"] = "25,0.0,100.0" self.binnings_dict["ee_pt_ll"] = "25,0.0,250" self.binnings_dict["ee_pt_llmet"] = "25,0.0,250" self.binnings_dict["ee_pt_sv"] = "25,0.0,250" self.binnings_dict["ee_pt_tt"] = "20,0.0,200" self.binnings_dict["ee_puweight"] = "20,0.0,2.0" self.binnings_dict["ee_rho"] = "25,0.0,50.0" self.binnings_dict["ee_svfitMass"] = "30,0.0,300" self.binnings_dict["ee_trigweight_1"] = "20,0.5,1.5" self.binnings_dict["ee_trigweight_2"] = "20,0.5,1.5" self.binnings_dict[ "binningHtt8TeV_" + "ee_1jet_high"] = "0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.0" self.binnings_dict["binningHtt8TeV_" + "ee_1jet_low"] = "0.0 0.2 0.4 0.6 0.8 1.0" self.binnings_dict[ "binningHtt8TeV_" + "ee_2jet_vbf"] = "0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.0" self.binnings_dict["binningHtt8TeV_" + "ee_0jet_high"] = "0.0 0.2 0.4 0.6 0.8 1.0" self.binnings_dict["binningHtt8TeV_" + "ee_0jet_low"] = "0.0 0.2 0.4 0.6 0.8 1.0" self.binnings_dict[ "binningHtt8TeV_" + "em_inclusive"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "em_0jet_low"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "em_0jet_high"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "em_1jet_low"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "em_1jet_high"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "em_2jet_vbf_loose"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "em_2jet_vbf_tight"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_0jet_high"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_0jet_low"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_0jet_medium"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_1jet_high_lowhiggs"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_1jet_high_mediumhiggs"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_1jet_medium"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_inclusive"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_2jet_vbf"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_2jet_vbf_loose"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "et_2jet_vbf_tight"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict["binningHtt8TeV_" + "mm_0jet_low"] = "0.0 1.0" self.binnings_dict[ "binningHtt8TeV_" + "mm_1jet_high"] = "0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.0" self.binnings_dict["binningHtt8TeV_" + "mm_1jet_low"] = "0.0 1.0" self.binnings_dict[ "binningHtt8TeV_" + "mm_2jet_vbf"] = "0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1.0" self.binnings_dict["binningHtt8TeV_" + "mm_0jet_high"] = "0.0 1.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_0jet_high"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_0jet_low"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_0jet_medium"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_1jet_high_lowhiggs"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_1jet_high_mediumhiggs"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_1jet_medium"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_inclusive"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_2jet_vbf_loose"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_2jet_vbf"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "mt_2jet_vbf_tight"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "tt_1jet_high_mediumhiggs"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "tt_1jet_high_highhiggs"] = "0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 225.0 250.0 275.0 300.0 325.0 350.0" self.binnings_dict[ "binningHtt8TeV_" + "tt_2jet_vbf"] = "0.0 20.0 40.0 60.0 80.0 100.0 120.0 140.0 160.0 180.0 200.0 250.0 300.0 350.0" # Z->tautau polarisation binnings for channel in ["mt", "et", "tt", "em"]: self.binnings_dict[ "binningZttPol13TeV_" + channel + "_a1"] = self.binnings_dict[ channel + "_visibleOverFullEnergy"] # TODO change to dedicated a1 variable self.binnings_dict["binningZttPol13TeV_" + channel + "_rho"] = self.binnings_dict[ channel + "_rhoNeutralChargedAsymmetry"] self.binnings_dict["binningZttPol13TeV_" + channel + "_oneprong"] = self.binnings_dict[ channel + "_visibleOverFullEnergy"] # H->tautau binnings for channel in ["mt", "et", "em", "tt", "mm"]: self.binnings_dict["binningHtt13TeV_" + channel + "_inclusive_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 10) + range(200, 351, 25) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_0jet_inclusive_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 10) + range(200, 351, 25) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_0jet_low_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 10) + range(200, 351, 25) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_0jet_high_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 20) + range(200, 351, 50) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_1jet_inclusive_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 20) + range(200, 351, 50) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_1jet_low_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 10) + range(200, 351, 25) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_1jet_high_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 20) + range(200, 351, 50) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_2jet_vbf_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 20) + range(200, 351, 50) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_inclusive_svfitMass"] = " ".join([ str(float(f)) for f in range(0, 200, 10) + range(200, 351, 25) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_0jet_inclusive_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_0jet_low_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_0jet_high_m_vis"] = " ".join([ str(float(f)) for f in range(0, 45, 15) + range(45, 105, 10) + range(105, 151, 15) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_1jet_inclusive_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_1jet_low_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_1jet_high_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_2jet_vbf_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 15) + range(30, 120, 10) + range(120, 151, 15) ]) self.binnings_dict["binningHtt13TeV_" + channel + "_2jet_inclusive_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 15) + range(30, 120, 10) + range(120, 151, 15) ]) self.binnings_dict["binningMVA13TeV_" + channel + "_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningMVA13TeV_" + channel + "_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningMVA13TeV_" + channel + "_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) self.binnings_dict["binningMVA13TeV_" + channel + "_m_vis"] = " ".join([ str(float(f)) for f in range(0, 30, 10) + range(30, 120, 5) + range(120, 151, 10) ]) for i in range(11): self.binnings_dict["binningMVA13TeV_" + channel + "_reg_%i" % i] = self.binnings_dict["mt_reg_1"] self.binnings_dict["binningMVA13TeV_" + channel + "_disc_%i" % i] = self.binnings_dict["mt_disc_1"] self.binnings_dict["binningMVA13TeV_" + channel + "_ztt_%i" % i] = self.binnings_dict["mt_ztt_1"] self.binnings_dict["binningMVA13TeV_" + channel + "_vbf_%i" % i] = self.binnings_dict["mt_vbf_1"] self.binnings_dict[ "binningHtt13TeV_tt_inclusive_svfitMass"] = " ".join([ str(float(f)) for f in [0, 50] + range(90, 171, 20) + [200, 350] ]) # H->tautau MSSM binnings for channel in ["mt", "et", "em", "tt"]: self.binnings_dict[channel + "_mt_2"] = "30,0,150" self.binnings_dict[channel + "_lep1_centrality"] = "10,0,1" self.binnings_dict[channel + "_lep2_centrality"] = "10,0,1" self.binnings_dict[channel + "_diLep_centrality"] = "10,0,1" self.binnings_dict[channel + "_diLep_diJet_deltaR"] = "10,0,10" self.binnings_dict[channel + "_delta_lep_centrality"] = "10,0,1" self.binnings_dict[channel + "_product_lep_centrality"] = "10,0,1" self.binnings_dict[channel + "_pVecSum"] = "25,0,2500" self.binnings_dict[channel + "_pScalSum"] = "25,0,2500" self.binnings_dict[channel + "_ptvis"] = "25,0.0,250" self.binnings_dict[channel + "_H_pt"] = "25,0.0,250" self.binnings_dict[channel + "_TrainingSelectionValue"] = "10,0,100" self.binnings_dict["binningHttMSSM13TeV_" + channel + "_inclusive_svfitMass"] = " ".join( [str(float(f)) for f in range(0, 4000, 10)]) self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_nobtag_mt_tot"] = " ".join([ str(float(f)) for f in [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 225, 250, 275, 300, 325, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_btag_mt_tot"] = " ".join([ str(float(f)) for f in [ 0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 250, 300, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) for i in ["looseiso", "loosemt", "tight"]: self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_nobtag_" + i + "_mt_tot"] = " ".join([ str(float(f)) for f in [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 225, 250, 275, 300, 325, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_btag_" + i + "_mt_tot"] = " ".join([ str(float(f)) for f in [ 0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 250, 300, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_nobtag_mt_sv"] = " ".join( [ str(float(f)) for f in [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 225, 250, 275, 300, 325, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_btag_mt_sv"] = " ".join([ str(float(f)) for f in [ 0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 250, 300, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_nobtag_m_sv"] = " ".join([ str(float(f)) for f in [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 225, 250, 275, 300, 325, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) self.binnings_dict[ "binningHttMSSM13TeV_" + channel + "_btag_m_sv"] = " ".join([ str(float(f)) for f in [ 0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 250, 300, 350, 400, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900 ] ]) #==========================CategoriesDictUpdates========================================================= import Artus.Utility.jsonTools as jsonTools import HiggsAnalysis.KITHiggsToTauTau.plotting.configs.categories as Categories categoriesUpdate = Categories.CategoriesDict().getBinningsDict() self.binnings_dict.update(categoriesUpdate)
def __init__(self, higgs_masses=["125"], useRateParam=False, year="", cb=None): super(SMHttDatacards, self).__init__(cb) if cb is None: signal_processes = ["ggH", "qqH", "WH", "ZH"] # ====================================================================== # MT channel self.add_processes( channel="mt", categories=Categories.CategoriesDict().getCategories(["mt" ])["mt"], bkg_processes=[ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VV", "W", "QCD" ], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["mt"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTTT", "TTJJ", "VV" ]).AddSyst(self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).process([ "ZTT", "TTT", "TTJJ", "VV" ]).AddSyst(self.cb, *self.tau_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_syst_args) else: self.cb.cp().channel(["mt"]).process( ["ZTT", "ZLL", "ZL", "ZJ", "TTTT", "TTJJ", "VV"]).AddSyst(self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["mt"]).process( ["ZTT", "TTT", "VV"]).AddSyst(self.cb, *self.tau_efficiency_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.tau_efficiency_syst_args) # Tau ES self.cb.cp().channel(["mt"]).process(["ZTT", "TTJJ"]).AddSyst( self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["mt" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate if year == "2016": self.cb.cp().channel(["mt"]).process(["ZL"]).AddSyst( self.cb, *self.muFakeTau2016_syst_args) else: self.cb.cp().channel(["mt"]).process(["ZL"]).AddSyst( self.cb, *self.muFakeTau_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["mt"], False)["mt"]: self.cb.cp().channel(["mt"]).bin([ "mt_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # B-Tag #self.cb.cp().channel(["mt"]).process(["ZTT", "ZL", "ZJ", "TT", "VV", "W", "QCD"]).AddSyst(self.cb, *self.btag_efficiency_syst_args) #self.cb.cp().channel(["mt"]).signals().AddSyst(self.cb, *self.btag_efficiency_syst_args) #self.cb.cp().channel(["mt"]).process(["ZTT", "ZL", "ZJ", "TT", "VV", "W", "QCD"]).AddSyst(self.cb, *self.btag_mistag_syst_args) #self.cb.cp().channel(["mt"]).signals().AddSyst(self.cb, *self.btag_mistag_syst_args) # ====================================================================== # ET channel self.add_processes( channel="et", categories=Categories.CategoriesDict().getCategories(["et" ])["et"], bkg_processes=[ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VV", "W", "QCD" ], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["et"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VV" ]).AddSyst(self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["et"]).process( ["ZTT", "TTT", "VV"]).AddSyst(self.cb, *self.tau_efficiency2016_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_syst_args) else: self.cb.cp().channel(["et"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VV" ]).AddSyst(self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["et"]).process( ["ZTT", "TTT", "VV"]).AddSyst(self.cb, *self.tau_efficiency_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.tau_efficiency_syst_args) # Tau ES self.cb.cp().channel(["et"]).process(["ZTT"]).AddSyst( self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["et" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate if year == "2016": self.cb.cp().channel(["et"]).process(["ZL"]).AddSyst( self.cb, *self.eFakeTau2016_syst_args) else: self.cb.cp().channel(["et"]).process(["ZL"]).AddSyst( self.cb, *self.eFakeTau_tight_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["et"], False)["et"]: self.cb.cp().channel(["et"]).bin([ "et_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # B-Tag #self.cb.cp().channel(["et"]).process(["ZTT", "ZL", "ZJ", "TT", "VV", "W", "QCD"]).AddSyst(self.cb, *self.btag_efficiency_syst_args) #self.cb.cp().channel(["et"]).signals().AddSyst(self.cb, *self.btag_efficiency_syst_args) #self.cb.cp().channel(["et"]).process(["ZTT", "ZL", "ZJ", "TT", "VV", "W", "QCD"]).AddSyst(self.cb, *self.btag_mistag_syst_args) #self.cb.cp().channel(["et"]).signals().AddSyst(self.cb, *self.btag_mistag_syst_args) # ====================================================================== # EM channel self.add_processes( channel="em", categories=Categories.CategoriesDict().getCategories(["em" ])["em"], bkg_processes=["ZTT", "ZLL", "TT", "VV", "W", "QCD"], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["em"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TT", "VV", "W" ]).AddSyst(self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["em"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TT", "VV", "W" ]).AddSyst(self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.muon_efficiency2016_syst_args) else: self.cb.cp().channel(["em"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TT", "VV", "W" ]).AddSyst(self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["em"]).process( ["ZTT", "ZLL", "ZL", "ZJ", "TT", "VV", "W"]).AddSyst(self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.muon_efficiency_syst_args) # B-Tag #self.cb.cp().channel(["em"]).process(["ZTT", "ZLL", "TT", "VV", "W", "QCD"]).AddSyst(self.cb, *self.btag_efficiency_syst_args) #self.cb.cp().channel(["em"]).signals().AddSyst(self.cb, *self.btag_efficiency_syst_args) #self.cb.cp().channel(["em"]).process(["ZTT", "ZLL", "TT", "VV", "W", "QCD"]).AddSyst(self.cb, *self.btag_mistag_syst_args) #self.cb.cp().channel(["em"]).signals().AddSyst(self.cb, *self.btag_mistag_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["em"], False)["em"]: self.cb.cp().channel(["em"]).bin([ "em_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # TT channel self.add_processes( channel="tt", categories=Categories.CategoriesDict().getCategories(["tt" ])["tt"], bkg_processes=[ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VV", "W", "QCD" ], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["tt"]).process( ["ZTT", "TTT", "VV"]).AddSyst(self.cb, *self.tau_efficiency2016_syst_args) self.cb.cp().channel(["tt"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_syst_args) else: self.cb.cp().channel(["tt"]).process( ["ZTT", "TTT", "VV"]).AddSyst(self.cb, *self.tau_efficiency_syst_args) self.cb.cp().channel(["tt"]).signals().AddSyst( self.cb, *self.tau_efficiency_syst_args) # Tau ES self.cb.cp().channel(["tt"]).process(["ZTT"]).AddSyst( self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["tt" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate #self.cb.cp().channel(["tt"]).process(["ZL", "ZJ"]).AddSyst(self.cb, *self.zllFakeTau_syst_args) #self.cb.cp().channel(["tt"]).process(["ZL"]).AddSyst(self.cb, *self.eFakeTau_vloose_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["tt"], False)["tt"]: self.cb.cp().channel(["tt"]).bin([ "tt_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # MM channel self.add_processes( channel="mm", categories=Categories.CategoriesDict().getCategories(["mm" ])["mm"], bkg_processes=["ZTT", "ZLL", "TT", "VV", "W", "QCD"], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["mm"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTTT", "TTJJ", "VV", "W" ]).AddSyst(self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["mm"]).signals().AddSyst( self.cb, *self.muon_efficiency2016_syst_args) else: self.cb.cp().channel(["mm"]).process( ["ZTT", "ZLL", "ZL", "ZJ", "TTTT", "TTJJ", "VV", "W"]).AddSyst(self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["mm"]).signals().AddSyst( self.cb, *self.muon_efficiency_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["mm"], False)["mm"]: self.cb.cp().channel(["mm"]).bin([ "mm_" + category ]).process(["ZLL"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # All channels # lumi # (hopefully) temporary fix if year == "2016": self.cb.cp().signals().AddSyst(self.cb, *self.lumi2016_syst_args) self.cb.cp().process( ["ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VV"]).AddSyst(self.cb, *self.lumi2016_syst_args) self.cb.cp().process(["W"]).channel([ "em", "tt", "mm" ]).AddSyst(self.cb, *self.lumi2016_syst_args ) # automatically in other channels determined else: self.cb.cp().signals().AddSyst(self.cb, *self.lumi_syst_args) self.cb.cp().process(["ZTT", "ZLL", "ZL", "ZJ", "TT", "VV"]).AddSyst(self.cb, *self.lumi_syst_args) self.cb.cp().process(["W"]).channel([ "em", "tt", "mm" ]).AddSyst(self.cb, *self.lumi_syst_args ) # automatically in other channels determined # jets self.cb.cp().process( ["ZTT", "ZL", "ZJ", "TT", "TTT", "TTJJ", "VV", "W", "QCD"]).AddSyst(self.cb, *self.jec_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.jec_syst_args) # fakes if year == "2016": self.cb.cp().channel(["et", "mt", "tt"]).process(["ZJ", "TTJJ"]).AddSyst( self.cb, *self.jetFakeTau_syst_args) else: self.cb.cp().channel(["et", "mt", "tt"]).process( ["ZJ", "W", "TTJJ"]).AddSyst(self.cb, *self.jetFakeTau_syst_args) # MET self.cb.cp().AddSyst(self.cb, *self.met_scale_syst_args) # cross section self.cb.cp().process(["ZTT", "ZL", "ZJ", "ZLL" ]).AddSyst(self.cb, *self.ztt_cross_section_syst_args) self.cb.cp().process(["TTT", "TTJJ"]).channel( ["mt", "et", "tt"]).AddSyst(self.cb, *self.ttj_cross_section_syst_args ) # automatically in other channels determined if year == "2016": self.cb.cp().process(["VV"]).AddSyst( self.cb, *self.vv_cross_section2016_syst_args) else: self.cb.cp().process(["VV"]).AddSyst( self.cb, *self.vv_cross_section_syst_args) self.cb.cp().process(["W"]).channel(["em", "tt", "mm"]).AddSyst( self.cb, *self.wj_cross_section_syst_args ) # automatically in other channels determined # tau efficiency # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["mt", "et", "tt"]).process([ "ZTT", "TTT", "VV" ]).AddSyst(self.cb, *self.tau_efficiency2016_corr_syst_args) self.cb.cp().channel(["mt", "et", "tt"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_corr_syst_args) else: self.cb.cp().channel(["mt", "et", "tt"]).process([ "ZTT", "TTT", "VV" ]).AddSyst(self.cb, *self.tau_efficiency_corr_syst_args) self.cb.cp().channel(["mt", "et", "tt"]).signals().AddSyst( self.cb, *self.tau_efficiency_corr_syst_args) # signal self.cb.cp().signals().AddSyst(self.cb, *self.htt_qcd_scale_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.htt_pdf_scale_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.htt_ueps_syst_args) # transform B-Tagging shape to lnN #self.cb.cp().syst_name(['CMS_eff_b_13TeV']).ForEachSyst(lambda x: x.set_type("lnN")) #self.cb.cp().syst_name(['CMS_mistag_b_13TeV']).ForEachSyst(lambda x: x.set_type("lnN")) if log.isEnabledFor(logging.DEBUG): self.cb.PrintAll()
def __init__(self): super(DatacardConfigs, self).__init__() self._mapping_process2sample = { "data_obs": "data", "ZTT": "ztt", "ZTTPOSPOL": "zttpospol", "ZTTNEGPOL": "zttnegpol", "ZLL": "zll", "ZL": "zl", "ZJ": "zj", "EWKZ": "ewkz", "TT": "ttj", "TTTAUTAU": "tttautau", "TTT": "ttt", "TTJJ": "ttjj", "TTJT": "ttjt", "TTJL": "ttjl", "VV": "vv", "VVT": "vvt", "VVJ": "vvj", "VVL": "vvl", "W": "wj", "WJT": "wjt", "WJL": "wjl", "QCD": "qcd", "EWK": "ewk", "FF": "ff", "ggH": "ggh", "qqH": "qqh", "VH": "vh", "WH": "wh", "ZH": "zh", "ggH_htt": "ggh", "qqH_htt": "qqh", "VH_htt": "vh", "WH_htt": "wh", "ZH_htt": "zh", "ggH_hww": "hww_gg", "qqH_hww": "hww_qq", "HTT": "htt", "ggHsm": "gghjhusm", "ggHmm": "gghjhumm", "ggHps": "gghjhups", "qqHsm": "qqhjhusm", "qqHmm": "qqhjhumm", "qqHps": "qqhjhups", "CPEVEN": "httcpeven", "SUSYCPODD_ALT": "susycpodd", "CPODD_ALT": "httcpodd", "CPMIX_ALT": "httcpmix", "ZEM": "zem", "ZET": "zet", "ZMT": "zmt" } self._mapping_category2binid = { "mt": { "mt_inclusive": 0, "mt_0jet_high": 1, "mt_0jet_low": 2, "mt_1jet_high": 3, "mt_1jet_low": 4, "mt_2jet_vbf": 5, "mt_CP_mt": 10, "mt_vbf": 11, "mt_1jet_boosted": 12, "mt_1jet_highpt2": 13, "mt_1jet_lowpt2": 14, "mt_0jet_highpt2": 15, "mt_0jet_lowpt2": 16, "mt_vbf_tag": 17, "mt_2jet_untagged": 18, "mt_1jet_boost_high": 19, "mt_1jet_boost_medium": 20, "mt_1jet_boost_low": 21, "mt_0jet_nhighpt2": 22, "mt_0jet_nlowpt2": 23, "mt_0jet_inclusive": 30, "mt_1jet_inclusive": 31, "mt_2jet_inclusive": 32, "mt_ZeroJet2D": 100, "mt_Boosted2D": 101, "mt_Vbf2D": 102, "mt_a1": 1010, "mt_rho": 1020, "mt_oneprong": 1030, "mt_dijet_boosted": 2001, "mt_dijet_highM": 2002, "mt_dijet_lowM": 2003, "mt_dijet_lowMjj": 2004, "mt_ZeroJet_LFV": 3001, "mt_oneJet_LFV": 3002, }, "et": { "et_inclusive": 0, "et_0jet_high": 1, "et_0jet_low": 2, "et_1jet_high": 3, "et_1jet_low": 4, "et_2jet_vbf": 5, "et_CP_et": 10, "et_vbf": 11, "et_1jet_boosted": 12, "et_1jet_highpt2": 13, "et_1jet_lowpt2": 14, "et_0jet_highpt2": 15, "et_0jet_lowpt2": 16, "et_vbf_tag": 17, "et_2jet_untagged": 18, "et_1jet_boost_high": 19, "et_1jet_boost_medium": 20, "et_1jet_boost_low": 21, "et_0jet_nhighpt2": 22, "et_0jet_nlowpt2": 23, "et_0jet_inclusive": 30, "et_1jet_inclusive": 31, "et_2jet_inclusive": 32, "et_ZeroJet2D": 100, "et_Boosted2D": 101, "et_Vbf2D": 102, "et_a1": 1010, "et_rho": 1020, "et_oneprong": 1030, "et_dijet_boosted": 2001, "et_dijet_highM": 2002, "et_dijet_lowM": 2003, "et_dijet_lowMjj": 2004, "et_ZeroJet_LFV": 3001, "et_OneJet_LFV": 3002, }, "em": { "em_inclusive": 0, "em_0jet_high": 1, "em_0jet_low": 2, "em_1jet_high": 3, "em_1jet_low": 4, "em_2jet_vbf": 5, "em_CP_em": 10, "em_vbf": 11, "em_1jet_boosted": 12, "em_1jet_highpt2": 13, "em_1jet_lowpt2": 14, "em_0jet_highpt2": 15, "em_0jet_lowpt2": 16, "em_vbf_tag": 17, "em_2jet_untagged": 18, "em_1jet_boost_high": 19, "em_1jet_boost_medium": 20, "em_1jet_boost_low": 21, "em_0jet_nhighpt2": 22, "em_0jet_nlowpt2": 23, "em_0jet_inclusive": 30, "em_1jet_inclusive": 31, "em_2jet_inclusive": 32, "em_ZeroJet2D": 100, "em_Boosted2D": 101, "em_Vbf2D": 102, "em_oneprong": 1030, "em_dijet_boosted": 2001, "em_dijet_highM": 2002, "em_dijet_lowM": 2003, "em_dijet_lowMjj": 2004, "em_ZeroJet_LFV": 3001, "em_OneJet_LFV": 3002, }, "tt": { "tt_inclusive": 0, "tt_0jet_high": 1, "tt_0jet_low": 2, "tt_1jet_high": 3, "tt_1jet_low": 4, "tt_2jet_vbf": 5, "tt_CP_tt": 10, "tt_vbf": 11, "tt_1jet_boosted": 12, "tt_1jet_highpt2": 13, "tt_1jet_lowpt2": 14, "tt_0jet_highpt2": 15, "tt_0jet_lowpt2": 16, "tt_vbf_tag": 17, "tt_2jet_untagged": 18, "tt_1jet_boost_high": 19, "tt_1jet_boost_medium": 20, "tt_1jet_boost_low": 21, "tt_0jet_nhighpt2": 22, "tt_0jet_nlowpt2": 23, "tt_0jet_inclusive": 30, "tt_1jet_inclusive": 31, "tt_2jet_inclusive": 32, "tt_ZeroJet2D": 100, "tt_Boosted2D": 101, "tt_Vbf2D": 102, "tt_a1": 1010, "tt_rho": 1020, "tt_oneprong": 1030, "tt_dijet_boosted": 2001, "tt_dijet_highM": 2002, "tt_dijet_lowM": 2003, "tt_dijet_lowMjj": 2004, "tt_ZeroJet_LFV": 3001, "tt_OneJet_LFV": 3002, }, "mm": { "mm_inclusive": 0, "mm_0jet_high": 1, "mm_0jet_low": 2, "mm_1jet_high": 3, "mm_1jet_low": 4, "mm_2jet_vbf": 5, "mm_CP_em": 10, "mm_vbf": 11, "mm_1jet_boosted": 12, "mm_1jet_highpt2": 13, "mm_1jet_lowpt2": 14, "mm_0jet_highpt2": 15, "mm_0jet_lowpt2": 16, "mm_vbf_tag": 17, "mm_2jet_untagged": 18, "mm_1jet_boost_high": 19, "mm_1jet_boost_medium": 20, "mm_1jet_boost_low": 21, "mm_0jet_nhighpt2": 22, "mm_0jet_nlowpt2": 23, "mm_ZeroJet2D": 100, "mm_Boosted2D": 101, "mm_Vbf2D": 102, }, } channels = ["mt", "et", "tt", "em", "mm"] # ==========================Copy here!========================================= categories = Categories.CategoriesDict().getCategories( channels=channels) import operator #TODO get maximum binvalue for categories already there max_number = 1 + max([ max(v.iteritems(), key=operator.itemgetter(1))[1] for k, v in self._mapping_category2binid.iteritems() ]) for chan in channels: for i, cat in enumerate(categories[chan]): self._mapping_category2binid[chan][cat] = max_number + i self.htt_datacard_filename_templates = [ "datacards/individual/${BIN}/${MASS}/${ANALYSIS}_${CHANNEL}_${BINID}_${ERA}.txt", "datacards/channel/${CHANNEL}/${MASS}/${ANALYSIS}_${CHANNEL}_${ERA}.txt", "datacards/category/${BINID}/${MASS}/${ANALYSIS}_${BINID}_${ERA}.txt", "datacards/combined/${MASS}/${ANALYSIS}_${ERA}.txt", ] self.cp_datacard_filename_templates = [ "/cmb/${MASS}/${ANALYSIS}_${CHANNEL}_${BINID}_${ERA}.txt", "/${CHANNEL}/${MASS}/${ANALYSIS}_${CHANNEL}_${ERA}.txt", ] self.LFV_datacard_filename_templates = [ "datacards/individual/${BIN}/${MASS}/${ANALYSIS}_${CHANNEL}_${BINID}_${ERA}.txt", "datacards/channel/${CHANNEL}/${MASS}/${ANALYSIS}_${CHANNEL}_${ERA}.txt", "datacards/category/${BINID}/${MASS}/${ANALYSIS}_${BINID}_${ERA}.txt", "datacards/combined/${MASS}/${ANALYSIS}_${ERA}.txt", ]
def __init__(self, higgs_masses=["125"], ttbarFit=False, mmFit=False, year="", noJECuncSplit=False, cb=None, signal_processes=None): super(SMHttDatacards, self).__init__(cb) if cb is None: if signal_processes is None: signal_processes = ["ggH", "qqH", "WH", "ZH"] background_processes_mt = ["ZTT", "ZL", "ZJ", "EWKZ", "TTT", "TTJJ", "VV", "W", "QCD"] background_processes_et = ["ZTT", "ZL", "ZJ", "EWKZ", "TTT", "TTJJ", "VV", "W", "QCD"] background_processes_tt = ["ZTT", "ZL", "ZJ", "EWKZ", "TTT", "TTJJ", "VVT", "VVJ", "W", "QCD"] background_processes_em = ["ZTT", "ZLL", "EWKZ", "TT", "VV", "hww_gg125", "hww_qq125", "W", "QCD"] background_processes_mm = ["ZLL", "TT", "VV", "W"] background_processes_ttbar = ["ZTT", "ZLL", "EWKZ", "TT", "VV", "W", "QCD"] all_mc_bkgs = ["ZTT", "ZL", "ZJ", "ZLL", "EWKZ", "TT", "TTT", "TTJJ", "VV", "VVT", "VVJ", "W", "hww_gg125", "hww_qq125"] all_mc_bkgs_no_W = ["ZTT", "ZL", "ZJ", "ZLL", "EWKZ", "TT", "TTT", "TTJJ", "VV", "VVT", "VVJ", "hww_gg125", "hww_qq125"] all_mc_bkgs_no_TTJ = ["ZTT", "ZL", "ZJ", "ZLL", "EWKZ", "TT", "TTT", "VV", "VVT", "VVJ", "W", "hww_gg125", "hww_qq125"] # Lists of categories CP_categories = ["Vbf3D", "Vbf3D_CP", "Vbf3D_CP_jdeta", "Vbf3D_mela_GGH_DCPPlus", "Vbf3D_mela_GGH_DCPMinus", "Vbf4D_mela_GGH", "dijet_lowMjj", "dijet_lowM", "dijet_boosted", "dijet_highM"] sm_categories = ["ZeroJet2D", "Boosted2D", "Vbf2D"] ##Generate instance of systematic libary, in which the relevant information about the systematics are safed systematics_list = SystLib.SystematicLibary() # list of JEC uncertainties jecUncertNames = [ "AbsoluteFlavMap", "AbsoluteMPFBias", "AbsoluteScale", "AbsoluteStat", "FlavorQCD", "Fragmentation", "PileUpDataMC", "PileUpPtBB", "PileUpPtEC1", "PileUpPtEC2", "PileUpPtHF", "PileUpPtRef", "RelativeBal", "RelativeFSR", "RelativeJEREC1", "RelativeJEREC2", "RelativeJERHF", "RelativePtBB", "RelativePtEC1", "RelativePtEC2", "RelativePtHF", "RelativeStatEC", "RelativeStatFSR", "RelativeStatHF", "SinglePionECAL", "SinglePionHCAL", "TimePtEta" ] # ====================================================================== # MT channel self.add_processes( channel="mt", categories=Categories.CategoriesDict().getCategories(["mt"])["mt"], bkg_processes=background_processes_mt, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # efficiencies if year == "2016": self.cb.cp().channel(["mt"]).process(signal_processes+all_mc_bkgs_no_W).AddSyst(self.cb, *systematics_list.trigger_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).process(signal_processes+all_mc_bkgs_no_W).AddSyst(self.cb, *systematics_list.muon_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.tau_efficiency2016_syst_args) else: self.cb.cp().channel(["mt"]).process(signal_processes+all_mc_bkgs_no_W).AddSyst(self.cb, *systematics_list.muon_efficiency_syst_args) self.cb.cp().channel(["mt"]).process(signal_processes+["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *systematics_list.tau_efficiency_syst_args) # mu->tau fake ES self.cb.cp().channel(["mt"]).process(["ZL"]).AddSyst(self.cb, *systematics_list.zl_shape_1prong_syst_args) self.cb.cp().channel(["mt"]).process(["ZL"]).AddSyst(self.cb, *systematics_list.zl_shape_1prong1pizero_syst_args) # mu->tau fake rate if year == "2016": self.cb.cp().channel(["mt"]).process(["ZL"]).bin(["mt_"+category for category in sm_categories+CP_categories]).AddSyst(self.cb, *systematics_list.mFakeTau_1prong_syst_args) self.cb.cp().channel(["mt"]).process(["ZL"]).bin(["mt_"+category for category in sm_categories+CP_categories]).AddSyst(self.cb, *systematics_list.mFakeTau_1prong1pizero_syst_args) else: self.cb.cp().channel(["mt"]).process(["ZL"]).AddSyst(self.cb, *systematics_list.muFakeTau_syst_args) # decay mode reweighting self.cb.cp().channel(["mt"]).process(["ZTT"]).bin(["mt_ZeroJet2D"]).AddSyst(self.cb, "CMS_tauDMReco_1prong_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["mt"]).process(["ZTT"]).bin(["mt_ZeroJet2D"]).AddSyst(self.cb, "CMS_tauDMReco_1prong1pizero_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["mt"]).process(["ZTT"]).bin(["mt_ZeroJet2D"]).AddSyst(self.cb, "CMS_tauDMReco_3prong_13TeV", "shape", ch.SystMap()(1.0)) # ====================================================================== # ET channel self.add_processes( channel="et", categories=Categories.CategoriesDict().getCategories(["et"])["et"], bkg_processes=background_processes_et, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # efficiencies if year == "2016": self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs_no_W).AddSyst(self.cb, *systematics_list.trigger_efficiency2016_syst_args) self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs_no_W).AddSyst(self.cb, *systematics_list.electron_efficiency2016_syst_args) self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.tau_efficiency2016_syst_args) else: self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs_no_W).AddSyst(self.cb, *systematics_list.electron_efficiency_syst_args) self.cb.cp().channel(["et"]).process(signal_processes+["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *systematics_list.tau_efficiency_syst_args) # e->tau fake ES self.cb.cp().channel(["et"]).process(["ZL"]).AddSyst(self.cb, *systematics_list.zl_shape_1prong_syst_args) self.cb.cp().channel(["et"]).process(["ZL"]).AddSyst(self.cb, *systematics_list.zl_shape_1prong1pizero_syst_args) # e->tau fake rate if year == "2016": self.cb.cp().channel(["et"]).process(["ZL"]).bin(["et_"+category for category in sm_categories+CP_categories]).AddSyst(self.cb, *systematics_list.eFakeTau_1prong_syst_args) self.cb.cp().channel(["et"]).process(["ZL"]).bin(["et_"+category for category in sm_categories+CP_categories]).AddSyst(self.cb, *systematics_list.eFakeTau_1prong1pizero_syst_args) else: self.cb.cp().channel(["et"]).process(["ZL"]).AddSyst(self.cb, *systematics_list.eFakeTau_tight_syst_args) # decay mode reweighting self.cb.cp().channel(["et"]).process(["ZTT"]).bin(["et_ZeroJet2D"]).AddSyst(self.cb, "CMS_tauDMReco_1prong_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et"]).process(["ZTT"]).bin(["et_ZeroJet2D"]).AddSyst(self.cb, "CMS_tauDMReco_1prong1pizero_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et"]).process(["ZTT"]).bin(["et_ZeroJet2D"]).AddSyst(self.cb, "CMS_tauDMReco_3prong_13TeV", "shape", ch.SystMap()(1.0)) # ====================================================================== # EM channel self.add_processes( channel="em", categories=Categories.CategoriesDict().getCategories(["em"])["em"], bkg_processes=background_processes_em, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # efficiencies if year == "2016": self.cb.cp().channel(["em"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.trigger_efficiency2016_em_syst_args) self.cb.cp().channel(["em"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.electron_efficiency2016_syst_args) self.cb.cp().channel(["em"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.muon_efficiency2016_syst_args) else: self.cb.cp().channel(["em"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.electron_efficiency_syst_args) self.cb.cp().channel(["em"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.muon_efficiency_syst_args) # B-Tag if year == "2016": self.cb.cp().channel(["em"]).process(["TT", "VV"]).bin(["em_"+category for category in sm_categories+CP_categories]).AddSyst(self.cb, *systematics_list.btag_efficiency2016_syst_args) # electron ES self.cb.cp().channel(["em"]).process(signal_processes+all_mc_bkgs+["QCD"]).AddSyst(self.cb, *systematics_list.ele_es_syst_args) # ====================================================================== # TT channel self.add_processes( channel="tt", categories=Categories.CategoriesDict().getCategories(["tt"])["tt"], bkg_processes=background_processes_tt, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # efficiencies if year == "2016": self.cb.cp().channel(["tt"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.trigger_efficiency2016_syst_args) self.cb.cp().channel(["tt"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.tau_efficiency2016_tt_syst_args) else: self.cb.cp().channel(["tt"]).process(signal_processes+["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *systematics_list.tau_efficiency_syst_args) # ====================================================================== # MM channel self.add_processes( channel="mm", categories=Categories.CategoriesDict().getCategories(["mm"])["mm"], bkg_processes=background_processes_mm, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # efficiencies if year == "2016": self.cb.cp().channel(["mm"]).process(all_mc_bkgs).AddSyst(self.cb, *systematics_list.muon_efficiency2016_syst_args) else: self.cb.cp().channel(["mm"]).process(all_mc_bkgs).AddSyst(self.cb, *systematics_list.muon_efficiency_syst_args) # ====================================================================== # ttbar "channel" to extract normalization of ttbar process self.add_processes( channel="ttbar", categories=Categories.CategoriesDict().getCategories(["ttbar"])["ttbar"], bkg_processes=background_processes_ttbar, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) if year == "2016": self.cb.cp().channel(["ttbar"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.trigger_efficiency2016_em_syst_args) self.cb.cp().channel(["ttbar"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.electron_efficiency2016_syst_args) self.cb.cp().channel(["ttbar"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.muon_efficiency2016_syst_args) self.cb.cp().channel(["ttbar"]).bin(["ttbar_TTbarCR"]).process(all_mc_bkgs).AddSyst(self.cb, "CMS_htt_scale_met_13TeV", "lnN", ch.SystMap()(1.01)) # ====================================================================== # All channels # ====================================================================== # lumi if year == "2016": self.cb.cp().process(signal_processes+["VV", "VVT", "VVJ", "hww_gg125", "hww_qq125"]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) if not ttbarFit: self.cb.cp().process(["TT", "TTT", "TTJJ"]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) if mmFit: self.cb.cp().channel(["mt", "et", "tt", "em", "ttbar"]).process(["ZL", "ZJ", "ZLL"]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) self.cb.cp().channel(["mt", "et"]).process(["ZTT"]).bin([channel + "_" + category + "_" + cr for channel in ["mt", "et"] for category in ["ZeroJet2D", "Boosted2D"] for cr in ["WJCR", "QCDCR"]]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) self.cb.cp().channel(["tt"]).process(["ZTT"]).bin(["tt_" + category + "_QCDCR" for category in sm_categories]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) self.cb.cp().channel(["ttbar"]).process(["ZTT"]).bin(["ttbar_TTbarCR"]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) self.cb.cp().channel(["mm"]).process(["ZTT"]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) self.cb.cp().process(["W"]).channel(["em", "tt", "mm", "ttbar"]).AddSyst(self.cb, *systematics_list.lumi2016_syst_args) else: self.cb.cp().process(signal_processes+all_mc_bkgs_no_W).AddSyst(self.cb, *systematics_list.lumi_syst_args) self.cb.cp().process(["W"]).channel(["em", "tt", "mm"]).AddSyst(self.cb, *systematics_list.lumi_syst_args) # ====================================================================== # cross section if mmFit: self.cb.cp().channel(["mt", "et", "tt", "em", "ttbar"]).process(["ZL", "ZJ", "ZLL"]).AddSyst(self.cb, *systematics_list.ztt_cross_section_syst_args) # add uncertainty for ZTT only in control regions self.cb.cp().channel(["mt", "et"]).process(["ZTT"]).bin([channel + "_" + category + "_" + cr for channel in ["mt", "et"] for category in ["ZeroJet2D", "Boosted2D"] for cr in ["WJCR", "QCDCR"]]).AddSyst(self.cb, *systematics_list.ztt_cross_section_syst_args) self.cb.cp().channel(["tt"]).process(["ZTT"]).bin(["tt_" + category + "_QCDCR" for category in ["ZeroJet2D", "Boosted2D", "Vbf2D"]]).AddSyst(self.cb, *systematics_list.ztt_cross_section_syst_args) self.cb.cp().channel(["ttbar"]).process(["ZTT"]).bin(["ttbar_TTbarCR"]).AddSyst(self.cb, *systematics_list.ztt_cross_section_syst_args) else: self.cb.cp().channel(["em"]).process(["ZTT", "ZLL", "EWKZ"]).bin(["em_ZeroJet2D"]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_0jet_em_13TeV", "lnN", ch.SystMap()(1.07)) self.cb.cp().channel(["tt"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin(["tt_ZeroJet2D", "tt_ZeroJet2D_QCDCR"]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_0jet_tt_13TeV", "lnN", ch.SystMap()(1.07)) self.cb.cp().channel(["mt", "et"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin(["mt_ZeroJet2D", "mt_ZeroJet2D_WJCR", "mt_ZeroJet2D_QCDCR", "et_ZeroJet2D", "et_ZeroJet2D_WJCR", "et_ZeroJet2D_QCDCR"]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_0jet_lt_13TeV", "lnN", ch.SystMap()(1.07)) self.cb.cp().channel(["em"]).process(["ZTT", "ZLL", "EWKZ"]).bin(["em_Boosted2D"]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_boosted_em_13TeV", "lnN", ch.SystMap()(1.07)) self.cb.cp().channel(["tt"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin(["tt_Boosted2D", "tt_Boosted2D_QCDCR"]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_boosted_tt_13TeV", "lnN", ch.SystMap()(1.07)) self.cb.cp().channel(["mt", "et"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin(["mt_Boosted2D", "mt_Boosted2D_WJCR", "mt_Boosted2D_QCDCR", "et_Boosted2D", "et_Boosted2D_WJCR", "et_Boosted2D_QCDCR"]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_boosted_lt_13TeV", "lnN", ch.SystMap()(1.07)) self.cb.cp().channel(["em"]).process(["ZTT", "ZLL", "EWKZ"]).bin(["em_Vbf2D"]+["em_"+category for category in CP_categories]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_VBF_em_13TeV", "lnN", ch.SystMap()(1.15)) self.cb.cp().channel(["tt"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin(["tt_Vbf2D", "tt_Vbf2D_QCDCR"]+["tt_"+category for category in CP_categories]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_VBF_tt_13TeV", "lnN", ch.SystMap()(1.15)) self.cb.cp().channel(["mt", "et"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin(["et_Vbf2D"]+["et_"+category for category in CP_categories]+["mt_Vbf2D"]+["mt_"+category for category in CP_categories]).AddSyst(self.cb, "CMS_htt_zmm_norm_extrap_VBF_lt_13TeV", "lnN", ch.SystMap()(1.10)) self.cb.cp().channel(["mt", "et", "tt"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin([channel + "_Vbf2D" for channel in ["mt", "et", "tt"]]).AddSyst(self.cb, "CMS_htt_zmumuShape_VBF_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["tt"]).process(["ZTT", "ZL", "ZJ", "EWKZ"]).bin(["tt_Vbf2D_QCDCR"]).AddSyst(self.cb, "CMS_htt_zmumuShape_VBF_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["em"]).process(["ZTT", "ZLL"]).bin(["em_Vbf2D"]+["em_"+category for category in CP_categories]).AddSyst(self.cb, "CMS_htt_zmumuShape_VBF_13TeV", "shape", ch.SystMap()(1.0)) if not ttbarFit: self.cb.cp().process(["TT", "TTT", "TTJJ"]).channel(["mt", "et", "em", "tt"]).AddSyst(self.cb, *systematics_list.ttj_cross_section_syst_args) if year == "2016": self.cb.cp().process(["VV", "VVT", "VVJ"]).AddSyst(self.cb, *systematics_list.vv_cross_section2016_syst_args) else: self.cb.cp().process(["VV", "VVT", "VVJ"]).AddSyst(self.cb, *systematics_list.vv_cross_section_syst_args) self.cb.cp().process(["W"]).channel(["em"]).AddSyst(self.cb, *systematics_list.htt_jetFakeLep_syst_args) self.cb.cp().process(["W"]).channel(["tt", "mm"]).AddSyst(self.cb, *systematics_list.wj_cross_section_syst_args) # ====================================================================== # tau id efficiency if year == "2016": self.cb.cp().channel(["mt", "et"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.tau_efficiency2016_corr_syst_args) self.cb.cp().channel(["tt"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.tau_efficiency2016_tt_corr_syst_args) else: self.cb.cp().channel(["mt", "et", "tt"]).process(signal_processes+["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *systematics_list.tau_efficiency_corr_syst_args) # ====================================================================== # energy scales # tau ES self.cb.cp().channel(["mt", "et", "tt"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.scale_t_1prong_syst_args) self.cb.cp().channel(["mt", "et", "tt"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.scale_t_3prong_syst_args) self.cb.cp().channel(["mt", "et", "tt"]).process(signal_processes+all_mc_bkgs).AddSyst(self.cb, *systematics_list.scale_t_1prong1pizero_syst_args) # jet ES # TODO: use mix of lnN/shape systematics as done in official analysis? if noJECuncSplit: self.cb.cp().process(signal_processes+all_mc_bkgs+["QCD"]).bin([channel+"_"+category for channel in ["et", "mt", "tt", "em"] for category in sm_categories+CP_categories]).AddSyst(self.cb, "CMS_scale_j_Total_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["mt"]).process(signal_processes+all_mc_bkgs).bin(["mt_ZeroJet2D_WJCR", "mt_Boosted2D_WJCR", "mt_ZeroJet2D_QCDCR", "mt_Boosted2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_Total_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs).bin(["et_ZeroJet2D_WJCR", "et_Boosted2D_WJCR", "et_Boosted2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_Total_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs_no_TTJ).bin(["et_ZeroJet2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_Total_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["tt"]).process(signal_processes+all_mc_bkgs).bin(["tt_ZeroJet2D_QCDCR", "tt_Boosted2D_QCDCR", "tt_Vbf2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_Total_13TeV", "shape", ch.SystMap()(1.0)) else: for jecUncert in jecUncertNames: self.cb.cp().process(signal_processes+all_mc_bkgs+["QCD"]).bin([channel+"_"+category for channel in ["et", "mt", "tt", "em"] for category in sm_categories+CP_categories]).AddSyst(self.cb, "CMS_scale_j_"+jecUncert+"_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["mt"]).process(signal_processes+all_mc_bkgs).bin(["mt_ZeroJet2D_WJCR", "mt_Boosted2D_WJCR", "mt_ZeroJet2D_QCDCR", "mt_Boosted2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_"+jecUncert+"_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs).bin(["et_ZeroJet2D_WJCR", "et_Boosted2D_WJCR", "et_Boosted2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_"+jecUncert+"_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et"]).process(signal_processes+all_mc_bkgs_no_TTJ).bin(["et_ZeroJet2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_"+jecUncert+"_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["tt"]).process(signal_processes+all_mc_bkgs).bin(["tt_ZeroJet2D_QCDCR", "tt_Boosted2D_QCDCR", "tt_Vbf2D_QCDCR"]).AddSyst(self.cb, "CMS_scale_j_"+jecUncert+"_13TeV", "shape", ch.SystMap()(1.0)) # jet->tau fake ES if year == "2016": self.cb.cp().channel(["et", "mt", "tt"]).process(["ZJ", "TTJJ", "VVJ"]).AddSyst(self.cb, "CMS_htt_jetToTauFake_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt", "tt"]).process(["W"]).bin([channel+"_"+category for channel in ["et", "mt", "tt"] for category in sm_categories+CP_categories]).AddSyst(self.cb, "CMS_htt_jetToTauFake_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt"]).process(["W"]).bin([channel+"_"+category for channel in ["et", "mt"] for category in ["ZeroJet2D_QCDCR", "Boosted2D_QCDCR"]]).AddSyst(self.cb, "CMS_htt_jetToTauFake_13TeV", "shape", ch.SystMap()(1.0)) else: self.cb.cp().channel(["et", "mt", "tt"]).process(["ZJ", "W", "TTJJ", "VVJ"]).AddSyst(self.cb, *systematics_list.jetFakeTau_syst_args) # MET ES self.cb.cp().channel(["et", "mt", "tt", "em"]).process(signal_processes+all_mc_bkgs).bin([channel+"_"+category for channel in ["et", "mt", "tt", "em"] for category in sm_categories+CP_categories]).AddSyst(self.cb, "CMS_scale_met_clustered_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt", "tt", "em"]).process(signal_processes+all_mc_bkgs).bin([channel+"_"+category for channel in ["et", "mt", "tt", "em"] for category in sm_categories+CP_categories]).AddSyst(self.cb, "CMS_scale_met_unclustered_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt"]).process(all_mc_bkgs).bin([channel+"_"+category for channel in ["et", "mt"] for category in ["ZeroJet2D_WJCR", "ZeroJet2D_QCDCR", "Boosted2D_WJCR", "Boosted2D_QCDCR"]]).AddSyst(self.cb, "CMS_scale_met_clustered_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt"]).process(all_mc_bkgs).bin([channel+"_"+category for channel in ["et", "mt"] for category in ["ZeroJet2D_WJCR", "ZeroJet2D_QCDCR", "Boosted2D_WJCR", "Boosted2D_QCDCR"]]).AddSyst(self.cb, "CMS_scale_met_unclustered_13TeV", "shape", ch.SystMap()(1.0)) # ====================================================================== # W+jets and QCD estimation uncertainties # QCD normalization self.cb.cp().channel(["em"]).process(["QCD"]).bin(["em_ZeroJet2D"]).AddSyst(self.cb, *systematics_list.htt_QCD_0jet_syst_args) self.cb.cp().channel(["em"]).process(["QCD"]).bin(["em_Boosted2D"]).AddSyst(self.cb, *systematics_list.htt_QCD_boosted_syst_args) self.cb.cp().channel(["em"]).process(["QCD"]).bin(["em_Vbf2D"]+["em_"+category for category in CP_categories]).AddSyst(self.cb, "CMS_htt_QCD_VBF_em_13TeV", "lnN", ch.SystMap()(1.20)) self.cb.cp().channel(["tt"]).process(["QCD"]).bin(["tt_ZeroJet2D"]).AddSyst(self.cb, "CMS_htt_QCD_0jet_tt_13TeV", "lnN", ch.SystMap()(1.027)) self.cb.cp().channel(["tt"]).process(["QCD"]).bin(["tt_Boosted2D"]).AddSyst(self.cb, "CMS_htt_QCD_boosted_tt_13TeV", "lnN", ch.SystMap()(1.027)) self.cb.cp().channel(["tt"]).process(["QCD"]).bin(["tt_Vbf2D"]+["tt_"+category for category in CP_categories]).AddSyst(self.cb, "CMS_htt_QCD_VBF_tt_13TeV", "lnN", ch.SystMap()(1.15)) self.cb.cp().channel(["mt"]).process(["QCD"]).bin(["mt_"+category for category in sm_categories+CP_categories]).AddSyst(self.cb, *systematics_list.QCD_Extrap_Iso_nonIso_syst_args) self.cb.cp().channel(["et"]).process(["QCD"]).bin(["et_"+category for category in sm_categories+CP_categories]).AddSyst(self.cb, *systematics_list.QCD_Extrap_Iso_nonIso_syst_args) self.cb.cp().channel(["et", "mt"]).process(["QCD"]).bin([channel+"_ZeroJet2D" for channel in ["et", "mt"]]).AddSyst(self.cb, *systematics_list.WSFUncert_0jet_syst_args) self.cb.cp().channel(["et", "mt"]).process(["QCD"]).bin([channel+"_Boosted2D" for channel in ["et", "mt"]]).AddSyst(self.cb, *systematics_list.WSFUncert_boosted_syst_args) self.cb.cp().channel(["et", "mt"]).process(["QCD"]).bin([channel+"_Vbf2D" for channel in ["et", "mt"]]).AddSyst(self.cb, *systematics_list.WSFUncert_Vbf_syst_args) self.cb.cp().channel(["et", "mt"]).process(["QCD"]).bin([channel+"_dijet_boosted" for channel in ["et", "mt"]]).AddSyst(self.cb, "WSFUncert_$CHANNEL_dijet_boosted_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt"]).process(["QCD"]).bin([channel+"_dijet_lowM" for channel in ["et", "mt"]]).AddSyst(self.cb, "WSFUncert_$CHANNEL_dijet_lowM_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt"]).process(["QCD"]).bin([channel+"_dijet_highM" for channel in ["et", "mt"]]).AddSyst(self.cb, "WSFUncert_$CHANNEL_dijet_highM_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().channel(["et", "mt"]).process(["QCD"]).bin([channel+"_dijet_lowMjj" for channel in ["et", "mt"]]).AddSyst(self.cb, "WSFUncert_$CHANNEL_dijet_lowMjj_13TeV", "shape", ch.SystMap()(1.0)) # W+jets high->low mt extrapolation uncertainty self.cb.cp().channel(["et", "mt"]).process(["W"]).bin([channel+"_ZeroJet2D" for channel in ["et", "mt"]]).AddSyst(self.cb, *systematics_list.WHighMTtoLowMT_0jet_syst_args) self.cb.cp().channel(["et", "mt"]).process(["W"]).bin([channel+"_Boosted2D" for channel in ["et", "mt"]]).AddSyst(self.cb, *systematics_list.WHighMTtoLowMT_boosted_syst_args) self.cb.cp().channel(["et", "mt"]).process(["W"]).bin([channel+"_Vbf2D" for channel in ["et", "mt"]]).AddSyst(self.cb, "WHighMTtoLowMT_vbf_13TeV", "lnN", ch.SystMap()(1.10)) self.cb.cp().channel(["et", "mt"]).process(["W"]).bin([channel+category for category in CP_categories for channel in ["et", "mt"]]).AddSyst(self.cb, "WHighMTtoLowMT_vbf_13TeV", "lnN", ch.SystMap()(1.10)) # ====================================================================== # pt reweighting uncertainties # ttbar shape self.cb.cp().channel(["et", "mt", "em", "tt"]).process(["TTT", "TTJJ"]).AddSyst(self.cb, *systematics_list.ttj_syst_args) self.cb.cp().channel(["em"]).process(["TT"]).AddSyst(self.cb, *systematics_list.ttj_syst_args) # dy shape self.cb.cp().channel(["et", "mt", "tt"]).process(["ZTT", "ZL", "ZJ"]).AddSyst(self.cb, *systematics_list.dy_shape_syst_args) self.cb.cp().channel(["em"]).process(["ZTT", "ZLL"]).AddSyst(self.cb, *systematics_list.dy_shape_syst_args) # ====================================================================== # Theory uncertainties self.cb.cp().channel(["mt", "et", "tt", "em"]).process(["ggH", "ggHsm", "ggHps", "ggHmm"]).bin([channel+"_"+category for channel in ["et", "mt", "em", "tt"] for category in sm_categories+CP_categories]).AddSyst(self.cb, "CMS_scale_gg_13TeV", "shape", ch.SystMap()(1.0)) self.cb.cp().process(["qqH", "qqHsm", "qqHps", "qqHmm"]).AddSyst(self.cb, *systematics_list.htt_qcd_scale_qqh_syst_args) self.cb.cp().process(["ggH", "ggHsm", "ggHps", "ggHmm", "qqH", "qqHsm", "qqHps", "qqHmm"]).AddSyst(self.cb, *systematics_list.htt_pdf_scale_smhtt_syst_args) self.cb.cp().process(["ggH", "ggHsm", "ggHps", "ggHmm", "qqH", "qqHsm", "qqHps", "qqHmm"]).AddSyst(self.cb, *systematics_list.htt_ueps_smhtt_syst_args) # Uncertainty on BR of HTT @ 125 GeV self.cb.cp().signals().AddSyst(self.cb, "BR_htt_THU", "lnN", ch.SystMap()(1.017)) self.cb.cp().signals().AddSyst(self.cb, "BR_htt_PU_mq", "lnN", ch.SystMap()(1.0099)) self.cb.cp().signals().AddSyst(self.cb, "BR_htt_PU_alphas", "lnN", ch.SystMap()(1.0062)) # Uncertainty on BR of HWW @ 125 GeV self.cb.cp().process(["hww_gg125", "hww_qq125"]).AddSyst(self.cb, "BR_hww_THU", "lnN", ch.SystMap()(1.0099)) self.cb.cp().process(["hww_gg125", "hww_qq125"]).AddSyst(self.cb, "BR_hww_PU_mq", "lnN", ch.SystMap()(1.0099)) self.cb.cp().process(["hww_gg125", "hww_qq125"]).AddSyst(self.cb, "BR_hww_PU_alphas", "lnN", ch.SystMap()(1.0066)) self.cb.cp().process(["ggH", "ggHsm", "ggHps", "ggHmm", "hww_gg125"]).AddSyst(self.cb, "QCDScale_ggH", "lnN", ch.SystMap()(1.039)) self.cb.cp().process(["qqH", "qqHsm", "qqHps", "qqHmm", "hww_qq125"]).AddSyst(self.cb, "QCDScale_qqH", "lnN", ch.SystMap()(1.004)) self.cb.cp().process(["WH"]).AddSyst(self.cb, "QCDScale_VH", "lnN", ch.SystMap()(1.007)) self.cb.cp().process(["ZH"]).AddSyst(self.cb, "QCDScale_VH", "lnN", ch.SystMap()(1.038)) self.cb.cp().process(["ggH", "ggHsm", "ggHps", "ggHmm", "hww_gg125"]).AddSyst(self.cb, "pdf_Higgs_gg", "lnN", ch.SystMap()(1.032)) self.cb.cp().process(["qqH", "qqHsm", "qqHps", "qqHmm", "hww_qq125"]).AddSyst(self.cb, "pdf_Higgs_qq", "lnN", ch.SystMap()(1.021)) self.cb.cp().process(["WH"]).AddSyst(self.cb, "pdf_Higgs_VH", "lnN", ch.SystMap()(1.019)) self.cb.cp().process(["ZH"]).AddSyst(self.cb, "pdf_Higgs_VH", "lnN", ch.SystMap()(1.016)) # ====================================================================== # ttbar rate parameters if ttbarFit: self.cb.cp().process(["TTT", "TTJJ"]).bin(["mt_ZeroJet2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["et_ZeroJet2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["tt_ZeroJet2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TT"]).bin(["em_ZeroJet2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["mt_Boosted2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["et_Boosted2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["tt_Boosted2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TT"]).bin(["em_Boosted2D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["mt_Vbf2D", "mt_Vbf3D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["et_Vbf2D", "et_Vbf3D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TTT", "TTJJ"]).bin(["tt_Vbf2D", "tt_Vbf3D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TT"]).bin(["em_Vbf2D", "em_Vbf3D"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["TT"]).bin(["ttbar_TTbarCR"]).AddSyst(self.cb, "rate_ttbar", "rateParam", ch.SystMap()(1.0)) self.cb.cp().GetParameter("rate_ttbar").set_range(0.8, 1.2) # ====================================================================== # mm rate parameters if mmFit: self.cb.cp().process(["ZTT"]).bin(["mt_ZeroJet2D"]).AddSyst(self.cb, "rate_mm_ZTT_0jet", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["et_ZeroJet2D"]).AddSyst(self.cb, "rate_mm_ZTT_0jet", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["tt_ZeroJet2D"]).AddSyst(self.cb, "rate_mm_ZTT_0jet", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["em_ZeroJet2D"]).AddSyst(self.cb, "rate_mm_ZTT_0jet", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZLL"]).bin(["mm_ZeroJet2D"]).AddSyst(self.cb, "rate_mm_ZTT_0jet", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["mt_Boosted2D"]).AddSyst(self.cb, "rate_mm_ZTT_boosted", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["et_Boosted2D"]).AddSyst(self.cb, "rate_mm_ZTT_boosted", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["tt_Boosted2D"]).AddSyst(self.cb, "rate_mm_ZTT_boosted", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["em_Boosted2D"]).AddSyst(self.cb, "rate_mm_ZTT_boosted", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZLL"]).bin(["mm_Boosted2D"]).AddSyst(self.cb, "rate_mm_ZTT_boosted", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["mt_Vbf2D", "mt_Vbf3D"]).AddSyst(self.cb, "rate_mm_ZTT_vbf", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["et_Vbf2D", "et_Vbf3D"]).AddSyst(self.cb, "rate_mm_ZTT_vbf", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["tt_Vbf2D", "tt_Vbf3D"]).AddSyst(self.cb, "rate_mm_ZTT_vbf", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZTT"]).bin(["em_Vbf2D", "em_Vbf3D"]).AddSyst(self.cb, "rate_mm_ZTT_vbf", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["ZLL"]).bin(["mm_Vbf2D"]).AddSyst(self.cb, "rate_mm_ZTT_vbf", "rateParam", ch.SystMap()(1.0)) self.cb.cp().GetParameter("rate_mm_ZTT_0jet").set_range(0.9, 1.1) self.cb.cp().GetParameter("rate_mm_ZTT_boosted").set_range(0.9, 1.1) self.cb.cp().GetParameter("rate_mm_ZTT_vbf").set_range(0.9, 1.1) # ====================================================================== # control region rate parameters self.cb.cp().process(["W"]).bin(["mt_ZeroJet2D", "mt_ZeroJet2D_WJCR"]).AddSyst(self.cb, "rate_W_cr_0jet_mt", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["W"]).bin(["mt_Boosted2D", "mt_Boosted2D_WJCR", "mt_Vbf2D", "mt_Vbf3D"]).AddSyst(self.cb, "rate_W_cr_boosted_mt", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["W"]).bin(["et_ZeroJet2D", "et_ZeroJet2D_WJCR"]).AddSyst(self.cb, "rate_W_cr_0jet_et", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["W"]).bin(["et_Boosted2D", "et_Boosted2D_WJCR", "et_Vbf2D", "et_Vbf3D"]).AddSyst(self.cb, "rate_W_cr_boosted_et", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["QCD"]).bin(["mt_ZeroJet2D", "mt_ZeroJet2D_QCDCR"]).AddSyst(self.cb, "rate_QCD_cr_0jet_mt", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["QCD"]).bin(["mt_Boosted2D", "mt_Boosted2D_QCDCR", "mt_Vbf2D", "mt_Vbf3D"]).AddSyst(self.cb, "rate_QCD_cr_boosted_mt", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["QCD"]).bin(["et_ZeroJet2D", "et_ZeroJet2D_QCDCR"]).AddSyst(self.cb, "rate_QCD_cr_0jet_et", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["QCD"]).bin(["et_Boosted2D", "et_Boosted2D_QCDCR", "et_Vbf2D", "et_Vbf3D"]).AddSyst(self.cb, "rate_QCD_cr_boosted_et", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["QCD"]).bin(["tt_ZeroJet2D", "tt_ZeroJet2D_QCDCR"]).AddSyst(self.cb, "rate_QCD_cr_0jet_tt", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["QCD"]).bin(["tt_Boosted2D", "tt_Boosted2D_QCDCR"]).AddSyst(self.cb, "rate_QCD_cr_boosted_tt", "rateParam", ch.SystMap()(1.0)) self.cb.cp().process(["QCD"]).bin(["tt_Vbf2D", "tt_Vbf3D", "tt_Vbf3D_CP", "tt_Vbf3D_CP_jdeta", "tt_Vbf2D_QCDCR"]).AddSyst(self.cb, "rate_QCD_cr_vbf_tt", "rateParam", ch.SystMap()(1.0)) self.cb.cp().GetParameter("rate_W_cr_0jet_mt").set_range(0, 5) self.cb.cp().GetParameter("rate_W_cr_boosted_mt").set_range(0, 5) self.cb.cp().GetParameter("rate_W_cr_0jet_et").set_range(0, 5) self.cb.cp().GetParameter("rate_W_cr_boosted_et").set_range(0, 5) self.cb.cp().GetParameter("rate_QCD_cr_0jet_mt").set_range(0, 5) self.cb.cp().GetParameter("rate_QCD_cr_boosted_mt").set_range(0, 5) self.cb.cp().GetParameter("rate_QCD_cr_0jet_et").set_range(0, 5) self.cb.cp().GetParameter("rate_QCD_cr_boosted_et").set_range(0, 5) self.cb.cp().GetParameter("rate_QCD_cr_0jet_tt").set_range(0, 5) self.cb.cp().GetParameter("rate_QCD_cr_boosted_tt").set_range(0, 5) self.cb.cp().GetParameter("rate_QCD_cr_vbf_tt").set_range(0, 5) # ====================================================================== if log.isEnabledFor(logging.DEBUG): self.cb.PrintAll()
def __init__(self, higgs_masses=["125"], cb=None): super(SMHttDatacardsForSync, self).__init__(cb) if cb is None: signal_processes = ["ggH", "qqH", "WH", "ZH"] background_processes_mt = ["ZTT", "ZL", "ZJ", "EWKZ", "TTT", "TTJJ", "VV", "W", "QCD"] background_processes_et = ["ZTT", "ZL", "ZJ", "EWKZ", "TTT", "TTJJ", "VV", "W", "QCD"] background_processes_tt = ["ZTT", "ZL", "ZJ", "EWKZ", "TTT", "TTJJ", "VVT", "VVJ", "W", "QCD"] background_processes_em = ["ZTT", "ZLL", "EWKZ", "TT", "VV", "hww_gg125", "hww_qq125", "W", "QCD"] background_processes_mm = ["ZLL", "TT", "VV", "W"] background_processes_ttbar = ["ZTT", "ZLL", "EWKZ", "TT", "VV", "W", "QCD"] # ====================================================================== # MT channel self.add_processes( channel="mt", categories=Categories.CategoriesDict().getCategories(["mt"])["mt"], bkg_processes=background_processes_mt, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # ====================================================================== # ET channel self.add_processes( channel="et", categories=Categories.CategoriesDict().getCategories(["et"])["et"], bkg_processes=background_processes_et, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # ====================================================================== # EM channel self.add_processes( channel="em", categories=Categories.CategoriesDict().getCategories(["em"])["em"], bkg_processes=background_processes_em, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # ====================================================================== # TT channel self.add_processes( channel="tt", categories=Categories.CategoriesDict().getCategories(["tt"])["tt"], bkg_processes=background_processes_tt, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # ====================================================================== # MM channel self.add_processes( channel="mm", categories=Categories.CategoriesDict().getCategories(["mm"])["mm"], bkg_processes=background_processes_mm, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) # ====================================================================== # ttbar "channel" to extract normalization of ttbar process self.add_processes( channel="ttbar", categories=Categories.CategoriesDict().getCategories(["ttbar"])["ttbar"], bkg_processes=background_processes_ttbar, sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses ) if log.isEnabledFor(logging.DEBUG): self.cb.PrintAll()
def __init__(self): super(DatacardConfigs, self).__init__() self._mapping_process2sample = { "data_obs": "data", "ZTT": "ztt", "ZTTPOSPOL": "zttpospol", "ZTTNEGPOL": "zttnegpol", "ZLL": "zll", "ZL": "zl", "ZJ": "zj", "TT": "ttj", "TTJT": "ttjt", "TTJL": "ttjl", "VV": "vv", "VVT": "vvt", "VVL": "vvl", "W": "wj", "WJT": "wjt", "WJL": "wjl", "QCD": "qcd", "EWK": "ewk", "FF": "ff", "ggH": "ggh", "qqH": "qqh", "VH": "vh", "WH": "wh", "ZH": "zh", "HTT": "htt", } self._mapping_category2binid = { "mt": { "mt_inclusive": 0, "mt_0jet_high": 1, "mt_0jet_low": 2, "mt_1jet_high": 3, "mt_1jet_low": 4, "mt_2jet_vbf": 5, "mt_CP_mt": 10, "mt_vbf": 11, "mt_1jet_boosted": 12, "mt_1jet_highpt2": 13, "mt_1jet_lowpt2": 14, "mt_0jet_highpt2": 15, "mt_0jet_lowpt2": 16, "mt_vbf_tag": 17, "mt_2jet_untagged": 18, "mt_1jet_boost_high": 19, "mt_1jet_boost_medium": 20, "mt_1jet_boost_low": 21, "mt_0jet_nhighpt2": 22, "mt_0jet_nlowpt2": 23, "mt_0jet_inclusive": 30, "mt_1jet_inclusive": 31, "mt_2jet_inclusive": 32, "mt_x_a1": 0, "mt_x_rho": 10, "mt_x_oneprong": 20, }, "et": { "et_inclusive": 0, "et_0jet_high": 1, "et_0jet_low": 2, "et_1jet_high": 3, "et_1jet_low": 4, "et_2jet_vbf": 5, "et_CP_et": 10, "et_vbf": 11, "et_1jet_boosted": 12, "et_1jet_highpt2": 13, "et_1jet_lowpt2": 14, "et_0jet_highpt2": 15, "et_0jet_lowpt2": 16, "et_vbf_tag": 17, "et_2jet_untagged": 18, "et_1jet_boost_high": 19, "et_1jet_boost_medium": 20, "et_1jet_boost_low": 21, "et_0jet_nhighpt2": 22, "et_0jet_nlowpt2": 23, "et_0jet_inclusive": 30, "et_1jet_inclusive": 31, "et_2jet_inclusive": 32, "et_x_a1": 0, "et_x_rho": 10, "et_x_oneprong": 20, }, "em": { "em_inclusive": 0, "em_0jet_high": 1, "em_0jet_low": 2, "em_1jet_high": 3, "em_1jet_low": 4, "em_2jet_vbf": 5, "em_CP_em": 10, "em_vbf": 11, "em_1jet_boosted": 12, "em_1jet_highpt2": 13, "em_1jet_lowpt2": 14, "em_0jet_highpt2": 15, "em_0jet_lowpt2": 16, "em_vbf_tag": 17, "em_2jet_untagged": 18, "em_1jet_boost_high": 19, "em_1jet_boost_medium": 20, "em_1jet_boost_low": 21, "em_0jet_nhighpt2": 22, "em_0jet_nlowpt2": 23, "em_0jet_inclusive": 30, "em_1jet_inclusive": 31, "em_2jet_inclusive": 32, "em_x_oneprong": 20, }, "tt": { "tt_inclusive": 0, "tt_0jet_high": 1, "tt_0jet_low": 2, "tt_1jet_high": 3, "tt_1jet_low": 4, "tt_2jet_vbf": 5, "tt_CP_tt": 10, "tt_vbf": 11, "tt_1jet_boosted": 12, "tt_1jet_highpt2": 13, "tt_1jet_lowpt2": 14, "tt_0jet_highpt2": 15, "tt_0jet_lowpt2": 16, "tt_vbf_tag": 17, "tt_2jet_untagged": 18, "tt_1jet_boost_high": 19, "tt_1jet_boost_medium": 20, "tt_1jet_boost_low": 21, "tt_0jet_nhighpt2": 22, "tt_0jet_nlowpt2": 23, "tt_0jet_inclusive": 30, "tt_1jet_inclusive": 31, "tt_2jet_inclusive": 32, "tt_a1_x": 0, "tt_rho_x": 10, "tt_oneprong_x": 20, "tt_x_a1": 1, "tt_x_rho": 11, }, "mm": { "mm_inclusive": 0, "mm_0jet_high": 1, "mm_0jet_low": 2, "mm_1jet_high": 3, "mm_1jet_low": 4, "mm_2jet_vbf": 5, "mm_CP_em": 10, "mm_vbf": 11, "mm_1jet_boosted": 12, "mm_1jet_highpt2": 13, "mm_1jet_lowpt2": 14, "mm_0jet_highpt2": 15, "mm_0jet_lowpt2": 16, "mm_vbf_tag": 17, "mm_2jet_untagged": 18, "mm_1jet_boost_high": 19, "mm_1jet_boost_medium": 20, "mm_1jet_boost_low": 21, "mm_0jet_nhighpt2": 22, "mm_0jet_nlowpt2": 23, }, } #for channel in ["tt", "mt", "et", "em"]: #categories_path = os.path.expandvars("$CMSSW_BASE/src/HiggsAnalysis/KITHiggsToTauTau/data/mva_configs/%s_mvadatacards.cfg"%channel) #with open(categories_path) as categs: #for line in categs: #cat = line.strip() #self._mapping_category2binid[channel][cat] = len(self._mapping_category2binid[channel].keys()) channels = ["mt", "et", "tt", "em", "mm"] # ==========================Copy here!========================================= categories = Categories.CategoriesDict().getCategories( channels=channels) import operator #TODO get maximum binvalue for categories already there max_number = 1 + max([ max(v.iteritems(), key=operator.itemgetter(1))[1] for k, v in self._mapping_category2binid.iteritems() ]) for chan in channels: for i, cat in enumerate(categories[chan]): self._mapping_category2binid[chan][cat] = max_number + i self.htt_datacard_filename_templates = [ "datacards/individual/${BIN}/${MASS}/${ANALYSIS}_${CHANNEL}_${BINID}_${ERA}.txt", "datacards/channel/${CHANNEL}/${MASS}/${ANALYSIS}_${CHANNEL}_${ERA}.txt", "datacards/category/${BINID}/${MASS}/${ANALYSIS}_${BINID}_${ERA}.txt", "datacards/combined/${MASS}/${ANALYSIS}_${ERA}.txt", ]
def __init__(self, additional_expressions=None): super(ExpressionsDict, self).__init__(additional_expressions=additional_expressions) self.expressions_dict["integral"] = "0.5" # blinding (of data) for channel in ["tt", "mt", "et", "em", "mm", "ee"]: pass # self.expressions_dict["blind_"+channel+"_svfitMass"] = "((svfitMass<100.0)+(svfitMass>200.0))" # category cuts self.expressions_dict["cat_inclusive"] = "1.0" self.expressions_dict["cat_0jet"] = "njetspt20 < 1" self.expressions_dict["cat_1jet"] = "(njetspt20 > 0)*(njetspt20 < 2)" self.expressions_dict["cat_2jet"] = "njetspt20 > 1" # Z->tautau categories for channel in ["tt", "mt", "et", "em", "mm", "ee"]: self.expressions_dict["catZtt13TeV_" + channel + "_inclusive"] = "1.0" self.expressions_dict["catZtt13TeV_" + channel + "_2jet_inclusive"] = "(njetspt30>1)" self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] = "(njetspt30>0)*(njetspt30<2)" self.expressions_dict["catZtt13TeV_" + channel + "_0jet_inclusive"] = "(njetspt30<1)" self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_low"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] + ("*(H_pt<50)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_medium"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] + ( "*(H_pt>50)*(H_pt<100)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_high"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] + ("*(H_pt>100)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_inclusive"] + "*(mjj>500.0)*(jdeta>3.5)" self.expressions_dict["catZtt13TeV_" + channel + "_1jet_exclusive"] = "(njetspt30>0)" self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_low_exclusive"] = "(!(" + self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] + "))*" + self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_exclusive"] + ("*(H_pt<50)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_medium_exclusive"] = "(!(" + self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] + "))*" + self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_exclusive"] + ( "*(H_pt>50)*(H_pt<100)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_high_exclusive"] = "(!(" + self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] + "))*" + self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_exclusive"] + ("*(H_pt>100)") + ("*(nbtag<1)") self.expressions_dict["catZtt13TeV_" + channel + "_1bjet"] = "(njets==1)*(nbtag>=1)" self.expressions_dict["catZtt13TeV_" + channel + "_2bjet"] = "(njets==2)*(nbtag>=2)" # Z->tautau polarisation categories for channel in ["mt", "et", "tt", "em"]: self.expressions_dict["catZttPol13TeV_" + channel + "_inclusive"] = "(1.0)" for channel in ["em"]: self.expressions_dict["catZttPol13TeV_" + channel + "_oneprong"] = "(1.0)" for channel in ["mt", "et"]: self.expressions_dict["catZttPol13TeV_" + channel + "_a1"] = "(decayMode_2 == 10)" self.expressions_dict["catZttPol13TeV_" + channel + "_rho"] = "(decayMode_2 == 1)" self.expressions_dict[ "catZttPol13TeV_" + channel + "_oneprong"] = "((decayMode_2 != 10) * (decayMode_2 != 1))" #self.expressions_dict["catZttPol13TeV_"+channel+"_rho"] = "(decayMode_2 == 1)" #self.expressions_dict["catZttPol13TeV_"+channel+"_oneprong"] = "(decayMode_2 != 1)" for channel in ["tt"]: self.expressions_dict[ "catZttPol13TeV_" + channel + "_a1"] = "((decayMode_1 == 10) || (decayMode_2 == 10))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_rho"] = "(((decayMode_1 != 10) * (decayMode_2 != 10)) * ((decayMode_1 == 1) || (decayMode_2 == 1)))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_oneprong"] = "((decayMode_1 != 10) * (decayMode_2 != 10) * (decayMode_1 != 1) * (decayMode_2 != 1))" #self.expressions_dict["catZttPol13TeV_"+channel+"_rho"] = "((decayMode_1 == 1) || (decayMode_2 == 1))" #self.expressions_dict["catZttPol13TeV_"+channel+"_oneprong"] = "((decayMode_1 != 1) * (decayMode_2 != 1))" for channel in ["em", "mt", "et", "tt"]: self.expressions_dict["catZttPol13TeV_" + channel + "_index"] = " + ".join([ "(catZttPol13TeV_" + channel + "_" + cat + " * " + str(index) + ")" for index, cat in enumerate( ["oneprong"] if channel == "em" else ["oneprong", "rho", "a1"]) ]) # In the so-called "gen" channel, the categories are considered as tt,mt,et... for now, # it will be adapted later considering the decay products of tau's for channel in ["gen"]: self.expressions_dict["catZttPol13TeV_" + channel + "_tt"] = "genTauTauDecayMode==1" self.expressions_dict["catZttPol13TeV_" + channel + "_mt"] = "genTauTauDecayMode==2" self.expressions_dict["catZttPol13TeV_" + channel + "_et"] = "genTauTauDecayMode==3" # Z->tautau polarisation test statistics for channel in ["mt", "et", "tt"]: self.expressions_dict["testZttPol13TeV_" + channel + "_a1"] = "tauPolarisationDiscriminatorSvfit" self.expressions_dict["testZttPol13TeV_" + channel + "_rho"] = "tauPolarisationDiscriminatorSvfit" for channel in ["mt", "et", "tt", "em"]: self.expressions_dict[ "testZttPol13TeV_" + channel + "_oneprong"] = "tauPolarisationDiscriminatorSvfit" # Z->ee(tau) electron tau fake rate categories for channel in ["et"]: for cat in ["vloose", "loose", "medium", "tight", "vtight"]: self.expressions_dict["catETauFakeRate13TeV_" + channel + "_" + cat + "_pass"] = "******" self.expressions_dict["catETauFakeRate13TeV_" + channel + "_" + cat + "_fail"] = "(1.0)" # H->tautau categories for channel in ["tt", "mt", "et", "em", "mm", "ee"]: pt_var = "pt_2" if channel in ["mt", "et", "em"] else "pt_1" pt_cut = "35.0" #CP-studies self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_mt"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.44 && TauPProngEnergy >= 0.55)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_et"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.44 && TauPProngEnergy >= 0.55)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_em"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.44 && TauPProngEnergy >= 0.44)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_tt"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.55 && TauPProngEnergy >= 0.55)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_rho_yLhigh"] = "((decayMode_1 == 1) * (decayMode_2 == 1)) * (reco_negyTauL * reco_posyTauL > 0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_rho_yLlow"] = "((decayMode_1 == 1) * (decayMode_2 == 1)) * (reco_negyTauL * reco_posyTauL < 0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_rho_merged"] = "((decayMode_1 == 1) * (decayMode_2 == 1))" # Standard Model self.expressions_dict["catHtt13TeV_" + channel + "_inclusive"] = "(1.0)" self.expressions_dict["catHtt13TeV_" + channel + "_inclusivemt40"] = "(1.0)" self.expressions_dict["catHtt13TeV_" + channel + "_2jet_inclusive"] = "(njetspt30>1)" self.expressions_dict[ "catHtt13TeV_" + channel + "_2jet_vbf"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_2jet_inclusive"] + "*(mjj>200.0)*(jdeta>2.0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_inclusive"] = ("(! ({vbf}))".format( vbf=self.expressions_dict["catHtt13TeV_" + channel + "_2jet_vbf"])) + "*(njetspt30>0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_high"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_inclusive"] + ("*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_low"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_inclusive"] + ("*({pt_var}<={pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_inclusive"] = ("(! ({vbf}))*(! ({onejet}))".format( vbf=self.expressions_dict["catHtt13TeV_" + channel + "_2jet_vbf"], onejet=self.expressions_dict["catHtt13TeV_" + channel + "_1jet_inclusive"])) self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_high"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_inclusive"] + ("*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_low"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_inclusive"] + ("*({pt_var}<={pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) # Standard Model experimental boosted_higgs_string = "(H_pt>100)" boosted_higgs_medium_string = "(H_pt>50)" boosted_higgs_low_string = "(H_pt>30)" vbf_medium_string = "(mjj>500&&jdeta>3.5)" vbf_loose_string = "(mjj>200&&jdeta>2)" jet2_string = "(njetspt30>1)" jet1_string = "(njetspt30>0)" pt2_tight_string = "(pt_2>=45)" pt2_medium_string = "(pt_2>=35)" pt2_loose_string = "(pt_2>=25)" eta_hard_string = "jdeta>4.0" # used in CERN signal extraction study self.expressions_dict["catHtt13TeV_" + channel + "_vbf"] = self.combine( [vbf_medium_string, jet2_string]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boosted"] = self.combine([ jet1_string, self.invert(vbf_medium_string), boosted_higgs_string, pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_highpt2"] = self.combine([ jet1_string, self.invert(vbf_medium_string), self.invert(boosted_higgs_string), pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_lowpt2"] = self.combine([ jet1_string, self.invert(vbf_medium_string), self.invert(pt2_tight_string) ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_highpt2"] = self.combine([ self.invert(jet1_string), pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_lowpt2"] = self.combine([ self.invert(jet1_string), self.invert(pt2_tight_string) ]) # motivated by s/sqrt(b) efficiency self.expressions_dict["catHtt13TeV_" + channel + "_vbf_tag"] = self.combine([ jet2_string, boosted_higgs_medium_string, eta_hard_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_2jet_untagged"] = self.combine([ jet2_string, self.invert( self.combine([ boosted_higgs_medium_string, eta_hard_string ])) ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boost_high"] = self.combine( [jet1_string, boosted_higgs_string]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boost_medium"] = self.combine([ jet1_string, self.invert(boosted_higgs_string), boosted_higgs_low_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boost_low"] = self.combine([ jet1_string, self.invert(boosted_higgs_low_string) ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_nhighpt2"] = self.combine([ self.invert(jet1_string), pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_nlowpt2"] = self.combine([ self.invert(jet1_string), self.invert(pt2_tight_string) ]) # MSSSM for channel in ["et", "mt", "tt", "em", "mm"]: self.expressions_dict["catHttMSSM13TeV_" + channel + "_inclusive"] = "(1.0)" self.expressions_dict["catHttMSSM13TeV_" + channel + "_inclusivemt40"] = "(1.0)" self.expressions_dict["catHttMSSM13TeV_" + channel + "_nobtag"] = "(nbtag==0)" self.expressions_dict["catHttMSSM13TeV_" + channel + "_btag"] = "(nbtag>=1)" for channel in ["et", "mt"]: for cat in ["_nobtag", "_btag", "_inclusive"]: self.expressions_dict["catHttMSSM13TeV_" + channel + cat + "_tight"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + cat] self.expressions_dict["catHttMSSM13TeV_" + channel + cat + "_loosemt"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + cat] self.expressions_dict["catHttMSSM13TeV_" + channel + cat + "_looseiso"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + cat] for cat in ["_nobtag", "_btag", "_inclusive"]: self.expressions_dict[ "catHttMSSM13TeV_em" + cat + "_lowPzeta"] = self.expressions_dict[ "catHttMSSM13TeV_em" + cat] + "*(pZetaMissVis > -50)*(pZetaMissVis < -10)" self.expressions_dict[ "catHttMSSM13TeV_em" + cat + "_mediumPzeta"] = self.expressions_dict[ "catHttMSSM13TeV_em" + cat] + "*(pZetaMissVis > -10)*(pZetaMissVis < 30)" self.expressions_dict["catHttMSSM13TeV_em" + cat + "_highPzeta"] = self.expressions_dict[ "catHttMSSM13TeV_em" + cat] + "*(pZetaMissVis > 30)" for channel in ["et", "mt", "tt"]: pt_var = "pt_2" if channel in ["mt", "et"] else "pt_1" pt_cut_nobtag_high = "60.0" if channel in ["mt", "et"] else "80.0" pt_cut_nobtag_medium = "45.0" if channel in ["mt", "et" ] else "60.0" pt_cut_nobtag_low = "30.0" if channel in ["mt", "et"] else "45.0" pt_cut_btag_high = "45.0" if channel in ["mt", "et"] else "60.0" pt_cut_btag_low = "30.0" if channel in ["mt", "et"] else "45.0" self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag_high"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag"] + "*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut_nobtag_high) self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag_medium"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag"] + "*({pt_var}<={pt_cut_1})*({pt_var}>{pt_cut_2})".format( pt_var=pt_var, pt_cut_1=pt_cut_nobtag_high, pt_cut_2=pt_cut_nobtag_medium) self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag_low"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag"] + "*({pt_var}<={pt_cut_1})*({pt_var}>{pt_cut_2})".format( pt_var=pt_var, pt_cut_1=pt_cut_nobtag_medium, pt_cut_2=pt_cut_nobtag_low) self.expressions_dict["catHttMSSM13TeV_" + channel + "_btag_high"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_btag"] + "*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut_btag_high) self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_btag_low"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_btag"] + "*({pt_var}<={pt_cut_1})*({pt_var}>{pt_cut_2})".format( pt_var=pt_var, pt_cut_1=pt_cut_btag_high, pt_cut_2=pt_cut_btag_low) # MVA Htt categories #self.expressions_dict["mt_vbf_pre"] = "((0.3<=ttj_1)*(0.45<=ztt_1))" #self.expressions_dict["mt_vbf_sig"] = "{pre}*(0.8<=vbf_1)".format(pre=self.expressions_dict["mt_vbf_pre"]) #self.expressions_dict["mt_vbf_like"] = "{pre}*(-0.5<=vbf_1&&vbf_1<0.8)".format(pre=self.expressions_dict["mt_vbf_pre"]) #self.expressions_dict["mt_vbf_bkg"] = "{pre}*(vbf_1<-0.5)".format(pre=self.expressions_dict["mt_vbf_pre"]) #self.expressions_dict["mt_vbf_rest"] = "!{pre}".format(pre=self.expressions_dict["mt_vbf_pre"]) #self.expressions_dict["mt_2jets_all"] = "(njetspt30>1)" #self.expressions_dict["mt_1jets_all"] = "(njetspt30==1)" #self.expressions_dict["mt_0jets_all"] = "(njetspt30==0)" #self.expressions_dict["mt_2jets_vbfbdt"] = "(0.8<=vbf_1)" #self.expressions_dict["mt_2jet_vbf_bdt"] = "({pre}*(0.8<=vbf_1))".format(pre=self.expressions_dict["mt_vbf_pre"]) #self.expressions_dict["mt_1jet_inclusive_bdt"] = ("((! {vbf})".format( #vbf=self.expressions_dict["mt_2jet_vbf_bdt"] #))+"*(njetspt30>0))" #self.expressions_dict["mt_1jet_sig"] = self.expressions_dict["mt_1jet_inclusive_bdt"]+"*((0.4<=ttj_1)*(0.4<=ztt_1))" #self.expressions_dict["mt_1jet_bkg"] = self.expressions_dict["mt_1jet_inclusive_bdt"]+"*(!((0.4<=ttj_1)*(0.4<=ztt_1)))" #self.expressions_dict["mt_0jet_inclusive_bdt"] = ("(!{vbf})*(!{onejet})".format( #vbf=self.expressions_dict["mt_2jet_vbf_bdt"], #onejet=self.expressions_dict["mt_1jet_inclusive_bdt"] #)) #self.expressions_dict["mt_0jet_sig"] = self.expressions_dict["mt_0jet_inclusive_bdt"]+"*((-0.6<=ttj_1)*(0.2<=ztt_1))" #self.expressions_dict["mt_0jet_bkg"] = self.expressions_dict["mt_0jet_inclusive_bdt"]+"*(!((-0.6<=ttj_1)*(0.2<=ztt_1)))" #for channel in ["tt", "mt", "et", "em"]: #for classic in ["0jet_high", "0jet_low", "1jet_high", "1jet_low", "2jet_vbf"]: #self.expressions_dict["{channel}_{classic}".format(channel=channel, classic=classic)] = self.expressions_dict["catHtt13TeV_{channel}_{classic}".format(channel=channel, classic=classic)] ##========================================Copy here!======================================== #expressions_path = os.path.expandvars("$CMSSW_BASE/src/HiggsAnalysis/KITHiggsToTauTau/data/mva_configs/%s_expressions.cfg"%channel) #if not os.path.exists(expressions_path): #continue #self.expressions_dict["%s_inclusive"%(channel)] = "(1.0)" #with open(expressions_path, "r") as exps: #regular_name = "" #for line in exps: ##log.info(line) #vbf, name, values = map(strip, line.split(" : ")) #values = map(float, values.split(" ")) #values.pop(0) #values.pop(-1) #if vbf == "regular_name": #self.expressions_dict["%s_%s_signal"%(channel,name)] = "(%f <= %s)"%(values[1], name) #self.expressions_dict["%s_%s_mixed"%(channel,name)] = "(%f <= %s && %s < %f)"%(values[0], name, name, values[1]) #self.expressions_dict["%s_%s_bkg"%(channel,name)] = "(%s < %f)"%(name, values[0]) #regular_name= name #continue #elif vbf == "vbf_tagger": #if regular_name == "": #log.fatal("Please check if cuts in file %s are in correct order"%expressions_path) #sys.exit() #self.expressions_dict["{channel}_{vbf_tagger}_{mva_name}_tagged_signal".format( #channel=channel, vbf_tagger=name, mva_name=regular_name)]=self.expressions_dict["{channel}_{reg_name}_signal".format(channel=channel, reg_name=regular_name)]+"*({upper} <= {vbf_tagger})".format(upper=values[0], vbf_tagger=name) #self.expressions_dict["{channel}_{vbf_tagger}_{mva_name}_not_tagged_signal".format( #channel=channel, vbf_tagger=name, mva_name=regular_name)]=self.expressions_dict["{channel}_{reg_name}_signal".format(channel=channel, reg_name=regular_name)]+"*({lower} > {vbf_tagger})".format(lower=values[0], vbf_tagger=name) #expressions_path = os.path.expandvars("$CMSSW_BASE/src/HiggsAnalysis/KITHiggsToTauTau/data/mva_configs/%s_shift_expressions.cfg"%channel) #if not os.path.exists(expressions_path): #continue #shifts_dict = jsonTools.JsonDict(expressions_path) #self.expressions_dict.update(shifts_dict) #========================================Copy here!======================================= self.expressions_dict["cat_OneProng"] = "(decayMode_2 == 0)" self.expressions_dict["catOneProng"] = self.expressions_dict[ "cat_OneProng"] for channel in ["mt", "et"]: self.expressions_dict[ "catOneProng_" + channel] = self.expressions_dict["catOneProng"] self.expressions_dict[ "cat_OneProngPiZeros"] = "(decayMode_2 >= 1)*(decayMode_2 <= 2)" self.expressions_dict["catOneProngPiZeros"] = self.expressions_dict[ "cat_OneProngPiZeros"] for channel in ["mt", "et"]: self.expressions_dict[ "catOneProngPiZeros_" + channel] = self.expressions_dict["catOneProngPiZeros"] self.expressions_dict["cat_ThreeProng"] = "(decayMode_2 == 10)" self.expressions_dict["catThreeProng"] = self.expressions_dict[ "cat_ThreeProng"] for channel in ["mt", "et"]: self.expressions_dict[ "catThreeProng_" + channel] = self.expressions_dict["catThreeProng"] self.expressions_dict[ "cat_AllDMs"] = "(decayMode_2 >= 0)*(decayMode_2 <= 10)" self.expressions_dict["catAllDMs"] = self.expressions_dict[ "cat_AllDMs"] for channel in ["mt", "et"]: self.expressions_dict["catAllDMs_" + channel] = self.expressions_dict["catAllDMs"] self.expressions_dict[ "cat_AllDMsNotOneProng"] = "(decayMode_2 >= 1)*(decayMode_2 <= 10)" self.expressions_dict["catAllDMsNotOneProng"] = self.expressions_dict[ "cat_AllDMsNotOneProng"] for channel in ["mt", "et"]: self.expressions_dict[ "catAllDMsNotOneProng_" + channel] = self.expressions_dict["catAllDMsNotOneProng"] #==========================CategoriesDictUpdates========================================================= import Artus.Utility.jsonTools as jsonTools import HiggsAnalysis.KITHiggsToTauTau.plotting.configs.categories as Categories categoriesUpdate = Categories.CategoriesDict().getExpressionsDict() self.expressions_dict.update(categoriesUpdate) replacements = { "0jet": "zerojet", "1jet": "onejet", "2jet": "twojet", } for short_expression, long_expression in self.expressions_dict.items(): if any([ replacement in short_expression for replacement in replacements.keys() ]): new_short_expression = short_expression for replacement in replacements.iteritems(): new_short_expression = new_short_expression.replace( *replacement) self.expressions_dict[new_short_expression] = long_expression
def __init__(self, higgs_masses=["125"], useRateParam=False, year="", cb=None): super(SMHttDatacards, self).__init__(cb) if cb is None: signal_processes = ["ggH", "qqH", "WH", "ZH"] # ====================================================================== # MT channel self.add_processes( channel="mt", categories=Categories.CategoriesDict().getCategories(["mt" ])["mt"], bkg_processes=[ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ", "W", "QCD" ], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["mt"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ" ]).AddSyst(self.cb, *self.trigger_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.trigger_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ" ]).AddSyst(self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_efficiency2016_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_syst_args) else: self.cb.cp().channel(["mt"]).process( ["ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ"]).AddSyst(self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["mt"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_efficiency_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.tau_efficiency_syst_args) # Tau ES self.cb.cp().channel(["mt"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["mt" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate if year == "2016": self.cb.cp().channel(["mt"]).process(["ZL"]).AddSyst( self.cb, *self.muFakeTau2016_syst_args) else: self.cb.cp().channel(["mt"]).process(["ZL"]).AddSyst( self.cb, *self.muFakeTau_syst_args) # ttbar shape self.cb.cp().channel(["mt"]).process(["TTT", "TTJJ"]).AddSyst( self.cb, *self.ttj_syst_args) # dy shape self.cb.cp().channel(["mt"]).process(["ZTT", "ZL", "ZJ"]).AddSyst( self.cb, *self.dy_shape_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["mt"], False)["mt"]: self.cb.cp().channel(["mt"]).bin([ "mt_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # ET channel self.add_processes( channel="et", categories=Categories.CategoriesDict().getCategories(["et" ])["et"], bkg_processes=[ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ", "W", "QCD" ], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["et"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ" ]).AddSyst(self.cb, *self.trigger_efficiency2016_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.trigger_efficiency2016_syst_args) self.cb.cp().channel(["et"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ" ]).AddSyst(self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["et"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_efficiency2016_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_syst_args) else: self.cb.cp().channel(["et"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ" ]).AddSyst(self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["et"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_efficiency_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.tau_efficiency_syst_args) # Tau ES self.cb.cp().channel(["et"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["et" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate if year == "2016": self.cb.cp().channel(["et"]).process(["ZL"]).AddSyst( self.cb, *self.eFakeTau2016_syst_args) else: self.cb.cp().channel(["et"]).process(["ZL"]).AddSyst( self.cb, *self.eFakeTau_tight_syst_args) # ttbar shape self.cb.cp().channel(["et"]).process(["TTT", "TTJJ"]).AddSyst( self.cb, *self.ttj_syst_args) # dy shape self.cb.cp().channel(["et"]).process(["ZTT", "ZL", "ZJ"]).AddSyst( self.cb, *self.dy_shape_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["et"], False)["et"]: self.cb.cp().channel(["et"]).bin([ "et_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # EM channel self.add_processes( channel="em", categories=Categories.CategoriesDict().getCategories(["em" ])["em"], bkg_processes=["ZTT", "ZLL", "TT", "VV", "W", "QCD"], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["em"]).process([ "ZTT", "ZLL", "TT", "VV", "W" ]).AddSyst(self.cb, *self.trigger_efficiency2016_em_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.trigger_efficiency2016_em_syst_args) self.cb.cp().channel(["em"]).process([ "ZTT", "ZLL", "TT", "VV", "W" ]).AddSyst(self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.electron_efficiency2016_syst_args) self.cb.cp().channel(["em"]).process([ "ZTT", "ZLL", "TT", "VV", "W" ]).AddSyst(self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.muon_efficiency2016_syst_args) else: self.cb.cp().channel(["em"]).process([ "ZTT", "ZLL", "TT", "VV", "W" ]).AddSyst(self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.electron_efficiency_syst_args) self.cb.cp().channel(["em"]).process( ["ZTT", "ZLL", "TT", "VV", "W"]).AddSyst(self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.muon_efficiency_syst_args) # B-Tag if year == "2016": # the bins for zero jet, boosted and vbf are defined in datacardconfigs.py self.cb.cp().channel(["em"]).process(["TT"]).AddSyst( self.cb, *self.btag_efficiency2016_syst_args) self.cb.cp().channel(["em"]).process(["VV"]).AddSyst( self.cb, *self.btag_mistag2016_syst_args) # electron ES self.cb.cp().channel(["em"]).process( ["ZTT", "ZLL", "TT", "VV", "W", "QCD"]).AddSyst(self.cb, *self.ele_es_syst_args) self.cb.cp().channel(["em" ]).signals().AddSyst(self.cb, *self.ele_es_syst_args) # ttbar shape self.cb.cp().channel(["em"]).process(["TT"]).AddSyst( self.cb, *self.ttj_syst_args) # dy shape self.cb.cp().channel(["em"]).process(["ZTT", "ZLL"]).AddSyst( self.cb, *self.dy_shape_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["em"], False)["em"]: self.cb.cp().channel(["em"]).bin([ "em_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # TT channel self.add_processes( channel="tt", categories=Categories.CategoriesDict().getCategories(["tt" ])["tt"], bkg_processes=[ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ", "W", "QCD" ], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["tt"]).process([ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ", "W" ]).AddSyst(self.cb, *self.trigger_efficiency2016_syst_args) self.cb.cp().channel(["tt"]).signals().AddSyst( self.cb, *self.trigger_efficiency2016_syst_args) self.cb.cp().channel(["tt"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_efficiency2016_tt_syst_args) self.cb.cp().channel(["tt"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_tt_syst_args) else: self.cb.cp().channel(["tt"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_efficiency_syst_args) self.cb.cp().channel(["tt"]).signals().AddSyst( self.cb, *self.tau_efficiency_syst_args) # Tau ES self.cb.cp().channel(["tt"]).process( ["ZTT", "TTT", "VVT"]).AddSyst(self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["tt" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # ttbar shape self.cb.cp().channel(["tt"]).process(["TTT", "TTJJ"]).AddSyst( self.cb, *self.ttj_syst_args) # dy shape self.cb.cp().channel(["tt"]).process(["ZTT", "ZL", "ZJ"]).AddSyst( self.cb, *self.dy_shape_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["tt"], False)["tt"]: self.cb.cp().channel(["tt"]).bin([ "tt_" + category ]).process(["ZTT"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # MM channel self.add_processes( channel="mm", categories=Categories.CategoriesDict().getCategories(["mm" ])["mm"], bkg_processes=[ "ZTT", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ", "W", "QCD" ], sig_processes=signal_processes, analysis=["htt"], era=["13TeV"], mass=higgs_masses) # efficiencies # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["mm"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ", "W" ]).AddSyst(self.cb, *self.muon_efficiency2016_syst_args) self.cb.cp().channel(["mm"]).signals().AddSyst( self.cb, *self.muon_efficiency2016_syst_args) else: self.cb.cp().channel(["mm"]).process([ "ZTT", "ZLL", "ZL", "ZJ", "TTT", "TTJJ", "VVT", "VVJ", "W" ]).AddSyst(self.cb, *self.muon_efficiency_syst_args) self.cb.cp().channel(["mm"]).signals().AddSyst( self.cb, *self.muon_efficiency_syst_args) if useRateParam: for category in Categories.CategoriesDict().getCategories( ["mm"], False)["mm"]: self.cb.cp().channel(["mm"]).bin([ "mm_" + category ]).process(["ZLL"]).AddSyst(self.cb, "n_zll_" + category + "_norm", "rateParam", ch.SystMap()(1.0)) # ====================================================================== # All channels # lumi # (hopefully) temporary fix if year == "2016": self.cb.cp().signals().AddSyst(self.cb, *self.lumi2016_syst_args) self.cb.cp().process([ "ZTT", "ZLL", "ZL", "ZJ", "TT", "TTT", "TTJJ", "VV", "VVT", "VVJ" ]).AddSyst(self.cb, *self.lumi2016_syst_args) self.cb.cp().process(["W"]).channel([ "em", "tt", "mm" ]).AddSyst(self.cb, *self.lumi2016_syst_args ) # automatically in other channels determined else: self.cb.cp().signals().AddSyst(self.cb, *self.lumi_syst_args) self.cb.cp().process([ "ZTT", "ZLL", "ZL", "ZJ", "TT", "TTT", "TTJJ", "VV", "VVT", "VVJ" ]).AddSyst(self.cb, *self.lumi_syst_args) self.cb.cp().process(["W"]).channel([ "em", "tt", "mm" ]).AddSyst(self.cb, *self.lumi_syst_args ) # automatically in other channels determined # jets self.cb.cp().process([ "ZTT", "ZLL", "ZL", "ZJ", "TT", "TTT", "TTJJ", "VV", "VVT", "VVJ", "W", "QCD" ]).AddSyst(self.cb, *self.jec_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.jec_syst_args) # fakes if year == "2016": self.cb.cp().channel(["et", "mt", "tt"]).process( ["ZJ", "TTJJ", "VVJ"]).AddSyst(self.cb, *self.jetFakeTau_syst_args) else: self.cb.cp().channel(["et", "mt", "tt"]).process( ["ZJ", "W", "TTJJ", "VVJ"]).AddSyst(self.cb, *self.jetFakeTau_syst_args) # MET self.cb.cp().AddSyst(self.cb, *self.met_scale_syst_args) # cross section self.cb.cp().process(["ZTT", "ZL", "ZJ", "ZLL" ]).AddSyst(self.cb, *self.ztt_cross_section_syst_args) self.cb.cp().process(["TTT", "TTJJ"]).channel( ["mt", "et", "tt"]).AddSyst(self.cb, *self.ttj_cross_section_syst_args ) # automatically in other channels determined if year == "2016": self.cb.cp().process(["VV", "VVT", "VVJ"]).AddSyst( self.cb, *self.vv_cross_section2016_syst_args) else: self.cb.cp().process(["VV", "VVT", "VVJ"]).AddSyst( self.cb, *self.vv_cross_section_syst_args) self.cb.cp().process(["W"]).channel(["em", "tt", "mm"]).AddSyst( self.cb, *self.wj_cross_section_syst_args ) # automatically in other channels determined # QCD normalization from https://github.com/cms-analysis/CombineHarvester/blob/SM2016-dev/HTTSM2016/src/HttSystematics_SMRun2.cc#L1393-L1415 self.cb.cp().channel(["em"]).process(["QCD"]).bin( ["em_ZeroJet2D"]).AddSyst(self.cb, "CMS_htt_QCD_0jet_em_13TeV", "lnN", ch.SystMap()(1.10)) self.cb.cp().channel(["em"]).process(["QCD"]).bin([ "em_Boosted2D" ]).AddSyst(self.cb, "CMS_htt_QCD_boosted_em_13TeV", "lnN", ch.SystMap()(1.10)) self.cb.cp().channel(["em"]).process(["QCD"]).bin( ["em_Vbf2D"]).AddSyst(self.cb, "CMS_htt_QCD_VBF_em_13TeV", "lnN", ch.SystMap()(1.20)) self.cb.cp().channel(["tt"]).process(["QCD"]).bin( ["tt_ZeroJet2D"]).AddSyst(self.cb, "CMS_htt_QCD_0jet_tt_13TeV", "lnN", ch.SystMap()(1.027)) self.cb.cp().channel(["tt"]).process(["QCD"]).bin([ "tt_Boosted2D" ]).AddSyst(self.cb, "CMS_htt_QCD_boosted_tt_13TeV", "lnN", ch.SystMap()(1.027)) self.cb.cp().channel(["tt"]).process(["QCD"]).bin( ["tt_Vbf2D"]).AddSyst(self.cb, "CMS_htt_QCD_VBF_tt_13TeV", "lnN", ch.SystMap()(1.15)) self.cb.cp().channel(["mt"]).process(["QCD"]).AddSyst( self.cb, "QCD_Extrap_Iso_nonIso_mt_13TeV", "lnN", ch.SystMap()(1.20)) self.cb.cp().channel(["et"]).process(["QCD"]).AddSyst( self.cb, "QCD_Extrap_Iso_nonIso_et_13TeV", "lnN", ch.SystMap()(1.20)) # tau efficiency # (hopefully) temporary fix if year == "2016": self.cb.cp().channel(["mt", "et"]).process([ "ZTT", "TTT", "VVT" ]).AddSyst(self.cb, *self.tau_efficiency2016_corr_syst_args) self.cb.cp().channel(["tt"]).process([ "ZTT", "TTT", "VVT" ]).AddSyst(self.cb, *self.tau_efficiency2016_tt_corr_syst_args) self.cb.cp().channel(["mt", "et"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_corr_syst_args) self.cb.cp().channel(["tt"]).signals().AddSyst( self.cb, *self.tau_efficiency2016_tt_corr_syst_args) else: self.cb.cp().channel(["mt", "et", "tt"]).process([ "ZTT", "TTT", "VVT" ]).AddSyst(self.cb, *self.tau_efficiency_corr_syst_args) self.cb.cp().channel(["mt", "et", "tt"]).signals().AddSyst( self.cb, *self.tau_efficiency_corr_syst_args) # signal self.cb.cp().signals().AddSyst(self.cb, *self.htt_qcd_scale_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.htt_pdf_scale_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.htt_ueps_syst_args) if log.isEnabledFor(logging.DEBUG): self.cb.PrintAll()
def __init__(self, higgs_masses=["125"], cb=None): super(MVADatacards, self).__init__(cb) if cb is None: signal_processes = ["ggH", "qqH", "WH", "ZH"] channels = ["mt", "et", "tt", "em"] # ==========================Copy here!========================================= categories = Categories.CategoriesDict().getCategories( channels=channels) #for channel in channels: #categories[channel] = [] #for cat in ["inclusive", "0jet_high", "0jet_low", "1jet_high", "1jet_low", "2jet_vbf", "0jet_sig", "0jet_bkg", "1jet_sig", "1jet_bkg", "2jet_vbf_bdt"]: #categories[channel].append(channel+"_"+cat) #categories_path = os.path.expandvars("$CMSSW_BASE/src/HiggsAnalysis/KITHiggsToTauTau/data/mva_configs/%s_mvadatacards.cfg"%channel) #if not os.path.exists(categories_path): #continue #with open(categories_path) as categs: #for line in categs: #cat = line.strip() #if cat not in categories[channel]: #categories[channel].append(cat) ###=========================Copy here!========================================= # MT channel self.add_processes( channel="mt", #categories=["mt_"+category for category in ["2jet_vbf", "ztt_loose", "ztt_tight", "inclusive"]], #categories=["mt_"+category for category in ["inclusive"]], categories=[category for category in categories["mt"]], bkg_processes=["ZTT", "ZL", "ZJ", "TT", "VV", "W", "QCD"], sig_processes=signal_processes, analysis=["mvaHtt"], era=["13TeV"], mass=higgs_masses) # efficiencies self.cb.cp().channel(["mt"]).process( ["ZTT", "ZL", "ZJ", "TT", "VV"]).AddSyst(self.cb, *self.muon_efficieny_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.muon_efficieny_syst_args) self.cb.cp().channel(["mt"]).process(["ZTT", "TT", "VV"]).AddSyst( self.cb, *self.tau_efficieny_syst_args) self.cb.cp().channel(["mt"]).signals().AddSyst( self.cb, *self.tau_efficieny_syst_args) # Tau ES self.cb.cp().channel(["mt"]).process(["ZTT"]).AddSyst( self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["mt" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate self.cb.cp().channel(["mt"]).process(["ZL", "ZJ"]).AddSyst( self.cb, *self.zllFakeTau_syst_args) # ====================================================================== # ET channel self.add_processes( channel="et", categories=[category for category in categories["et"]], bkg_processes=["ZTT", "ZL", "ZJ", "TT", "VV", "W", "QCD"], sig_processes=signal_processes, analysis=["mvaHtt"], era=["13TeV"], mass=higgs_masses) # efficiencies self.cb.cp().channel(["et"]).process( ["ZTT", "ZL", "ZJ", "TT", "VV"]).AddSyst(self.cb, *self.electron_efficieny_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.electron_efficieny_syst_args) self.cb.cp().channel(["et"]).process(["ZTT", "TT", "VV"]).AddSyst( self.cb, *self.tau_efficieny_syst_args) self.cb.cp().channel(["et"]).signals().AddSyst( self.cb, *self.tau_efficieny_syst_args) # Tau ES self.cb.cp().channel(["et"]).process(["ZTT"]).AddSyst( self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["et" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate self.cb.cp().channel(["et"]).process(["ZL", "ZJ"]).AddSyst( self.cb, *self.zllFakeTau_syst_args) # ====================================================================== # EM channel self.add_processes( channel="em", categories=[category for category in categories["em"]], bkg_processes=["ZTT", "ZLL", "TT", "VV", "W", "QCD"], sig_processes=signal_processes, analysis=["mvaHtt"], era=["13TeV"], mass=higgs_masses) # efficiencies self.cb.cp().channel(["em"]).process( ["ZTT", "ZLL", "TT", "VV"]).AddSyst(self.cb, *self.electron_efficieny_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.electron_efficieny_syst_args) self.cb.cp().channel(["em"]).process( ["ZTT", "ZLL", "TT", "VV"]).AddSyst(self.cb, *self.muon_efficieny_syst_args) self.cb.cp().channel(["em"]).signals().AddSyst( self.cb, *self.muon_efficieny_syst_args) # ====================================================================== # TT channel self.add_processes( channel="tt", categories=[category for category in categories["tt"]], bkg_processes=["ZTT", "ZL", "ZJ", "TT", "VV", "W", "QCD"], sig_processes=signal_processes, analysis=["mvaHtt"], era=["13TeV"], mass=higgs_masses) # efficiencies self.cb.cp().channel(["tt"]).process(["ZTT", "TT", "VV"]).AddSyst( self.cb, *self.tau_efficieny_syst_args) self.cb.cp().channel(["tt"]).signals().AddSyst( self.cb, *self.tau_efficieny_syst_args) # Tau ES self.cb.cp().channel(["tt"]).process(["ZTT"]).AddSyst( self.cb, *self.tau_es_syst_args) self.cb.cp().channel(["tt" ]).signals().AddSyst(self.cb, *self.tau_es_syst_args) # fake-rate self.cb.cp().channel(["tt"]).process(["ZL", "ZJ"]).AddSyst( self.cb, *self.zllFakeTau_syst_args) # ====================================================================== # All channels # lumi self.cb.cp().signals().AddSyst(self.cb, *self.lumi_syst_args) self.cb.cp().process(["ZTT", "ZLL", "ZL", "ZJ", "TT", "W", "VV"]).AddSyst(self.cb, *self.lumi_syst_args) # jets self.cb.cp().process(["ZTT", "ZL", "ZJ", "TT", "VV", "W"]).AddSyst(self.cb, *self.jec_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.jec_syst_args) self.cb.cp().process(["TT" ]).AddSyst(self.cb, *self.btag_efficieny_syst_args) # MET self.cb.cp().AddSyst(self.cb, *self.met_scale_syst_args) #BDTs self.cb.cp().AddSyst(self.cb, *self.mva_vbf_bdt_syst_uncs) self.cb.cp().AddSyst(self.cb, *self.mva_bdt_syst_uncs) # QCD systematic self.cb.cp().process(["QCD"]).channel(["tt"]).AddSyst( self.cb, *self.qcd_syst_args) # automatically in other channels #self.cb.cp().process(["QCD"]).AddSyst(self.cb, *self.qcd_syst_args) # cross section self.cb.cp().process(["ZTT", "ZL", "ZJ" ]).AddSyst(self.cb, *self.ztt_cross_section_syst_args) self.cb.cp().process(["TT"]).channel(["mt", "et", "tt"]).AddSyst( self.cb, *self.ttj_cross_section_syst_args ) # automatically in other channels determined #self.cb.cp().process(["TT"]).AddSyst(self.cb, *self.ttj_cross_section_syst_args) self.cb.cp().process(["VV" ]).AddSyst(self.cb, *self.vv_cross_section_syst_args) self.cb.cp().process(["W"]).channel(["em", "tt"]).AddSyst( self.cb, *self.wj_cross_section_syst_args ) # automatically in other channels determined #self.cb.cp().process(["W"]).AddSyst(self.cb, *self.wj_cross_section_syst_args) # signal self.cb.cp().signals().AddSyst(self.cb, *self.htt_qcd_scale_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.htt_pdf_scale_syst_args) self.cb.cp().signals().AddSyst(self.cb, *self.htt_ueps_syst_args) if log.isEnabledFor(logging.DEBUG): self.cb.PrintAll()
def __init__(self, additional_expressions=None): super(ExpressionsDict, self).__init__(additional_expressions=additional_expressions) self.expressions_dict["integral"] = "0.5" # blinding (of data) for channel in ["tt", "mt", "et", "em", "mm", "ee"]: pass # self.expressions_dict["blind_"+channel+"_svfitMass"] = "((svfitMass<100.0)+(svfitMass>200.0))" # category cuts self.expressions_dict["cat_inclusive"] = "1.0" self.expressions_dict["cat_0jet"] = "njetspt20 < 1" self.expressions_dict["cat_1jet"] = "(njetspt20 > 0)*(njetspt20 < 2)" self.expressions_dict["cat_2jet"] = "njetspt20 > 1" # Z->tautau categories for channel in ["tt", "mt", "et", "em", "mm", "ee"]: self.expressions_dict["catZtt13TeV_" + channel + "_inclusive"] = "1.0" self.expressions_dict["catZtt13TeV_" + channel + "_2jet_inclusive"] = "(njetspt30>1)" self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] = "(njetspt30>0)*(njetspt30<2)" self.expressions_dict["catZtt13TeV_" + channel + "_0jet_inclusive"] = "(njetspt30<1)" self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_low"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] + ("*(H_pt<50)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_medium"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] + ( "*(H_pt>50)*(H_pt<100)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_high"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_inclusive"] + ("*(H_pt>100)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] = self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_inclusive"] + "*(mjj>500.0)*(jdeta>3.5)" self.expressions_dict["catZtt13TeV_" + channel + "_1jet_exclusive"] = "(njetspt30>0)" self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_low_exclusive"] = "(!(" + self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] + "))*" + self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_exclusive"] + ("*(H_pt<50)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_medium_exclusive"] = "(!(" + self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] + "))*" + self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_exclusive"] + ( "*(H_pt>50)*(H_pt<100)") + ("*(nbtag<1)") self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_high_exclusive"] = "(!(" + self.expressions_dict[ "catZtt13TeV_" + channel + "_2jet_vbf"] + "))*" + self.expressions_dict[ "catZtt13TeV_" + channel + "_1jet_exclusive"] + ("*(H_pt>100)") + ("*(nbtag<1)") self.expressions_dict["catZtt13TeV_" + channel + "_1bjet"] = "(njets==1)*(nbtag>=1)" self.expressions_dict["catZtt13TeV_" + channel + "_2bjet"] = "(njets==2)*(nbtag>=2)" # Z->tautau polarisation categories for channel in ["mt", "et", "tt", "em"]: self.expressions_dict["catZttPol13TeV_" + channel + "_inclusive"] = "(1.0)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_inclusive"] = "polarisationCombinedOmegaBarSvfit" for channel in ["em"]: for category in ["a1", "a1_1", "a1_2", "rho", "rho_1", "rho_2"]: self.expressions_dict["catZttPol13TeV_" + channel + "_" + category] = "(0.0)" self.expressions_dict["testZttPol13TeV_" + channel + "_" + category] = "polarisationOmegaBarSvfit_2" for category in ["oneprong", "oneprong_1", "oneprong_2"]: self.expressions_dict["catZttPol13TeV_" + channel + "_" + category] = "(1.0)" self.expressions_dict["testZttPol13TeV_" + channel + "_" + category] = "polarisationOmegaBarSvfit_2" for category in [ "a1_a1", "a1_rho", "a1_oneprong", "rho_rho", "rho_oneprong" ]: self.expressions_dict["catZttPol13TeV_" + channel + "_combined_" + category] = "(0.0)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_" + category] = "polarisationCombinedOmegaBarSvfit" for category in ["oneprong_oneprong"]: self.expressions_dict["catZttPol13TeV_" + channel + "_combined_" + category] = "(1.0)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_" + category] = "polarisationCombinedOmegaBarSvfit" for channel in ["mt", "et"]: for category in ["a1", "a1_2"]: self.expressions_dict["catZttPol13TeV_" + channel + "_" + category] = "(decayMode_2 == 10)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_" + category] = "((decayMode_2 == 10) * polarisationOmegaBarSvfit_2)" for category in ["rho", "rho_2"]: self.expressions_dict["catZttPol13TeV_" + channel + "_" + category] = "(decayMode_2 == 1)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_" + category] = "((decayMode_2 == 1) * polarisationOmegaBarSvfit_2)" #"rhoNeutralChargedAsymmetry_2" for category in ["oneprong", "oneprong_2"]: self.expressions_dict[ "catZttPol13TeV_" + channel + "_" + category] = "((decayMode_2 != 10) * (decayMode_2 != 1))" self.expressions_dict["testZttPol13TeV_" + channel + "_" + category] = "polarisationOmegaBarSvfit_2" for category in ["a1_1", "rho_1"]: self.expressions_dict["catZttPol13TeV_" + channel + "_" + category] = "(0.0)" self.expressions_dict["testZttPol13TeV_" + channel + "_" + category] = "polarisationOmegaBarSvfit_1" for category in ["oneprong_1"]: self.expressions_dict["catZttPol13TeV_" + channel + "_" + category] = "(1.0)" self.expressions_dict["testZttPol13TeV_" + channel + "_" + category] = "polarisationOmegaBarSvfit_1" for category in ["a1_a1", "a1_rho", "rho_rho"]: self.expressions_dict["catZttPol13TeV_" + channel + "_combined_" + category] = "(0.0)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_" + category] = "polarisationCombinedOmegaBarSvfit" for category in [ "a1_oneprong", "rho_oneprong", "oneprong_oneprong" ]: self.expressions_dict[ "catZttPol13TeV_" + channel + "_combined_" + category] = "catZttPol13TeV_" + channel + "_" + ( category.split("_")[0]) self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_" + category] = "testZttPol13TeV_" + channel + "_" + ( category.split("_")[0]) for channel in ["tt"]: self.expressions_dict[ "catZttPol13TeV_" + channel + "_a1"] = "((decayMode_1 == 10) || (decayMode_2 == 10))" self.expressions_dict["catZttPol13TeV_" + channel + "_a1_1"] = "(decayMode_1 == 10)" self.expressions_dict["catZttPol13TeV_" + channel + "_a1_2"] = "(decayMode_2 == 10)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_a1"] = "(((decayMode_1 == 10) * polarisationOmegaSvfit_1) + ((decayMode_1 != 10) * polarisationOmegaSvfit_2))" self.expressions_dict["testZttPol13TeV_" + channel + "_a1_1"] = "polarisationOmegaBarSvfit_1" self.expressions_dict["testZttPol13TeV_" + channel + "_a1_2"] = "polarisationOmegaBarSvfit_2" self.expressions_dict[ "catZttPol13TeV_" + channel + "_rho"] = "(((decayMode_1 != 10) * (decayMode_2 != 10)) * ((decayMode_1 == 1) || (decayMode_2 == 1)))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_rho_1"] = "((decayMode_1 != 10) * (decayMode_1 == 1) * (decayMode_2 != 1))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_rho_2"] = "((decayMode_2 != 10) * (decayMode_2 == 1) * (decayMode_1 != 1))" self.expressions_dict[ "testZttPol13TeV_" + channel + "_rho"] = "(((decayMode_1 == 1) * polarisationOmegaSvfit_1) + ((decayMode_1 != 1) * polarisationOmegaSvfit_2))" self.expressions_dict["testZttPol13TeV_" + channel + "_rho_1"] = "polarisationOmegaBarSvfit_1" self.expressions_dict["testZttPol13TeV_" + channel + "_rho_2"] = "polarisationOmegaBarSvfit_2" self.expressions_dict[ "catZttPol13TeV_" + channel + "_oneprong"] = "((decayMode_1 != 10) * (decayMode_2 != 10) * (decayMode_1 != 1) * (decayMode_2 != 1))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_oneprong_1"] = "((decayMode_1 != 10) * (decayMode_1 != 1))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_oneprong_2"] = "((decayMode_2 != 10) * (decayMode_2 != 1))" self.expressions_dict[ "testZttPol13TeV_" + channel + "_oneprong"] = "(((decayMode_1 != 10) *(decayMode_1 != 1) * polarisationOmegaSvfit_1) + ((decayMode_2 != 10) *(decayMode_2 != 1) * polarisationOmegaSvfit_2))" self.expressions_dict[ "testZttPol13TeV_" + channel + "_oneprong_1"] = "polarisationOmegaBarSvfit_1" self.expressions_dict[ "testZttPol13TeV_" + channel + "_oneprong_2"] = "polarisationOmegaBarSvfit_2" self.expressions_dict[ "catZttPol13TeV_" + channel + "_combined_a1_a1"] = "((decayMode_1 == 10) * (decayMode_2 == 10))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_combined_a1_rho"] = "(((decayMode_1 == 10) * (decayMode_2 == 1)) || ((decayMode_1 == 1) * (decayMode_2 == 10)))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_combined_a1_oneprong"] = "(((decayMode_1 == 10) * (decayMode_2 != 10) * (decayMode_2 != 1)) || ((decayMode_1 != 10) * (decayMode_1 != 1) * (decayMode_2 == 10)))" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_a1_a1"] = "polarisationCombinedOmegaBarSvfit" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_a1_rho"] = "polarisationCombinedOmegaBarSvfit" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_a1_oneprong"] = "polarisationCombinedOmegaBarSvfit" self.expressions_dict[ "catZttPol13TeV_" + channel + "_combined_rho_rho"] = "((decayMode_1 == 1) * (decayMode_2 == 1))" self.expressions_dict[ "catZttPol13TeV_" + channel + "_combined_rho_oneprong"] = "(((decayMode_1 == 1) * (decayMode_2 != 10) * (decayMode_2 != 1)) || ((decayMode_1 != 10) * (decayMode_1 != 1) * (decayMode_2 == 1)))" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_rho_rho"] = "(polarisationOmegaBarSvfit_1+polarisationOmegaBarSvfit_2)/(1+polarisationOmegaBarSvfit_1*polarisationOmegaBarSvfit_2)" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_rho_oneprong"] = "polarisationCombinedOmegaBarSvfit" self.expressions_dict[ "catZttPol13TeV_" + channel + "_combined_oneprong_oneprong"] = "((decayMode_1 != 1) * (decayMode_1 != 10) * (decayMode_2 != 10) * (decayMode_2 != 1))" self.expressions_dict[ "testZttPol13TeV_" + channel + "_combined_oneprong_oneprong"] = "polarisationCombinedOmegaBarSvfit" for channel in ["em", "mt", "et", "tt"]: self.expressions_dict["catZttPol13TeV_" + channel + "_index"] = " + ".join([ "(catZttPol13TeV_" + channel + "_" + cat + " * " + str(index) + ")" for index, cat in enumerate( ["oneprong"] if channel == "em" else ["oneprong", "rho", "a1"]) ]) # In the so-called "gen" channel, the categories are considered as tt,mt,et... for now, # it will be adapted later considering the decay products of tau's for channel in ["gen"]: self.expressions_dict["catZttPol13TeV_" + channel + "_tt"] = "genTauTauDecayMode==1" self.expressions_dict["catZttPol13TeV_" + channel + "_mt"] = "genTauTauDecayMode==2" self.expressions_dict["catZttPol13TeV_" + channel + "_et"] = "genTauTauDecayMode==3" # Z->ee(tau) electron tau fake rate categories for channel in ["et"]: for cat in ["vloose", "loose", "medium", "tight", "vtight"]: self.expressions_dict["catETauFakeRate13TeV_" + channel + "_" + cat + "_pass"] = "******" self.expressions_dict["catETauFakeRate13TeV_" + channel + "_" + cat + "_fail"] = "(1.0)" # H->tautau categories for channel in ["tt", "mt", "et", "em", "mm", "ee"]: pt_var = "pt_2" if channel in ["mt", "et", "em"] else "pt_1" pt_cut = "35.0" #CP-studies self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_mt"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.44 && TauPProngEnergy >= 0.55)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_et"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.44 && TauPProngEnergy >= 0.55)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_em"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.44 && TauPProngEnergy >= 0.44)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_tt"] = "(genPhiStarCP>-10) * (TauMProngEnergy >= 0.55 && TauPProngEnergy >= 0.55)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_rho_yLhigh"] = "((decayMode_1 == 1) * (decayMode_2 == 1)) * (reco_negyTauL * reco_posyTauL > 0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_rho_yLlow"] = "((decayMode_1 == 1) * (decayMode_2 == 1)) * (reco_negyTauL * reco_posyTauL < 0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_CP_rho_merged"] = "((decayMode_1 == 1) * (decayMode_2 == 1))" # Standard Model self.expressions_dict["catHtt13TeV_" + channel + "_inclusive"] = "(1.0)" self.expressions_dict["catHtt13TeV_" + channel + "_inclusivemt40"] = "(1.0)" self.expressions_dict["catHtt13TeV_" + channel + "_2jet_inclusive"] = "(njetspt30>1)" self.expressions_dict[ "catHtt13TeV_" + channel + "_2jet_vbf"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_2jet_inclusive"] + "*(mjj>200.0)*(jdeta>2.0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_inclusive"] = ("(! ({vbf}))".format( vbf=self.expressions_dict["catHtt13TeV_" + channel + "_2jet_vbf"])) + "*(njetspt30>0)" self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_high"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_inclusive"] + ("*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_low"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_1jet_inclusive"] + ("*({pt_var}<={pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_inclusive"] = ("(! ({vbf}))*(! ({onejet}))".format( vbf=self.expressions_dict["catHtt13TeV_" + channel + "_2jet_vbf"], onejet=self.expressions_dict["catHtt13TeV_" + channel + "_1jet_inclusive"])) self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_high"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_inclusive"] + ("*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_low"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_0jet_inclusive"] + ("*({pt_var}<={pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut)) # Standard Model experimental btag_veto_string = "(nbtag == 0)" mjj_CP_string = "(mjj>300)" boosted_higgsCP_string = "(H_pt>200)" pZeta_CP_string = "(pZetaMissVis > -10.0)" boosted_higgs_string = "(H_pt>100)" boosted_higgs_medium_string = "(H_pt>50)" boosted_higgs_low_string = "(H_pt>30)" vbf_medium_string = "(mjj>500&&jdeta>3.5)" vbf_loose_string = "(mjj>200&&jdeta>2)" jet2_string = "(njetspt30>1)" jet1_string = "(njetspt30>0)" jet0_string = "(njetspt30==0)" pt2_tight_string = "(pt_2>=45)" pt2_medium_string = "(pt_2>=35)" pt2_loose_string = "(pt_2>=25)" eta_hard_string = "jdeta>4.0" high_mt_string = "(nbtag==0)*(mt_1>80.0)" mt_antiiso_string = "(iso_1>0.15)*(iso_1<0.30)" tt_antiiso_string = "((byMediumIsolationMVArun2v1DBoldDMwLT_1 > 0.5 && byLooseIsolationMVArun2v1DBoldDMwLT_2 > 0.5 && byTightIsolationMVArun2v1DBoldDMwLT_2 < 0.5) || (byMediumIsolationMVArun2v1DBoldDMwLT_2 > 0.5 && byLooseIsolationMVArun2v1DBoldDMwLT_1 > 0.5 && byTightIsolationMVArun2v1DBoldDMwLT_1 < 0.5))*((gen_match_1 == 5)*0.95 + (gen_match_1 != 5))*((gen_match_2 == 5)*0.95 + (gen_match_2 != 5))" # used in CERN signal extraction study self.expressions_dict["catHtt13TeV_" + channel + "_vbf"] = self.combine( [vbf_medium_string, jet2_string]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boosted"] = self.combine([ jet1_string, self.invert(vbf_medium_string), boosted_higgs_string, pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_highpt2"] = self.combine([ jet1_string, self.invert(vbf_medium_string), self.invert(boosted_higgs_string), pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_lowpt2"] = self.combine([ jet1_string, self.invert(vbf_medium_string), self.invert(pt2_tight_string) ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_highpt2"] = self.combine([ self.invert(jet1_string), pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_lowpt2"] = self.combine([ self.invert(jet1_string), self.invert(pt2_tight_string) ]) # motivated by s/sqrt(b) efficiency self.expressions_dict["catHtt13TeV_" + channel + "_vbf_tag"] = self.combine([ jet2_string, boosted_higgs_medium_string, eta_hard_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_2jet_untagged"] = self.combine([ jet2_string, self.invert( self.combine([ boosted_higgs_medium_string, eta_hard_string ])) ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boost_high"] = self.combine( [jet1_string, boosted_higgs_string]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boost_medium"] = self.combine([ jet1_string, self.invert(boosted_higgs_string), boosted_higgs_low_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_1jet_boost_low"] = self.combine([ jet1_string, self.invert(boosted_higgs_low_string) ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_nhighpt2"] = self.combine([ self.invert(jet1_string), pt2_tight_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet_nlowpt2"] = self.combine([ self.invert(jet1_string), self.invert(pt2_tight_string) ]) self.expressions_dict[ "catHtt13TeV_mm_Boosted2D"] = "((njetspt30==1)||((njetspt30>1&&mjj<=300)))" self.expressions_dict[ "catHtt13TeV_em_Boosted2D"] = "((njetspt30==1)||(njetspt30==2&&!(mjj>300&&pZetaMissVis>-10))||(njetspt30>2))" self.expressions_dict[ "catHtt13TeV_et_Boosted2D"] = "((njetspt30==1)||(njetspt30>1&&!(mjj>300&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_mt_Boosted2D"] = "((njetspt30==1)||(njetspt30>1&&!(mjj>300&&pt_2>40&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_tt_Boosted2D"] = "((njetspt30==1)||(njetspt30>1&&!(jdeta>2.5&&H_pt>100)))" # Standard Model categories # ZeroJet category for channel in ["mm", "em", "et", "mt", "tt"]: self.expressions_dict["catHtt13TeV_" + channel + "_ZeroJet2D"] = self.combine([jet0_string]) self.expressions_dict["catHtt13TeV_" + channel + "_0jet"] = self.expressions_dict[ "catHtt13TeV_" + channel + "_ZeroJet2D"] self.expressions_dict["catHtt13TeV_tt_ZeroJet2D_QCDCR"] = self.combine( [jet0_string, tt_antiiso_string]) self.expressions_dict[ "catHtt13TeV_tt_antiiso_0jet_cr"] = self.expressions_dict[ "catHtt13TeV_tt_ZeroJet2D_QCDCR"] self.expressions_dict["catHtt13TeV_mt_ZeroJet2D_QCDCR"] = self.combine( [jet0_string, mt_antiiso_string]) self.expressions_dict[ "catHtt13TeV_mt_0jet_qcd_cr"] = self.expressions_dict[ "catHtt13TeV_mt_ZeroJet2D_QCDCR"] self.expressions_dict["catHtt13TeV_et_ZeroJet2D_QCDCR"] = self.combine( [jet0_string, mt_antiiso_string]) self.expressions_dict[ "catHtt13TeV_et_0jet_qcd_cr"] = self.expressions_dict[ "catHtt13TeV_et_ZeroJet2D_QCDCR"] self.expressions_dict["catHtt13TeV_mt_ZeroJet2D_WJCR"] = self.combine( [jet0_string, high_mt_string]) self.expressions_dict[ "catHtt13TeV_mt_wjets_0jet_cr"] = self.expressions_dict[ "catHtt13TeV_mt_ZeroJet2D_WJCR"] self.expressions_dict["catHtt13TeV_et_ZeroJet2D_WJCR"] = self.combine( [jet0_string, high_mt_string]) self.expressions_dict[ "catHtt13TeV_et_wjets_0jet_cr"] = self.expressions_dict[ "catHtt13TeV_et_ZeroJet2D_WJCR"] #Boosted (1jet) categories self.expressions_dict[ "catHtt13TeV_mm_Boosted2D"] = "((njetspt30==1)||((njetspt30>1&&mjj<=300)))" self.expressions_dict[ "catHtt13TeV_em_Boosted2D"] = "((njetspt30==1)||(njetspt30>1&&!(mjj>300&&pt_2>40&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_et_Boosted2D"] = "((njetspt30==1)||(njetspt30>1&&!(mjj>300&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_mt_Boosted2D"] = "((njetspt30==1)||(njetspt30==2&&!(mjj>300&&pZetaMissVis>-10))||(njetspt30>2))" self.expressions_dict[ "catHtt13TeV_tt_Boosted2D"] = "((njetspt30==1)||(njetspt30>1&&!(jdeta>2.5&&H_pt>100)))" self.expressions_dict[ "catHtt13TeV_mm_boosted"] = self.expressions_dict[ "catHtt13TeV_mm_Boosted2D"] self.expressions_dict[ "catHtt13TeV_em_boosted"] = self.expressions_dict[ "catHtt13TeV_em_Boosted2D"] self.expressions_dict[ "catHtt13TeV_et_boosted"] = self.expressions_dict[ "catHtt13TeV_et_Boosted2D"] self.expressions_dict[ "catHtt13TeV_mt_boosted"] = self.expressions_dict[ "catHtt13TeV_mt_Boosted2D"] self.expressions_dict[ "catHtt13TeV_tt_boosted"] = self.expressions_dict[ "catHtt13TeV_tt_Boosted2D"] self.expressions_dict["catHtt13TeV_tt_Boosted2D_QCDCR"] = self.combine( [ jet1_string, tt_antiiso_string, "*((njetspt30==1)||(njetspt30>1&&!(jdeta>2.5&&H_pt>100)))" ]) self.expressions_dict[ "catHtt13TeV_tt_antiiso_boosted_cr"] = self.expressions_dict[ "catHtt13TeV_tt_Boosted2D_QCDCR"] self.expressions_dict[ "catHtt13TeV_mt_Boosted2D_QCDCR"] = "(iso_1>0.15)*(iso_1<0.30)*((njetspt30==1)||(njetspt30>1&&!(mjj>300&&pt_2>40&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_mt_boosted_qcd_cr"] = self.expressions_dict[ "catHtt13TeV_mt_Boosted2D_QCDCR"] self.expressions_dict[ "catHtt13TeV_et_Boosted2D_QCDCR"] = "(iso_1>0.10)*(iso_1<0.30)*((njetspt30==1)||(njetspt30>1&&!(mjj>300&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_et_boosted_qcd_cr"] = self.expressions_dict[ "catHtt13TeV_et_Boosted2D_QCDCR"] self.expressions_dict[ "catHtt13TeV_mt_Boosted2D_WJCR"] = "(nbtag==0)*(mt_1>80.0)*((njetspt30==1)||(njetspt30>1&&!(mjj>300&&pt_2>40&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_mt_wjets_boosted_cr"] = self.expressions_dict[ "catHtt13TeV_mt_Boosted2D_WJCR"] self.expressions_dict[ "catHtt13TeV_et_Boosted2D_WJCR"] = "(nbtag==0)*(mt_1>80.0)*((njetspt30==1)||(njetspt30>1&&!(mjj>300&&H_pt>50)))" self.expressions_dict[ "catHtt13TeV_et_wjets_boosted_cr"] = self.expressions_dict[ "catHtt13TeV_et_Boosted2D_WJCR"] #Vbf categories self.expressions_dict[ "catHtt13TeV_mm_Vbf2D"] = "(njetspt30>1)*(mjj>300)" self.expressions_dict[ "catHtt13TeV_em_Vbf2D"] = "(pt_2>40)*(njetspt30>1)*(mjj>300)*(H_pt>50)" self.expressions_dict[ "catHtt13TeV_et_Vbf2D"] = "(njetspt30>1)*(mjj>300)*(H_pt>50)" self.expressions_dict[ "catHtt13TeV_mt_Vbf2D"] = "(pZetaMissVis>-10)*(njetspt30==2)*(mjj>300)" self.expressions_dict[ "catHtt13TeV_tt_Vbf2D"] = "(njetspt30>1)*(jdeta>2.5)*(H_pt>100)" self.expressions_dict["catHtt13TeV_mm_vbf"] = self.expressions_dict[ "catHtt13TeV_mm_Vbf2D"] self.expressions_dict["catHtt13TeV_em_vbf"] = self.expressions_dict[ "catHtt13TeV_em_Vbf2D"] self.expressions_dict["catHtt13TeV_et_vbf"] = self.expressions_dict[ "catHtt13TeV_et_Vbf2D"] self.expressions_dict["catHtt13TeV_mt_vbf"] = self.expressions_dict[ "catHtt13TeV_mt_Vbf2D"] self.expressions_dict["catHtt13TeV_tt_vbf"] = self.expressions_dict[ "catHtt13TeV_tt_Vbf2D"] self.expressions_dict[ "catHtt13TeV_tt_Vbf2D_QCDCR"] = "((byMediumIsolationMVArun2v1DBoldDMwLT_1 > 0.5 && byLooseIsolationMVArun2v1DBoldDMwLT_2 > 0.5 && byTightIsolationMVArun2v1DBoldDMwLT_2 < 0.5) || (byMediumIsolationMVArun2v1DBoldDMwLT_2 > 0.5 && byLooseIsolationMVArun2v1DBoldDMwLT_1 > 0.5 && byTightIsolationMVArun2v1DBoldDMwLT_1 < 0.5))*((gen_match_1 == 5)*0.95 + (gen_match_1 != 5))*((gen_match_2 == 5)*0.95 + (gen_match_2 != 5))*(njetspt30>1)*(jdeta>2.5)*(H_pt>100)" self.expressions_dict[ "catHtt13TeV_tt_antiiso_vbf_cr"] = self.expressions_dict[ "catHtt13TeV_tt_Vbf2D_QCDCR"] # ttbar control region self.expressions_dict[ "catHtt13TeV_ttbar_TTbarCR"] = "(pZetaMissVis < -35.0)*(m_vis>90.0)*(njetspt30>0)" self.expressions_dict[ "catHtt13TeV_ttbar_ttbar_cr"] = self.expressions_dict[ "catHtt13TeV_ttbar_TTbarCR"] # CP initial state category for channel in ["em", "et", "mt", "tt"]: self.expressions_dict["catHtt13TeV_" + channel + "_dijet2D_boosted"] = self.combine([ boosted_higgsCP_string, mjj_CP_string, jet2_string, "(1.0)" if channel == "tt" else btag_veto_string, "(1.0)" if channel != "em" else pZeta_CP_string ]) self.expressions_dict["catHtt13TeV_" + channel + "_dijet2D_lowboost"] = self.combine([ self.invert(boosted_higgsCP_string), mjj_CP_string, jet2_string, "(1.0)" if channel == "tt" else btag_veto_string, "(1.0)" if channel != "em" else pZeta_CP_string ]) #Deprecated for CP analysis in the meanwhilw. self.expressions_dict[ "catHtt13TeV_" + channel + "_dijet_boosted"] = self.combine([ boosted_higgsCP_string, "(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv>100)" ]) if channel != "em" else self.combine([ boosted_higgsCP_string, "(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv>100)*(nbtag<1)" ]) self.expressions_dict[ "catHtt13TeV_" + channel + "_dijet_lowM"] = self.combine([ self.invert(boosted_higgsCP_string), "(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv<100)" ]) if channel != "em" else self.combine([ self.invert(boosted_higgsCP_string), "(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv<100)*(nbtag<1)" ]) self.expressions_dict[ "catHtt13TeV_" + channel + "_dijet_highM"] = self.combine([ self.invert(boosted_higgsCP_string), "(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv>100)" ]) if channel != "em" else self.combine([ self.invert(boosted_higgsCP_string), "(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv>100)*(nbtag<1)" ]) self.expressions_dict[ "catHtt13TeV_" + channel + "_dijet_lowMjj"] = "(mjj>200)*(mjj<500)*(njets>1)*(m_sv>100)" if channel != "em" else "(mjj>200)*(mjj<500)*(njets>1)*(nbtag<1)" # Anti-isolation qcd control region in dijet categories self.expressions_dict[ "catHtt13TeV_tt_dijet2D_boosted_qcd_cr"] = self.combine([ tt_antiiso_string, boosted_higgsCP_string, mjj_CP_string, jet2_string, btag_veto_string ]) self.expressions_dict[ "catHtt13TeV_tt_dijet2D_lowboost_qcd_cr"] = self.combine([ tt_antiiso_string, self.invert(boosted_higgsCP_string), mjj_CP_string, jet2_string, btag_veto_string ]) #Deprecated for CP analysis in the meanwhile. self.expressions_dict[ "catHtt13TeV_tt_dijet_boosted_qcd_cr"] = self.combine([ tt_antiiso_string, self.invert(boosted_higgsCP_string), "(njetspt30>1)*(jdeta>2.5)*(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv>100)", btag_veto_string ]) self.expressions_dict["catHtt13TeV_tt_dijet_lowM_qcd_cr"] = self.combine([ tt_antiiso_string, self.invert(boosted_higgsCP_string), "(njetspt30>1)*(jdeta>2.5)*(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv<100)", btag_veto_string ]) self.expressions_dict[ "catHtt13TeV_tt_dijet_highM_qcd_cr"] = self.combine([ tt_antiiso_string, self.invert(boosted_higgsCP_string), "(njetspt30>1)*(jdeta>2.5)*(mjj>500)*(abs(jdeta)>2.0)*(njets>1)*(m_sv>100)", btag_veto_string ]) self.expressions_dict[ "catHtt13TeV_tt_dijet_lowMjj_qcd_cr"] = self.combine([ tt_antiiso_string, "(njetspt30>1)*(jdeta>2.5)*(mjj>200)*(mjj<500)*(njets>1)", btag_veto_string ]) # CP initial state control regions in Z->mm self.expressions_dict["catHtt13TeV_mm_dijet2D_boosted"] = self.combine( [boosted_higgsCP_string, mjj_CP_string, jet2_string]) self.expressions_dict[ "catHtt13TeV_mm_dijet2D_lowboost"] = self.combine([ self.invert(boosted_higgsCP_string), mjj_CP_string, jet2_string ]) # MSSSM for channel in ["et", "mt", "tt", "em", "mm"]: self.expressions_dict["catHttMSSM13TeV_" + channel + "_inclusive"] = "(1.0)" self.expressions_dict["catHttMSSM13TeV_" + channel + "_inclusivemt40"] = "(1.0)" self.expressions_dict["catHttMSSM13TeV_" + channel + "_nobtag"] = "(nbtag==0)" self.expressions_dict["catHttMSSM13TeV_" + channel + "_btag"] = "(nbtag>=1)" for channel in ["et", "mt"]: for cat in ["_nobtag", "_btag", "_inclusive"]: self.expressions_dict["catHttMSSM13TeV_" + channel + cat + "_tight"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + cat] self.expressions_dict["catHttMSSM13TeV_" + channel + cat + "_loosemt"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + cat] self.expressions_dict["catHttMSSM13TeV_" + channel + cat + "_looseiso"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + cat] for cat in ["_nobtag", "_btag", "_inclusive"]: self.expressions_dict[ "catHttMSSM13TeV_em" + cat + "_lowPzeta"] = self.expressions_dict[ "catHttMSSM13TeV_em" + cat] + "*(pZetaMissVis > -50)*(pZetaMissVis < -10)" self.expressions_dict[ "catHttMSSM13TeV_em" + cat + "_mediumPzeta"] = self.expressions_dict[ "catHttMSSM13TeV_em" + cat] + "*(pZetaMissVis > -10)*(pZetaMissVis < 30)" self.expressions_dict["catHttMSSM13TeV_em" + cat + "_highPzeta"] = self.expressions_dict[ "catHttMSSM13TeV_em" + cat] + "*(pZetaMissVis > 30)" for channel in ["et", "mt", "tt"]: pt_var = "pt_2" if channel in ["mt", "et"] else "pt_1" pt_cut_nobtag_high = "60.0" if channel in ["mt", "et"] else "80.0" pt_cut_nobtag_medium = "45.0" if channel in ["mt", "et" ] else "60.0" pt_cut_nobtag_low = "30.0" if channel in ["mt", "et"] else "45.0" pt_cut_btag_high = "45.0" if channel in ["mt", "et"] else "60.0" pt_cut_btag_low = "30.0" if channel in ["mt", "et"] else "45.0" self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag_high"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag"] + "*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut_nobtag_high) self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag_medium"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag"] + "*({pt_var}<={pt_cut_1})*({pt_var}>{pt_cut_2})".format( pt_var=pt_var, pt_cut_1=pt_cut_nobtag_high, pt_cut_2=pt_cut_nobtag_medium) self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag_low"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_nobtag"] + "*({pt_var}<={pt_cut_1})*({pt_var}>{pt_cut_2})".format( pt_var=pt_var, pt_cut_1=pt_cut_nobtag_medium, pt_cut_2=pt_cut_nobtag_low) self.expressions_dict["catHttMSSM13TeV_" + channel + "_btag_high"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_btag"] + "*({pt_var}>{pt_cut})".format( pt_var=pt_var, pt_cut=pt_cut_btag_high) self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_btag_low"] = self.expressions_dict[ "catHttMSSM13TeV_" + channel + "_btag"] + "*({pt_var}<={pt_cut_1})*({pt_var}>{pt_cut_2})".format( pt_var=pt_var, pt_cut_1=pt_cut_btag_high, pt_cut_2=pt_cut_btag_low) # LFV categories self.expressions_dict["catHttMSSM13TeV_em_LFVZeroJet"] = self.combine([ jet0_string, "((((lep1LV.Px() + lep2LV.Px())**2 + (lep1LV.Py() + lep2LV.Py())**2)**0.5)<20)" ]) self.expressions_dict["catHttMSSM13TeV_et_LFVZeroJet"] = self.combine([ jet0_string, "((((lep1LV.Px() + lep2LV.Px())**2 + (lep1LV.Py() + lep2LV.Py())**2)**0.5)<30)" ]) self.expressions_dict["catHttMSSM13TeV_mt_LFVZeroJet"] = self.combine([ jet0_string, "((((lep1LV.Px() + lep2LV.Px())**2 + (lep1LV.Py() + lep2LV.Py())**2)**0.5)<50)" ]) self.expressions_dict[ "catHttMSSM13TeV_em_LFVJet"] = "(njetspt30>=1)*(nbtag == 0)*((((lep1LV.Px() + lep2LV.Px())**2 + (lep1LV.Py() + lep2LV.Py())**2)**0.5)<20)" self.expressions_dict[ "catHttMSSM13TeV_et_LFVJet"] = "(njetspt30>=1)*(nbtag == 0)*((((lep1LV.Px() + lep2LV.Px())**2 + (lep1LV.Py() + lep2LV.Py())**2)**0.5)<30)" self.expressions_dict[ "catHttMSSM13TeV_mt_LFVJet"] = "(njetspt30>=1)*(nbtag == 0)*((((lep1LV.Px() + lep2LV.Px())**2 + (lep1LV.Py() + lep2LV.Py())**2)**0.5)<50)" self.expressions_dict["cat_OneProng"] = "(decayMode_2 == 0)" self.expressions_dict["catOneProng"] = self.expressions_dict[ "cat_OneProng"] for channel in ["mt", "et"]: self.expressions_dict[ "catOneProng_" + channel] = self.expressions_dict["catOneProng"] self.expressions_dict[ "cat_OneProngPiZeros"] = "(decayMode_2 >= 1)*(decayMode_2 <= 2)" self.expressions_dict["catOneProngPiZeros"] = self.expressions_dict[ "cat_OneProngPiZeros"] for channel in ["mt", "et"]: self.expressions_dict[ "catOneProngPiZeros_" + channel] = self.expressions_dict["catOneProngPiZeros"] self.expressions_dict["cat_ThreeProng"] = "(decayMode_2 == 10)" self.expressions_dict["catThreeProng"] = self.expressions_dict[ "cat_ThreeProng"] for channel in ["mt", "et"]: self.expressions_dict[ "catThreeProng_" + channel] = self.expressions_dict["catThreeProng"] self.expressions_dict[ "cat_AllDMs"] = "(decayMode_2 >= 0)*(decayMode_2 <= 10)" self.expressions_dict["catAllDMs"] = self.expressions_dict[ "cat_AllDMs"] for channel in ["mt", "et"]: self.expressions_dict["catAllDMs_" + channel] = self.expressions_dict["catAllDMs"] self.expressions_dict[ "cat_AllDMsNotOneProng"] = "(decayMode_2 >= 1)*(decayMode_2 <= 10)" self.expressions_dict["catAllDMsNotOneProng"] = self.expressions_dict[ "cat_AllDMsNotOneProng"] for channel in ["mt", "et"]: self.expressions_dict[ "catAllDMsNotOneProng_" + channel] = self.expressions_dict["catAllDMsNotOneProng"] #==========================CategoriesDictUpdates========================================================= import Artus.Utility.jsonTools as jsonTools import HiggsAnalysis.KITHiggsToTauTau.plotting.configs.categories as Categories categoriesUpdate = Categories.CategoriesDict().getExpressionsDict() self.expressions_dict.update(categoriesUpdate) replacements = { "0jet": "zerojet", "1jet": "onejet", "2jet": "twojet", } for short_expression, long_expression in self.expressions_dict.items(): if any([ replacement in short_expression for replacement in replacements.keys() ]): new_short_expression = short_expression for replacement in replacements.iteritems(): new_short_expression = new_short_expression.replace( *replacement) self.expressions_dict[new_short_expression] = long_expression