Exemplo n.º 1
0
#
# 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:
Exemplo n.º 2
0
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':
Exemplo n.º 3
0
                    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'))
Exemplo n.º 4
0
        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':
Exemplo n.º 5
0
        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)