#  do not produce momentum-corrected muons
from TauAnalysis.RecoTools.patLeptonSelection_cff import patMuonSelConfigurator
setattr(patMuonSelConfigurator, "src", "patMuons" )
process.selectPatMuons = patMuonSelConfigurator.configure(process = process)
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

#
#  electron selection
#

# VBTF WP80 electron ID
changeCut(process,"selectedPatElectronsForElecTauId","(abs(superCluster.eta) < 1.479 & pt > 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.004 & abs(deltaPhiSuperClusterTrackAtVtx) < 0.06 & hcalOverEcal < 0.04 & sigmaIetaIeta < 0.01) | (abs(superCluster.eta) > 1.479 & pt > 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.007 & abs(deltaPhiSuperClusterTrackAtVtx) <0.03 & hcalOverEcal < 0.025 & sigmaIetaIeta < 0.03) | (abs(superCluster.eta) < 1.479 & pt < 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.004 & abs(deltaPhiSuperClusterTrackAtVtx) < 0.03 & hcalOverEcal < 0.025 & sigmaIetaIeta < 0.01 & (fbrem > 0.15 | (abs(superCluster.eta) < 1 & eSuperClusterOverP > 0.95) )) | (abs(superCluster.eta) > 1.479 & pt < 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.005 & abs(deltaPhiSuperClusterTrackAtVtx) <0.02 & hcalOverEcal < 0.025 & sigmaIetaIeta < 0.03 & (fbrem > 0.15 | (abs(superCluster.eta) < 1 & eSuperClusterOverP > 0.95) ))")

#  electron eta range
changeCut(process,"selectedPatElectronsForElecTauEta","abs(eta) < 2.1")

#  electron pt
changeCut(process,"selectedPatElectronsForElecTauPt","pt > 18")

#  PF combinded relative isolation
changeCut(process,"selectedPatElectronsForElecTauIso",cms.double(0.08),"sumPtMaxEB")
changeCut(process,"selectedPatElectronsForElecTauIso",cms.double(0.04),"sumPtMaxEE")

changeCut(process,"selectedPatElectronsForElecTauIsoLooseIsolation",cms.double(0.25),"sumPtMax")

#  electron conversion veto
changeCut(process,"selectedPatElectronsForElecTauConversionVeto",cms.int32(0), attribute = "maxMissingInnerHits")
def _changeTauId(process, tau_id, **kwargs):
    for selector in _tauIdChannelMap[kwargs['channel']]:
        changeCut(process, selector, tau_id)
Exemple #3
0
def _changeTauId(process, tau_id, **kwargs):
    for selector in _tauIdChannelMap[kwargs['channel']]:
        changeCut(process, selector, tau_id)
process.selectedPatMuonsPFRelIso.photonIso.ptMin = 1.5
process.selectedPatMuonsPFRelIso.sumPtMax = 1.0
process.selectedPatMuonsPFRelIso.sumPtMethod = "absolute"

process.selectedPatMuonsPFRelIsoLooseIsolation.chargedHadronIso.ptMin = 1.0
process.selectedPatMuonsPFRelIsoLooseIsolation.neutralHadronIso.ptMin = 2000.
process.selectedPatMuonsPFRelIsoLooseIsolation.photonIso.ptMin = 1.5
process.selectedPatMuonsPFRelIsoLooseIsolation.sumPtMax = 8.0
process.selectedPatMuonsPFRelIsoLooseIsolation.sumPtMethod = "absolute"

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# change upper limit on tranverse impact parameter of muon track to 2mm
changeCut(process, "selectedPatMuonsTrkIP", 0.2, attribute = "IpMax")

# change cut on TaNC output in case using new HPS + TaNC combined tau id. algorithm
changeCut(process, "selectedPatTausTaNCdiscr", "tauID('byTaNCmedium') > 0.5")
changeCut(process, "selectedPatTausForMuTauTaNCdiscr", "tauID('byTaNCmedium') > 0.5")

# change lower limit on separation required between muon and tau-jet to dR > 0.5
changeCut(process, "selectedMuTauPairsAntiOverlapVeto", "dR12 > 0.5")
changeCut(process, "selectedMuTauPairsAntiOverlapVetoLooseMuonIsolation", "dR12 > 0.5")

# change upper limit on muon + MET transverse mass to 40 GeV
changeCut(process, "selectedMuTauPairsMt1MET", "mt1MET < 40.")
changeCut(process, "selectedMuTauPairsMt1METlooseMuonIsolation", "mt1MET < 40.")

# disable cut on Pzeta variable
changeCut(process, "selectedMuTauPairsPzetaDiff", "(pZeta - 1.5*pZetaVis) > -1000.")
Exemple #5
0
# --------------------------------------------------------------------------------

# --------------------------------------------------------------------------------
#  do not produce momentum-corrected muons
from TauAnalysis.RecoTools.patLeptonSelection_cff import patMuonSelConfigurator

setattr(patMuonSelConfigurator, "src", "cleanPatMuons")
process.selectPatMuons = patMuonSelConfigurator.configure(process=process)
# --------------------------------------------------------------------------------

# --------------------------------------------------------------------------------
#  make cut changes
from TauAnalysis.Configuration.tools.changeCut import changeCut

# update all tau discriminant to HPS types
changeCut(process, "selectedPatTausLeadTrk", 'tauID("decayModeFinding")')
changeCut(process, "selectedPatTausLeadTrkPt", 'tauID("decayModeFinding")')
changeCut(process, "selectedPatTausTaNCdiscr", 'tauID("byLooseCombinedIsolationDeltaBetaCorr")')

# --------------------------------------------------------------------------------

# before starting to process 1st event, print event content
process.printEventContent = cms.EDAnalyzer("EventContentAnalyzer")
process.filterFirstEvent = cms.EDFilter("EventCountFilter", numEvents=cms.int32(1))
process.n = cms.Path(process.filterFirstEvent + process.printEventContent)

process.o = cms.Path(process.dataQualityFilters)

# Define a generic end path that filters the final events that a pool
# output module can be hooked into if desired.
process.filterFinalEvents = cms.EDFilter("BoolEventFilter", src=cms.InputTag("isRecAHtoElecTau"))
# uncomment to add pfMET
# set Boolean swich to true in order to apply type-1 corrections
addPFMet(process, correct = False)

# uncomment to replace caloMET by pfMET in all di-tau objects
process.load("TauAnalysis.CandidateTools.diTauPairProductionAllKinds_cff")
replaceMETforDiTaus(process, cms.InputTag('patMETs'), cms.InputTag('patPFMETs'))
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# change upper limit on tranverse impact parameter of muon track to 2mm
changeCut(process, "selectedPatMuonsTrkIP", 0.2, attribute = "IpMax")

# switch between TaNC and HPS tau id. discriminators
#changeCut(process, "selectedPatTausLeadTrkPt", "tauID('leadingTrackPtCut') > 0.5")
#changeCut(process, "selectedPatTausForMuTauLeadTrkPt", "tauID('leadingTrackPtCut') > 0.5")
#changeCut(process, "selectedPatTausTaNCdiscr", "tauID('byTaNCloose') > 0.5")
#changeCut(process, "selectedPatTausForMuTauTaNCdiscr", "tauID('byTaNCloose') > 0.5")
changeCut(process, "selectedPatTausLeadTrkPt", "tauID('decayModeFinding') > 0.5")
changeCut(process, "selectedPatTausForMuTauLeadTrkPt", "tauID('decayModeFinding') > 0.5")
changeCut(process, "selectedPatTausTaNCdiscr", "tauID('byLooseCombinedIsolationDeltaBetaCorr') > 0.5")
changeCut(process, "selectedPatTausForMuTauTaNCdiscr", "tauID('byLooseCombinedIsolationDeltaBetaCorr') > 0.5")

# disable calorimeter muon veto for now...
changeCut(process, "selectedPatTausForMuTauCaloMuonVeto", "tauID('againstMuonTight') > -1.")

# change lower limit on separation required between muon and tau-jet to dR > 0.5
Exemple #7
0
process.selectedPatMuonsPFRelIso.photonIso.ptMin = 1.5
process.selectedPatMuonsPFRelIso.sumPtMax = 1.0
process.selectedPatMuonsPFRelIso.sumPtMethod = "absolute"

process.selectedPatMuonsPFRelIsoLooseIsolation.chargedHadronIso.ptMin = 1.0
process.selectedPatMuonsPFRelIsoLooseIsolation.neutralHadronIso.ptMin = 2000.
process.selectedPatMuonsPFRelIsoLooseIsolation.photonIso.ptMin = 1.5
process.selectedPatMuonsPFRelIsoLooseIsolation.sumPtMax = 8.0
process.selectedPatMuonsPFRelIsoLooseIsolation.sumPtMethod = "absolute"

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# change upper limit on tranverse impact parameter of muon track to 2mm
changeCut(process, "selectedPatMuonsTrkIP", 0.2, attribute="IpMax")

# change cut on TaNC output in case using new HPS + TaNC combined tau id. algorithm
changeCut(process, "selectedPatTausTaNCdiscr", "tauID('byTaNCmedium') > 0.5")
changeCut(process, "selectedPatTausForMuTauTaNCdiscr",
          "tauID('byTaNCmedium') > 0.5")

# change lower limit on separation required between muon and tau-jet to dR > 0.5
changeCut(process, "selectedMuTauPairsAntiOverlapVeto", "dR12 > 0.5")
changeCut(process, "selectedMuTauPairsAntiOverlapVetoLooseMuonIsolation",
          "dR12 > 0.5")

# change upper limit on muon + MET transverse mass to 40 GeV
changeCut(process, "selectedMuTauPairsMt1MET", "mt1MET < 40.")
changeCut(process, "selectedMuTauPairsMt1METlooseMuonIsolation",
          "mt1MET < 40.")
cut_values['mt_only_loose_Muon_tightTau'] = copy.deepcopy(cut_values['loose'])
cut_values['mt_only_loose_Muon_tightTau']['mt1MET'] = 50
cut_values['mt_only_loose_Muon_tightTau']['pzeta'] = -1e9
cut_values['mt_only_loose_Muon_tightTau']['zmumu_iso'] = 0.3
cut_values['mt_only_loose_Muon_tightTau']['muon_iso'] = _LOOSE_MUON_ISO
cut_values['mt_only_loose_Muon_tightTau']['tanc'] = \
        "tauID('%s') > 0.5" % _TAUID

cuts = cut_values[_CUTS]

# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# change muon Pt threshold to 15 GeV
changeCut(process, "selectedPatMuonsPt15", "pt > %0.2f" % cuts['muon_pt'])

# change muon eta acceptance
changeCut(process, "selectedPatMuonsEta21", "abs(eta) < %0.2f"
          % cuts['muon_eta'])
#print "WARNING CHANGING MU ETA CUT"
#changeCut(process, "selectedPatMuonsEta21", "eta > -1.5 & eta < -1.4")

# change tau pt threshold
changeCut(process, "selectedPatTausForMuTauPt20", "pt > %0.2f"
          % cuts['tau_pt'])

# change eta acceptance for tau-jets to |eta| < 2.3
changeCut(process, "selectedPatTausForMuTauEta23",
          "abs(eta) < %0.2f" % cuts['tau_eta'])
from TauAnalysis.RecoTools.patLeptonSelection_cff import patMuonSelConfigurator
setattr(patMuonSelConfigurator, "src", "patMuons")
process.selectPatMuons = patMuonSelConfigurator.configure(process=process)
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

#
#  electron selection
#

# VBTF WP80 electron ID
changeCut(
    process, "selectedPatElectronsForElecTauId",
    "(abs(superCluster.eta) < 1.479 & pt > 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.004 & abs(deltaPhiSuperClusterTrackAtVtx) < 0.06 & hcalOverEcal < 0.04 & sigmaIetaIeta < 0.01) | (abs(superCluster.eta) > 1.479 & pt > 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.007 & abs(deltaPhiSuperClusterTrackAtVtx) <0.03 & hcalOverEcal < 0.025 & sigmaIetaIeta < 0.03) | (abs(superCluster.eta) < 1.479 & pt < 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.004 & abs(deltaPhiSuperClusterTrackAtVtx) < 0.03 & hcalOverEcal < 0.025 & sigmaIetaIeta < 0.01 & (fbrem > 0.15 | (abs(superCluster.eta) < 1 & eSuperClusterOverP > 0.95) )) | (abs(superCluster.eta) > 1.479 & pt < 20 & abs(deltaEtaSuperClusterTrackAtVtx) < 0.005 & abs(deltaPhiSuperClusterTrackAtVtx) <0.02 & hcalOverEcal < 0.025 & sigmaIetaIeta < 0.03 & (fbrem > 0.15 | (abs(superCluster.eta) < 1 & eSuperClusterOverP > 0.95) ))"
)

#  electron eta range
changeCut(process, "selectedPatElectronsForElecTauEta", "abs(eta) < 2.1")

#  electron pt
changeCut(process, "selectedPatElectronsForElecTauPt", "pt > 18")

#  PF combinded relative isolation
changeCut(process, "selectedPatElectronsForElecTauIso", cms.double(0.08),
          "sumPtMaxEB")
changeCut(process, "selectedPatElectronsForElecTauIso", cms.double(0.04),
          "sumPtMaxEE")

changeCut(process, "selectedPatElectronsForElecTauIsoLooseIsolation",
Exemple #10
0
# uncomment to add pfMET
# set Boolean swich to true in order to apply type-1 corrections
addPFMet(process, correct = False)

# uncomment to replace caloMET by pfMET in all di-tau objects
process.load("TauAnalysis.CandidateTools.diTauPairProductionAllKinds_cff")
replaceMETforDiTaus(process, cms.InputTag('patMETs'), cms.InputTag('patPFMETs'))
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# disable cuts on tau id. discriminators for Track && ECAL isolation (for both taus)
changeCut(process, "selectedPatTausForDiTau1stTrkIso", "tauID('trackIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndTrkIso", "tauID('trackIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndTrkIsoLoose", "tauID('trackIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau1stEcalIso", "tauID('ecalIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndEcalIso", "tauID('ecalIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndEcalIsoLoose", "tauID('ecalIsolation') > -1.")

# change cut on TaNC output in case using new HPS + TaNC combined tau id. algorithm
# CV: discriminators by Track/ECAL isolation do not exist for the combined tau id. algorithm
#     and need to be replaced by dummy cuts, in order to avoid run-time exceptions
changeCut(process, "selectedPatTausTrkIso", "tauID('byTaNCtight') > -1.")
changeCut(process, "selectedPatTausForDiTau1stTrkIso", "tauID('byTaNCtight') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndTrkIso", "tauID('byTaNCtight') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndTrkIsoLoose", "tauID('byTaNCtight') > -1.")
changeCut(process, "selectedPatTausEcalIso", "tauID('byTaNCtight') > -1.")
changeCut(process, "selectedPatTausForDiTau1stEcalIso", "tauID('byTaNCtight') > -1.")
Exemple #11
0
#   trigger switches for the different sets of samples
#--------------------------------------------------------------------------------
process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cfi")
process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerEventProducer_cfi")
## #for running on the Winter10 samples
process.patTriggerEvent.processName = cms.string('REDIGI39X')
process.patTrigger.processName = cms.string('REDIGI39X')
## #for running on data
#process.patTriggerEvent.processName = cms.string( 'HLT' )
#process.patTrigger.processName = cms.string( 'HLT' )
#--------------------------------------------------------------------------------
# import utility function for changing cut values
#--------------------------------------------------------------------------------
from TauAnalysis.Configuration.tools.changeCut import changeCut
#tau selection
changeCut(process, "selectedPatTausForWTauNuEta21", "abs(eta) < 2.3")
changeCut(process, "selectedPatTausForWTauNuPt20", "pt() > 30")
changeCut(process, "selectedPatTausForWTauNuLeadTrk",
          "pt() > 30")  #tauID('decayModeFinding') > 0.5")
changeCut(
    process, "selectedPatTausForWTauNuLeadTrkPt", "pt() > 30"
)  #leadPFChargedHadrCand().isNonnull() & leadPFChargedHadrCand().pt() > 20.")

changeCut(process, "selectedPatTausForWTauNuElectronVeto",
          "tauID('againstElectronTight') > 0.5")
changeCut(process, "selectedPatTausForWTauNuMuonVeto",
          "tauID('againstMuonTight') > 0.5")
changeCut(process, "selectedPatTausForWTauNuEmFraction", "emFraction < 0.90")
changeCut(process, "selectedPatTausForWTauNuIso", "tauID('byHPSmedium') < 0.5")

#electron selection
Exemple #12
0
# uncomment to add pfMET, set Boolean swich to true in order to apply type-1 corrections
addPFMet(process, correct = False)
# replace caloMET by pfMET in all tau-Nu objects
process.load("TauAnalysis.CandidateTools.tauNuPairProduction_cff")
replaceMETforTauNu(process, cms.InputTag('patMETs'),cms.InputTag('patPFMETs'))
#--------------------------------------------------------------------------------
#process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff")
#process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence)
#process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons)

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut
#tau selection
changeCut(process,"selectedPatTausForWTauNuEta21","abs(eta) < 2.3")
changeCut(process,"selectedPatTausForWTauNuPt20","pt() > 30")
changeCut(process,"selectedPatTausForWTauNuLeadTrk","tauID('decayModeFinding') > 0.5")

changeCut(process,"selectedPatTausForWTauNuLeadTrkPt","leadPFChargedHadrCand().isNonnull() & leadPFChargedHadrCand().pt() > 15.")
changeCut(process,"selectedPatTausForWTauNuElectronVeto","tauID('againstElectronTight') > 0.5")
changeCut(process,"selectedPatTausForWTauNuMuonVeto","tauID('againstMuonTight') > 0.5")
changeCut(process,"selectedPatTausForWTauNuEmFraction","emFraction < 0.9")
changeCut(process,"selectedPatTausForWTauNuIso","tauID('byMediumIsolation') > 0.5")

#electron selection
changeCut(process,"selectedPatElectronsTightId","electronID('eidLoose') > 0.5")
changeCut(process,"selectedPatElectronsEta21","abs(eta) < 2.4")
changeCut(process,"selectedPatElectronsPt15","pt > 15")

#muon selection
# uncomment to add pfMET
# set Boolean swich to true in order to apply type-1 corrections
addPFMet(process, correct=False)

# uncomment to replace caloMET by pfMET in all di-tau objects
process.load("TauAnalysis.CandidateTools.diTauPairProductionAllKinds_cff")
replaceMETforDiTaus(process, cms.InputTag('patMETs'),
                    cms.InputTag('patPFMETs'))
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# disable cuts on tau id. discriminators for Track && ECAL isolation (for both taus)
changeCut(process, "selectedPatTausForDiTau1stTrkIso",
          "tauID('trackIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndTrkIso",
          "tauID('trackIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndTrkIsoLoose",
          "tauID('trackIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau1stEcalIso",
          "tauID('ecalIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndEcalIso",
          "tauID('ecalIsolation') > -1.")
changeCut(process, "selectedPatTausForDiTau2ndEcalIsoLoose",
          "tauID('ecalIsolation') > -1.")

# change cut on TaNC output in case using new HPS + TaNC combined tau id. algorithm
# CV: discriminators by Track/ECAL isolation do not exist for the combined tau id. algorithm
#     and need to be replaced by dummy cuts, in order to avoid run-time exceptions
changeCut(process, "selectedPatTausTrkIso", "tauID('byTaNCtight') > -1.")
Exemple #14
0
cut_values['mt_only_loose_Muon_tightTau'] = copy.deepcopy(cut_values['loose'])
cut_values['mt_only_loose_Muon_tightTau']['mt1MET'] = 50
cut_values['mt_only_loose_Muon_tightTau']['pzeta'] = -1e9
cut_values['mt_only_loose_Muon_tightTau']['zmumu_iso'] = 0.3
cut_values['mt_only_loose_Muon_tightTau']['muon_iso'] = _LOOSE_MUON_ISO
cut_values['mt_only_loose_Muon_tightTau']['tanc'] = \
        "tauID('%s') > 0.5" % _TAUID

cuts = cut_values[_CUTS]

# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# change muon Pt threshold to 15 GeV
changeCut(process, "selectedPatMuonsPt15", "pt > %0.2f" % cuts['muon_pt'])

# change muon eta acceptance
changeCut(process, "selectedPatMuonsEta21",
          "abs(eta) < %0.2f" % cuts['muon_eta'])
#print "WARNING CHANGING MU ETA CUT"
#changeCut(process, "selectedPatMuonsEta21", "eta > -1.5 & eta < -1.4")

# change tau pt threshold
changeCut(process, "selectedPatTausForMuTauPt20",
          "pt > %0.2f" % cuts['tau_pt'])

# change eta acceptance for tau-jets to |eta| < 2.3
changeCut(process, "selectedPatTausForMuTauEta23",
          "abs(eta) < %0.2f" % cuts['tau_eta'])
# switch to pfMET in all analysis sequences 
if hasattr(process, "patPFMETs"):
    process.muTauPairsBgEstQCDenriched.srcMET = cms.InputTag('patPFMETs')
    process.muTauPairsBgEstWplusJetsEnriched.srcMET = cms.InputTag('patPFMETs')
    #process.muTauPairsBgEstWplusJetsEnrichedFRweighted.srcMET = cms.InputTag('patPFMETs')
    process.muTauPairsBgEstTTplusJetsEnriched.srcMET = cms.InputTag('patPFMETs')
    process.muTauPairsBgEstZmumuJetMisIdEnriched.srcMET = cms.InputTag('patPFMETs')
    process.muTauPairsBgEstZmumuMuonMisIdEnriched.srcMET = cms.InputTag('patPFMETs')
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# change upper limit on tranverse impact parameter of muon track to 2mm
changeCut(process, "selectedPatMuonsTrkIP", 0.2, attribute = "IpMax")

# switch between TaNC and HPS tau id. discriminators
changeCut(process, "selectedPatTausLeadTrk", "tauID('leadingTrackPtCut') > 0.5")
changeCut(process, "selectedPatTausLeadTrkPt", "tauID('decayModeFinding') > 0.5")
changeCut(process, "selectedPatTausForMuTauLeadTrk", "tauID('leadingTrackPtCut') > 0.5")
changeCut(process, "selectedPatTausForMuTauLeadTrkPt", "tauID('decayModeFinding') > 0.5")
#changeCut(process, "selectedPatTausTaNCdiscr", "tauID('byTaNCloose') > 0.5")
#changeCut(process, "selectedPatTausForMuTauTaNCdiscr", "tauID('byTaNCloose') > 0.5")
#changeCut(process, "tausBgEstQCDenrichedTaNCdiscr", "tauID('byTaNCvloose') > 0.5 & tauID('byTaNCmedium') < 0.5")
#changeCut(process, "tausBgEstWplusJetsEnrichedTaNCdiscr", "tauID('byTaNCvloose') > 0.5 & tauID('byTaNCmedium') < 0.5")
#changeCut(process, "tausBgEstWplusJetsEnrichedFRweightedTaNCdiscrNotApplied", "tauID('byTaNCvloose') > -1000. & tauID('byTaNCmedium') < +1000.")
#changeCut(process, "tausBgEstZmumuJetMisIdEnrichedTaNCdiscr", "tauID('byTaNCvloose') > 0.5 & tauID('byTaNCmedium') < 0.5")
changeCut(process, "selectedPatTausTaNCdiscr", "tauID('byLooseCombinedIsolationDeltaBetaCorr') > 0.5")                  
changeCut(process, "selectedPatTausForMuTauTaNCdiscr", "tauID('byLooseCombinedIsolationDeltaBetaCorr') > 0.5")                         ##  <<<<--------------- TAU ID
changeCut(process, "tausBgEstQCDenrichedTaNCdiscr", "tauID('byVLooseIsolationDeltaBetaCorr') > 0.5 & tauID('byMediumIsolationDeltaBetaCorr') < 0.5")
process.load("TauAnalysis.CandidateTools.diTauPairProductionAllKinds_cff")
metTools.replaceMETforDiTaus(process, cms.InputTag('patMETs'), cms.InputTag('patPFMETs'))
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
#  do not produce momentum-corrected muons
from TauAnalysis.RecoTools.patLeptonSelection_cff import patMuonSelConfigurator
setattr(patMuonSelConfigurator, "src", "cleanPatMuons" )
process.selectPatMuons = patMuonSelConfigurator.configure(process = process)
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
#  make cut changes
from TauAnalysis.Configuration.tools.changeCut import changeCut
# update all tau discriminant to HPS types
changeCut(process,"selectedPatTausLeadTrk",'tauID("decayModeFinding")')
changeCut(process,"selectedPatTausLeadTrkPt",'tauID("decayModeFinding")')
changeCut(process,"selectedPatTausTaNCdiscr",'tauID("byLooseCombinedIsolationDeltaBetaCorr")')

#--------------------------------------------------------------------------------

# before starting to process 1st event, print event content
process.printEventContent = cms.EDAnalyzer("EventContentAnalyzer")
process.filterFirstEvent = cms.EDFilter("EventCountFilter",
	numEvents = cms.int32(1)
)
process.n = cms.Path(process.filterFirstEvent + process.printEventContent)

process.o = cms.Path(process.dataQualityFilters)

# Define a generic end path that filters the final events that a pool
    process.muTauPairsBgEstWplusJetsEnriched.srcMET = cms.InputTag('patPFMETs')
    #process.muTauPairsBgEstWplusJetsEnrichedFRweighted.srcMET = cms.InputTag('patPFMETs')
    process.muTauPairsBgEstTTplusJetsEnriched.srcMET = cms.InputTag(
        'patPFMETs')
    process.muTauPairsBgEstZmumuJetMisIdEnriched.srcMET = cms.InputTag(
        'patPFMETs')
    process.muTauPairsBgEstZmumuMuonMisIdEnriched.srcMET = cms.InputTag(
        'patPFMETs')
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# import utility function for changing cut values
from TauAnalysis.Configuration.tools.changeCut import changeCut

# change upper limit on tranverse impact parameter of muon track to 2mm
changeCut(process, "selectedPatMuonsTrkIP", 0.2, attribute="IpMax")

# switch between TaNC and HPS tau id. discriminators
changeCut(process, "selectedPatTausLeadTrk",
          "tauID('leadingTrackPtCut') > 0.5")
changeCut(process, "selectedPatTausLeadTrkPt",
          "tauID('decayModeFinding') > 0.5")
changeCut(process, "selectedPatTausForMuTauLeadTrk",
          "tauID('leadingTrackPtCut') > 0.5")
changeCut(process, "selectedPatTausForMuTauLeadTrkPt",
          "tauID('decayModeFinding') > 0.5")
#changeCut(process, "selectedPatTausTaNCdiscr", "tauID('byTaNCloose') > 0.5")
#changeCut(process, "selectedPatTausForMuTauTaNCdiscr", "tauID('byTaNCloose') > 0.5")
#changeCut(process, "tausBgEstQCDenrichedTaNCdiscr", "tauID('byTaNCvloose') > 0.5 & tauID('byTaNCmedium') < 0.5")
#changeCut(process, "tausBgEstWplusJetsEnrichedTaNCdiscr", "tauID('byTaNCvloose') > 0.5 & tauID('byTaNCmedium') < 0.5")
#changeCut(process, "tausBgEstWplusJetsEnrichedFRweightedTaNCdiscrNotApplied", "tauID('byTaNCvloose') > -1000. & tauID('byTaNCmedium') < +1000.")
Exemple #18
0
def enableFakeRatesImpl(process,
                        method=None,
                        preselPatTauSource=None,
                        tauIds=None,
                        patTupleProdSequenceName=None,
                        analyzers=None,
                        histManagers=[],
                        tauCuts=None,
                        diTauCuts=[],
                        selTauByDiTauModuleType=None,
                        frSet='ewkTauIdHPSloose',
                        recoTauProducerName='hpsPFTauProducer',
                        recoTauPreselFlag='ewkTauId',
                        patTauProducerName='patTaus',
                        prePatProdSequenceName="producePrePat"):

    # check validity of method parameter
    if method is None:
        raise ValueError("Undefined method Parameter !!")
    else:
        if method != "simple" and method != "CDF":
            raise ValueError("Invalid method Parameter !!")

    # compute fake-rates weights and add computed values to pat::Taus
    configureFakeRateProductionPAT(process, recoTauProducerName,
                                   recoTauPreselFlag, patTauProducerName,
                                   frSet, method, prePatProdSequenceName)

    # disable cuts on tau id. discriminators
    #
    # NOTE: tau lead. track finding and lead. track Pt discriminators
    #       must **not** be disabled, as these discriminators are already applied at the skimming stage !!
    #       Instead, need to apply TauAnalysis specific efficiency/fake-rate values,
    #       which represent the probability for a tau-jet candidate
    #       passing the lead. track finding and lead. track Pt discriminators
    #       to pass the track && ECAL isolation, 1||3 tracks in signal cone and charge = +/- 1 requirements as well
    #
    for source, new_cut in tauIds.items():
        print "FR method: Disabling tauID cut: %s --> %s for fake rate method" % (
            source, new_cut)
        changeCut(process, source, new_cut)

    # get list of fake-rates types to be processed
    frConfigParameters = getFakeRateConfigParameters(process)

    # Fill histograms only for events passing all event selection criteria
    for genAnalyzerName in analyzers:
        if not hasattr(process, genAnalyzerName):
            print "FR method: Can't add fake rate to analysis sequence %s" % genAnalyzerName, \
                  " it does not exist in the process !!"
            continue
        genAnalyzerModule = getattr(process, genAnalyzerName)
        print "FR method: Removing extra plots for analyzer: %s" % genAnalyzerName
        pruneAnalysisSequence(genAnalyzerModule)
        print "FR method: Disabling event dumps"
        if len(genAnalyzerModule.eventDumps):
            disabledEventDump = copy.deepcopy(genAnalyzerModule.eventDumps[0])
            disabledEventDump.output = cms.string("std::cout")
            disabledEventDump.triggerConditions = cms.vstring()
            genAnalyzerModule.eventDumps[0] = disabledEventDump

        bgEstFakeRateAnalysisSequence = cms.Sequence()

        # for each type of fake-rate weights given as function argument,
        # duplicate analysis sequence with:
        #
        #  1.) tau id. discriminators not applied
        #  2.) events weighted by fake-rate instead
        #
        # NOTE: special care is needed to avoid double-counting in case there is
        #       more than one (loosely selected) tau-jet candidate in the event when
        #       filling histograms that are sensitive to the tau-jet multiplicity
        #
        for frType, frConfig in frConfigParameters.items():
            print "FR method: Building frType:", frType
            # check if factorization is enabled; if so, apply fake-rate event
            # weights to analysis paths without/with muon isolation, else apply
            # fake-rate event weights to "standard" analysis path
            addFakeRateGenAnalyzerModule(process, genAnalyzerModule,
                                         histManagers, tauCuts, diTauCuts,
                                         selTauByDiTauModuleType, frType,
                                         frConfig,
                                         bgEstFakeRateAnalysisSequence)

        # for the purpose of making control plots for the data sample
        # selected in case no tau id. criteria are applied,
        # add analysis sequence with:
        #
        #  1.) tau id. discriminators not applied
        #  2.) events **not** weighted by fake-rate instead
        #
        print "FR method: Adding unweighted sequence"
        addGenAnalyzerModule(process, genAnalyzerModule, "frUnweighted",
                             bgEstFakeRateAnalysisSequence)

        # in case method is "simple",
        # add analysis sequence with:
        #
        #  1.) with tau id. discriminators not applied
        #  2.) events weighted by tau id. efficiency
        #
        # for the purpose of checking the tau id. efficiency values
        # which are used by the "CDF" method.
        if method == "simple":
            process.bgEstFakeRateJetWeights.frTypes.tauIdEfficiency = cms.PSet(
                tauJetDiscriminators=cms.VPSet(
                    cms.PSet(tauJetIdEffSource=cms.InputTag(
                        frProdConfig['ZTTsim']),
                             qcdJetFakeRateSource=cms.InputTag(
                                 frProdConfig['ZTTsim']),
                             tauJetDiscrSource=cms.InputTag("ewkTauId"))))
            frConfig[frType] = {}
            frConfig[frType]['srcJetWeight'] = cms.InputTag(
                "bgEstFakeRateJetWeights", "tauIdEfficiency")
            frConfig[frType]['patLabel'] = "".join(
                ["bgEstFakeRateJetWeight", "_", "tauIdEfficiency"])
            print "FR method: Using simple weights, adding ZTT eff"
            addFakeRateGenAnalyzerModule(process, genAnalyzerModule,
                                         histManagers, tauCuts, diTauCuts,
                                         selTauByDiTauModuleType,
                                         "tauIdEfficiency", frConfig,
                                         bgEstFakeRateAnalysisSequence)

        bgEstFakeRateAnalysisSequenceName = "bgEstFakeRateAnalysisSequenceX%s" % genAnalyzerName
        setattr(process, bgEstFakeRateAnalysisSequenceName,
                bgEstFakeRateAnalysisSequence)
        print "FR method: Replacing %s by the new sequence %s" % (
            genAnalyzerName, bgEstFakeRateAnalysisSequenceName)
        process.p.replace(genAnalyzerModule, bgEstFakeRateAnalysisSequence)

    # enable checking of fake-rates and tau id. efficiencies
    # with event weights in tau-jet histogram manager
    print "FR method: Enabling weight consistency check"
    setattr(process.tauHistManager, "checkWeightConsistency", cms.bool(True))