def test_setitem(self): cuts_datacards = Cuts( VVT='(l1_gen_match == 5 && l2_gen_match == 5)', VVJ='!(l1_gen_match == 5 && l2_gen_match == 5)', ) cuts_datacards['VV'] = cuts_datacards['VVT'] | cuts_datacards['VVJ'] cuts_datacards_VV = Cut( '((l1_gen_match == 5 && l2_gen_match == 5)) || (!(l1_gen_match == 5 && l2_gen_match == 5))' ) self.assertEqual(str(cuts_datacards['VV']), str(cuts_datacards_VV))
def test_any(self): cuts_triggers = Cuts( doubletau_lowpt='trg_doubletau_lowpt', doubletau_mediso='trg_doubletau_mediso', doubletau='trg_doubletau', ) any_triggers_test = Cut( '((trg_doubletau_lowpt) || (trg_doubletau) || (trg_doubletau_mediso))' ) self.assertEqual(str(cuts_triggers.any()), str(any_triggers_test))
def test_all(self): cuts_triggers = Cuts( doubletau_lowpt='trg_doubletau_lowpt', doubletau_mediso='trg_doubletau_mediso', doubletau='trg_doubletau', ) all_triggers_test = Cut( '((trg_doubletau) && (trg_doubletau_mediso) && (trg_doubletau_lowpt))' ) self.assertEqual(str(cuts_triggers.all()), str(all_triggers_test))
def fill_cut_flow(self, cutflowname='Cuts', nevts=sys.maxint): self.cut_flow = Counter(cutflowname) ntot = min(self.tree.GetEntries(), nevts) nlast = ntot cut = Cut('start', '1') self.cut_flow.register('Preselection') self.cut_flow.inc('Preselection', ntot) for cutname, newcut in self.cuts.iteritems(): cut = cut & newcut self.tree.Draw('1', str(cut), 'goff', nevts) nsel = self.tree.GetSelectedRows() self.cut_flow.register(cutname) self.cut_flow.inc(cutname, nsel) nlast = nsel
def test_cfg(self): import os basepath = os.path.expandvars( '/data2/gtouquet/MSSM_Samples_310119/{}/tree_fakes.root') treename = 'events' variable = 'mt_tot' bins = (100, 0., 3000.) cut = '' n_ev_dy_incl = 48675378. + 49125561. DYJetsToLL_M50 = Dataset( 'DYJetsToLL_M50', basepath.format('DYJetsToLL_M50'), n_ev_dy_incl, 5765.4, treename = treename ) cfg1_cut = Cut('l1_pt > 30 || l2_pt > 30') cfg1 = Component_cfg( name = '_'.join([DYJetsToLL_M50.name, '1']), variable = variable, dataset = DYJetsToLL_M50, cut = cfg1_cut) cfg2 = Component_cfg( name = '_'.join([DYJetsToLL_M50.name, '2']), variable = variable, dataset = DYJetsToLL_M50) self.assertEqual( str(cfg1['cut']), str(cfg1_cut)) self.assertEqual( cfg2['cut'], Component_cfg.defaults['cut']) return cfg1, cfg2
] cuts_flags = CutFlow([(flag, flag) for flag in flags]) print '\ncut_flow: flags: ' print cuts_flags cuts_vetoes = CutFlow([ ('dileptonveto', '!veto_dilepton'), ('thirdleptonveto', '!veto_thirdlepton'), ('otherleptonveto', '!veto_otherlepton'), ]) print '\ncut_flow: vetoes:' print cuts_vetoes cuts_generic = cuts_flags + cuts_vetoes print '\ncut_flow: generic' print cuts_generic cut_os = Cut('opposite_sign', 'l1_charge != l2_charge') cut_ss = Cut('same_sign', 'l1_charge == l2_charge') cut_dy_ztt = Cut('dy_ztt', 'l2_gen_match == 5') cut_dy_zl = Cut('dy_zl', 'l2_gen_match < 5') cut_dy_zj = Cut('dy_zj', 'l2_gen_match == 6') pprint.pprint(Cut.available_cuts())
# SuperTightHalo = 'Flag_globalSuperTightHalo2016Filter', Noise='Flag_HBHENoiseFilter', NoiseIso='Flag_HBHENoiseIsoFilter', EcalDeadCell='Flag_EcalDeadCellTriggerPrimitiveFilter', BadPFMuon='Flag_BadPFMuonFilter', BadChargedCandidate='Flag_BadChargedCandidateFilter', # eeBadSc = 'Flag_eeBadScFilter', ecalBadCalib='Flag_ecalBadCalibFilter') cuts_vetoes = Cuts( dileptonveto='!veto_dilepton', thirdleptonveto='!veto_extra_elec', otherleptonveto='!veto_extra_muon', ) cut_l1_fakejet = Cut('l1_gen_match==6') cut_l2_fakejet = Cut('l2_gen_match==6') cut_os = Cut('l1_q != l2_q') cut_ss = ~cut_os cut_nobtag = Cut('b1_pt == -99') cut_btag = ~cut_nobtag cut_dy_promptfakeleptons = Cut( 'l1_gen_match==1 || l1_gen_match==2 || l2_gen_match==1 || l2_gen_match==2') cut_mt_tot = Cut('mt_tot < 40') cut_btag_1 = Cut('bjet1_csv > 0')
def test_and_not(self): self.assertEqual(str(Cut('l1_q != l2_q') & ~Cut('l1_q != l2_q')), str(Cut('(l1_q != l2_q) && (!(l1_q != l2_q))')))
muon-tau channel ''' from htt_plot.tools.cut import Cut, Cuts channel = 'mt' # binning from htt_plot.channels_configs.htt_common import bins # variables from htt_plot.channels_configs.htt_common import variables, datacards_variables, var_name_dict # cuts from htt_plot.channels_configs.htt_common import cut_mt_lepton, cut_mt_lepton_loose, cut_mt_lepton_tight, cuts_flags, cuts_vetoes, cut_l1_fakejet, cut_l2_fakejet, cut_os, cut_ss, cut_btag_1, cut_btag_2, cut_btag, cut_nobtag cut_dy_promptfakeleptons = Cut( 'l1_gen_match==1 || l1_gen_match==2 || l2_gen_match==1 || l2_gen_match==2') cuts_l1 = Cuts( l1_pt='l1_pt >= 21', l1_eta='abs(l1_eta) <= 2.1', l1_iso='l1_iso < 0.15', l1_vertex='abs(l1_d0) < 0.045 && abs(l1_dz) < 0.2', ) cuts_l2 = Cuts( l2_pt='l2_pt >= 23', l2_eta='abs(l2_eta) <= 2.3', l2_iso='l2_byVVLooseIsolationMVArun2017v2DBoldDMwLT2017 > 0.5', l2_charge='abs(l2_q) == 1.', l2_vertex='abs(l2_dz) < 0.2', l2_decaymode='l2_decayModeFinding > 0.5',
tau-tau channel ''' from htt_plot.tools.cut import Cut, Cuts channel = 'tt' # binning from htt_plot.channels_configs.htt_common import bins # variables from htt_plot.channels_configs.htt_common import variables, datacards_variables, var_name_dict # cuts from htt_plot.channels_configs.htt_common import cuts_flags, cuts_vetoes, cut_l1_fakejet, cut_l2_fakejet, cut_os, cut_ss, cut_btag_1, cut_btag_2, cut_btag, cut_nobtag cut_dy_promptfakeleptons = Cut( 'l1_gen_match==1 || l1_gen_match==2 || l2_gen_match==1 || l2_gen_match==2') cuts_l1 = Cuts( l1_pt='l1_pt > 40', l1_eta='abs(l1_eta) < 2.1', l1_iso='l1_byVVLooseIsolationMVArun2017v2DBoldDMwLT2017 > 0.5', l1_charge='abs(l1_q) == 1.', l1_vertex='abs(l1_dz) < 0.2', l1_decaymode='l1_decayModeFinding > 0.5', ) cuts_l2 = Cuts( l2_pt='l2_pt > 40', l2_eta='abs(l2_eta) < 2.1', l2_iso='l2_byVVLooseIsolationMVArun2017v2DBoldDMwLT2017 > 0.5', l2_charge='abs(l2_q) == 1.',
def test_str(self): self.assertEqual(str(Cut('weight')), 'weight')
ele-tau channel ''' from htt_plot.tools.cut import Cut, Cuts channel = 'et' # binning from htt_plot.channels_configs.htt_common import bins # variables from htt_plot.channels_configs.htt_common import variables, datacards_variables, var_name_dict # cuts from htt_plot.channels_configs.htt_common import cut_mt_lepton, cut_mt_lepton_loose, cut_mt_lepton_tight, cuts_flags, cuts_vetoes, cut_l1_fakejet, cut_l2_fakejet, cut_os, cut_ss, cut_btag_1, cut_btag_2, cut_btag, cut_nobtag cut_dy_promptfakeleptons = Cut( 'l1_gen_match==1 || l1_gen_match==2 || l2_gen_match==1 || l2_gen_match==2') cuts_l1 = Cuts( l1_pt='l1_pt >= 25', l1_eta='abs(l1_eta) <= 2.1', l1_iso='l1_iso < 0.15', l1_vertex='abs(l1_d0) < 0.045 && abs(l1_dz) < 0.2', ) cuts_l2 = Cuts( l2_pt='l2_pt >= 23', l2_eta='abs(l2_eta) <= 2.3', l2_iso='l2_byVVLooseIsolationMVArun2017v2DBoldDMwLT2017 > 0.5', l2_charge='abs(l2_q) == 1.', l2_vertex='abs(l2_dz) < 0.2', l2_decaymode='l2_decayModeFinding > 0.5',
def test_or(self): self.assertEqual(str(Cut('l1_q != l2_q') | Cut('!(l1_q != l2_q)')), str(Cut('(l1_q != l2_q) || (!(l1_q != l2_q))')))
# SuperTightHalo = 'Flag_globalSuperTightHalo2016Filter', Noise='Flag_HBHENoiseFilter', NoiseIso='Flag_HBHENoiseIsoFilter', EcalDeadCell='Flag_EcalDeadCellTriggerPrimitiveFilter', BadPFMuon='Flag_BadPFMuonFilter', BadChargedCandidate='Flag_BadChargedCandidateFilter', # eeBadSc = 'Flag_eeBadScFilter', ecalBadCalib='Flag_ecalBadCalibFilter') cuts_vetoes = Cuts( dileptonveto='!veto_dilepton', thirdleptonveto='!veto_extra_elec', otherleptonveto='!veto_extra_muon', ) cut_l1_fakejet = Cut('l1_gen_match==6') cut_l2_fakejet = Cut('l2_gen_match==6') cut_os = Cut('l1_q != l2_q') cut_ss = ~cut_os cut_nobtag = Cut('b1_pt == -99') cut_btag = ~cut_nobtag cut_mt_lepton_loose = Cut('l1_mt < 70 && l1_mt > 40') cut_mt_lepton_tight = Cut('l1_mt < 40') cut_mt_lepton = Cut('l1_mt < 70') cut_btag_1 = Cut('bjet1_csv > 0') cut_btag_2 = Cut('bjet2_csv > 0')
def test_not(self): self.assertEqual(str(~Cut('l1_q != l2_q')), str(Cut('!(l1_q != l2_q)')))
def test_imul(self): cut_os_itimes_weight = Cut('l1_q != l2_q') cut_os_itimes_weight *= Cut('weight') self.assertEqual(str(cut_os_itimes_weight), str(Cut('(l1_q != l2_q) * (weight)')))
def test_mul(self): self.assertEqual(str(Cut('l1_q != l2_q') * Cut('weight')), str(Cut('(l1_q != l2_q) * (weight)')))