Пример #1
0
def elmu(sample, rname):
    """
    1e, 1mu. mostly ttbar
    """

    selector = ROOT.EventSelector(rname)

    selector.addOperator(ROOT.HLTFilter(selconf['smuTrigger']))

    selector.setPreskim('muons.size > 0 && electrons.size > 0')

    selector.addOperator(ROOT.MetFilters())

    leptons = ROOT.LeptonSelection()
    leptons.setN(1, 1)
    leptons.setStrictMu(False)
    leptons.setStrictEl(False)
    leptons.setRequireTight(False)
    selector.addOperator(leptons)

    # NOTE: photon selection is not cleaned up against leptons and we want it that way - we are interested also in photons overlapping with electrons
    photonSel = ROOT.PhotonSelection()
    photonSel.setIDTune(selconf['photonIDTune'])
    photonSel.setWP(selconf['photonWP'])
    setupPhotonSelection(photonSel, changes=['-EVeto'])
    photonSel.setMinPt(30.)
    photonSel.setIgnoreDecision(True)
    selector.addOperator(photonSel)

    jets = ROOT.JetCleaning()
    jets.setCleanAgainst(ROOT.cTaus, False)
    selector.addOperator(jets)

    selector.addOperator(ROOT.CopyMet())

    if not sample.data:
        selector.addOperator(
            ROOT.ConstantWeight(sample.crosssection / sample.sumw,
                                'crosssection'))

        su.addPUWeight(sample, selector)
        addPDFVariation(sample, selector)

    return selector
Пример #2
0
def leptonBase(sample, rname, flavor, selcls=None):
    """
    Base for n-lepton + photon selection.
    For MC, we could use PartonSelector, but for interest of clarity and comparing cut flow
    with the other groups, we let events with all flavors pass.
    """

    if selcls is None:
        selector = ROOT.EventSelector(rname)
    else:
        selector = selcls(rname)

    selector.setPreskim(
        'superClusters.rawPt > 165. && TMath::Abs(superClusters.eta) < 1.4442')

    if sample.data:
        selector.addOperator(ROOT.HLTFilter(selconf['sphTrigger']))
    else:
        partons = ROOT.PartonFlavor()
        if flavor == ROOT.lElectron:
            partons.setRequiredPdgId(11)
        elif flavor == ROOT.lMuon:
            partons.setRequiredPdgId(13)

        selector.addOperator(partons)

    operators = [
        'MetFilters',
        'PhotonSelection',
        'LeptonSelection',
        'TauVeto',
        'JetCleaning',
        'BjetVeto',
        'CopyMet',
        'CopySuperClusters',
        'LeptonRecoil',
    ]

    if not sample.data:
        operators.append('MetVariations')

    operators += [
        'PhotonMetDPhi', 'JetMetDPhi', 'Met', 'PhotonPtOverMet', 'PhotonMt'
    ]

    for op in operators:
        selector.addOperator(getattr(ROOT, op)())

    jetDPhi = selector.findOperator('JetMetDPhi')
    jetDPhi.setMetSource(ROOT.kInMet)

    photonSel = selector.findOperator('PhotonSelection')
    photonSel.setIDTune(selconf['photonIDTune'])
    photonSel.setWP(selconf['photonWP'])

    leptonSel = selector.findOperator('LeptonSelection')
    leptonSel.setRequireMedium(False)

    setupPhotonSelection(photonSel)

    selector.findOperator('LeptonRecoil').setFlavor(flavor)

    if not sample.data:
        metVar = selector.findOperator('MetVariations')
        metVar.setPhotonSelection(photonSel)

        realMetVar = ROOT.MetVariations('RealMetVar')
        realMetVar.setMetSource(ROOT.kInMet)
        realMetVar.setPhotonSelection(photonSel)

        selector.findOperator('PhotonMetDPhi').setMetVariations(metVar)

        jetDPhi.setMetVariations(realMetVar)

        selector.addOperator(
            ROOT.ConstantWeight(sample.crosssection / sample.sumw,
                                'crosssection'))

        su.addPUWeight(sample, selector)
        addIDSFWeight(sample, selector)
        addPDFVariation(sample, selector)

        if flavor == ROOT.lElectron:
            addElectronIDSFWeight(sample, selector)
        else:
            addMuonIDSFWeight(sample, selector)

        addElectronVetoSFWeight(sample, selector)
        addMuonVetoSFWeight(sample, selector)

    if not sample.data:
        selector.findOperator('PartonFlavor').setIgnoreDecision(True)

    selector.findOperator('TauVeto').setIgnoreDecision(True)
    selector.findOperator('BjetVeto').setIgnoreDecision(True)
    selector.findOperator('JetCleaning').setCleanAgainst(ROOT.cTaus, False)
    selector.findOperator('PhotonMetDPhi').setIgnoreDecision(True)
    selector.findOperator('JetMetDPhi').setIgnoreDecision(True)
    selector.findOperator('Met').setIgnoreDecision(True)
    selector.findOperator('PhotonPtOverMet').setIgnoreDecision(True)

    return selector