コード例 #1
0
    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)
コード例 #2
0
    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()
コード例 #3
0
    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",
        ]
コード例 #4
0
	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()
コード例 #5
0
	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()
コード例 #6
0
    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",
        ]
コード例 #7
0
    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
コード例 #8
0
    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()
コード例 #9
0
    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()
コード例 #10
0
    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