# # Create cutter to provide cut flow # from HNL.EventSelection.cutter import Cutter cutter = Cutter(chain=chain) #Loop over events for entry in eventRange: #print progress and load in entry progress(entry - eventRange[0], len(eventRange)) chain.GetEntry(entry) if not es.passedFilter(cutter, sample.output): continue slm.saveNewOrder() category = ec.returnCategory() if not filterSuperCategory('SingleTau', category): continue # print category, entry # if chain._gen_nL < 3: continue # lep = [(chain._gen_lPt[i], i) for i in xrange(chain._gen_nL)] # pts = sorted(lep, reverse=True, key = getSortKey) # taus = [pts[i] for i in xrange(3) if chain._gen_lFlavor[pts[i][1]] == 2] pt_hist[0].Fill(chain.l_pt[0]) pt_hist[1].Fill(chain.l_pt[1]) pt_hist[2].Fill(chain.l_pt[2]) # print chain.l_flavor # if args.plotSoftTau and 'tau' in sample.name:
for entry in event_range: chain.GetEntry(entry) progress(entry - event_range[0], len(event_range)) if not select3Leptons(chain, chain): continue if args.useRef and not chain._passTrigger_ref: continue weightfactor = 1. if not sample.is_data: weightfactor *= chain._weight if args.separateTriggers is None: analysis_str = 'HNL_old' if args.oldTriggers else 'HNL' passed = passTriggers(chain, analysis_str) true_cat = ec.returnCategory() for c in categories: for v in {k for k in var.keys()}: for t in category_map[c]: # if not true_cat == c: continue if t != 'integral': lowpt, highpt = t.split('to') if chain.l1_pt < float(lowpt) or chain.l1_pt > float(highpt): continue if args.separateTriggers is None: eff[(c, v, t)].fill(chain, weightfactor, passed) else: if args.separateTriggers == 'full':
applyCustomTriggers(listOfTriggersAN2017014(chain)), 'pass_triggers'): continue #Event selection if not es.passedFilter(chain, chain, cutter): continue nprompt = 0 for index in [chain.l1, chain.l2, chain.l3]: if chain._lIsPrompt[index]: nprompt += 1 prompt_str = 'prompt' if nprompt == nl else 'nonprompt' # print nprompt, prompt_str, chain.M3l, chain.minMossf chain.search_region = srm[args.region].getSearchRegion(chain) list_of_numbers[ec.returnCategory()][prompt_str].fill( chain, lw.getLumiWeight()) list_of_numbers[ec.returnCategory()]['total'].fill( chain, lw.getLumiWeight()) for prompt_str in ['prompt', 'nonprompt', 'total']: for i, c_h in enumerate(list_of_numbers.keys()): output_name = getOutputName(prompt_str) if i == 0: list_of_numbers[c_h][prompt_str].write(output_name) else: list_of_numbers[c_h][prompt_str].write(output_name, append=True) cutter.saveCutFlow(getOutputName('total'))
event = Event(chain, chain, is_reco_level=True, selection=args.selection, strategy=args.strategy, region=region_to_select) else: event = Event(chain, chain, is_reco_level=True, selection=args.selection, strategy=args.strategy, region=args.region) for entry in event_range: chain.GetEntry(entry) progress(entry - event_range[0], len(event_range)) if not selectGenLeptonsGeneral(chain, chain, 3): continue if args.genLevel: slm = SignalLeptonMatcher(chain) slm.saveNewOrder() true_cat = ec.returnCategory() passed_baseline_cut = True if args.baselineCut == 'FObase': tmp = [l for l in xrange(chain._nL) if isGoodLepton(chain, l, 'FO')] if len(tmp) < 3: passed_baseline_cut = False elif args.baselineCut == 'threeLeptonGenFilter' or args.baselineCut == 'threeLeptonGenFilterInverted': tmp = [l for l in xrange(chain._gen_nL) if chain._gen_lFlavor[l] in (0, 1) and chain._gen_lPt[l] > 5] if len(tmp) < 3: passed_baseline_cut = False elif args.baselineCut == 'threeLeptonGenFilter7GeV' or args.baselineCut == 'threeLeptonGenFilter7GeVInverted': tmp = [l for l in xrange(chain._gen_nL) if chain._gen_lFlavor[l] in (0, 1) and chain._gen_lPt[l] > 7] if len(tmp) < 3: passed_baseline_cut = False elif args.baselineCut == 'hadronicTauGenFilter' or args.baselineCut == 'hadronicTauGenFilterInverted': tmp = [l for l in xrange(chain._gen_nL) if chain._gen_lFlavor[l] == 2 and chain._gen_lVisPt[l] > 18] if len(tmp) < 1: passed_baseline_cut = False elif args.baselineCut == 'tauPlusLightGenFilter' or args.baselineCut == 'tauPlusLightGenFilterInverted':
else: chain.weight = chain.lumiweight cutter.cut(True, 'total') #Triggers if args.oldAnalysisCuts: if not cutter.cut(applyCustomTriggers(listOfTriggersAN2017014(chain)), 'pass_triggers'): continue #Selecting 3 leptons if not args.oldAnalysisCuts: if not cutter.cut(select3Leptons(chain, chain, light_algo = 'leptonMVAtZq', cutter=cutter), '3_tight_leptons'): continue else: if not cutter.cut(select3Leptons(chain, chain, no_tau=True, light_algo = 'cutbased', cutter=cutter), '3_tight_leptons'): continue # chain.category will be needed in passBaseCutsAN2017014 chain.category = ec.returnCategory() #Check if baseline selection passed, needs to be done after category assignment due to pt cuts dependency on it if not args.oldAnalysisCuts: if not passBaseCuts(chain, chain, cutter): continue else: if not passBaseCutsAN2017014(chain, chain, cutter): continue calculateKinematicVariables(chain, chain) if args.massRegion is not None: if args.massRegion == 'high' and not highMassCuts(chain, chain, cutter): continue if args.massRegion == 'low' and not lowMassCuts(chain, chain, cutter): continue chain.search_region = srm.getSearchRegion(chain)