Пример #1
0
def lep_config(process, reportEveryNum=100, maxEvents=-1) :
    common_config(process, reportEveryNum, maxEvents)
    el_config(process)
    mu_config(process)
    met_config(process)
    
    # redefine selectedPatMuons (isGlobalMuon not included in std definition)
    process.selectedPatMuons.cut = "pt > 10. & abs(eta) < 2.4 & isGlobalMuon"
    
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
        src=cms.InputTag('offlinePrimaryVertices')
        )
    
    ## let it run
    process.p = cms.Path(
        process.patMuons *
        process.selectedPatMuons *
        process.patElectrons *
        process.selectedPatElectrons *
        process.goodOfflinePrimaryVertices*
        process.patTrigger *
        process.patTriggerEvent *
        process.patMETsPF
        )
    #Keep NVtxs
    process.out.outputCommands.append('keep *_offlinePrimaryVertices_*_*')
    
    process.patJetCorrFactors.rho = cms.InputTag("kt6PFJetsPFlow", "rho")
    process.out.outputCommands.append('keep *_kt6PFJetsPFlow_*_PAT')
Пример #2
0
def CMGWPswitchToPFJets(process) :

    addJetCollection(process,cms.InputTag('newAK7PF'),'AK7','PF',
                     doJTA        = True,
                     doBTagging   = True,
                     jetCorrLabel = ('AK7PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])),
                     doType1MET   = True,
                     genJetCollection=cms.InputTag("ak7GenJets"),
                     doJetID      = False
                     )
    


    addJetCollection(process,cms.InputTag('ak5PFJets'),'AK5','PF',
                                          doJTA        = True,
                                          doBTagging   = True,
                                          jetCorrLabel = ('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])),
                                          doType1MET   = True,
                                          genJetCollection=cms.InputTag("ak5GenJets"),
                                          doJetID      = False
                                          )

    

    process.selectedPatPFParticles.cut = ""


    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
        src=cms.InputTag('offlinePrimaryVertices')
        )
Пример #3
0
def lep_config(process, reportEveryNum=100, maxEvents=-1):
    common_config(process, reportEveryNum, maxEvents)
    el_config(process)
    mu_config(process)
    met_config(process)

    # redefine selectedPatMuons (isGlobalMuon not included in std definition)
    process.selectedPatMuons.cut = "pt > 10. & abs(eta) < 2.4 & isGlobalMuon"

    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(minNdof=cms.double(4.0),
                                      maxZ=cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices'))

    ## let it run
    process.p = cms.Path(
        process.patMuons * process.selectedPatMuons * process.patElectrons *
        process.selectedPatElectrons * process.goodOfflinePrimaryVertices *
        process.patTrigger * process.patTriggerEvent * process.patMETsPF)
    #Keep NVtxs
    process.out.outputCommands.append('keep *_offlinePrimaryVertices_*_*')

    process.patJetCorrFactors.rho = cms.InputTag("kt6PFJetsPFlow", "rho")
    process.out.outputCommands.append('keep *_kt6PFJetsPFlow_*_PAT')
Пример #4
0
def CMGWPswitchToPFJets(process):

    addJetCollection(
        process,
        cms.InputTag('newAK7PF'),
        'AK7',
        'PF',
        doJTA=True,
        doBTagging=True,
        jetCorrLabel=('AK7PFchs',
                      cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])),
        doType1MET=True,
        genJetCollection=cms.InputTag("ak7GenJets"),
        doJetID=False)

    addJetCollection(
        process,
        cms.InputTag('ak5PFJets'),
        'AK5',
        'PF',
        doJTA=True,
        doBTagging=True,
        jetCorrLabel=('AK5PF',
                      cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])),
        doType1MET=True,
        genJetCollection=cms.InputTag("ak5GenJets"),
        doJetID=False)

    process.selectedPatPFParticles.cut = ""

    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(minNdof=cms.double(4.0),
                                      maxZ=cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices'))
Пример #5
0
## in data few events don't have a valid pf collection. They get veto by the following lines
if data:
	process.pfFilter = cms.EDFilter('CandViewCountFilter',
					src = cms.InputTag(input_PFCandidates),
					minNumber = cms.uint32(1),
					filter = cms.bool(False) ## Add Filter option
					)
	process.path *= (process.pfFilter)



#  PFCandidates  ###################################################
	## Good offline PV selection:
from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter',
						  filterParams = pvSelector.clone(maxZ = 24.0),  # ndof >= 4, rho <= 2
						  )

	## ------------------------------------------------------------------------
	## TopProjections from CommonTools/ParticleFlow:
process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff")
process.load("CommonTools.ParticleFlow.pfParticleSelection_cff")


## pf candidate configuration for everything but CHS jets
# Modifications for new particleFlow Pointers
## pf candidate configuration for CHS jets
process.pfPileUp.PFCandidates = cms.InputTag(input_PFCandidatePtrs)
process.pfPileUp.Vertices  = cms.InputTag(input_PrimaryVertices)
process.pfPileUp.checkClosestZVertex	= False
process.pfNoPileUp.bottomCollection = cms.InputTag(input_PFCandidatePtrs)
process.kt6PFJets.doRhoFastjet = True
##-------------------- Turn-on the FastJet jet area calculation for your favorite algorithm -----------------------
process.ak5PFJets.doAreaFastjet = True

process.primaryVertexFilter = cms.EDFilter(
    "GoodVertexFilter",
    vertexCollection=cms.InputTag('offlinePrimaryVertices'),
    minimumNDOF=cms.uint32(4),
    maxAbsZ=cms.double(24),
    maxd0=cms.double(2))

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

process.goodOfflinePrimaryVertices = cms.EDFilter(
    "PrimaryVertexObjectFilter",
    filterParams=pvSelector.clone(maxZ=cms.double(24.0)),
    src=cms.InputTag('offlinePrimaryVertices'))

###############################
########## Gen Setup ##########
###############################

#process.load("RecoJets.Configuration.GenJetParticles_cff")

process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff")

###############################
####### PF2PAT Setup ##########
###############################

# Default PF2PAT with AK5 jets. Make sure to turn ON the L1fastjet stuff.
Пример #7
0
def applyFilters( process ) :


    ## The beam scraping filter __________________________________________________||
    process.noscraping = cms.EDFilter(
        "FilterOutScraping",
        applyfilter = cms.untracked.bool(True),
        debugOn = cms.untracked.bool(False),
        numtrack = cms.untracked.uint32(10),
        thresh = cms.untracked.double(0.25)
        )

    ## The iso-based HBHE noise filter ___________________________________________||
    #process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')

    ## The CSC beam halo tight filter ____________________________________________||
    #process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi')
    process.load("RecoMET.METFilters.metFilters_cff")

    ## The HCAL laser filter _____________________________________________________||
    process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi")
    process.hcalLaserEventFilter.vetoByRunEventNumber=cms.untracked.bool(False)
    process.hcalLaserEventFilter.vetoByHBHEOccupancy=cms.untracked.bool(True)

    ## The ECAL dead cell trigger primitive filter _______________________________||
    process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi')
    ## For AOD and RECO recommendation to use recovered rechits
    process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA")

    ## The EE bad SuperCrystal filter ____________________________________________||
    process.load('RecoMET.METFilters.eeBadScFilter_cfi')

    ## The Good vertices collection needed by the tracking failure filter ________||
    process.goodVertices = cms.EDFilter(
      "VertexSelector",
      filter = cms.bool(False),
      src = cms.InputTag("offlinePrimaryVertices"),
      cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2")
    )

    ## The tracking failure filter _______________________________________________||
    process.load('RecoMET.METFilters.trackingFailureFilter_cfi')
    process.load('RecoMET.METFilters.trackingPOGFilters_cfi')


    # Tracking TOBTEC fakes filter ##
    # if true, only events passing filter (bad events) will pass
    process.tobtecfakesfilter.filter=cms.bool(False) 




    ## The good primary vertex filter ____________________________________________||
    pvSrc = 'offlinePrimaryVertices'
    process.primaryVertexFilter = cms.EDFilter(
        "VertexSelector",
        src = cms.InputTag("offlinePrimaryVertices"),
        cut = cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"),
        filter = cms.bool(True)
        )


    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone( maxZ = cms.double(24.0),
                                         minNdof = cms.double(4.0) # this is >= 4
                                         ),
        src=cms.InputTag(pvSrc)
        )
Пример #8
0
                                    numtrack=cms.untracked.uint32(10),
                                    thresh=cms.untracked.double(0.2))
# HB + HE noise filtering
process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')
process.HBHENoiseFilter.minIsolatedNoiseSumE = 999999.
process.HBHENoiseFilter.minNumIsolatedNoiseChannels = 999999
process.HBHENoiseFilter.minIsolatedNoiseSumEt = 999999.

from HLTrigger.HLTfilters.hltHighLevel_cfi import *
if mytrigs is not None:
    process.hltSelection = hltHighLevel.clone(
        TriggerResultsTag='TriggerResults::HLT', HLTPaths=mytrigs)
    process.hltSelection.throw = False

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
goodVertexSelection = pvSelector.clone(maxZ=24.)
process.primaryVertexFilter = cms.EDFilter("PrimaryVertexFilter",
                                           goodVertexSelection)

# Select jets
process.selectedPatJets.cut = cms.string('pt > 25')

# Add the files
readFiles = cms.untracked.vstring()
secFiles = cms.untracked.vstring()

readFiles.extend([
    '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/E4D2CB53-9881-E011-8D99-003048F024DC.root',
    '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/DC453887-7481-E011-89B9-001617E30D0A.root',
    '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/DABFB9E8-9B81-E011-9FF7-0030487CD812.root',
    '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/D4E6F338-9B81-E011-A8DE-003048F110BE.root',
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'):
    """Default config for Z+jet skims with Kappa

       This is used in a cmssw config file via:
       import skim_base
       process = skim_base.getBaseConfig('START53_V12', "testfile.root")
    """
    # Set the globalt tag and datatype for testing or by grid-control ---------
    data = (datatype == 'data')
    if data:
        testfile = 'file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root'
        testfile = 'file:/storage/8/dhaitz/temp-DoubleMu/0C79FC3F-4083-E211-9CC5-20CF3027A5E2.root'
        if '@' in globaltag: globaltag = 'FT53_V21A_AN6'
        maxevents = maxevents or 100
    else:
        testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root'
        if '@' in globaltag: globaltag = 'START53_V19F'
        maxevents = maxevents or 100
        datatype = 'mc'
    print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile

    # Basic process setup -----------------------------------------------------
    process = cms.Process('kappaSkim')
    process.source = cms.Source('PoolSource',
        fileNames = cms.untracked.vstring(testfile))
    process.maxEvents = cms.untracked.PSet(
        input = cms.untracked.int32(maxevents))

    # Includes + Global Tag ---------------------------------------------------
    process.load('FWCore.MessageService.MessageLogger_cfi')
    process.load('Configuration.StandardSequences.Services_cff')
    process.load('Configuration.StandardSequences.MagneticField_38T_cff')
    process.load('Configuration.Geometry.GeometryIdeal_cff')
    process.load('Configuration.Geometry.GeometryPilot2_cff')
    process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi')
    process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
    process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
    process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi')
    process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
    process.load('Configuration.StandardSequences.Reconstruction_cff')
    process.GlobalTag.globaltag = globaltag + '::All'

    # Reduce amount of messages -----------------------------------------------
    process.MessageLogger.default = cms.untracked.PSet(
        ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5)))
    process.MessageLogger.cerr.FwkReport.reportEvery = 40

    # Produce PF muon isolation -----------------------------------------------
    from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace
    process.pfmuIsoDepositPFCandidates = isoDepositReplace('muons', 'particleFlow')
    process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates)

    # Electrons ---------------------------------------------------------------
    process.load("Kappa.Skimming.KElectrons_cff")
    process.electrons = cms.Path(
        process.makeKappaElectrons)

    # Create good primary vertices to be used for PF association --------------
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone(minNdof = cms.double(4.0), maxZ = cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices')
    )
    process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')


    # CHS Jets with the NoPU sequence -----------------------------------------
    process.load('CommonTools.ParticleFlow.PFBRECO_cff')
    process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfPileUp.checkClosestZVertex = cms.bool(False)
    process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO)
    process.ak5PFJetsCHS = process.ak5PFJets.clone(src = cms.InputTag('pfNoPileUp'))
    process.kt6PFJetsCHS = process.kt6PFJets.clone(src = cms.InputTag('pfNoPileUp'))

    # Gen Jets without neutrinos ----------------------------------------------
    if datatype == 'mc':
        process.load('RecoJets.JetProducers.ak5GenJets_cfi')
        process.NoNuGenJets = cms.Path(process.genParticlesForJetsNoNu *
            process.genParticlesForJets *
            process.ak5GenJetsNoNu * process.kt6GenJetsNoNu * process.kt6GenJets
        )

    # Path to Redo all Jets ---------------------------------------------------
    process.jetsRedo = cms.Path(
        process.ak5PFJets * process.kt6PFJets *
        process.ak5PFJetsCHS * process.kt6PFJetsCHS
    )

    # QG TAGGER ----------------------------------------------------------------
    process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff')
    process.QGTagger.srcJets = cms.InputTag("ak5PFJets")

    process.AK5PFJetsQGTagger = process.QGTagger
    process.AK5PFJetsCHSQGTagger = process.QGTagger.clone(
        srcJets = cms.InputTag("ak5PFJetsCHS"),
        useCHS = cms.untracked.bool(True))


    process.QGTagging = cms.Path(process.QuarkGluonTagger
        * process.AK5PFJetsQGTagger * process.AK5PFJetsCHSQGTagger
        )

    # B-Tagging ----------------------------------------------------------------
    # b-tagging general configuration
    process.load("RecoJets.JetAssociationProducers.ic5JetTracksAssociatorAtVertex_cfi")
    process.load("RecoBTag.Configuration.RecoBTag_cff")

    ### AK5
    # create a ak5PF jets and tracks association
    process.ak5PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone()
    process.ak5PFJetTracksAssociatorAtVertex.jets = "ak5PFJets"
    process.ak5PFJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak5PFImpactParameterTagInfos = process.impactParameterTagInfos.clone()
    process.ak5PFImpactParameterTagInfos.jetTracks = "ak5PFJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak5PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone()
    process.ak5PFSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFImpactParameterTagInfos"
    process.ak5PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone()
    process.ak5PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak5PFSecondaryVertexTagInfos"))
    process.ak5PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone()
    process.ak5PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFImpactParameterTagInfos"),
        cms.InputTag("ak5PFSecondaryVertexTagInfos"))
    process.ak5PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone()
    process.ak5PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFImpactParameterTagInfos"),
        cms.InputTag("ak5PFSecondaryVertexTagInfos"))

    # sequence for AK5 b-tagging
    process.ak5PFJetBtagging = cms.Sequence(process.ak5PFJetTracksAssociatorAtVertex
        * process.ak5PFImpactParameterTagInfos
        * process.ak5PFSecondaryVertexTagInfos
        * process.ak5PFSecondaryVertexTagInfos
        * (process.ak5PFSimpleSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexMVABJetTags))


    ### AK5 CHS
    # create a ak5PFCHS jets and tracks association
    process.ak5PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone()
    process.ak5PFCHSJetTracksAssociatorAtVertex.jets = "ak5PFJetsCHS"
    process.ak5PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak5PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone()
    process.ak5PFCHSImpactParameterTagInfos.jetTracks = "ak5PFCHSJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak5PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone()
    process.ak5PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFCHSImpactParameterTagInfos"
    process.ak5PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone()
    process.ak5PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak5PFCHSSecondaryVertexTagInfos"))
    process.ak5PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone()
    process.ak5PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSImpactParameterTagInfos"),
        cms.InputTag("ak5PFCHSSecondaryVertexTagInfos"))
    process.ak5PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone()
    process.ak5PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSImpactParameterTagInfos"),
        cms.InputTag("ak5PFCHSSecondaryVertexTagInfos"))

    # sequence for AK5CHS b-tagging
    process.ak5PFCHSJetBtagging = cms.Sequence(process.ak5PFCHSJetTracksAssociatorAtVertex
        * process.ak5PFCHSImpactParameterTagInfos
        * process.ak5PFCHSSecondaryVertexTagInfos
        * process.ak5PFCHSSecondaryVertexTagInfos
        * (process.ak5PFCHSSimpleSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexMVABJetTags))


    # Add the modules for all the jet collections to the path
    process.BTagging = cms.Path(
        process.ak5PFJetBtagging
        * process.ak5PFCHSJetBtagging
    )


    # PU jet ID ---------------------------------------------------------------
    process.load("RecoJets.JetProducers.PileupJetID_cfi")

    # AK5
    process.ak5PFPuJetId = process.pileupJetIdProducer.clone(
       jets = cms.InputTag("ak5PFJets"),
       applyJec = cms.bool(True),
       inputIsCorrected = cms.bool(False),
       residualsTxt     = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    process.ak5PFPuJetMva = process.pileupJetIdProducer.clone(
       jets = cms.InputTag("ak5PFJets"),
       jetids = cms.InputTag("ak5PFPuJetId"),
       applyJec = cms.bool(True),
       inputIsCorrected = cms.bool(False),
       residualsTxt     = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )
    # AK5 CHS
    process.ak5PFCHSPuJetId = process.pileupJetIdProducerChs.clone(
       jets = cms.InputTag("ak5PFJetsCHS"),
       applyJec = cms.bool(True),
       inputIsCorrected = cms.bool(False),
       residualsTxt     = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    process.ak5PFCHSPuJetMva = process.pileupJetIdProducerChs.clone(
       jets = cms.InputTag("ak5PFJetsCHS"),
       jetids = cms.InputTag("ak5PFCHSPuJetId"),
       applyJec = cms.bool(True),
       inputIsCorrected = cms.bool(False),
       residualsTxt     = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )


    process.PUJetID = cms.Path(process.ak5PFPuJetId * process.ak5PFPuJetMva
                        * process.ak5PFCHSPuJetId * process.ak5PFCHSPuJetMva
                        )

    # MET filters -------------------------------------------------------------
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    # Create good vertices for the trackingFailure MET filter
    process.goodVertices = cms.EDFilter("VertexSelector",
        filter = cms.bool(False),
        src = cms.InputTag("offlinePrimaryVertices"),
        cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"),
    )
    # The good primary vertex filter for other MET filters
    process.primaryVertexFilter = cms.EDFilter("VertexSelector",
        filter = cms.bool(True),
        src = cms.InputTag("offlinePrimaryVertices"),
        cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
    )
    process.noscraping = cms.EDFilter("FilterOutScraping",
        applyfilter = cms.untracked.bool(True),
        debugOn = cms.untracked.bool(False),
        numtrack = cms.untracked.uint32(10),
        thresh = cms.untracked.double(0.25)
    )
    process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')
    process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi')
    process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi')
    process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(False)
    process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True)
    process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi')
    process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA")
    process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi')
    process.load('RecoMET.METFilters.eeBadScFilter_cfi')
    process.load('RecoMET.METFilters.eeNoiseFilter_cfi')
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    process.load('RecoMET.METFilters.trackingFailureFilter_cfi')
    process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi')
    process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi')

    process.hcalLaserEventFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.eeBadScFilter.taggingMode = cms.bool(True)
    process.eeNoiseFilter.taggingMode = cms.bool(True)
    process.ecalLaserCorrFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone(
        ptMin = cms.double(5000.0)
    )
    process.hcalNoiseFilter = process.beamScrapingFilter.clone()
    process.beamHaloFilter = process.beamScrapingFilter.clone()
    process.filtersSeq = cms.Sequence(
        process.primaryVertexFilter *
        process.hcalLaserEventFilter +
        process.EcalDeadCellTriggerPrimitiveFilter +
        process.EcalDeadCellBoundaryEnergyFilter +
        process.eeBadScFilter +
        process.eeNoiseFilter +
        process.ecalLaserCorrFilter +
        process.goodVertices * process.trackingFailureFilter +
        process.inconsistentMuonPFCandidateFilter +
        process.greedyMuonPFCandidateFilter +
        process.noscraping * process.beamScrapingFilter +
        process.HBHENoiseFilter * process.hcalNoiseFilter +
        process.CSCTightHaloFilter * process.beamHaloFilter
    )
    process.metFilters = cms.Path(process.filtersSeq)

    # MET correction ----------------------------------------------------------
    process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff")
    process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices')
    # Type-0
    process.pfMETCHS = process.pfType1CorrectedMet.clone(
        applyType1Corrections = cms.bool(False),
        applyType0Corrections = cms.bool(True)
    )
    # MET Path
    process.metCorrections = cms.Path(
            process.producePFMETCorrections * process.pfMETCHS
    )

    # Require two good muons --------------------------------------------------
    process.goodMuons = cms.EDFilter('CandViewSelector',
        src = cms.InputTag('muons'),
        cut = cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()"),
    )
    process.twoGoodMuons = cms.EDFilter('CandViewCountFilter',
        src = cms.InputTag('goodMuons'),
        minNumber = cms.uint32(2),
    )

    # Configure tuple generation ----------------------------------------------
    process.load('Kappa.Producers.KTuple_cff')
    process.kappatuple = cms.EDAnalyzer('KTuple',
        process.kappaTupleDefaultsBlock,
        outputFile = cms.string("skim.root"),
        PFTaggedJets = cms.PSet(
            process.kappaNoCut,
            process.kappaNoRegEx,
            taggers = cms.vstring(
                "QGlikelihood", "QGmlp",
                "CombinedSecondaryVertexBJetTags", "CombinedSecondaryVertexMVABJetTags",
			    "puJetIDFullLoose", "puJetIDFullMedium", "puJetIDFullTight",
			    "puJetIDCutbasedLoose", "puJetIDCutbasedMedium", "puJetIDCutbasedTight",
            ),
            AK5PFTaggedJets = cms.PSet(
                src = cms.InputTag("ak5PFJets"),
                QGtagger = cms.InputTag("AK5PFJetsQGTagger"),
                Btagger = cms.InputTag("ak5PF"),
                PUJetID = cms.InputTag("ak5PFPuJetMva"),
                PUJetID_full = cms.InputTag("full"),
            ),
            AK5PFTaggedJetsCHS = cms.PSet(
                src = cms.InputTag("ak5PFJetsCHS"),
                QGtagger = cms.InputTag("AK5PFJetsCHSQGTagger"),
                Btagger = cms.InputTag("ak5PFCHS"),
                PUJetID = cms.InputTag("ak5PFCHSPuJetMva"),
                PUJetID_full = cms.InputTag("full"),
            )
        ),
    )

    process.kappatuple.verbose = cms.int32(0)
    process.kappatuple.active = cms.vstring(
        'LV', 'Muons', 'Electrons', 'TrackSummary', 'VertexSummary', 'BeamSpot',
        'JetArea', 'PFMET',
        'FilterSummary',
        'PFTaggedJets',
    )
    if data:
        additional_actives = ['DataMetadata']
    else:
        additional_actives = ['GenMetadata', 'GenParticles']
    for active in additional_actives:
        process.kappatuple.active.append(active)

    process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*", ".*AK7.*")
    process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet")

    process.pathKappa = cms.Path(
        process.goodMuons * process.twoGoodMuons * process.kappatuple
    )

    # Process schedule --------------------------------------------------------
    process.schedule = cms.Schedule(
        process.metFilters,
        process.pfCHS,
        process.jetsRedo,
        process.BTagging,
        process.QGTagging,
        process.PUJetID,
        process.pfMuonIso,
        process.electrons,
        process.metCorrections,
        process.pathKappa,
    )
    if not data:
        process.schedule.insert(0, process.NoNuGenJets)

    return process
### load the different flavour of settings of the dEdxAnalyzer module
from DQM.TrackingMonitorSource.dEdxAnalyzer_cff import *


# temporary patch in order to have BXlumi 
from RecoLuminosity.LumiProducer.lumiProducer_cff import *

# temporary test in order to temporary produce the "goodPrimaryVertexCollection"
# define with a new name if changes are necessary, otherwise simply include
# it from CommonTools/ParticleFlow/python/goodOfflinePrimaryVertices_cfi.py
# uncomment when necessary
from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
from CommonTools.ParticleFlow.goodOfflinePrimaryVertices_cfi import goodOfflinePrimaryVertices
trackingDQMgoodOfflinePrimaryVertices = goodOfflinePrimaryVertices.clone()
trackingDQMgoodOfflinePrimaryVertices.filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) )
trackingDQMgoodOfflinePrimaryVertices.src=cms.InputTag('offlinePrimaryVertices')
trackingDQMgoodOfflinePrimaryVertices.filter = cms.bool(False)

# Sequence
TrackingDQMSourceTier0 = cms.Sequence()
# dEdx monitoring
TrackingDQMSourceTier0 += dedxHarmonicSequence * dEdxMonCommon * dEdxHitMonCommon   
#    # temporary patch in order to have BXlumi
#    * lumiProducer
# track collections
for tracks in selectedTracks :
    if tracks != 'generalTracks':
        TrackingDQMSourceTier0 += sequenceName[tracks]
    label = 'TrackerCollisionSelectedTrackMonCommon' + str(tracks)
    TrackingDQMSourceTier0 += cms.Sequence(locals()[label])
Пример #11
0
                                    thresh = cms.untracked.double(0.2)
                                    )
# HB + HE noise filtering
process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')
process.HBHENoiseFilter.minIsolatedNoiseSumE        = 999999.
process.HBHENoiseFilter.minNumIsolatedNoiseChannels = 999999
process.HBHENoiseFilter.minIsolatedNoiseSumEt       = 999999.


from HLTrigger.HLTfilters.hltHighLevel_cfi import *
if mytrigs is not None :
    process.hltSelection = hltHighLevel.clone(TriggerResultsTag = 'TriggerResults::HLT', HLTPaths = mytrigs)
    process.hltSelection.throw = False

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
goodVertexSelection = pvSelector.clone( maxZ = 24. )
process.primaryVertexFilter = cms.EDFilter("PrimaryVertexFilter",
                                           goodVertexSelection
                                           )


# Select jets
process.selectedPatJets.cut = cms.string('pt > 25')

# Add the files
readFiles = cms.untracked.vstring()
secFiles = cms.untracked.vstring()


readFiles.extend( [
        '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/E4D2CB53-9881-E011-8D99-003048F024DC.root',
Пример #12
0
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'):
    """Default config for Z+jet skims with Kappa

       This is used in a cmssw config file via:
       import skim_base
       process = skim_base.getBaseConfig('START53_V12', "testfile.root")
    """
    # Set the globalt tag and datatype for testing or by grid-control ---------
    data = (datatype == 'data')
    if data:
        testfile = 'file:/storage/8/dhaitz/testfiles/data_electrons_2012D.root'
        if '@' in globaltag: globaltag = 'FT53_V21A_AN6'
        maxevents = maxevents or 100
    else:
        testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root'
        if '@' in globaltag: globaltag = 'START53_V19F'
        maxevents = maxevents or 100
        datatype = 'mc'
    print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile

    # Basic process setup -----------------------------------------------------
    process = cms.Process('kappaSkim')
    process.source = cms.Source('PoolSource',
                                fileNames=cms.untracked.vstring(testfile))
    process.maxEvents = cms.untracked.PSet(
        input=cms.untracked.int32(maxevents))

    # Includes + Global Tag ---------------------------------------------------
    process.load('FWCore.MessageService.MessageLogger_cfi')
    process.load('Configuration.StandardSequences.Services_cff')
    process.load('Configuration.StandardSequences.MagneticField_38T_cff')
    process.load('Configuration.Geometry.GeometryIdeal_cff')
    process.load('Configuration.Geometry.GeometryPilot2_cff')
    process.load(
        'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi'
    )
    process.load(
        'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi'
    )
    process.load(
        'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi'
    )
    process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi')
    process.load(
        'Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
    process.load('Configuration.StandardSequences.Reconstruction_cff')
    process.GlobalTag.globaltag = globaltag + '::All'

    # Reduce amount of messages -----------------------------------------------
    process.MessageLogger.default = cms.untracked.PSet(
        ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5)))
    process.MessageLogger.cerr.FwkReport.reportEvery = 40

    # Electrons ---------------------------------------------------------------
    process.load("Kappa.Skimming.KElectrons_cff")
    process.electrons = cms.Path(process.makeKappaElectrons)
    # Create good primary vertices to be used for PF association --------------
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(minNdof=cms.double(4.0),
                                      maxZ=cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices'))
    process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.ak7PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.kt4PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')

    # CHS Jets with the NoPU sequence -----------------------------------------
    process.load('CommonTools.ParticleFlow.PFBRECO_cff')
    process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfPileUp.checkClosestZVertex = cms.bool(False)
    process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices *
                             process.PFBRECO)
    process.ak5PFJetsCHS = process.ak5PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))
    process.ak7PFJetsCHS = process.ak7PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))
    process.kt4PFJetsCHS = process.kt4PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))
    process.kt6PFJetsCHS = process.kt6PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))

    # Gen Jets without neutrinos ----------------------------------------------
    if not data:
        process.load('RecoJets.JetProducers.ak5GenJets_cfi')
        process.NoNuGenJets = cms.Path(
            process.genParticlesForJetsNoNu * process.genParticlesForJets *
            process.ak5GenJetsNoNu * process.ak7GenJetsNoNu *
            process.kt4GenJetsNoNu * process.kt4GenJets *
            process.kt6GenJetsNoNu * process.kt6GenJets)

    # Path to Redo all Jets ---------------------------------------------------
    process.jetsRedo = cms.Path(process.ak5PFJets * process.ak7PFJets *
                                process.kt4PFJets * process.kt6PFJets *
                                process.ak5PFJetsCHS * process.ak7PFJetsCHS *
                                process.kt4PFJetsCHS * process.kt6PFJetsCHS)

    # QG TAGGER ----------------------------------------------------------------
    process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff')
    process.QGTagger.srcJets = cms.InputTag("ak5PFJets")

    process.AK5PFJetsQGTagger = process.QGTagger
    process.AK5PFJetsCHSQGTagger = process.QGTagger.clone(
        srcJets=cms.InputTag("ak5PFJetsCHS"), useCHS=cms.untracked.bool(True))

    process.AK7PFJetsQGTagger = process.QGTagger.clone(
        srcJets=cms.InputTag("ak7PFJets"))
    process.AK7PFJetsCHSQGTagger = process.QGTagger.clone(
        srcJets=cms.InputTag("ak7PFJetsCHS"), useCHS=cms.untracked.bool(True))

    process.QGTagging = cms.Path(
        process.QuarkGluonTagger * process.AK5PFJetsQGTagger *
        process.AK5PFJetsCHSQGTagger * process.AK7PFJetsQGTagger *
        process.AK7PFJetsCHSQGTagger)

    # B-Tagging ----------------------------------------------------------------
    # b-tagging general configuration
    process.load(
        "RecoJets.JetAssociationProducers.ic5JetTracksAssociatorAtVertex_cfi")
    process.load("RecoBTag.Configuration.RecoBTag_cff")

    ### AK5
    # create a ak5PF jets and tracks association
    process.ak5PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone(
    )
    process.ak5PFJetTracksAssociatorAtVertex.jets = "ak5PFJets"
    process.ak5PFJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak5PFImpactParameterTagInfos = process.impactParameterTagInfos.clone(
    )
    process.ak5PFImpactParameterTagInfos.jetTracks = "ak5PFJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak5PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone(
    )
    process.ak5PFSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFImpactParameterTagInfos"
    process.ak5PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone(
    )
    process.ak5PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFSecondaryVertexTagInfos"))
    process.ak5PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone(
    )
    process.ak5PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFImpactParameterTagInfos"),
        cms.InputTag("ak5PFSecondaryVertexTagInfos"))
    process.ak5PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone(
    )
    process.ak5PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFImpactParameterTagInfos"),
        cms.InputTag("ak5PFSecondaryVertexTagInfos"))

    # sequence for AK5 b-tagging
    process.ak5PFJetBtagging = cms.Sequence(
        process.ak5PFJetTracksAssociatorAtVertex *
        process.ak5PFImpactParameterTagInfos *
        process.ak5PFSecondaryVertexTagInfos *
        process.ak5PFSecondaryVertexTagInfos *
        (process.ak5PFSimpleSecondaryVertexBJetTags +
         process.ak5PFCombinedSecondaryVertexBJetTags +
         process.ak5PFCombinedSecondaryVertexMVABJetTags))

    ### AK5 CHS
    # create a ak5PFCHS jets and tracks association
    process.ak5PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone(
    )
    process.ak5PFCHSJetTracksAssociatorAtVertex.jets = "ak5PFJetsCHS"
    process.ak5PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak5PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone(
    )
    process.ak5PFCHSImpactParameterTagInfos.jetTracks = "ak5PFCHSJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak5PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone(
    )
    process.ak5PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFCHSImpactParameterTagInfos"
    process.ak5PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone(
    )
    process.ak5PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSSecondaryVertexTagInfos"))
    process.ak5PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone(
    )
    process.ak5PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSImpactParameterTagInfos"),
        cms.InputTag("ak5PFCHSSecondaryVertexTagInfos"))
    process.ak5PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone(
    )
    process.ak5PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSImpactParameterTagInfos"),
        cms.InputTag("ak5PFCHSSecondaryVertexTagInfos"))

    # sequence for AK5CHS b-tagging
    process.ak5PFCHSJetBtagging = cms.Sequence(
        process.ak5PFCHSJetTracksAssociatorAtVertex *
        process.ak5PFCHSImpactParameterTagInfos *
        process.ak5PFCHSSecondaryVertexTagInfos *
        process.ak5PFCHSSecondaryVertexTagInfos *
        (process.ak5PFCHSSimpleSecondaryVertexBJetTags +
         process.ak5PFCHSCombinedSecondaryVertexBJetTags +
         process.ak5PFCHSCombinedSecondaryVertexMVABJetTags))

    ### AK7
    # create a ak7PF jets and tracks association
    process.ak7PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone(
    )
    process.ak7PFJetTracksAssociatorAtVertex.jets = "ak7PFJets"
    process.ak7PFJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak7PFImpactParameterTagInfos = process.impactParameterTagInfos.clone(
    )
    process.ak7PFImpactParameterTagInfos.jetTracks = "ak7PFJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak7PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone(
    )
    process.ak7PFSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFImpactParameterTagInfos"
    process.ak7PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone(
    )
    process.ak7PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFSecondaryVertexTagInfos"))
    process.ak7PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone(
    )
    process.ak7PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFImpactParameterTagInfos"),
        cms.InputTag("ak7PFSecondaryVertexTagInfos"))
    process.ak7PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone(
    )
    process.ak7PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFImpactParameterTagInfos"),
        cms.InputTag("ak7PFSecondaryVertexTagInfos"))

    # sequence for AK7 b-tagging
    process.ak7PFJetBtagging = cms.Sequence(
        process.ak7PFJetTracksAssociatorAtVertex *
        process.ak7PFImpactParameterTagInfos *
        process.ak7PFSecondaryVertexTagInfos *
        process.ak7PFSecondaryVertexTagInfos *
        (process.ak7PFSimpleSecondaryVertexBJetTags +
         process.ak7PFCombinedSecondaryVertexBJetTags +
         process.ak7PFCombinedSecondaryVertexMVABJetTags))

    ### AK7 CHS
    # create a ak7PFCHS jets and tracks association
    process.ak7PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone(
    )
    process.ak7PFCHSJetTracksAssociatorAtVertex.jets = "ak7PFJetsCHS"
    process.ak7PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak7PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone(
    )
    process.ak7PFCHSImpactParameterTagInfos.jetTracks = "ak7PFCHSJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak7PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone(
    )
    process.ak7PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFCHSImpactParameterTagInfos"
    process.ak7PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone(
    )
    process.ak7PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFCHSSecondaryVertexTagInfos"))
    process.ak7PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone(
    )
    process.ak7PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFCHSImpactParameterTagInfos"),
        cms.InputTag("ak7PFCHSSecondaryVertexTagInfos"))
    process.ak7PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone(
    )
    process.ak7PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFCHSImpactParameterTagInfos"),
        cms.InputTag("ak7PFCHSSecondaryVertexTagInfos"))

    # sequence for AK7CHS b-tagging
    process.ak7PFCHSJetBtagging = cms.Sequence(
        process.ak7PFCHSJetTracksAssociatorAtVertex *
        process.ak7PFCHSImpactParameterTagInfos *
        process.ak7PFCHSSecondaryVertexTagInfos *
        process.ak7PFCHSSecondaryVertexTagInfos *
        (process.ak7PFCHSSimpleSecondaryVertexBJetTags +
         process.ak7PFCHSCombinedSecondaryVertexBJetTags +
         process.ak7PFCHSCombinedSecondaryVertexMVABJetTags))

    # Add the modules for all the jet collections to the path
    process.BTagging = cms.Path(
        process.ak5PFJetBtagging * process.ak5PFCHSJetBtagging *
        process.ak7PFJetBtagging * process.ak7PFCHSJetBtagging)

    # PU jet ID ---------------------------------------------------------------
    process.load("RecoJets.JetProducers.PileupJetID_cfi")

    # AK5
    process.ak5PFPuJetId = process.pileupJetIdProducer.clone(
        jets=cms.InputTag("ak5PFJets"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    process.ak5PFPuJetMva = process.pileupJetIdProducer.clone(
        jets=cms.InputTag("ak5PFJets"),
        jetids=cms.InputTag("ak5PFPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )
    # AK5 CHS
    process.ak5PFCHSPuJetId = process.pileupJetIdProducerChs.clone(
        jets=cms.InputTag("ak5PFJetsCHS"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    process.ak5PFCHSPuJetMva = process.pileupJetIdProducerChs.clone(
        jets=cms.InputTag("ak5PFJetsCHS"),
        jetids=cms.InputTag("ak5PFCHSPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    # ak7
    process.ak7PFPuJetId = process.pileupJetIdProducer.clone(
        jets=cms.InputTag("ak7PFJets"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    process.ak7PFPuJetMva = process.pileupJetIdProducer.clone(
        jets=cms.InputTag("ak7PFJets"),
        jetids=cms.InputTag("ak7PFPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )
    # ak7 CHS
    process.ak7PFCHSPuJetId = process.pileupJetIdProducerChs.clone(
        jets=cms.InputTag("ak7PFJetsCHS"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    process.ak7PFCHSPuJetMva = process.pileupJetIdProducerChs.clone(
        jets=cms.InputTag("ak7PFJetsCHS"),
        jetids=cms.InputTag("ak7PFCHSPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
        residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"),
    )

    process.PUJetID = cms.Path(
        process.ak5PFPuJetId * process.ak5PFPuJetMva *
        process.ak5PFCHSPuJetId * process.ak5PFCHSPuJetMva *
        process.ak7PFPuJetId * process.ak7PFPuJetMva *
        process.ak7PFCHSPuJetId * process.ak7PFCHSPuJetMva)

    # MET filters -------------------------------------------------------------
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    # Create good vertices for the trackingFailure MET filter
    process.goodVertices = cms.EDFilter(
        "VertexSelector",
        filter=cms.bool(False),
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string(
            "!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"),
    )
    # The good primary vertex filter for other MET filters
    process.primaryVertexFilter = cms.EDFilter(
        "VertexSelector",
        filter=cms.bool(True),
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string(
            "!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
    )
    process.noscraping = cms.EDFilter("FilterOutScraping",
                                      applyfilter=cms.untracked.bool(True),
                                      debugOn=cms.untracked.bool(False),
                                      numtrack=cms.untracked.uint32(10),
                                      thresh=cms.untracked.double(0.25))
    process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')
    process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi')
    process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi')
    process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(
        False)
    process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True)
    process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi')
    process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag(
        "ecalTPSkimNA")
    process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi')
    process.load('RecoMET.METFilters.eeBadScFilter_cfi')
    process.load('RecoMET.METFilters.eeNoiseFilter_cfi')
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    process.load('RecoMET.METFilters.trackingFailureFilter_cfi')
    process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi')
    process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi')

    process.hcalLaserEventFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.eeBadScFilter.taggingMode = cms.bool(True)
    process.eeNoiseFilter.taggingMode = cms.bool(True)
    process.ecalLaserCorrFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone(
        ptMin=cms.double(5000.0))
    process.hcalNoiseFilter = process.beamScrapingFilter.clone()
    process.beamHaloFilter = process.beamScrapingFilter.clone()
    process.filtersSeq = cms.Sequence(
        process.primaryVertexFilter * process.hcalLaserEventFilter +
        process.EcalDeadCellTriggerPrimitiveFilter +
        process.EcalDeadCellBoundaryEnergyFilter + process.eeBadScFilter +
        process.eeNoiseFilter + process.ecalLaserCorrFilter +
        process.goodVertices * process.trackingFailureFilter +
        process.inconsistentMuonPFCandidateFilter +
        process.greedyMuonPFCandidateFilter +
        process.noscraping * process.beamScrapingFilter +
        process.HBHENoiseFilter * process.hcalNoiseFilter +
        process.CSCTightHaloFilter * process.beamHaloFilter)
    process.metFilters = cms.Path(process.filtersSeq)

    # MET correction ----------------------------------------------------------
    process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff")
    process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices')
    # Type-0
    process.pfMETCHS = process.pfType1CorrectedMet.clone(
        applyType1Corrections=cms.bool(False),
        applyType0Corrections=cms.bool(True))
    # MET Path
    process.metCorrections = cms.Path(process.producePFMETCorrections *
                                      process.pfMETCHS)

    # Configure tuple generation ----------------------------------------------
    process.load('Kappa.Producers.KTuple_cff')
    process.kappatuple = cms.EDAnalyzer(
        'KTuple',
        process.kappaTupleDefaultsBlock,
        outputFile=cms.string("skim.root"),
        PFTaggedJets=cms.PSet(
            process.kappaNoCut,
            process.kappaNoRegEx,
            taggers=cms.vstring("QGlikelihood", "QGmlp",
                                "CombinedSecondaryVertexBJetTags",
                                "CombinedSecondaryVertexMVABJetTags",
                                "puJetIDFullLoose", "puJetIDFullMedium",
                                "puJetIDFullTight", "puJetIDCutbasedLoose",
                                "puJetIDCutbasedMedium",
                                "puJetIDCutbasedTight"),
            AK5PFTaggedJets=cms.PSet(
                src=cms.InputTag("ak5PFJets"),
                QGtagger=cms.InputTag("AK5PFJetsQGTagger"),
                Btagger=cms.InputTag("ak5PF"),
                PUJetID=cms.InputTag("ak5PFPuJetMva"),
                PUJetID_full=cms.InputTag("full"),
            ),
            AK5PFTaggedJetsCHS=cms.PSet(
                src=cms.InputTag("ak5PFJetsCHS"),
                QGtagger=cms.InputTag("AK5PFJetsCHSQGTagger"),
                Btagger=cms.InputTag("ak5PFCHS"),
                PUJetID=cms.InputTag("ak5PFCHSPuJetMva"),
                PUJetID_full=cms.InputTag("full"),
            ),
            AK7PFTaggedJets=cms.PSet(
                src=cms.InputTag("ak7PFJets"),
                QGtagger=cms.InputTag("AK7PFJetsQGTagger"),
                Btagger=cms.InputTag("ak7PF"),
                PUJetID=cms.InputTag("ak7PFPuJetMva"),
                PUJetID_full=cms.InputTag("full"),
            ),
            AK7PFTaggedJetsCHS=cms.PSet(
                src=cms.InputTag("ak7PFJetsCHS"),
                QGtagger=cms.InputTag("AK7PFJetsCHSQGTagger"),
                Btagger=cms.InputTag("ak7PFCHS"),
                PUJetID=cms.InputTag("ak7PFCHSPuJetMva"),
                PUJetID_full=cms.InputTag("full"),
            ),
        ),
    )

    process.kappatuple.verbose = cms.int32(0)
    process.kappatuple.active = cms.vstring(
        'LV',
        'TrackSummary',
        'VertexSummary',
        'BeamSpot',
        'JetArea',
        'PFMET',
        'PFJets',
        'FilterSummary',
        'PFTaggedJets',
        'Electrons',
    )
    if data:
        additional_actives = ['DataMetadata']
    else:
        additional_actives = ['GenMetadata', 'GenParticles']
    for active in additional_actives:
        process.kappatuple.active.append(active)

    process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*")
    process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet")

    process.pathKappa = cms.Path(process.kappatuple)

    # Process schedule --------------------------------------------------------
    process.schedule = cms.Schedule(
        process.metFilters,
        process.electrons,
        process.pfCHS,
        process.jetsRedo,
        process.BTagging,
        process.QGTagging,
        process.PUJetID,
        process.metCorrections,
        process.pathKappa,
    )
    if not data:
        process.schedule.insert(0, process.NoNuGenJets)

    return process
)

## Removal of beam scraping events
process.scrapingVeto = cms.EDFilter("FilterOutScraping",
  applyfilter = cms.untracked.bool  (True),
  debugOn     = cms.untracked.bool  (False),
  numtrack    = cms.untracked.uint32(10),
  thresh      = cms.untracked.double(0.25)
)

## Produce a collection of good primary vertices
from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
    filterParams = pvSelector.clone(
        minNdof = cms.double(4.0), # this is >= 4
        maxZ = cms.double(24.0),
        maxRho = cms.double(2.0)
    ),
    src = cms.InputTag('offlinePrimaryVertices')
)

## Event counters
process.nEventsTotal = cms.EDProducer("EventCountProducer")

## Path definition
process.p = cms.Path(
    process.nEventsTotal*
    process.primaryVertexFilter*
    process.scrapingVeto*
    (
    process.goodOfflinePrimaryVertices+
def createProcess(runOnMC, runCHS, correctMETWithT1, processCaloJets, processCA8Jets, globalTag):

  ## import skeleton process
  from PhysicsTools.PatAlgos.patTemplate_cfg import process

  # load the PAT config
  process.load("PhysicsTools.PatAlgos.patSequences_cff")
  process.load("JetMETCorrections.Configuration.JetCorrectionProducers_cff")

  # Do some CHS stuff
  process.ak5PFchsL1Fastjet  = process.ak5PFL1Fastjet.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsL2Relative = process.ak5PFL2Relative.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsL3Absolute = process.ak5PFL3Absolute.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsResidual   = process.ak5PFResidual.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsL1FastL2L3 = cms.ESProducer(
      'JetCorrectionESChain',
      correctors = cms.vstring('ak5PFchsL1Fastjet', 'ak5PFchsL2Relative','ak5PFchsL3Absolute')
      )


  from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

  ## The good primary vertex filter ____________________________________________||
  ## This filter throw events with no primary vertex
  process.primaryVertexFilter = cms.EDFilter(
      "VertexSelector",
      src = cms.InputTag("offlinePrimaryVertices"),
      cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
      filter = cms.bool(True)
      )

  process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
      filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
      src = cms.InputTag('offlinePrimaryVertices')
      )

  # Configure PAT to use PF2PAT instead of AOD sources
  # this function will modify the PAT sequences.
  from PhysicsTools.PatAlgos.tools.coreTools import removeSpecificPATObjects, removeMCMatching
  from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT, adaptPFIsoElectrons, adaptPVs, usePFIso
  #from PhysicsTools.PatAlgos.tools.metTools import *

  def usePF2PATForAnalysis(jetAlgo, postfix, useTypeIMET, usePFNoPU):

    # Jet corrections
    # No L2L3 Residual on purpose
    if usePFNoPU:
      jetCorrections = ("%sPFchs" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute'])
      postfix += "chs"
    else:
      jetCorrections = ("%sPF" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute'])

    #if not runOnMC:
    #  jetCorrections[1].append('L2L3Residual')

    p = postfix

    usePF2PAT(process, runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=runOnMC, postfix=p, jetCorrections=jetCorrections, typeIMetCorrections = useTypeIMET)
    getattr(process, "pfPileUp" + p).Enable = True
    getattr(process, "pfPileUp" + p).Vertices = 'goodOfflinePrimaryVertices'
    getattr(process, "pfPileUp" + p).checkClosestZVertex = cms.bool(False)

    getattr(process, "pfJets" + p).doAreaFastjet = cms.bool(True)
    getattr(process, "pfJets" + p).doRhoFastjet = False
    getattr(process, 'patJetCorrFactors' + p).rho = cms.InputTag("kt6PFJets", "rho") # Do not use kt6PFJetsPFlowAK5, it's not ok for L1FastJet.

    # top projections in PF2PAT:
    getattr(process,"pfNoPileUp" + p).enable = cms.bool(usePFNoPU)
    getattr(process,"pfNoMuon" + p).enable = True
    getattr(process,"pfNoElectron" + p).enable = True
    getattr(process,"pfNoTau" + p).enable = True
    getattr(process,"pfNoJet" + p).enable = True

    getattr(process,"patElectrons" + p).embedTrack = True

    getattr(process,"patMuons" + p).embedTrack = True
    # enable delta beta correction for muon selection in PF2PAT?
    getattr(process,"pfIsolatedMuons" + p).doDeltaBetaCorrection = True

    getattr(process, "patJets" + p).embedPFCandidates = False
    # Keep only jets with pt > 2 Gev
    getattr(process, "selectedPatJets" + p).cut = "pt > 2";

    # Use a cone of 0.3 for photon isolation
    #adaptPFIsoPhotons(process, applyPostfix(process, "patPhotons", postfix), postfix, "03")

    # 2012 Photon ID

    # Electron conversion
    setattr(process, "patConversions" + p, cms.EDProducer("PATConversionProducer",
        # input collection
        electronSource = cms.InputTag("selectedPatElectrons" + p)
    ))

    # Switch electron isolation to dR = 0.3, for PF2PAT
    getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p))
    getattr(process, "pfIsolatedElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p)
    getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p))

    getattr(process, "pfElectrons" + p).isolationValueMapsCharged  = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p))
    getattr(process, "pfElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p)
    getattr(process, "pfElectrons" + p).isolationValueMapsNeutral  = cms.VInputTag(cms.InputTag( "elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p))

    # ... And for PAT
    adaptPFIsoElectrons(process, getattr(process, "pfElectrons" + p), p, "03")

    
    if runOnMC:
      cloneProcessingSnippet(process, getattr(process, "makePatMuons" + p), "Loose" + p, p)
      getattr(process, "muonMatchLoose" + p).src = cms.InputTag("pfMuons" + p)
      getattr(process, "patMuonsLoose" + p).pfMuonSource = cms.InputTag("pfMuons" + p)
      getattr(process, "patDefaultSequence" + p).replace(getattr(process, "makePatMuons" + p), getattr(process, "makePatMuons" + p) + getattr(process, "makePatMuonsLoose" + p))
    else:
      setattr(process, "patMuonsLoose" + p, getattr(process, "patMuons" + p).clone(
          pfMuonSource = cms.InputTag("pfMuons" + p)
        )
      )

    setattr(process, "selectedPatMuonsLoose" + p, getattr(process, "selectedPatMuons" + p).clone(
        src = cms.InputTag("patMuonsLoose" + p)
      )
    )
    sequence = getattr(process, "patDefaultSequence" + p)

    if not runOnMC:
      sequence += getattr(process, "patMuonsLoose" + p)

    sequence += (getattr(process, "selectedPatMuonsLoose" + p))

    setattr(process, "patElectronsLoose" + p, getattr(process, "patElectrons" + p).clone(
        pfElectronSource = cms.InputTag("pfElectrons" + p)
      )
    )
    setattr(process, "selectedPatElectronsLoose" + p, getattr(process, "selectedPatElectrons" + p).clone(
        src = cms.InputTag("patElectronsLoose" + p)
      )
    )
    adaptPFIsoElectrons(process, getattr(process, "patElectronsLoose" + p), postfix, "03")
    sequence = getattr(process, "patDefaultSequence" + p)
    sequence += (getattr(process, "patElectronsLoose" + p) * getattr(process, "selectedPatElectronsLoose" + p))


    #giulia turn off qg tagger
    ## Setup quark gluon tagger
    #process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff')
    #cloneProcessingSnippet(process, process.QuarkGluonTagger, p)
    #getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p)
    #getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True)
    #getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(usePFNoPU)

    ## Remove the processing of primary vertices, as it's already what we do here
    #getattr(process, 'QGTagger' + p).srcPV = cms.InputTag('goodOfflinePrimaryVertices')
    #getattr(process, 'QuarkGluonTagger' + p).remove(getattr(process, 'goodOfflinePrimaryVerticesQG' + p))

    if not runOnMC:
      if 'L2L3Residual' in jetCorrections:
        getattr(process, 'patPFJetMETtype1p2Corr' + p).jetCorrLabel = 'L2L3Residual'
      getattr(process, 'patPFMet' + p).addGenMET = cms.bool(False)

    names = ["Taus"]
    #if jetAlgo != "AK5":
      #names += ["Electrons", "Muons"]
    if len(names) > 0:
      removeSpecificPATObjects(process, names = names, outputModules = ['out'], postfix = p) 

    adaptPVs(process, pvCollection = cms.InputTag("goodOfflinePrimaryVertices"), postfix = p)

    getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatElectrons" + p), getattr(process, "selectedPatElectrons" + p) + getattr(process, "patConversions" + p))

    #getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatJets" + p), getattr(process, "selectedPatJets" + p) + getattr(process, "QuarkGluonTagger" + p))

    return getattr(process, "patPF2PATSequence" + p)

  if correctMETWithT1:
    process.load("PhysicsTools.PatUtils.patPFMETCorrections_cff")
    
  from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet

  print "##########################"
  print "PF jets with PF2PAT"
  print "Using Type I met" if correctMETWithT1 else "NOT using Type I met"
  print "##########################"

  #runCHS = False

  postfixes = {'PFlowAK5': 'AK5'}
  #postfixes = {'PFlowAK5': 'AK5', 'PFlowAK7': 'AK7', 'PFlowCA8': 'CA8'}
  #postfixes = {'PFlowCA8': 'CA8'}

  ##giulia turn off qg tagger
  ## Setup quark gluon tagger
  #process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff')

  process.sequence_chs = cms.Sequence()
  process.sequence_nochs = cms.Sequence()
  for p, algo in postfixes.items():
    process.sequence_nochs += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=False, useTypeIMET=correctMETWithT1)
    if runCHS:
      process.sequence_chs   += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=True, useTypeIMET=correctMETWithT1)

  #  setattr(process, 'QGTagger' + p, process.QGTagger.clone())
  #  getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p)
  #  getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True)
  #  getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(False)
  #
  #  process.QuarkGluonTagger.replace(process.QGTagger, getattr(process, 'QGTagger' + p))

    if runCHS:
      chsP = p + "chs"
  
  #    setattr(process, 'QGTagger' + chsP, process.QGTagger.clone())
  #    getattr(process, "QGTagger" + chsP).srcJets = cms.InputTag("selectedPatJets" + chsP)
  #    getattr(process, "QGTagger" + chsP).isPatJet = cms.untracked.bool(True)
  #    getattr(process, "QGTagger" + chsP).useCHS = cms.untracked.bool(True)
  
  #    process.QuarkGluonTagger.replace(getattr(process, 'QGTagger' + p), getattr(process, 'QGTagger' + p) + getattr(process, 'QGTagger' + chsP))
  
  print "##########################"
  print "Calo jets" if processCaloJets else "No processing of calo jets"
  print "##########################"

  usePFIso(process, "")
  #adaptPFIsoPhotons(process,  process.patPhotons, "", "03")

  # chiara init ----------------------------------
  print "##########################"
  print "CA8 Jets" if processCA8Jets else "No processing of CA8 jets collection"
  print "##########################"

  if processCA8Jets:

    from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection

    # Reco CA 0.8 jets 
    # non sapendo quali parametri usare esattamente lascerei i default della reco per ora.
    # Per doAreaFastjet e doRhoFastjet per il momento usiamo quanto e' ridefinito sopra
    from RecoJets.JetProducers.ca4PFJets_cfi import ca4PFJets
    process.ca8PFJetsPFlow = ca4PFJets.clone(
      rParam = cms.double(0.8)
      # src = cms.InputTag('pfNoElectron'+postfix),    
      # doAreaFastjet = cms.bool(True),   
      # doRhoFastjet = cms.bool(True),    
      # Rho_EtaMax = cms.double(6.0),    
      # Ghost_EtaMax = cms.double(7.0)   
      )

    # Gen CA 0.8 jets
    from RecoJets.JetProducers.ca4GenJets_cfi import ca4GenJets
    process.ca8GenJetsNoNu = ca4GenJets.clone(
      rParam = cms.double(0.8),
      src = cms.InputTag("genParticlesForJetsNoNu")
      )
  # chiara end ----------------------------------

  
  if processCaloJets:

    # No L2L3 Residual on purpose
    jetCorrections = ('AK5Calo', ['L1Offset', 'L2Relative', 'L3Absolute'])

    addJetCollection(process, cms.InputTag('ak7CaloJets'),
        'AK7',
        'Calo',
        doJTA            = True,
        doBTagging       = True,
        jetCorrLabel     = jetCorrections,
        doType1MET       = correctMETWithT1,
        doL1Cleaning     = False,
        doL1Counters     = False,
        genJetCollection = cms.InputTag("ak7GenJets"),
        doJetID          = True,
        jetIdLabel       = "ak7"
        )



    switchJetCollection(process, cms.InputTag('ak5CaloJets'),
        doJTA            = True,
        doBTagging       = True,
        jetCorrLabel     = jetCorrections,
        doType1MET       = correctMETWithT1,
        genJetCollection = cms.InputTag("ak5GenJets"),
        doJetID          = True,
        jetIdLabel       = "ak5"
        )

    process.selectedPatJets.cut = "pt > 2"
    process.selectedPatJetsAK7Calo.cut = "pt > 2"

  else:
    removeSpecificPATObjects(process, names = ['Jets', 'METs'])

  if not runOnMC:
    # Remove MC Matching
    removeMCMatching(process, names = ["All"])

  removeSpecificPATObjects(process, names = ['Electrons', 'Muons', 'Taus'])

  if runCHS:
    print "##########################"
    print "Running CHS sequence"
    print "##########################"

  process.analysisSequence = cms.Sequence()

  process.analysisSequence *= process.sequence_nochs
  #if runCHS:
  #  process.analysisSequence *= process.sequence_chs

  # chiara init ----------------------------------
  if processCA8Jets:
    process.analysisSequence *= process.ca8PFJetsPFlow
    print("done process.ca8PFJetsPFlow")
    process.analysisSequence *= process.ca8GenJetsNoNu
    print("done process.ca8GenJetsNoNu")

    # nuovo


  # chiara end ----------------------------------


  #GIULIA
  # Quark Gluon tagging
  #process.analysisSequence *= process.QuarkGluonTagger

  # Add default pat sequence to our path
  # This brings to life TcMET, Calo jets and Photons
  ########process.analysisSequence *= process.patDefaultSequence

  # Add our PhotonIsolationProducer to the analysisSequence. This producer compute pf isolations
  # for our photons
  process.photonPFIsolation = cms.EDProducer("PhotonIsolationProducer",
      src = cms.InputTag("selectedPatPhotons")
      )

  ##########process.analysisSequence *= process.photonPFIsolation

  # Filtering

  # require physics declared
  process.load('HLTrigger.special.hltPhysicsDeclared_cfi')
  process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis'

  # require scraping filter
  process.scrapingVeto = cms.EDFilter("FilterOutScraping",
      applyfilter = cms.untracked.bool(True),
      debugOn = cms.untracked.bool(False),
      numtrack = cms.untracked.uint32(10),
      thresh = cms.untracked.double(0.25)
      )

  # Count events
  process.nEventsTotal    = cms.EDProducer("EventCountProducer")
  process.nEventsFiltered = cms.EDProducer("EventCountProducer")

  # MET Filters
  process.load("RecoMET.METFilters.metFilters_cff")

  # HCAL Laser filter : work only on Winter13 rereco
  process.load("EventFilter.HcalRawToDigi.hcallaserFilterFromTriggerResult_cff")

  # Let it run
  process.p = cms.Path(
      process.nEventsTotal +

      # Filters
      process.hcalfilter +
      process.primaryVertexFilter +
      process.scrapingVeto +
      process.metFilters +

      process.goodOfflinePrimaryVertices +

      # Physics
      process.analysisSequence +

      process.nEventsFiltered
      )

  if runOnMC:
    process.p.remove(process.hcalfilter)
    process.p.remove(process.scrapingVeto)

  # Add PF2PAT output to the created file
  from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning
  #process.load("CommonTools.ParticleFlow.PF2PAT_EventContent_cff")
  process.out.outputCommands = cms.untracked.vstring('drop *',    
                                                     #process.out.outputCommands = cms.untracked.vstring('keep *')   #'drop *',
                                                     'keep *_*_*_SIM',
                                                     'keep *_*_*_HLT',
                                                     'keep *_*_*_RECO',
                                                     'keep *_*ca8*_*_PAT')
      #'keep *_photonCore_*_*',
      #'keep double_kt6*Jets*_rho_*',
      #'keep *_goodOfflinePrimaryVertices_*_*',
      #'keep recoPFCandidates_particleFlow_*_*',

      # Content of *patEventContentNoCleaning
      #'keep *_selectedPatPhotons*_*_*', 'keep *_selectedPatElectrons*_*_*', 'keep *_selectedPatMuons*_*_*', 'keep *_selectedPatTaus*_*_*', 'keep *_selectedPatJets*_*_*', 'drop *_selectedPatJets_pfCandidates_*', 'drop *_*PF_caloTowers_*', 'drop *_*JPT_pfCandidates_*', 'drop *_*Calo_pfCandidates_*', 'keep *_patMETs*_*_*', 'keep *_selectedPatPFParticles*_*_*', 'keep *_selectedPatTrackCands*_*_*',
      #'keep *_cleanPatPhotons*_*_*', 'keep *_cleanPatElectrons*_*_*', 'keep *_cleanPatMuons*_*_*', 'keep *_cleanPatTaus*_*_*',
      #'keep *_cleanPatJets*_*_*', 'keep *_cleanPatHemispheres*_*_*', 'keep *_cleanPatPFParticles*_*_*',
      #'keep *_cleanPatTrackCands*_*_*',
      #'drop *_*PFlow_caloTowers_*',
                                                     
      # Type I residual
      #'drop *_selectedPatJetsForMET*_*_PAT',
      #'keep *_patPFMet*_*_PAT', # Keep raw met

      # Trigger
      #'keep *_TriggerResults_*_HLT',

      # Debug
      #'keep *_pf*_*_PAT'

      # Photon ID
      #'keep *_patConversions*_*_*',
      #'keep *_photonPFIsolation*_*_*',

      # Quark Gluon tagging
      #'keep *_QGTagger*_*_*',
      #'drop *_kt6PFJetsIsoQG_*_PAT',
      #'drop *_kt6PFJetsQG_*_PAT',
      # MC truth
      #'keep *_genParticles_*_*'
      #)

  if runOnMC:
    process.out.outputCommands.extend(['keep *_addPileupInfo_*_*', 'keep *_generator_*_*'])

  # switch on PAT trigger
  # from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger
  # switchOnTrigger( process )

  ## ------------------------------------------------------
  #  In addition you usually want to change the following
  #  parameters:
  ## ------------------------------------------------------
  #
  process.GlobalTag.globaltag = "%s::All" % (globalTag) ##  (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions)
  #                                         ##
  #process.source.fileNames =  cms.untracked.vstring('file:input_data.root')  ##  (e.g. 'file:AOD.root')
  #                                         ##
  #process.maxEvents.input = 2500
  process.maxEvents.input = 5000
  #                                         ##
  #   process.out.outputCommands = [ ... ]  ##  (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py)
  #                                         ##
  process.options.wantSummary = False   ##  (to suppress the long output at the end of the job)
  process.MessageLogger.cerr.FwkReport.reportEvery = 1000

  # Remove annoying ecalLaser messages
  process.MessageLogger.suppressError = cms.untracked.vstring ('ecalLaserCorrFilter')

  return process
Пример #15
0
def addPATSequences(process, runMC):
    # Load the PAT config
    from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent
    process.out = cms.OutputModule(
        "PoolOutputModule",
        fileName=cms.untracked.string('patTuple.root'),
        SelectEvents=cms.untracked.PSet(SelectEvents=cms.vstring('pat_step')),
        outputCommands=cms.untracked.vstring('drop *', *patEventContent))
    ###
    process.load('PhysicsTools.PatAlgos.patSequences_cff')

    from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT
    postfix = "PFlow"
    jetAlgo = "AK5"
    jetCorrections = None
    if runMC:
        jetCorrections = ('AK5PFchs',
                          ['L1FastJet', 'L2Relative', 'L3Absolute'])
    else:
        jetCorrections = ('AK5PFchs', [
            'L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual'
        ])

    usePF2PAT(process,
              runPF2PAT=True,
              jetAlgo=jetAlgo,
              runOnMC=runMC,
              postfix=postfix,
              jetCorrections=jetCorrections)

    #from PhysicsTools.PatAlgos.tools.coreTools import removeMCMatching
    #if not runMC:
    #    removeMCMatching(process, ['All'],"")

    #-----------------Customization----------------
    process.pfPileUpPFlow.Enable = True
    process.pfPileUpPFlow.checkClosestZVertex = False
    process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfPileUpPFlow.verbose = True
    process.pfJetsPFlow.doAreaFastjet = True
    process.pfJetsPFlow.doRhoFastjet = False

    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(minNdof=cms.double(4.0),
                                      maxZ=cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices'))

    # Compute the mean pt per unit area (rho) from the PFCHS inputs
    #from RecoJets.Configuration.RecoPFJets_cff import kt6PFJets,ak5PFJets
    #process.kt6PFJetsPFlow = kt6PFJets.clone(
    #	src = cms.InputTag('pfNoElectron'+postfix),
    #	doAreaFastjet = cms.bool(True),
    #	doRhoFastjet = cms.bool(True)
    #	)
    #process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho")
    from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
    process.kt6PFJetsForPAT = kt4PFJets.clone(rParam=cms.double(0.6),
                                              doAreaFastjet=cms.bool(True),
                                              doRhoFastjet=cms.bool(True))
    process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsForPAT", "rho")

    from RecoJets.JetProducers.ak5PFJets_cfi import ak5PFJets
    process.ak5PFJetsPileUp = ak5PFJets.clone(src=cms.InputTag('pfPileUp' +
                                                               postfix))

    # Switch on PAT trigger
    from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger
    #switchOnTrigger( process,triggerProducer = 'patTrigger', triggerEventProducer = 'patTriggerEvent', sequence = 'patPF2PATSequence',hltProcess = 'HLT', outputModule = 'out')

    switchOnTrigger(process, sequence='patPF2PATSequence' + postfix)
    process.patTrigger.addL1Algos = cms.bool(True)
    switchOnTrigger(process, sequence='patPF2PATSequence' +
                    postfix)  # to fix event content
    #-------------------------------------------------------------------------------------------------------------

    # Add modules to default sequence
    #if runMC:
    #    getattr(process, "patElectrons"+postfix).embedGenMatch = True
    #    getattr(process, "patMuons"+postfix).embedGenMatch = True
    #else:
    #    getattr(process, "patElectrons"+postfix).embedGenMatch = False
    #    getattr(process, "patMuons"+postfix).embedGenMatch = False

    # Add modules to default sequence
    getattr(process, "patPF2PATSequence" + postfix).replace(
        getattr(process, "pfNoElectron" + postfix),
        getattr(process, "pfNoElectron" + postfix) * process.kt6PFJetsForPAT)

    getattr(process, "patPF2PATSequence" + postfix).replace(
        getattr(process, "pfNoPileUp" + postfix),
        getattr(process, "pfNoPileUp" + postfix) * process.ak5PFJetsPileUp)

    #----------------------------------------------
    # Let it run
    process.pat_step = cms.Path(
        process.goodOfflinePrimaryVertices *
        #process.patDefaultSequence  +
        getattr(process, "patPF2PATSequence" + postfix))

    # Add PatTrigger output to the created file
    from PhysicsTools.PatAlgos.patEventContent_cff import patTriggerEventContent
    # Add PF2PAT output to the created file
    from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning
    patOutputCommands = cms.untracked.vstring(
        'drop *', 'keep recoPFCandidates_particleFlow_*_*',
        *patEventContentNoCleaning)

    # Adjust the event content
    patOutputCommands += [
        #'keep *_selectedPat*_*_*',
        'keep *_genParticles*_*_*',
        'keep *_offlinePrimaryVertices*_*_*',
        'keep *_goodOfflinePrimaryVertices*_*_*',
        #'keep *_pileUpN*PrimaryVertices_*_*',
        #'keep *_pfPileUpExclN*_*_*',
        'keep *_pfPileUpPFlow*_*_*',
        'keep *_pfNoPileUpPFlow*_*_*',
        'keep *_ak5PFJetsPileUp_*_*',
        'keep *_ak5PFJets_*_*',
        'keep recoTracks_generalTracks_*_*',
        'keep HcalNoiseSummary_hcalnoise_*_*',
        'keep *_BeamHaloSummary_*_*',
        #------- Trigger collections ------
        'keep edmTriggerResults_TriggerResults_*_*',
        'keep *_hltTriggerSummaryAOD_*_*',
        'keep L1GlobalTriggerObjectMapRecord_*_*_*',
        'keep L1GlobalTriggerReadoutRecord_*_*_*',
        #------- CASTOR rec hits ------
        'keep *_logErrorHarvester_*_*',
        'keep *_castorreco_*_*',
        #------- Calo towers (just for now) ------
        'keep *_towerMaker_*_*',
        #---------------PatTrigger----------------
        'keep patTriggerObjects_patTrigger*_*_*',
        'keep patTriggerFilters_patTrigger*_*_*',
        'keep patTriggerPaths_patTrigger*_*_*',
        'keep patTriggerEvent_patTriggerEvent*_*_*'
    ]
    process.out.outputCommands = patOutputCommands

    # top projections in PF2PAT:
    getattr(process, "pfNoPileUp" + postfix).enable = True
    getattr(process, "pfNoMuon" + postfix).enable = True
    getattr(process, "pfNoElectron" + postfix).enable = True
    getattr(process, "pfNoTau" + postfix).enable = False
    getattr(process, "pfNoJet" + postfix).enable = True

    # verbose flags for the PF2PAT modules
    getattr(process, "pfNoJet" + postfix).verbose = False
Пример #16
0
#-# Copyright (c) 2014 - All Rights Reserved
#-#   Joram Berger <*****@*****.**>
#-#   Roger Wolf <*****@*****.**>

import FWCore.ParameterSet.Config as cms
import Kappa.Skimming.tools as tools

cmssw_version_number = tools.get_cmssw_version_number()

## ------------------------------------------------------------------------
## Good offline PV selection: 
from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter',
    src = cms.InputTag('offlinePrimaryVertices'),
    filterParams = pvSelector.clone( minNdof = 4.0, maxZ = 24.0 ),
)

goodOfflinePrimaryVertexEvents = cms.EDFilter("KVertexFilter",
    minNumber = cms.uint32(1),
    maxNumber = cms.uint32(999999),
    src = cms.InputTag("goodOfflinePrimaryVertices")
)

## ------------------------------------------------------------------------
## TopProjections from CommonTools/ParticleFlow:
from CommonTools.ParticleFlow.PFBRECO_cff import *
if (cmssw_version_number.startswith("7_4")):
	from CommonTools.ParticleFlow.pfParticleSelection_cff import *

## pf candidate configuration for everything but CHS jets
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'):
    """Default config for Z+jet skims with Kappa

       This is used in a cmssw config file via:
       import skim_base
       process = skim_base.getBaseConfig('START53_V12', "testfile.root")
    """
    # Set the globalt tag and datatype for testing or by grid-control ---------
    data = (datatype == 'data')
    if data:
        testfile = 'file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root'
        if '@' in globaltag: globaltag = 'FT53_V21A_AN6'
        maxevents = maxevents or 100
    else:
        testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root'
        if '@' in globaltag: globaltag = 'START53_V19F'
        maxevents = maxevents or 100
        datatype = 'mc'
    print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile

    # Basic process setup -----------------------------------------------------
    process = cms.Process('kappaSkim')
    process.source = cms.Source('PoolSource',
        fileNames = cms.untracked.vstring(testfile))
    process.maxEvents = cms.untracked.PSet(
        input = cms.untracked.int32(maxevents))

    # Includes + Global Tag ---------------------------------------------------
    process.load('FWCore.MessageService.MessageLogger_cfi')
    process.load('Configuration.StandardSequences.Services_cff')
    process.load('Configuration.StandardSequences.MagneticField_38T_cff')
    process.load('Configuration.Geometry.GeometryIdeal_cff')
    process.load('Configuration.Geometry.GeometryPilot2_cff')
    process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi')
    process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
    process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')
    process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi')
    process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
    process.load('Configuration.StandardSequences.Reconstruction_cff')
    process.GlobalTag.globaltag = globaltag + '::All'

    # Reduce amount of messages -----------------------------------------------
    process.MessageLogger.default = cms.untracked.PSet(
        ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5)))
    process.MessageLogger.cerr.FwkReport.reportEvery = 40

    # Produce PF muon isolation -----------------------------------------------
    from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace
    process.pfmuIsoDepositPFCandidates = isoDepositReplace('muons', 'particleFlow')
    process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates)

    # Create good primary vertices to be used for PF association --------------
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone(minNdof = cms.double(4.0), maxZ = cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices')
    )
    process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.ak7PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.kt4PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')


    # CHS Jets with the NoPU sequence -----------------------------------------
    process.load('CommonTools.ParticleFlow.PFBRECO_cff')
    process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfPileUp.checkClosestZVertex = cms.bool(False)
    process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO)
    process.ak5PFJetsCHS = process.ak5PFJets.clone(src = cms.InputTag('pfNoPileUp'))
    process.ak7PFJetsCHS = process.ak7PFJets.clone(src = cms.InputTag('pfNoPileUp'))
    process.kt4PFJetsCHS = process.kt4PFJets.clone(src = cms.InputTag('pfNoPileUp'))
    process.kt6PFJetsCHS = process.kt6PFJets.clone(src = cms.InputTag('pfNoPileUp'))

    # Gen Jets without neutrinos ----------------------------------------------
    if datatype == 'mc':
        process.load('RecoJets.JetProducers.ak5GenJets_cfi')
        process.NoNuGenJets = cms.Path(process.genParticlesForJetsNoNu *
            process.genParticlesForJets *
            process.ak5GenJetsNoNu * process.ak7GenJetsNoNu *
            process.kt4GenJetsNoNu * process.kt4GenJets *
            process.kt6GenJetsNoNu * process.kt6GenJets
        )

    # Path to Redo all Jets ---------------------------------------------------
    process.jetsRedo = cms.Path(
        process.ak5PFJets * process.ak7PFJets * process.kt4PFJets * process.kt6PFJets *
        process.ak5PFJetsCHS * process.ak7PFJetsCHS * process.kt4PFJetsCHS * process.kt6PFJetsCHS
    )

    # MET filters -------------------------------------------------------------
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    # Create good vertices for the trackingFailure MET filter
    process.goodVertices = cms.EDFilter("VertexSelector",
        filter = cms.bool(False),
        src = cms.InputTag("offlinePrimaryVertices"),
        cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"),
    )
    # The good primary vertex filter for other MET filters
    process.primaryVertexFilter = cms.EDFilter("VertexSelector",
        filter = cms.bool(True),
        src = cms.InputTag("offlinePrimaryVertices"),
        cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
    )
    process.noscraping = cms.EDFilter("FilterOutScraping",
        applyfilter = cms.untracked.bool(True),
        debugOn = cms.untracked.bool(False),
        numtrack = cms.untracked.uint32(10),
        thresh = cms.untracked.double(0.25)
    )
    process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')
    process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi')
    process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi')
    process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(False)
    process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True)
    process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi')
    process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA")
    process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi')
    process.load('RecoMET.METFilters.eeBadScFilter_cfi')
    process.load('RecoMET.METFilters.eeNoiseFilter_cfi')
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    process.load('RecoMET.METFilters.trackingFailureFilter_cfi')
    process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi')
    process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi')

    process.hcalLaserEventFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.eeBadScFilter.taggingMode = cms.bool(True)
    process.eeNoiseFilter.taggingMode = cms.bool(True)
    process.ecalLaserCorrFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone(
        ptMin = cms.double(5000.0)
    )
    process.hcalNoiseFilter = process.beamScrapingFilter.clone()
    process.beamHaloFilter = process.beamScrapingFilter.clone()
    process.filtersSeq = cms.Sequence(
        process.primaryVertexFilter *
        process.hcalLaserEventFilter +
        process.EcalDeadCellTriggerPrimitiveFilter +
        process.EcalDeadCellBoundaryEnergyFilter +
        process.eeBadScFilter +
        process.eeNoiseFilter +
        process.ecalLaserCorrFilter +
        process.goodVertices * process.trackingFailureFilter +
        process.inconsistentMuonPFCandidateFilter +
        process.greedyMuonPFCandidateFilter +
        process.noscraping * process.beamScrapingFilter +
        process.HBHENoiseFilter * process.hcalNoiseFilter +
        process.CSCTightHaloFilter * process.beamHaloFilter
    )
    process.metFilters = cms.Path(process.filtersSeq)

    # MET correction ----------------------------------------------------------
    process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff")
    process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices')
    # Type-0
    process.pfMETCHS = process.pfType1CorrectedMet.clone(
        applyType1Corrections = cms.bool(False),
        applyType0Corrections = cms.bool(True)
    )
    # MET Path
    process.metCorrections = cms.Path(
            process.producePFMETCorrections * process.pfMETCHS
    )

    # Require two good muons --------------------------------------------------
    process.goodMuons = cms.EDFilter('CandViewSelector',
        src = cms.InputTag('muons'),
        cut = cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()"),
    )
    process.twoGoodMuons = cms.EDFilter('CandViewCountFilter',
        src = cms.InputTag('goodMuons'),
        minNumber = cms.uint32(2),
    )

    # Configure tuple generation ----------------------------------------------
    process.load('Kappa.Producers.KTuple_cff')
    process.kappatuple = cms.EDAnalyzer('KTuple',
        process.kappaTupleDefaultsBlock,
        outputFile = cms.string("skim_" + datatype + "_no-tagging.root"),
    )

    process.kappatuple.verbose = cms.int32(0)
    process.kappatuple.active = cms.vstring(
        'LV', 'Muons', 'TrackSummary', 'VertexSummary', 'BeamSpot',
        'JetArea', 'PFMET', 'PFJets',
        'FilterSummary',
    )
    if data:
        additional_actives = ['DataMetadata']
    else:
        additional_actives = ['GenMetadata', 'GenParticles']
    for active in additional_actives:
        process.kappatuple.active.append(active)

    # custom whitelist, otherwise the HLT trigger bits are not sufficient!
    process.kappatuple.Metadata.hltWhitelist = cms.vstring(
        # matches 'HLT_Mu17_Mu8_v7' etc.
        "^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$",
        # matches 'HLT_DoubleMu7_v8' etc.
        "^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$",
    )
    process.kappatuple.Metadata.tauDiscrProcessName = cms.untracked.string("XXXXXXXXX")
    process.kappatuple.GenParticles.genParticles.selectedStatus = cms.int32(31)

    # use the good objects not temporary ones
    process.kappatuple.VertexSummary.whitelist = cms.vstring(".*fflinePrimaryVertices")
    process.kappatuple.VertexSummary.blacklist += cms.vstring(".*QG.*")
    process.kappatuple.LV.whitelist += cms.vstring("recoCaloJets.*")
    process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*")
    process.kappatuple.PFJets.whitelist = cms.vstring("recoPFJets.*kappaSkim")
    process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet")
    process.kappatuple.PFJets.blacklist = cms.vstring(".*Tau.*", "recoPFJets_pfJets.*kappaSkim", ".*QG.*", ".*KT.*")
    del process.kappatuple.GenParticles.genStableMuons

    process.pathKappa = cms.Path(
        process.goodMuons * process.twoGoodMuons * process.kappatuple
    )

    # Process schedule --------------------------------------------------------
    process.schedule = cms.Schedule(
        process.metFilters,
        process.pfCHS,
        process.jetsRedo,
        process.pfMuonIso,
        process.metCorrections,
        process.pathKappa,
    )
    if not data:
        process.schedule.insert(0, process.NoNuGenJets)

    return process
Пример #18
0
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'):
    """Default config for Z+jet skims with Kappa

       This is used in a cmssw config file via:
       import skim_base
       process = skim_base.getBaseConfig('START53_V12', "testfile.root")
    """
    # Set the globalt tag and datatype for testing or by grid-control ---------
    data = (datatype == 'data')
    if data:
        testfile = 'file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root'
        if '@' in globaltag: globaltag = 'FT53_V21A_AN6'
        maxevents = maxevents or 100
    else:
        testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root'
        if '@' in globaltag: globaltag = 'START53_V19F'
        maxevents = maxevents or 100
        datatype = 'mc'
    print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile

    # Basic process setup -----------------------------------------------------
    process = cms.Process('kappaSkim')
    process.source = cms.Source('PoolSource',
                                fileNames=cms.untracked.vstring(testfile))
    process.maxEvents = cms.untracked.PSet(
        input=cms.untracked.int32(maxevents))

    # Includes + Global Tag ---------------------------------------------------
    process.load('FWCore.MessageService.MessageLogger_cfi')
    process.load('Configuration.StandardSequences.Services_cff')
    process.load('Configuration.StandardSequences.MagneticField_38T_cff')
    process.load('Configuration.Geometry.GeometryIdeal_cff')
    process.load('Configuration.Geometry.GeometryPilot2_cff')
    process.load(
        'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi'
    )
    process.load(
        'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi'
    )
    process.load(
        'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi'
    )
    process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi')
    process.load(
        'Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
    process.load('Configuration.StandardSequences.Reconstruction_cff')
    process.GlobalTag.globaltag = globaltag + '::All'

    # Reduce amount of messages -----------------------------------------------
    process.MessageLogger.default = cms.untracked.PSet(
        ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5)))
    process.MessageLogger.cerr.FwkReport.reportEvery = 40

    # Produce PF muon isolation -----------------------------------------------
    from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace
    process.pfmuIsoDepositPFCandidates = isoDepositReplace(
        'muons', 'particleFlow')
    process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates)

    # Create good primary vertices to be used for PF association --------------
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(minNdof=cms.double(4.0),
                                      maxZ=cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices'))
    process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.ak7PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.kt4PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')

    # CHS Jets with the NoPU sequence -----------------------------------------
    process.load('CommonTools.ParticleFlow.PFBRECO_cff')
    process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfPileUp.checkClosestZVertex = cms.bool(False)
    process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices *
                             process.PFBRECO)
    process.ak5PFJetsCHS = process.ak5PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))
    process.ak7PFJetsCHS = process.ak7PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))
    process.kt4PFJetsCHS = process.kt4PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))
    process.kt6PFJetsCHS = process.kt6PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))

    # Gen Jets without neutrinos ----------------------------------------------
    if datatype == 'mc':
        process.load('RecoJets.JetProducers.ak5GenJets_cfi')
        process.NoNuGenJets = cms.Path(
            process.genParticlesForJetsNoNu * process.genParticlesForJets *
            process.ak5GenJetsNoNu * process.ak7GenJetsNoNu *
            process.kt4GenJetsNoNu * process.kt4GenJets *
            process.kt6GenJetsNoNu * process.kt6GenJets)

    # Path to Redo all Jets ---------------------------------------------------
    process.jetsRedo = cms.Path(process.ak5PFJets * process.ak7PFJets *
                                process.kt4PFJets * process.kt6PFJets *
                                process.ak5PFJetsCHS * process.ak7PFJetsCHS *
                                process.kt4PFJetsCHS * process.kt6PFJetsCHS)

    # MET filters -------------------------------------------------------------
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    # Create good vertices for the trackingFailure MET filter
    process.goodVertices = cms.EDFilter(
        "VertexSelector",
        filter=cms.bool(False),
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string(
            "!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"),
    )
    # The good primary vertex filter for other MET filters
    process.primaryVertexFilter = cms.EDFilter(
        "VertexSelector",
        filter=cms.bool(True),
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string(
            "!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
    )
    process.noscraping = cms.EDFilter("FilterOutScraping",
                                      applyfilter=cms.untracked.bool(True),
                                      debugOn=cms.untracked.bool(False),
                                      numtrack=cms.untracked.uint32(10),
                                      thresh=cms.untracked.double(0.25))
    process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')
    process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi')
    process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi')
    process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(
        False)
    process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True)
    process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi')
    process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag(
        "ecalTPSkimNA")
    process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi')
    process.load('RecoMET.METFilters.eeBadScFilter_cfi')
    process.load('RecoMET.METFilters.eeNoiseFilter_cfi')
    process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
    process.load('RecoMET.METFilters.trackingFailureFilter_cfi')
    process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi')
    process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi')

    process.hcalLaserEventFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.eeBadScFilter.taggingMode = cms.bool(True)
    process.eeNoiseFilter.taggingMode = cms.bool(True)
    process.ecalLaserCorrFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone(
        ptMin=cms.double(5000.0))
    process.hcalNoiseFilter = process.beamScrapingFilter.clone()
    process.beamHaloFilter = process.beamScrapingFilter.clone()
    process.filtersSeq = cms.Sequence(
        process.primaryVertexFilter * process.hcalLaserEventFilter +
        process.EcalDeadCellTriggerPrimitiveFilter +
        process.EcalDeadCellBoundaryEnergyFilter + process.eeBadScFilter +
        process.eeNoiseFilter + process.ecalLaserCorrFilter +
        process.goodVertices * process.trackingFailureFilter +
        process.inconsistentMuonPFCandidateFilter +
        process.greedyMuonPFCandidateFilter +
        process.noscraping * process.beamScrapingFilter +
        process.HBHENoiseFilter * process.hcalNoiseFilter +
        process.CSCTightHaloFilter * process.beamHaloFilter)
    process.metFilters = cms.Path(process.filtersSeq)

    # MET correction ----------------------------------------------------------
    process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff")
    process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices')
    # Type-0
    process.pfMETCHS = process.pfType1CorrectedMet.clone(
        applyType1Corrections=cms.bool(False),
        applyType0Corrections=cms.bool(True))
    # MET Path
    process.metCorrections = cms.Path(process.producePFMETCorrections *
                                      process.pfMETCHS)

    # Require two good muons --------------------------------------------------
    process.goodMuons = cms.EDFilter(
        'CandViewSelector',
        src=cms.InputTag('muons'),
        cut=cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()"),
    )
    process.twoGoodMuons = cms.EDFilter(
        'CandViewCountFilter',
        src=cms.InputTag('goodMuons'),
        minNumber=cms.uint32(2),
    )

    # Configure tuple generation ----------------------------------------------
    process.load('Kappa.Producers.KTuple_cff')
    process.kappatuple = cms.EDAnalyzer(
        'KTuple',
        process.kappaTupleDefaultsBlock,
        outputFile=cms.string("skim_" + datatype + "_no-tagging.root"),
    )

    process.kappatuple.verbose = cms.int32(0)
    process.kappatuple.active = cms.vstring(
        'LV',
        'Muons',
        'TrackSummary',
        'VertexSummary',
        'BeamSpot',
        'JetArea',
        'PFMET',
        'PFJets',
        'FilterSummary',
    )
    if data:
        additional_actives = ['DataMetadata']
    else:
        additional_actives = ['GenMetadata', 'GenParticles']
    for active in additional_actives:
        process.kappatuple.active.append(active)

    # custom whitelist, otherwise the HLT trigger bits are not sufficient!
    process.kappatuple.Metadata.hltWhitelist = cms.vstring(
        # matches 'HLT_Mu17_Mu8_v7' etc.
        "^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$",
        # matches 'HLT_DoubleMu7_v8' etc.
        "^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$",
    )
    process.kappatuple.Metadata.tauDiscrProcessName = cms.untracked.string(
        "XXXXXXXXX")
    process.kappatuple.GenParticles.genParticles.selectedStatus = cms.int32(31)

    # use the good objects not temporary ones
    process.kappatuple.VertexSummary.whitelist = cms.vstring(
        ".*fflinePrimaryVertices")
    process.kappatuple.VertexSummary.blacklist += cms.vstring(".*QG.*")
    process.kappatuple.LV.whitelist += cms.vstring("recoCaloJets.*")
    process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*")
    process.kappatuple.PFJets.whitelist = cms.vstring("recoPFJets.*kappaSkim")
    process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet")
    process.kappatuple.PFJets.blacklist = cms.vstring(
        ".*Tau.*", "recoPFJets_pfJets.*kappaSkim", ".*QG.*", ".*KT.*")
    del process.kappatuple.GenParticles.genStableMuons

    process.pathKappa = cms.Path(process.goodMuons * process.twoGoodMuons *
                                 process.kappatuple)

    # Process schedule --------------------------------------------------------
    process.schedule = cms.Schedule(
        process.metFilters,
        process.pfCHS,
        process.jetsRedo,
        process.pfMuonIso,
        process.metCorrections,
        process.pathKappa,
    )
    if not data:
        process.schedule.insert(0, process.NoNuGenJets)

    return process
Пример #19
0
    #doL1Counters=False,
    #doJetID = False,
    #genJetCollection = cms.InputTag("ak10GenJetsNoNu")
#)

#This line adds the tagInfos for the jet collection with label = 'selectedPatJetsPFlow'.
#A similar line is needed for each jet collection!
process.patJetsAK5PF.addTagInfos = cms.bool(True)
process.patJetsPFlow.addTagInfos = cms.bool(True)

## Produce a collection of good primary vertices
from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
    filterParams = pvSelector.clone(
        minNdof = cms.double(4.0), # this is >= 4
        maxZ = cms.double(24.0),
        maxRho = cms.double(2.0)
    ),
    src = cms.InputTag('offlinePrimaryVertices')
)

## Prune GenParticles
process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi")
process.prunedGenParticles = cms.EDProducer("GenParticlePruner",
    src = cms.InputTag("genParticles"),
    select = cms.vstring(
        "drop  *",
        "keep status = 3", # keeps  particles from the hard matrix element
        "keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1", # keeps e/mu and nus with status 1
        "keep (abs(pdgId) = 15) & status = 3", # keeps taus
        "++keep (abs(pdgId) = 5)" # keeps all b quarks and all their ancestors
Пример #20
0
def configure(process, options):
    """Apply configuration to a process."""

    # create the main module path
    process.add_path('path')

    # enable the JSON filter (if given)
    if options.jsonFilterFile:
        process.enable_json_lumi_filter(options.jsonFilterFile)

    # == configure CMSSW modules ==========================================

    # -- Jets (default from miniAOD) --------------------------------------

    if options.withPATCollections:
        # just write out miniAOD jets
        process.add_output_commands(
            'keep patJets_slimmedJets_*_*',
            'keep patJets_slimmedJetsAK8_*_*',
        )

    # -- Jets (from miniAOD, but with possibly new JECs from GT) ----------

    from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection

    updateJetCollection(
        process,
        jetSource = cms.InputTag('slimmedJets'),
        labelName = 'UpdatedJEC',
        jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None')  # Update: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1)
    )

    updateJetCollection(
        process,
        jetSource = cms.InputTag('slimmedJetsAK8'),
        labelName = 'UpdatedJECAK8',
        jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None')  # Update: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1)
    )

    process.jecSequence = cms.Sequence(process.patJetCorrFactorsUpdatedJEC * process.updatedPatJetsUpdatedJEC)
    process.jecSequenceAK8 = cms.Sequence(process.patJetCorrFactorsUpdatedJECAK8 * process.updatedPatJetsUpdatedJECAK8)

    process.path *= process.jecSequence
    process.path *= process.jecSequenceAK8

    if options.withPATCollections:
        process.add_output_commands(
            'keep patJets_updatedPatJetsUpdatedJEC_*_*',
            'keep patJets_updatedPatJetsUpdatedJECAK8_*_*',
        )

    # -- Jets (reclustered with jet toolbox) ------------------------------

    from Karma.Common.Sequences.jetToolbox_cff import addJetToolboxSequences

    # create reclustering sequences

    jet_collection_names = []

    # AK4CHS jets (include pileupJetID)
    jet_collection_names += addJetToolboxSequences(
        process, isData=options.isData,
        min_jet_pt=15,
        jet_algorithm_specs=('ak4',),
        pu_subtraction_methods=('CHS',),
        do_pu_jet_id=True
    )

    # AK8CHS jets (no pileupJetID available)
    jet_collection_names += addJetToolboxSequences(
        process, isData=options.isData,
        min_jet_pt=15,
        jet_algorithm_specs=('ak8',),
        pu_subtraction_methods=('CHS',),
        do_pu_jet_id=False
    )

    # AK4Puppi and AK8Puppi jets
    jet_collection_names += addJetToolboxSequences(
        process, isData=options.isData,
        min_jet_pt=15,
        jet_algorithm_specs=('ak4', 'ak8',),
        pu_subtraction_methods=('Puppi',),
        do_pu_jet_id=False
    )

    # put reclustering sequences on path
    for _jet_collection_name in jet_collection_names:
        process.path *= getattr(process, _jet_collection_name)
        ## write out reclustered jets
        #process.add_output_commands('keep patJets_{}_*_*'.format(_jet_collection_name))

    # -- Jet ID (precomputed and embedded as userInts) -------------------

    for _jet_collection_name in jet_collection_names:
        _id_producer_name = "{}IDValueMap".format(_jet_collection_name)
        _enriched_jet_collection_name = "{}WithJetIDUserData".format(_jet_collection_name)

        # produce the jet id value map
        setattr(
            process,
            _id_producer_name,
            cms.EDProducer("PatJetIDValueMapProducer",
                filterParams = cms.PSet(
                    version = cms.string('WINTER16'),
                    quality = cms.string('TIGHTLEPVETO'),
                ),
                src = cms.InputTag(_jet_collection_name)
            )
        )

        # embed jet id information in pat::Jet itprocess
        setattr(
            process,
            _enriched_jet_collection_name,
            cms.EDProducer("PATJetUserDataEmbedder",
                 src = cms.InputTag(_jet_collection_name),
                 userInts = cms.PSet(
                    jetIdWinter16TightLepVeto = cms.InputTag(_id_producer_name),
                 ),
            )
        )

        # add modules to path
        process.path *= getattr(process, _id_producer_name)
        process.path *= getattr(process, _enriched_jet_collection_name)

        # write out ID-enriched jet collection
        if options.withPATCollections:
            process.add_output_commands(
                'keep patJets_{}_*_*'.format(_enriched_jet_collection_name)
            )

    # -- MET --------------------------------------------------------------

    from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD

    # run this to keep MET Type-I correction up-to-date with currently applied JECs
    runMetCorAndUncFromMiniAOD(
       process,
       isData=True,
    )

    process.path *= process.fullPatMetSequence

    if options.withPATCollections:
        process.add_output_commands(
            'keep patMETs_slimmedMETs_*_*',
        )

    # -- Electrons --------------------------------------------------------

    # just write out miniAOD electrons
    if options.withPATCollections:
        process.add_output_commands(
            "keep patElectrons_slimmedElectrons_*_*",
        )

    # Note: electron scale/smearing correction information is contained in
    # the following userFloats: 'ecalEnergyPreCorr' and 'ecalEnergyPostCorr'

    # Note: electron ID information is stored as "pseudo-userData" in
    # PAT::Electrons (not in the inherited PAT::Object userData variables)
    # and can be accessed using PAT::Electrons::electronID() with the
    # corresponding tag (e.g. 'cutBasedElectronID-Summer16-80X-V1-loose')


    # -- Muons ------------------------------------------------------------

    # just write out miniAOD muons
    if options.withPATCollections:
        process.add_output_commands(
            "keep patMuons_slimmedMuons_*_*",
        )

    # -- Primary Vertices -------------------------------------------------

    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

    # "good" primary vertices

    process.add_module(
        'goodOfflinePrimaryVertices',
        cms.EDFilter(
            'PrimaryVertexObjectFilter',
            src = cms.InputTag("offlineSlimmedPrimaryVertices"),
            filterParams = pvSelector.clone(
                maxZ = 24.0
            ),  # ndof >= 4, rho <= 2
        ),
        on_path='path',
        write_out=False,
    )

    # == END configure CMSSW modules ======================================



    # == configure Karma modules ==========================================

    # -- preliminary checks

    if options.useHLTFilter and not options.hltRegexes:
        raise ValueError(
            "Option 'useHLTFilter' is true, but 'hltRegexes' "
            "is empty: no events would be written out. Aborting!")
    elif not options.hltRegexes:
        print("[karmaSkim] WARNING: Option 'hltRegexes' is empty:"
              "no trigger information will be written out!")

    # -- General Event Information ----------------------------------------

    from Karma.Skimming.EventProducer_cfi import karmaEventProducer

    process.add_module(
        'karmaEvents',
        karmaEventProducer(isData=options.isData).clone(
            goodPrimaryVerticesSrc = cms.InputTag("goodOfflinePrimaryVertices"),
            hltProcessName = cms.string("HLT"),
            # interesting trigger paths must match one of these regexes:
            hltRegexes = cms.vstring(*options.hltRegexes),
            #hltRegexes = cms.vstring("HLT_(AK8)?PFJet[0-9]+_v[0-9]+", "HLT_DiPFJetAve[0-9]+_v[0-9]+"),
            metFiltersSrc = cms.InputTag("TriggerResults", "", options.metFiltersProcess),
        ),
        on_path='path',
        write_out=True,
    )

    # filter out event if no interesting HLT path fired (if requested)
    if options.useHLTFilter:
        process.add_module(
            'karmaEventHLTFilter',
            cms.EDFilter("EventHLTFilter",
                cms.PSet(
                    karmaEventSrc = cms.InputTag("karmaEvents")
                )
            ),
            on_path='path',
            write_out=False, # don't write out the TriggerResults object
        )

    # -- MC-specific event information ------------------------------------

    if not options.isData:

        from Karma.Skimming.GeneratorQCDInfoProducer_cfi import karmaGeneratorQCDInfoProducer

        process.add_module(
            'karmaGeneratorQCDInfos',
            karmaGeneratorQCDInfoProducer.clone(
                genEventInfoProductSrc = cms.InputTag("generator"),
            ),
            on_path='path',
            write_out=True,
        )

    # -- Trigger Objects --------------------------------------------------

    from Karma.Skimming.TriggerObjectCollectionProducer_cfi import karmaTriggerObjectCollectionProducer

    process.add_module(
        'karmaTriggerObjects',
        karmaTriggerObjectCollectionProducer.clone(
            karmaRunSrc = cms.InputTag("karmaEvents"),
        ),
        on_path='path',
        write_out=True,
    )

    # -- Gen-Particles (MC only) ------------------------------------------

    if not options.isData:

        from Karma.Skimming.GenParticleCollectionProducer_cfi import karmaGenParticleCollectionProducer

        process.add_module(
            'karmaGenParticles',
            karmaGenParticleCollectionProducer.clone(
                inputCollection = cms.InputTag("prunedGenParticles"),
            ),
            on_path='path',
            write_out=True,
        )

    # -- MET --------------------------------------------------------------

    from Karma.Skimming.METCollectionProducer_cfi import karmaMETCollectionProducer

    process.add_module(
        'karmaMETs',
        karmaMETCollectionProducer.clone(
            inputCollection = cms.InputTag("slimmedMETs"),
        ),
        on_path='path',
        write_out=True,
    )

    # -- MET correction levels (as edm::ValueMaps) ------------------------

    if options.withMETCorrectionLevels:

        from Karma.Skimming.METCorrectedLVValueMapProducer_cfi import karmaMETCorrectedLVValueMapProducer

        process.add_module(
            'karmaMETCorrectedLVs',
            karmaMETCorrectedLVValueMapProducer.clone(
                inputCollection = cms.InputTag("karmaMETs"),
                associationSpec = cms.VPSet(
                    # uncorrected MET
                    cms.PSet(
                        name = cms.string("Raw"),
                        transientMapKey = cms.string("corP4Raw"),
                    ),

                    # uncorrected MET (from CHS candidates)
                    cms.PSet(
                        name = cms.string("RawCHS"),
                        transientMapKey = cms.string("corP4RawCHS"),
                    ),

                    # uncorrected MET
                    cms.PSet(
                        name = cms.string("Type1"),
                        transientMapKey = cms.string("corP4Type1"),
                    ),
                )
            ),
            on_path='path',
            write_out=True,
        )

        from Karma.Skimming.METCorrectedSumEtValueMapProducer_cfi import karmaMETCorrectedSumEtValueMapProducer

        process.add_module(
            'karmaMETCorrectedSumEts',
            karmaMETCorrectedSumEtValueMapProducer.clone(
                inputCollection = cms.InputTag("karmaMETs"),
                associationSpec = cms.VPSet(
                    # uncorrected MET
                    cms.PSet(
                        name = cms.string("Raw"),
                        transientMapKey = cms.string("corSumEtRaw"),
                    ),

                    # uncorrected MET (from CHS candidates)
                    cms.PSet(
                        name = cms.string("RawCHS"),
                        transientMapKey = cms.string("corSumEtRawCHS"),
                    ),

                    # uncorrected MET
                    cms.PSet(
                        name = cms.string("Type1"),
                        transientMapKey = cms.string("corSumEtType1"),
                    ),
                )
            ),
            on_path='path',
            write_out=True,
        )

    # -- Jets -------------------------------------------------------------

    from Karma.Skimming.JetCollectionProducer_cfi import karmaJets
    from Karma.Skimming.JetCorrectedLVValueMapProducer_cfi import karmaJetCorrectedLVValueMapProducer, karmaJetCorrectedLVValueMapProducerForPuppi
    from Karma.Skimming.JetIdValueMapProducers_cfi import karmaJetIdValueMapProducer, karmaJetPileupIdValueMapProducer, karmaJetPileupIdDiscriminantValueMapProducer

    # create "karma::Jet" collections from pat::Jets
    for _jet_collection_name in jet_collection_names:

        # add karma modules for producing the skimmed jet collections
        _module_name = "karma{}{}".format(_jet_collection_name[0].upper(), _jet_collection_name[1:])
        process.add_module(
            _module_name,
            karmaJets.clone(
                inputCollection = cms.InputTag("{}WithJetIDUserData".format(_jet_collection_name)),
            ),
            on_path='path',
            write_out=True,
        )

        # write out jet ID information to transients (used to fill value maps)
        _t = getattr(process, _module_name).transientInformationSpec
        _t.fromUserIntAsBool = cms.PSet(
            jetIdWinter16TightLepVeto = cms.string("jetIdWinter16TightLepVeto"),
        )
        if 'AK4PFCHS' in _jet_collection_name:
            _t.fromUserFloat = cms.PSet(
                pileupJetId = cms.string("AK4PFCHSpileupJetIdEvaluator:fullDiscriminant"),
            )
            _t.fromUserInt = cms.PSet(
                pileupJetId = cms.string("AK4PFCHSpileupJetIdEvaluator:fullId"),
            )

        # add karma module for producing the Jet ID value map
        _valuemap_module_name = "karma{}{}JetIds".format(_jet_collection_name[0].upper(), _jet_collection_name[1:])
        process.add_module(
            _valuemap_module_name,
            karmaJetIdValueMapProducer.clone(
                inputCollection = cms.InputTag(_module_name),
            ),
            on_path='path',
            write_out=True,
        )

        # add karma modules for producing the pileup jet ID value maps (AK4CHS-only)
        if 'AK4PFCHS' in _jet_collection_name:
            _valuemap_module_name = "karma{}{}JetPileupIds".format(_jet_collection_name[0].upper(), _jet_collection_name[1:])
            process.add_module(
                _valuemap_module_name,
                karmaJetPileupIdValueMapProducer.clone(
                    inputCollection = cms.InputTag(_module_name),
                ),
                on_path='path',
                write_out=True,
            )
            _valuemap_module_name = "karma{}{}JetPileupIdDiscriminants".format(_jet_collection_name[0].upper(), _jet_collection_name[1:])
            process.add_module(
                _valuemap_module_name,
                karmaJetPileupIdDiscriminantValueMapProducer.clone(
                    inputCollection = cms.InputTag(_module_name),
                ),
                on_path='path',
                write_out=True,
            )

        if 'Puppi' in _jet_collection_name:
            _valuemap_producer = karmaJetCorrectedLVValueMapProducerForPuppi
        else:
            _valuemap_producer = karmaJetCorrectedLVValueMapProducer

        # add karma modules for producing the correction level value maps
        _valuemap_module_name = "karma{}{}JECs".format(_jet_collection_name[0].upper(), _jet_collection_name[1:])
        process.add_module(
            _valuemap_module_name,
            _valuemap_producer.clone(
                inputCollection = cms.InputTag(_module_name),
            ),
            on_path='path',
            write_out=True,
        )

    # -- Gen-Jets ---------------------------------------------------------

    if not options.isData:

        from Karma.Skimming.GenJetCollectionProducer_cfi import karmaGenJetsAK4, karmaGenJetsAK8

        process.add_module(
            'karmaGenJetsAK4',
            karmaGenJetsAK4.clone(
                inputCollection = cms.InputTag("ak4GenJetsNoNu"),
            ),
            on_path='path',
            write_out=True,
        )

        process.add_module(
            'karmaGenJetsAK8',
            karmaGenJetsAK8.clone(
                inputCollection = cms.InputTag("ak8GenJetsNoNu"),
            ),
            on_path='path',
            write_out=True,
        )

    # -- Electrons --------------------------------------------------------

    from Karma.Skimming.ElectronCollectionProducer_cfi import karmaElectronCollectionProducer

    process.add_module(
        'karmaElectrons',
        karmaElectronCollectionProducer.clone(),
        on_path='path',
        write_out=True,
    )

    # -- Electron IDs -----------------------------------------------------

    from Karma.Skimming.ElectronIdValueMapProducer_cfi import karmaElectronIdValueMapProducer

    process.add_module(
        'karmaElectronIds',
        karmaElectronIdValueMapProducer.clone(
            inputCollection = cms.InputTag("karmaElectrons")
        ),
        on_path='path',
        write_out=True
    )

    # -- Muons ------------------------------------------------------------

    from Karma.Skimming.MuonCollectionProducer_cfi import karmaMuonCollectionProducer

    process.add_module(
        'karmaMuons',
        karmaMuonCollectionProducer.clone(),
        on_path='path',
        write_out=True,
    )

    # -- Primary Vertices -------------------------------------------------

    from Karma.Skimming.VertexCollectionProducer_cfi import karmaVertexCollectionProducer

    process.add_module(
        'karmaVertices',
        karmaVertexCollectionProducer.clone(),
        on_path='path',
        write_out=True,

    )

    # == END configure Karma modules ======================================


    # selective writeout based on path decisions
    process.enable_selective_writeout('path')

    # just in case we need it
    return process
Пример #21
0
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype="data"):
    """Default config for Z+jet skims with Kappa

       This is used in a cmssw config file via:
       import skim_base
       process = skim_base.getBaseConfig('START53_V12', "testfile.root")
    """
    # Set the globalt tag and datatype for testing or by grid-control ---------
    data = datatype == "data"
    if data:
        testfile = "file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root"
        if "@" in globaltag:
            globaltag = "FT53_V21A_AN6"
        maxevents = maxevents or 100
    else:
        testfile = "file:/storage/8/dhaitz/testfiles/mc-2014.root"
        if "@" in globaltag:
            globaltag = "START53_V19F"
        maxevents = maxevents or 100
        datatype = "mc"
    print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile

    # Basic process setup -----------------------------------------------------
    process = cms.Process("kappaSkim")
    process.source = cms.Source("PoolSource", fileNames=cms.untracked.vstring(testfile))
    process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(maxevents))

    # Includes + Global Tag ---------------------------------------------------
    process.load("FWCore.MessageService.MessageLogger_cfi")
    process.load("Configuration.StandardSequences.Services_cff")
    process.load("Configuration.StandardSequences.MagneticField_38T_cff")
    process.load("Configuration.Geometry.GeometryIdeal_cff")
    process.load("Configuration.Geometry.GeometryPilot2_cff")
    process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi")
    process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi")
    process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi")
    process.load("RecoMuon.DetLayers.muonDetLayerGeometry_cfi")
    process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
    process.load("Configuration.StandardSequences.Reconstruction_cff")
    process.GlobalTag.globaltag = globaltag + "::All"

    # Reduce amount of messages -----------------------------------------------
    process.MessageLogger.default = cms.untracked.PSet(ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5)))
    process.MessageLogger.cerr.FwkReport.reportEvery = 40

    # Produce PF muon isolation -----------------------------------------------
    from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace

    process.pfmuIsoDepositPFCandidates = isoDepositReplace("muons", "particleFlow")
    process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates)

    # Create good primary vertices to be used for PF association --------------
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)),
        src=cms.InputTag("offlinePrimaryVertices"),
    )
    process.ak5PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices")
    process.ak7PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices")
    process.kt4PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices")
    process.kt6PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices")

    # CHS Jets with the NoPU sequence -----------------------------------------
    process.load("CommonTools.ParticleFlow.PFBRECO_cff")
    process.pfPileUp.Vertices = cms.InputTag("goodOfflinePrimaryVertices")
    process.pfPileUp.checkClosestZVertex = cms.bool(False)
    process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO)
    process.ak5PFJetsCHS = process.ak5PFJets.clone(src=cms.InputTag("pfNoPileUp"))
    process.ak7PFJetsCHS = process.ak7PFJets.clone(src=cms.InputTag("pfNoPileUp"))
    process.kt4PFJetsCHS = process.kt4PFJets.clone(src=cms.InputTag("pfNoPileUp"))
    process.kt6PFJetsCHS = process.kt6PFJets.clone(src=cms.InputTag("pfNoPileUp"))

    # Gen Jets without neutrinos ----------------------------------------------
    if datatype == "mc":
        process.load("RecoJets.JetProducers.ak5GenJets_cfi")
        process.NoNuGenJets = cms.Path(
            process.genParticlesForJetsNoNu
            * process.genParticlesForJets
            * process.ak5GenJetsNoNu
            * process.ak7GenJetsNoNu
            * process.kt4GenJetsNoNu
            * process.kt4GenJets
            * process.kt6GenJetsNoNu
            * process.kt6GenJets
        )

    # Path to Redo all Jets ---------------------------------------------------
    process.jetsRedo = cms.Path(
        process.ak5PFJets
        * process.ak7PFJets
        * process.kt4PFJets
        * process.kt6PFJets
        * process.ak5PFJetsCHS
        * process.ak7PFJetsCHS
        * process.kt4PFJetsCHS
        * process.kt6PFJetsCHS
    )

    # QG TAGGER ----------------------------------------------------------------
    process.load("QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff")
    process.QGTagger.srcJets = cms.InputTag("ak5PFJets")

    process.AK5PFJetsQGTagger = process.QGTagger
    process.AK5PFJetsCHSQGTagger = process.QGTagger.clone(
        srcJets=cms.InputTag("ak5PFJetsCHS"), useCHS=cms.untracked.bool(True)
    )

    process.AK7PFJetsQGTagger = process.QGTagger.clone(srcJets=cms.InputTag("ak7PFJets"))
    process.AK7PFJetsCHSQGTagger = process.QGTagger.clone(
        srcJets=cms.InputTag("ak7PFJetsCHS"), useCHS=cms.untracked.bool(True)
    )

    process.QGTagging = cms.Path(
        process.QuarkGluonTagger
        * process.AK5PFJetsQGTagger
        * process.AK5PFJetsCHSQGTagger
        * process.AK7PFJetsQGTagger
        * process.AK7PFJetsCHSQGTagger
    )

    # B-Tagging ----------------------------------------------------------------
    # b-tagging general configuration
    process.load("RecoJets.JetAssociationProducers.ic5JetTracksAssociatorAtVertex_cfi")
    process.load("RecoBTag.Configuration.RecoBTag_cff")

    ### AK5
    # create a ak5PF jets and tracks association
    process.ak5PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone()
    process.ak5PFJetTracksAssociatorAtVertex.jets = "ak5PFJets"
    process.ak5PFJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak5PFImpactParameterTagInfos = process.impactParameterTagInfos.clone()
    process.ak5PFImpactParameterTagInfos.jetTracks = "ak5PFJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak5PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone()
    process.ak5PFSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFImpactParameterTagInfos"
    process.ak5PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone()
    process.ak5PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak5PFSecondaryVertexTagInfos"))
    process.ak5PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone()
    process.ak5PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos")
    )
    process.ak5PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone()
    process.ak5PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos")
    )

    # sequence for AK5 b-tagging
    process.ak5PFJetBtagging = cms.Sequence(
        process.ak5PFJetTracksAssociatorAtVertex
        * process.ak5PFImpactParameterTagInfos
        * process.ak5PFSecondaryVertexTagInfos
        * process.ak5PFSecondaryVertexTagInfos
        * (
            process.ak5PFSimpleSecondaryVertexBJetTags
            + process.ak5PFCombinedSecondaryVertexBJetTags
            + process.ak5PFCombinedSecondaryVertexMVABJetTags
        )
    )

    ### AK5 CHS
    # create a ak5PFCHS jets and tracks association
    process.ak5PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone()
    process.ak5PFCHSJetTracksAssociatorAtVertex.jets = "ak5PFJetsCHS"
    process.ak5PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak5PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone()
    process.ak5PFCHSImpactParameterTagInfos.jetTracks = "ak5PFCHSJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak5PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone()
    process.ak5PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFCHSImpactParameterTagInfos"
    process.ak5PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone()
    process.ak5PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")
    )
    process.ak5PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone()
    process.ak5PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")
    )
    process.ak5PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone()
    process.ak5PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")
    )

    # sequence for AK5CHS b-tagging
    process.ak5PFCHSJetBtagging = cms.Sequence(
        process.ak5PFCHSJetTracksAssociatorAtVertex
        * process.ak5PFCHSImpactParameterTagInfos
        * process.ak5PFCHSSecondaryVertexTagInfos
        * process.ak5PFCHSSecondaryVertexTagInfos
        * (
            process.ak5PFCHSSimpleSecondaryVertexBJetTags
            + process.ak5PFCHSCombinedSecondaryVertexBJetTags
            + process.ak5PFCHSCombinedSecondaryVertexMVABJetTags
        )
    )

    ### AK7
    # create a ak7PF jets and tracks association
    process.ak7PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone()
    process.ak7PFJetTracksAssociatorAtVertex.jets = "ak7PFJets"
    process.ak7PFJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak7PFImpactParameterTagInfos = process.impactParameterTagInfos.clone()
    process.ak7PFImpactParameterTagInfos.jetTracks = "ak7PFJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak7PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone()
    process.ak7PFSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFImpactParameterTagInfos"
    process.ak7PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone()
    process.ak7PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak7PFSecondaryVertexTagInfos"))
    process.ak7PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone()
    process.ak7PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFImpactParameterTagInfos"), cms.InputTag("ak7PFSecondaryVertexTagInfos")
    )
    process.ak7PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone()
    process.ak7PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFImpactParameterTagInfos"), cms.InputTag("ak7PFSecondaryVertexTagInfos")
    )

    # sequence for AK7 b-tagging
    process.ak7PFJetBtagging = cms.Sequence(
        process.ak7PFJetTracksAssociatorAtVertex
        * process.ak7PFImpactParameterTagInfos
        * process.ak7PFSecondaryVertexTagInfos
        * process.ak7PFSecondaryVertexTagInfos
        * (
            process.ak7PFSimpleSecondaryVertexBJetTags
            + process.ak7PFCombinedSecondaryVertexBJetTags
            + process.ak7PFCombinedSecondaryVertexMVABJetTags
        )
    )

    ### AK7 CHS
    # create a ak7PFCHS jets and tracks association
    process.ak7PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone()
    process.ak7PFCHSJetTracksAssociatorAtVertex.jets = "ak7PFJetsCHS"
    process.ak7PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks"

    process.ak7PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone()
    process.ak7PFCHSImpactParameterTagInfos.jetTracks = "ak7PFCHSJetTracksAssociatorAtVertex"

    # secondary vertex b-tag
    process.ak7PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone()
    process.ak7PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFCHSImpactParameterTagInfos"
    process.ak7PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone()
    process.ak7PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFCHSSecondaryVertexTagInfos")
    )
    process.ak7PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone()
    process.ak7PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFCHSImpactParameterTagInfos"), cms.InputTag("ak7PFCHSSecondaryVertexTagInfos")
    )
    process.ak7PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone()
    process.ak7PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag(
        cms.InputTag("ak7PFCHSImpactParameterTagInfos"), cms.InputTag("ak7PFCHSSecondaryVertexTagInfos")
    )

    # sequence for AK7CHS b-tagging
    process.ak7PFCHSJetBtagging = cms.Sequence(
        process.ak7PFCHSJetTracksAssociatorAtVertex
        * process.ak7PFCHSImpactParameterTagInfos
        * process.ak7PFCHSSecondaryVertexTagInfos
        * process.ak7PFCHSSecondaryVertexTagInfos
        * (
            process.ak7PFCHSSimpleSecondaryVertexBJetTags
            + process.ak7PFCHSCombinedSecondaryVertexBJetTags
            + process.ak7PFCHSCombinedSecondaryVertexMVABJetTags
        )
    )

    # Add the modules for all the jet collections to the path
    process.BTagging = cms.Path(
        process.ak5PFJetBtagging * process.ak5PFCHSJetBtagging * process.ak7PFJetBtagging * process.ak7PFCHSJetBtagging
    )

    # PU jet ID ---------------------------------------------------------------
    process.load("CMGTools.External.pujetidsequence_cff")

    # AK5
    process.ak5PFPuJetId = process.puJetId.clone(
        jets=cms.InputTag("ak5PFJets"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False)
    )

    process.ak5PFPuJetMva = process.puJetMva.clone(
        jets=cms.InputTag("ak5PFJets"),
        jetids=cms.InputTag("ak5PFPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
    )
    # AK5 CHS
    process.ak5PFCHSPuJetId = process.puJetIdChs.clone(
        jets=cms.InputTag("ak5PFJetsCHS"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False)
    )

    process.ak5PFCHSPuJetMva = process.puJetMvaChs.clone(
        jets=cms.InputTag("ak5PFJetsCHS"),
        jetids=cms.InputTag("ak5PFCHSPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
    )

    # ak7
    process.ak7PFPuJetId = process.puJetId.clone(
        jets=cms.InputTag("ak7PFJets"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False)
    )

    process.ak7PFPuJetMva = process.puJetMva.clone(
        jets=cms.InputTag("ak7PFJets"),
        jetids=cms.InputTag("ak7PFPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
    )
    # ak7 CHS
    process.ak7PFCHSPuJetId = process.puJetIdChs.clone(
        jets=cms.InputTag("ak7PFJetsCHS"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False)
    )

    process.ak7PFCHSPuJetMva = process.puJetMvaChs.clone(
        jets=cms.InputTag("ak7PFJetsCHS"),
        jetids=cms.InputTag("ak7PFCHSPuJetId"),
        applyJec=cms.bool(True),
        inputIsCorrected=cms.bool(False),
    )

    process.PUJetID = cms.Path(
        process.ak5PFPuJetId
        * process.ak5PFPuJetMva
        * process.ak5PFCHSPuJetId
        * process.ak5PFCHSPuJetMva
        * process.ak7PFPuJetId
        * process.ak7PFPuJetMva
        * process.ak7PFCHSPuJetId
        * process.ak7PFCHSPuJetMva
    )

    # MET filters -------------------------------------------------------------
    process.load("RecoMET.METFilters.ecalLaserCorrFilter_cfi")
    # Create good vertices for the trackingFailure MET filter
    process.goodVertices = cms.EDFilter(
        "VertexSelector",
        filter=cms.bool(False),
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"),
    )
    # The good primary vertex filter for other MET filters
    process.primaryVertexFilter = cms.EDFilter(
        "VertexSelector",
        filter=cms.bool(True),
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
    )
    process.noscraping = cms.EDFilter(
        "FilterOutScraping",
        applyfilter=cms.untracked.bool(True),
        debugOn=cms.untracked.bool(False),
        numtrack=cms.untracked.uint32(10),
        thresh=cms.untracked.double(0.25),
    )
    process.load("CommonTools.RecoAlgos.HBHENoiseFilter_cfi")
    process.load("RecoMET.METAnalyzers.CSCHaloFilter_cfi")
    process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi")
    process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(False)
    process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True)
    process.load("RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi")
    process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA")
    process.load("RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi")
    process.load("RecoMET.METFilters.eeBadScFilter_cfi")
    process.load("RecoMET.METFilters.eeNoiseFilter_cfi")
    process.load("RecoMET.METFilters.ecalLaserCorrFilter_cfi")
    process.load("RecoMET.METFilters.trackingFailureFilter_cfi")
    process.load("RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi")
    process.load("RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi")

    process.hcalLaserEventFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True)
    process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.eeBadScFilter.taggingMode = cms.bool(True)
    process.eeNoiseFilter.taggingMode = cms.bool(True)
    process.ecalLaserCorrFilter.taggingMode = cms.bool(True)
    process.trackingFailureFilter.taggingMode = cms.bool(True)
    process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True)
    process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone(ptMin=cms.double(5000.0))
    process.hcalNoiseFilter = process.beamScrapingFilter.clone()
    process.beamHaloFilter = process.beamScrapingFilter.clone()
    process.filtersSeq = cms.Sequence(
        process.primaryVertexFilter * process.hcalLaserEventFilter
        + process.EcalDeadCellTriggerPrimitiveFilter
        + process.EcalDeadCellBoundaryEnergyFilter
        + process.eeBadScFilter
        + process.eeNoiseFilter
        + process.ecalLaserCorrFilter
        + process.goodVertices * process.trackingFailureFilter
        + process.inconsistentMuonPFCandidateFilter
        + process.greedyMuonPFCandidateFilter
        + process.noscraping * process.beamScrapingFilter
        + process.HBHENoiseFilter * process.hcalNoiseFilter
        + process.CSCTightHaloFilter * process.beamHaloFilter
    )
    process.metFilters = cms.Path(process.filtersSeq)

    # MET correction ----------------------------------------------------------
    process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff")
    process.pfchsMETcorr.src = cms.InputTag("goodOfflinePrimaryVertices")
    # Type-0
    process.pfMETCHS = process.pfType1CorrectedMet.clone(
        applyType1Corrections=cms.bool(False), applyType0Corrections=cms.bool(True)
    )
    # MET Path
    process.metCorrections = cms.Path(process.producePFMETCorrections * process.pfMETCHS)

    # Require two good muons --------------------------------------------------
    process.goodMuons = cms.EDFilter(
        "CandViewSelector", src=cms.InputTag("muons"), cut=cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()")
    )
    process.twoGoodMuons = cms.EDFilter("CandViewCountFilter", src=cms.InputTag("goodMuons"), minNumber=cms.uint32(2))

    # Configure tuple generation ----------------------------------------------
    process.load("Kappa.Producers.KTuple_cff")
    process.kappatuple = cms.EDAnalyzer(
        "KTuple",
        process.kappaTupleDefaultsBlock,
        outputFile=cms.string("skim.root"),
        PFTaggedJets=cms.PSet(
            process.kappaNoCut,
            process.kappaNoRegEx,
            taggers=cms.vstring(
                "QGlikelihood",
                "QGmlp",
                "CombinedSecondaryVertexBJetTags",
                "CombinedSecondaryVertexMVABJetTags",
                "puJetIDFullLoose",
                "puJetIDFullMedium",
                "puJetIDFullTight",
                "puJetIDCutbasedLoose",
                "puJetIDCutbasedMedium",
                "puJetIDCutbasedTight",
            ),
            AK5PFTaggedJets=cms.PSet(
                src=cms.InputTag("ak5PFJets"),
                QGtagger=cms.InputTag("AK5PFJetsQGTagger"),
                Btagger=cms.InputTag("ak5PF"),
                PUJetID=cms.InputTag("ak5PFPuJetMva"),
                PUJetID_full=cms.InputTag("full53x"),
            ),
            AK5PFTaggedJetsCHS=cms.PSet(
                src=cms.InputTag("ak5PFJetsCHS"),
                QGtagger=cms.InputTag("AK5PFJetsCHSQGTagger"),
                Btagger=cms.InputTag("ak5PFCHS"),
                PUJetID=cms.InputTag("ak5PFCHSPuJetMva"),
                PUJetID_full=cms.InputTag("full"),
            ),
            AK7PFTaggedJets=cms.PSet(
                src=cms.InputTag("ak7PFJets"),
                QGtagger=cms.InputTag("AK7PFJetsQGTagger"),
                Btagger=cms.InputTag("ak7PF"),
                PUJetID=cms.InputTag("ak7PFPuJetMva"),
                PUJetID_full=cms.InputTag("full53x"),
            ),
            AK7PFTaggedJetsCHS=cms.PSet(
                src=cms.InputTag("ak7PFJetsCHS"),
                QGtagger=cms.InputTag("AK7PFJetsCHSQGTagger"),
                Btagger=cms.InputTag("ak7PFCHS"),
                PUJetID=cms.InputTag("ak7PFCHSPuJetMva"),
                PUJetID_full=cms.InputTag("full"),
            ),
        ),
    )

    process.kappatuple.verbose = cms.int32(0)
    process.kappatuple.active = cms.vstring(
        "LV",
        "Muons",
        "TrackSummary",
        "VertexSummary",
        "BeamSpot",
        "JetArea",
        "PFMET",
        "PFJets",
        "FilterSummary",
        "PFTaggedJets",
    )
    if data:
        additional_actives = ["DataMetadata"]
    else:
        additional_actives = ["GenMetadata", "GenParticles"]
    for active in additional_actives:
        process.kappatuple.active.append(active)

    # custom whitelist, otherwise the HLT trigger bits are not sufficient!
    process.kappatuple.Metadata.hltWhitelist = cms.vstring(
        # matches 'HLT_Mu17_Mu8_v7' etc.
        "^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$",
        # matches 'HLT_DoubleMu7_v8' etc.
        "^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$",
    )
    process.kappatuple.Metadata.tauDiscrProcessName = cms.untracked.string("XXXXXXXXX")
    process.kappatuple.GenParticles.genParticles.selectedStatus = cms.int32(31)

    # use the good objects not temporary ones
    process.kappatuple.VertexSummary.whitelist = cms.vstring(".*fflinePrimaryVertices")
    process.kappatuple.VertexSummary.blacklist += cms.vstring(".*QG.*")
    process.kappatuple.LV.whitelist += cms.vstring("recoCaloJets.*")
    process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*")
    process.kappatuple.PFJets.whitelist = cms.vstring("recoPFJets.*kappaSkim")
    process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet")
    process.kappatuple.PFJets.blacklist = cms.vstring(
        ".*Tau.*", "recoPFJets_pfJets.*kappaSkim", ".*ak5.*", ".*ak7.*", ".*QG.*", ".*KT.*"
    )
    del process.kappatuple.GenParticles.genStableMuons

    process.pathKappa = cms.Path(process.goodMuons * process.twoGoodMuons * process.kappatuple)

    # Process schedule --------------------------------------------------------
    process.schedule = cms.Schedule(
        process.metFilters,
        process.pfCHS,
        process.jetsRedo,
        process.BTagging,
        process.QGTagging,
        process.PUJetID,
        process.pfMuonIso,
        process.metCorrections,
        process.pathKappa,
    )
    if not data:
        process.schedule.insert(0, process.NoNuGenJets)

    return process
import FWCore.ParameterSet.Config as cms

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector as pvSel
from PhysicsTools.SelectorUtils.jetIDSelector_cfi import jetIDSelector
from PhysicsTools.SelectorUtils.pfJetIDSelector_cfi import pfJetIDSelector

wplusjetsAnalysis = cms.PSet(
    # Primary vertex
    pvSelector=cms.PSet(pvSel.clone()),
    # input parameter sets
    muonSrc=cms.InputTag('selectedPatMuons'),
    electronSrc=cms.InputTag('selectedPatElectrons'),
    jetSrc=cms.InputTag('selectedPatJets'),
    jetClonesSrc=cms.InputTag('myClones'),
    metSrc=cms.InputTag('patMETs'),
    trigSrc=cms.InputTag('patTriggerEvent'),
    muTrig=cms.string('HLT_Mu9'),
    eleTrig=cms.string('HLT_Ele15_LW_L1R'),
    # tight muons
    muonIdTight=cms.PSet(version=cms.string('SPRING10'),
                         Chi2=cms.double(10.0),
                         D0=cms.double(0.02),
                         ED0=cms.double(999.0),
                         SD0=cms.double(999.0),
                         NHits=cms.int32(11),
                         NValMuHits=cms.int32(0),
                         ECalVeto=cms.double(999.0),
                         HCalVeto=cms.double(999.0),
                         RelIso=cms.double(0.05),
                         cutsToIgnore=cms.vstring('ED0', 'SD0', 'ECalVeto',
                                                  'HCalVeto'),
Пример #23
0
def baseconfig(
		globaltag,
		testfile,
		maxevents,
		nickname,
		outputfilename,
		channel='mm',
		is_data=None,
	):

	#  Config parameters  ##############################################
	cmssw_version = os.environ["CMSSW_VERSION"].split('_')
	cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:])
	autostr = ""
	if globaltag.lower() == 'auto':
		from Configuration.AlCa.autoCond import autoCond
		globaltag = autoCond['startup']
		autostr = " (from autoCond)"
	if is_data is None:
		data = ('DoubleMu' in testfile[0]) or ('SingleMu' in testfile[0])
	else:
		data = is_data
	miniaod = False

	## print information
	print "\n------- CONFIGURATION 1 ---------"
	print "input:          ", testfile[0], "... (%d files)" % len(testfile) if len(testfile) > 1 else ""
	print "file type:      ", "miniAOD" if miniaod else "AOD"
	print "data:           ", data
	print "output:         ", outputfilename
	print "nickname:       ", nickname
	print "global tag:     ", globaltag + autostr
	print "max events:     ", maxevents
	print "cmssw version:  ", '.'.join([str(i) for i in cmssw_version])
	print "channel:        ", channel
	print "---------------------------------"
	print

	#  Basic Process Setup  ############################################
	process = cms.Process("KAPPA")
	process.path = cms.Path()
	process.maxEvents = cms.untracked.PSet(
		input=cms.untracked.int32(maxevents)
	)
	process.options = cms.untracked.PSet(
		wantSummary=cms.untracked.bool(True)
	)
	process.source = cms.Source("PoolSource",
		fileNames=cms.untracked.vstring(testfile)
	)
	# message logger
	process.load("FWCore.MessageLogger.MessageLogger_cfi")
	process.MessageLogger.cerr.FwkReport.reportEvery = 50
	process.MessageLogger.default = cms.untracked.PSet(
		ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5))
	)

	## Geometry and Detector Conditions (needed for a few patTuple production steps)
	if cmssw_version > (7, 4, 0, 'pre8'):
		# https://twiki.cern.ch/twiki/bin/view/Sandbox/MyRootMakerFrom72XTo74X#DDVectorGetter_vectors_are_empty
		print "Use condDBv2 and GeometryRecoDB:"
		process.load("Configuration.Geometry.GeometryRecoDB_cff")
		process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_condDBv2_cff')
	else:
		process.load("Configuration.Geometry.GeometryIdeal_cff")
		process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
	process.load("Configuration.StandardSequences.MagneticField_cff")
	process.GlobalTag.globaltag = cms.string(globaltag)

	#  Kappa  ##########################################################
	process.load('Kappa.Producers.KTuple_cff')
	process.kappaTuple = cms.EDAnalyzer('KTuple',
		process.kappaTupleDefaultsBlock,
		outputFile = cms.string(outputfilename),
	)
	process.kappaTuple.verbose = 0
	process.kappaOut = cms.Sequence(process.kappaTuple)
	process.kappaTuple.active = cms.vstring('VertexSummary', 'BeamSpot')
	if data:
		process.kappaTuple.active += cms.vstring('DataInfo')
	else:
		process.kappaTuple.active += cms.vstring('GenInfo', 'GenParticles')

	if cmssw_version >= (7, 4, 0):
		process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True)

	if channel == 'mm':
		process.kappaTuple.Info.hltWhitelist = cms.vstring(
			# HLT regex selection can be tested at https://regex101.com (with gm options)
			# single muon triggers, e.g. HLT_Mu50_v1
			"^HLT_(Iso)?(Tk)?Mu[0-9]+(_eta2p1|_TrkIsoVVL)?_v[0-9]+$",
			# double muon triggers, e.g. HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v1
			"^HLT_Mu[0-9]+(_TrkIsoVVL)?_(Tk)?Mu[0-9]+(_TrkIsoVVL)?(_DZ)?_v[0-9]+$",
		)


	#  PFCandidates  ###################################################
	## Good offline PV selection: 
	from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
	process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter',
		filterParams = pvSelector.clone(maxZ = 24.0),  # ndof >= 4, rho <= 2
	)

	## ------------------------------------------------------------------------
	## TopProjections from CommonTools/ParticleFlow:
	process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff")
	process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff")
	process.load("CommonTools.ParticleFlow.pfParticleSelection_cff")


	## pf candidate configuration for everything but CHS jets
	process.pfPileUpIso.PFCandidates		= 'particleFlow'
	process.pfPileUpIso.Vertices			= 'goodOfflinePrimaryVertices'
	process.pfPileUpIso.checkClosestZVertex	= True
	process.pfNoPileUpIso.bottomCollection	= 'particleFlow'


	## pf candidate configuration for deltaBeta corrections for muons and electrons 
	process.pfNoPileUpChargedHadrons	= process.pfAllChargedHadrons.clone()
	process.pfNoPileUpNeutralHadrons	= process.pfAllNeutralHadrons.clone()
	process.pfNoPileUpPhotons			= process.pfAllPhotons.clone()
	process.pfPileUpChargedHadrons		= process.pfAllChargedHadrons.clone(src = 'pfPileUpIso')

	## pf candidate configuration for CHS jets
	process.pfPileUp.Vertices				= 'goodOfflinePrimaryVertices'
	process.pfPileUp.checkClosestZVertex	= False

	# Modifications for new particleFlow Pointers
	process.pfPileUp.PFCandidates = cms.InputTag("particleFlowPtrs")
	process.pfPileUpIso.PFCandidates = cms.InputTag("particleFlowPtrs")
	process.pfNoPileUp.bottomCollection = cms.InputTag("particleFlowPtrs")
	process.pfNoPileUpIso.bottomCollection = cms.InputTag("particleFlowPtrs")
	#process.pfJetTracksAssociatorAtVertex.jets= cms.InputTag("ak5PFJets")
	process.path *= (
		process.goodOfflinePrimaryVertices
		#* process.goodOfflinePrimaryVertexEvents
		* process.pfParticleSelectionSequence
	)

	#  Muons  ##########################################################
	if channel == 'mm':
		process.load('Kappa.Skimming.KMuons_run2_cff')
		process.muPreselection1 = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('muons'),
			cut = cms.string("pt >8.0"),
		)
		process.muPreselection2 = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('muPreselection1'),
			minNumber = cms.uint32(2),
		)
		process.kappaTuple.Muons.minPt = 8.0
		process.kappaTuple.active += cms.vstring('Muons')

		process.path *= (process.muPreselection1 * process.muPreselection2 * process.makeKappaMuons)

	# Electrons ########################################################
	# to be done
	if channel == 'ee':
		pass

	#  Jets  ###########################################################
	# Kappa jet processing
	process.kappaTuple.Jets.minPt = 5.0
	process.kappaTuple.Jets.taggers = cms.vstring()

	# containers of objects to process
	jet_resources = []
	cmssw_jets = {}  # algoname: cmssw module
	kappa_jets = {}  # algoname: kappa jet config

	# GenJets
	if not data:
		process.load('RecoJets.Configuration.GenJetParticles_cff')
		process.load('RecoJets.JetProducers.ak5GenJets_cfi')
		jet_resources.append(process.genParticlesForJetsNoNu)
		process.kappaTuple.active += cms.vstring('LV')
		process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') #default?
		genbase_jet = process.ak5GenJets.clone(src=cms.InputTag("genParticlesForJetsNoNu"), doAreaFastjet=True)

	## PFBRECO?
	process.load("RecoJets.JetProducers.ak5PFJets_cfi")
	pfbase_jet = process.ak5PFJets.clone(srcPVs = 'goodOfflinePrimaryVertices', doAreaFastjet=True)

	## PUPPI
	# creates reweighted PFCandidates collection 'puppi'
	process.load('CommonTools.PileupAlgos.Puppi_cff')
	jet_resources.append(process.puppi)
	if miniaod:
		process.puppi.candName = cms.InputTag('packedPFCandidates')
		process.puppi.vertexName = cms.InputTag('offlineSlimmedPrimaryVertices')

	# create Jet variants
	for param in (4, 5, 8):
		# PFJets
		for algo, input_tag in (("", 'particleFlow'), ("CHS", 'pfNoPileUp'), ("Puppi", 'puppi')):
			variant_name = "ak%dPFJets%s" % (param, algo)
			variant_mod = pfbase_jet.clone(src=cms.InputTag(input_tag), rParam=param/10.0)
			cmssw_jets[variant_name] = variant_mod
			# Full Kappa jet definition
			kappa_jets["ak%dPFJets%s"%(param, algo)] = cms.PSet(
				src = cms.InputTag(variant_name),
				PUJetID = cms.InputTag("ak%dPF%sPuJetMva" % (param, algo)),
				PUJetID_full = cms.InputTag("full"),
				QGtagger = cms.InputTag("AK%dPFJets%sQGTagger" % (param, algo)),
				Btagger = cms.InputTag("ak%dPF%s" % (param, algo)),
			)
		# GenJets
		if not data:
			for collection in ("NoNu",): # TODO: add "NoMuNoNu", "" ?
				variant_name = "ak%sGenJets%s" % (param, collection)
				variant_mod = genbase_jet.clone(rParam=param/10.0)
				cmssw_jets[variant_name] = variant_mod
				# GenJets are just KLVs
				process.kappaTuple.LV.whitelist += cms.vstring(variant_name)
	# mount generated jets for processing
	for name, jet_module in cmssw_jets.iteritems():
		setattr(process, name, jet_module)
	for name, pset in kappa_jets.iteritems():
		setattr(process.kappaTuple.Jets, name, pset)
	process.path *= reduce(lambda a, b: a * b, jet_resources) * reduce(lambda a, b: a * b, sorted(cmssw_jets.values()))

	# Gluon tagging? - https://twiki.cern.ch/twiki/bin/viewauth/CMS/GluonTag

	# B-tagging (for ak5 jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets

	# B-tagging for (ak5 CHS jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets

	# PileupDensity ########################
	from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
	process.pileupDensitykt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True, Rho_EtaMax=2.5)

	process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
	process.kappaTuple.PileupDensity.rename = cms.vstring("fixedGridRhoFastjetAll => pileupDensity")

	process.path *= (
		process.pileupDensitykt6PFJets
	)

	# MET correction ----------------------------------------------------------
	#TODO check type 0 corrections
	process.load("JetMETCorrections.Type1MET.correctionTermsPfMetType0PFCandidate_cff")
	process.load("JetMETCorrections.Type1MET.correctedMet_cff")

	process.pfMETCHS = process.pfMetT0pc.clone()
	# Puppi
	from RecoMET.METProducers.PFMET_cfi import pfMet
	process.pfMetPuppi = pfMet.clone(src=cms.InputTag('puppi'))

	process.kappaTuple.active += cms.vstring('MET')

	process.path *= (
		process.correctionTermsPfMetType0PFCandidate
		* process.pfMetPuppi
		* process.pfMETCHS
	)

	#  Kappa  Output ###########################################################
	process.path *= (
		process.kappaOut
	)
	# final information:
	print "------- CONFIGURATION 2 ---------"
	print "CMSSW producers:"
	for p in str(process.path).split('+'):
		print "  %s" % p
	print "Kappa producers:"
	for p in sorted(process.kappaTuple.active):
		print "  %s" % p
	print "---------------------------------"
	return process
def loadPF2PAT(process,mcInfo,jetMetCorrections,extMatch,doSusyTopProjection,postfix):
    #-- PAT standard config -------------------------------------------------------
    process.load("PhysicsTools.PatAlgos.patSequences_cff")
    #-- Jet corrections -----------------------------------------------------------
    process.patJetCorrFactors.levels = jetMetCorrections 
    #-- PF2PAT config -------------------------------------------------------------
    from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT
    #usePF2PAT(process,runPF2PAT=True, jetAlgo='AK5',runOnMC=(mcInfo==1),postfix=postfix, jetCorrections=('AK5PFchs', jetMetCorrections), pvCollection=cms.InputTag('goodOfflinePrimaryVertices'))
    usePF2PAT(process,runPF2PAT=True, jetAlgo='AK5',runOnMC=(mcInfo==1),postfix=postfix, jetCorrections=('AK5PFchs', jetMetCorrections))
    # Get a list of good primary vertices, in 42x, these are DAF vertices
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
    	"PrimaryVertexObjectFilter",
    	filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
    	src=cms.InputTag('offlinePrimaryVertices')
    	)

    #process.patJetsPF.embedGenJetMatch = False
    #process.patJetsPF.embedPFCandidates = False
    #drop tracks 
    process.patElectronsPF.embedTrack = True
    process.patMuonsPF.embedTrack   = True
    process.electronMatchPF.maxDeltaR   = cms.double(0.2)
    process.electronMatchPF.maxDPtRel   = cms.double(999999.)
    process.electronMatchPF.checkCharge = False
    process.muonMatchPF.maxDeltaR   = cms.double(0.2)
    process.muonMatchPF.maxDPtRel   = cms.double(999999.)
    process.muonMatchPF.checkCharge = False
    process.pfPileUpPF.checkClosestZVertex = False
    process.pfPileUpPF.Vertices = "goodOfflinePrimaryVertices"
    if extMatch:
        process.electronMatchPF.mcStatus = cms.vint32(1,5)
        process.electronMatchPF.matched = "mergedTruth"
        process.muonMatchPF.mcStatus = cms.vint32(1,5)
        process.muonMatchPF.matched = "mergedTruth"
        process.genParticlesForJets.src = "mergedTruth"
        process.genParticlesForJetsNoMuNoNu.src = "mergedTruth"
        process.genParticlesForJetsNoNu.src = "mergedTruth"
        process.patJetPartonMatchPF.matched = "mergedTruth"
        process.patJetPartonsPF.src = "mergedTruth"
        process.photonMatchPF.matched = "mergedTruth"
        #process.tauGenJetsPF.GenParticles = "mergedTruth"
        #process.tauMatchPF.matched = "mergedTruth"
        
    #Remove jet pt cut
    #process.pfJetsPF.ptMin = 0.
    #include tau decay mode in pat::Taus (elese it will just be uninitialized)
    #process.patTausPF.addDecayMode = True
    #process.patTausPF.decayModeSrc = "shrinkingConePFTauDecayModeProducerPF" 

    #Set isolation cone to 0.3 for PF leptons
    # TODO: fix this for electrons and muons
    #process.pfElectrons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId"))
    #process.pfElectrons.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId")
    #process.pfElectrons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId"), cms.InputTag("elPFIsoValueGamma03PFId"))
    #process.pfIsolatedElectrons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId"))
    #process.pfIsolatedElectrons.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId")
    #process.pfIsolatedElectrons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId"), cms.InputTag("elPFIsoValueGamma03PFId"))
    
    #process.pfElectronsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPF"))
    #process.pfElectronsPF.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPF")
    #process.pfElectronsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFIdPF"), cms.InputTag("elPFIsoValueGamma03PFIdPF"))
    #process.pfIsolatedElectronsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPF"))
    #process.pfIsolatedElectronsPF.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPF")
    #process.pfIsolatedElectronsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFIdPF"), cms.InputTag("elPFIsoValueGamma03PFIdPF"))

    #process.pfMuons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03"))
    #process.pfMuons.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03")
    #process.pfMuons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03"), cms.InputTag("muPFIsoValueGamma03"))
    #process.pfIsolatedMuons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03"))
    #process.pfIsolatedMuons.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03")
    #process.pfIsolatedMuons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03"), cms.InputTag("muPFIsoValueGamma03"))

    #process.pfMuonsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03PF"))
    #process.pfMuonsPF.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03PF")
    #process.pfMuonsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03PF"), cms.InputTag("muPFIsoValueGamma03PF"))
    #process.pfIsolatedMuonsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03PF"))
    #process.pfIsolatedMuonsPF.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03PF")
    #process.pfIsolatedMuonsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03PF"), cms.InputTag("muPFIsoValueGamma03PF"))

    #-- Enable pileup sequence -------------------------------------------------------------
    #Vertices
    process.goodVertices = cms.EDFilter("VertexSelector",
        src = cms.InputTag("offlinePrimaryVertices"),
        cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
        filter = cms.bool(False),
    )

    #process.pfPileUpPF.Vertices = "goodVertices"
    #process.pfPileUpPF.Enable = True

    process.pfNoPileUpSequencePF.replace(process.pfPileUpPF,
                                         process.goodVertices + process.pfPileUpPF)

    if not doSusyTopProjection:
        return
    #-- Top projection selection -----------------------------------------------------------
    #Electrons
    #relax all selectors *before* pat-lepton creation
    process.pfElectronsFromVertexPF.dzCut = 9999.0
    process.pfElectronsFromVertexPF.d0Cut = 9999.0
    process.pfSelectedElectronsPF.cut = ""
    process.pfRelaxedElectronsPF = process.pfIsolatedElectronsPF.clone(isolationCut = 3.)
    process.pfIsolatedElectronsPF.isolationCut = 0.15
    
    process.pfElectronsFromGoodVertex = cms.EDFilter(
        "IPCutPFCandidateSelector",
        src = cms.InputTag("pfIsolatedElectronsPF"),  # PFCandidate source
        vertices = cms.InputTag("goodVertices"),  # vertices source
        d0Cut = cms.double(0.04),  # transverse IP
        dzCut = cms.double(1.),  # longitudinal IP
        d0SigCut = cms.double(99.),  # transverse IP significance
        dzSigCut = cms.double(99.),  # longitudinal IP significance
    )
   
    electronSelection =  "abs( eta ) < 2.5 & pt > 5"
    electronSelection += " & mva_e_pi > 0.4" # same as patElectron::mva()
    #electronSelection += " & (isEB & (sigmaIetaIeta < 0.024 & hadronicOverEm < 0.15) | isEE & (sigmaIetaIeta < 0.040 & hadronicOverEm < 0.10))" #caloIdVL
    #electronSelection += " & (isEB & (deltaPhiSuperClusterTrackAtVtx < 0.15 & deltaEtaSuperClusterTrackAtVtx < 0.01) | isEE & (deltaPhiSuperClusterTrackAtVtx < 0.10 & deltaEtaSuperClusterTrackAtVtx < 0.01))" #trkIdVL
    electronSelection += " & gsfTrackRef().isNonnull() & gsfTrackRef().trackerExpectedHitsInner().numberOfHits() <= 0"
    process.pfUnclusteredElectronsPF = cms.EDFilter( "GenericPFCandidateSelector",
        src = cms.InputTag("pfElectronsFromGoodVertex"), #pfSelectedElectronsPF
        cut = cms.string(electronSelection)
    )    
    process.pfElectronSequencePF.replace(process.pfIsolatedElectronsPF,
                                         process.pfIsolatedElectronsPF + 
                                         process.goodVertices * process.pfElectronsFromGoodVertex + 
                                         process.pfUnclusteredElectronsPF + process.pfRelaxedElectronsPF)
    process.patElectronsPF.pfElectronSource = "pfRelaxedElectronsPF"
    process.pfNoElectronPF.topCollection  = "pfUnclusteredElectronsPF"
    #Muons
    #relaxe built-in preselection
    process.pfMuonsFromVertexPF.dzCut = 9999.0
    process.pfMuonsFromVertexPF.d0Cut = 9999.0
    process.pfSelectedMuonsPF.cut = ""
    process.pfRelaxedMuonsPF = process.pfIsolatedMuonsPF.clone(isolationCut = 3)
    process.pfIsolatedMuonsPF.isolationCut = 0.15
    
    process.pfMuonsFromGoodVertex = cms.EDFilter(
        "IPCutPFCandidateSelector",
        src = cms.InputTag("pfIsolatedMuonsPF"),  # PFCandidate source
        vertices = cms.InputTag("goodVertices"),  # vertices source
        d0Cut = cms.double(0.02),  # transverse IP
        dzCut = cms.double(1.),  # longitudinal IP
        d0SigCut = cms.double(99.),  # transverse IP significance
        dzSigCut = cms.double(99.),  # longitudinal IP significance
    )
    muonSelection =  "abs( eta ) < 2.5 & pt > 5"
    #GlobalMuonPromptTight
    muonSelection += " & muonRef().isNonnull & muonRef().isGlobalMuon()"
    muonSelection += " & muonRef().isTrackerMuon() & muonRef().numberOfMatches > 1"
    muonSelection += " & muonRef().globalTrack().normalizedChi2() < 10"
    muonSelection += " & muonRef().track().numberOfValidHits() > 10"
    muonSelection += " & muonRef().globalTrack().hitPattern().numberOfValidMuonHits() > 0"
    muonSelection += " & muonRef().innerTrack().hitPattern().numberOfValidPixelHits() > 0"
    process.pfUnclusteredMuonsPF = cms.EDFilter( "GenericPFCandidateSelector",
        src = cms.InputTag("pfMuonsFromGoodVertex"), #pfSelectedMuonsPF
        cut = cms.string(muonSelection)
    )    
    process.pfMuonSequencePF.replace(process.pfIsolatedMuonsPF,
                                     process.pfIsolatedMuonsPF + 
                                     process.goodVertices * process.pfMuonsFromGoodVertex +
                                     process.pfUnclusteredMuonsPF + process.pfRelaxedMuonsPF)
    process.patMuonsPF.pfMuonSource  = "pfRelaxedMuonsPF"
    process.pfNoMuonPF.topCollection = "pfUnclusteredMuonsPF"
Пример #25
0
def initialise(runOnMC, decayMode, doOutModule=False, doPAT=True):
    process = cms.Process("KrAFT")

    process.load("Configuration.StandardSequences.Services_cff")
    process.load("Configuration.Geometry.GeometryDB_cff")
    process.load("Configuration.StandardSequences.MagneticField_cff")
    process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(True))
    process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(-1))

    process.load("FWCore.MessageLogger.MessageLogger_cfi")
    process.MessageLogger.cerr.FwkReport.reportEvery = 10000

    process.source = cms.Source("PoolSource",
                                fileNames=cms.untracked.vstring())
    process.source.inputCommands = cms.untracked.vstring(
        "keep *", "drop *_MEtoEDMConverter_*_*")

    process.load(
        "Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
    from Configuration.AlCa.autoCond import autoCond
    if runOnMC: process.GlobalTag.globaltag = autoCond['startup']
    else: process.GlobalTag.globaltag = autoCond['com10']

    outputModuleForTriggerMatch = ""
    outputModules = []
    if doOutModule:
        from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning
        process.out = cms.OutputModule(
            "PoolOutputModule",
            fileName=cms.untracked.string("out.root"),
            outputCommands=cms.untracked.vstring(
                'drop *', 'keep recoPFCandidates_particleFlow_*_*',
                *patEventContentNoCleaning))
        process.outPath = cms.EndPath(process.out)

        outputModuleForTriggerMatch = "out"
        outputModules.append(process.out)

    ## Load PAT
    process.load("PhysicsTools.PatAlgos.patSequences_cff")

    ## Apply MVA
    process.load('EgammaAnalysis.ElectronTools.electronIdMVAProducer_cfi')
    process.eidMVASequence = cms.Sequence(process.mvaTrigV0 +
                                          process.mvaNonTrigV0)
    process.patElectrons.electronIDSources.mvaTrigV0 = cms.InputTag(
        "mvaTrigV0")
    process.patElectrons.electronIDSources.mvaNonTrigV0 = cms.InputTag(
        "mvaNonTrigV0")
    process.patDefaultSequence.replace(
        process.patElectrons, process.eidMVASequence * process.patElectrons)

    ## Load trigger matching
    process.load("KrAFT.Configuration.hltFilters_cff")
    #from PhysicsTools.PatAlgos.tools.trigTools import *
    #switchOnTriggerMatchEmbedding(process, outputModule="")

    ## Apply PF2PAT
    from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT
    if runOnMC: jecLevels = ['L1FastJet', 'L2Relative', 'L3Absolute']
    else: jecLevels = ['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']

    postfix = "PFlow"
    #usePFBRECO(process,runPFBRECO=True,
    usePF2PAT(process,
              runPF2PAT=True,
              runOnMC=runOnMC,
              outputModules=outputModules,
              postfix=postfix,
              jetAlgo="AK5",
              jetCorrections=("AK5PFchs", jecLevels),
              pvCollection=cms.InputTag('goodOfflinePrimaryVertices'),
              typeIMetCorrections=True)

    #
    process.pfPileUpPFlow.checkClosestZVertex = cms.bool(False)

    # top projections in PF2PAT:
    process.pfNoPileUpPFlow.enable = True
    process.pfNoMuonPFlow.enable = True
    process.pfNoElectronPFlow.enable = True
    process.pfNoTauPFlow.enable = False
    process.pfNoJetPFlow.enable = False

    # verbose flags for the PF2PAT modules
    process.pfNoMuonPFlow.verbose = False

    # Use non-isolated muons and electrons
    process.patMuonsPFlow.pfMuonSource = "pfMuonsPFlow"
    process.patElectronsPFlow.pfElectronSource = "pfElectronsPFlow"

    # And turn on delta-beta corrections while building pfIsolated*PFlow
    process.pfIsolatedMuonsPFlow.doDeltaBetaCorrection = True
    process.pfIsolatedElectronsPFlow.doDeltaBetaCorrection = True

    # Change DR cone size to 0.3
    process.pfIsolatedMuonsPFlow.isolationValueMapsCharged = cms.VInputTag(
        cms.InputTag('muPFIsoValueCharged03PFlow'))
    process.pfIsolatedMuonsPFlow.deltaBetaIsolationValueMap = cms.InputTag(
        'muPFIsoValuePU03PFlow')
    process.pfIsolatedMuonsPFlow.isolationValueMapsNeutral = cms.VInputTag(
        cms.InputTag('muPFIsoValueNeutral03PFlow'),
        cms.InputTag('muPFIsoValueGamma03PFlow'),
    )
    process.pfMuonsPFlow.isolationValueMapsCharged = cms.VInputTag(
        cms.InputTag('muPFIsoValueCharged03PFlow'))
    process.pfMuonsPFlow.deltaBetaIsolationValueMap = cms.InputTag(
        'muPFIsoValuePU03PFlow')
    process.pfMuonsPFlow.isolationValueMapsNeutral = cms.VInputTag(
        cms.InputTag('muPFIsoValueNeutral03PFlow'),
        cms.InputTag('muPFIsoValueGamma03PFlow'),
    )
    process.patMuonsPFlow.isolationValues.pfNeutralHadrons = cms.InputTag(
        'muPFIsoValueNeutral03PFlow')
    process.patMuonsPFlow.isolationValues.pfChargedAll = cms.InputTag(
        'muPFIsoValueChargedAll03PFlow')
    process.patMuonsPFlow.isolationValues.pfPUChargedHadrons = cms.InputTag(
        'muPFIsoValuePU03PFlow')
    process.patMuonsPFlow.isolationValues.pfPhotons = cms.InputTag(
        'muPFIsoValueGamma03PFlow')
    process.patMuonsPFlow.isolationValues.pfChargedHadrons = cms.InputTag(
        'muPFIsoValueCharged03PFlow')

    process.pfIsolatedElectronsPFlow.isolationValueMapsCharged = cms.VInputTag(
        cms.InputTag('elPFIsoValueCharged03PFIdPFlow'))
    process.pfIsolatedElectronsPFlow.deltaBetaIsolationValueMap = cms.InputTag(
        'elPFIsoValuePU03PFIdPFlow')
    process.pfIsolatedElectronsPFlow.isolationValueMapsNeutral = cms.VInputTag(
        cms.InputTag('elPFIsoValueNeutral03PFIdPFlow'),
        cms.InputTag('elPFIsoValueGamma03PFIdPFlow'))
    process.pfElectronsPFlow.isolationValueMapsCharged = cms.VInputTag(
        cms.InputTag('elPFIsoValueCharged03PFIdPFlow'))
    process.pfElectronsPFlow.deltaBetaIsolationValueMap = cms.InputTag(
        'elPFIsoValuePU03PFIdPFlow')
    process.pfElectronsPFlow.isolationValueMapsNeutral = cms.VInputTag(
        cms.InputTag('elPFIsoValueNeutral03PFIdPFlow'),
        cms.InputTag('elPFIsoValueGamma03PFIdPFlow'))
    process.patElectronsPFlow.isolationValues.pfNeutralHadrons = cms.InputTag(
        'elPFIsoValueNeutral03PFIdPFlow')
    process.patElectronsPFlow.isolationValues.pfChargedAll = cms.InputTag(
        'elPFIsoValueChargedAll03PFIdPFlow')
    process.patElectronsPFlow.isolationValues.pfPUChargedHadrons = cms.InputTag(
        'elPFIsoValuePU03PFIdPFlow')
    process.patElectronsPFlow.isolationValues.pfPhotons = cms.InputTag(
        'elPFIsoValueGamma03PFIdPFlow')
    process.patElectronsPFlow.isolationValues.pfChargedHadrons = cms.InputTag(
        'elPFIsoValueCharged03PFIdPFlow')

    ## Add common filters
    process.primaryVertexFilter = cms.EDFilter(
        "GoodVertexFilter",
        vertexCollection=cms.InputTag('offlinePrimaryVertices'),
        minimumNDOF=cms.uint32(4),
        maxAbsZ=cms.double(24),
        maxd0=cms.double(2))

    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(maxZ=cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices'))

    #process.load( "TopQuarkAnalysis.Configuration.patRefSel_goodVertex_cfi" )
    #process.goodOfflinePrimaryVertices.filter = True

    process.load('TopQuarkAnalysis.Configuration.patRefSel_eventCleaning_cff')
    process.trackingFailureFilter.VertexSource = cms.InputTag(
        'goodOfflinePrimaryVertices')
    if runOnMC: process.eventCleaning += process.eventCleaningMC
    else: process.eventCleaning += process.eventCleaningData

    #reason : removing many events.
    process.eventCleaning.remove(process.CSCTightHaloFilter)

    ## Lepton veto filters for L+J channels
    process.muonVetoFilter = cms.EDFilter(
        "PATCandViewCountFilter",
        src=cms.InputTag("selectedPatMuonsPFlow"),
        maxNumber=cms.uint32(0),
        minNumber=cms.uint32(0),
    )
    process.electronVetoFilter = cms.EDFilter(
        "PATCandViewCountFilter",
        src=cms.InputTag("selectedPatElectronsPFlow"),
        maxNumber=cms.uint32(0),
        minNumber=cms.uint32(0),
    )

    # event counters
    process.nEventsTotal = cms.EDProducer("EventCountProducer")
    process.nEventsClean = cms.EDProducer("EventCountProducer")
    process.nEventsPAT = cms.EDProducer("EventCountProducer")
    process.nEventsHLTElEl = cms.EDProducer("EventCountProducer")
    process.nEventsHLTMuMu = cms.EDProducer("EventCountProducer")
    process.nEventsHLTMuEl = cms.EDProducer("EventCountProducer")
    process.nEventsHLTMuJets = cms.EDProducer("EventCountProducer")
    process.nEventsHLTElJets = cms.EDProducer("EventCountProducer")

    ###############################
    ### Add AK5GenJetsNoNu ####
    ###############################
    #process.load("RecoJets.Configuration.GenJetParticles_cff")
    from RecoJets.Configuration.GenJetParticles_cff import genParticlesForJetsNoNu
    from RecoJets.JetProducers.ak5GenJets_cfi import ak5GenJets
    process.ak5GenJetsNoNu = ak5GenJets.clone(
        src=cms.InputTag("genParticlesForJetsNoNu"))

    process.ak5GenJetsSeq = cms.Sequence(process.genParticlesForJets *
                                         process.genParticlesForJetsNoNu *
                                         process.ak5GenJetsNoNu)

    # Flavor history stuff
    process.load("PhysicsTools.HepMCCandAlgos.flavorHistoryPaths_cfi")
    process.flavorHistoryFilter.pathToSelect = cms.int32(-1)
    process.cFlavorHistoryProducer.matchedSrc = cms.InputTag("ak5GenJetsNoNu")
    process.bFlavorHistoryProducer.matchedSrc = cms.InputTag("ak5GenJetsNoNu")
    #ptMinParticle = cms.double(0.0)
    #ptMinShower = cms.double(0.0)

    #process.load( "RecoJets.Configuration.GenJetParticles_cff")
    #process.load( "RecoJets.Configuration.RecoGenJets_cff")

    #process.ReGenJetSequence = cms.Sequence(
    #    process.genParticlesForJets
    #  + process.genParticlesForJetsNoNu
    #  + process.ak5GenJets
    #  + process.ak5GenJetsNoNu
    #)

    process.commonFilterSequence = cms.Sequence(
        process.goodOfflinePrimaryVertices * process.eventCleaning *
        process.ak5GenJetsSeq * process.primaryVertexFilter *
        process.nEventsClean *
        getattr(process, "patPF2PATSequence" + postfix)  # main PF2PAT 
        * process.nEventsPAT * process.flavorHistorySeq)

    #    process.patSequenceComplete = cms.Sequence(
    #  + process.patDefaultSequence
    #  + process.patPFBRECOSequencePFlow
    #        process.patPF2PATSequencePFlow
    #      + process.nEventsPAT
    #    )

    process.load("KrAFT.GeneratorTools.ttbar2bFilter_cfi")

    ## Defile paths
    if decayMode in ("all", "dilepton", "ElEl", "ee"):
        process.pElEl = cms.Path(
            process.nEventsTotal * process.commonFilterSequence *
            process.ttbar2bFilter * process.hltElEl * process.nEventsHLTElEl)
#        if doPAT: process.pElEl += process.patSequenceComplete
    if decayMode in ("all", "dilepton", "MuMu", "mumu"):
        process.pMuMu = cms.Path(process.nEventsTotal *
                                 process.commonFilterSequence *
                                 process.hltMuMu * process.nEventsHLTMuMu)
#        if doPAT: process.pMuMu += process.patSequenceComplete
    if decayMode in ("all", "dilepton", "MuEl", "emu"):
        process.pMuEl = cms.Path(process.nEventsTotal *
                                 process.commonFilterSequence *
                                 process.hltMuEl * process.nEventsHLTMuEl)


#        if doPAT: process.pMuEl += process.patSequenceComplete
    if decayMode in ("all", "MuJets"):
        process.selectedPatMuonsPFlow.cut = 'isPFMuon && (isGlobalMuon || isTrackerMuon) && pt > 10 && abs(eta) < 2.5 && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15'
        process.selectedPatElectronsPFlow.cut = 'pt > 20 && abs(eta) < 2.5 && electronID("mvaTrigV0") > 0. && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15'
        process.muonVetoFilter.maxNumber = 1

        process.pMuJets = cms.Path(
            process.nEventsTotal * process.commonFilterSequence *
            process.hltMuJets * process.nEventsHLTMuJets)
        #        if doPAT: process.pMuJets += process.patSequenceComplete
        process.pMuJets *= process.muonVetoFilter
        process.pMuJets += process.electronVetoFilter

        if runOnMC: process.pMuJets.remove(process.hltMuJets)
    if decayMode in ("all", "ElJets"):
        process.selectedPatMuonsPFlow.cut = 'isPFMuon && (isGlobalMuon || isTrackerMuon) && pt > 10 && abs(eta) < 2.5 && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15'
        process.selectedPatElectronsPFlow.cut = 'pt > 20 && abs(eta) < 2.5 && electronID("mvaTrigV0") > 0. && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15'
        process.electronVetoFilter.maxNumber = 1

        process.pElJets = cms.Path(
            process.nEventsTotal * process.commonFilterSequence *
            process.hltElJets * process.nEventsHLTElJets)
        #        if doPAT: process.pElJets += process.patSequenceComplete
        process.pElJets *= process.muonVetoFilter
        process.pElJets += process.electronVetoFilter

        if runOnMC: process.pElJets.remove(process.hltElJets)

    return process
def addPATSequences(process,runMC):
    # Load the PAT config
    from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent
    process.out = cms.OutputModule("PoolOutputModule",
	    fileName = cms.untracked.string('patTuple.root'),
	    SelectEvents   = cms.untracked.PSet( SelectEvents = cms.vstring('pat_step') ),
	    outputCommands = cms.untracked.vstring('drop *', *patEventContent )
            )
    ###
    process.load('PhysicsTools.PatAlgos.patSequences_cff')

    from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT
    postfix = "PFlow"
    jetAlgo="AK5"
    jetCorrections = None
    if runMC:
	jetCorrections = ('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute'])
    else:
	jetCorrections = ('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute','L2L3Residual'])

    usePF2PAT(process,runPF2PAT=True,
                      jetAlgo=jetAlgo, runOnMC=runMC, postfix=postfix,jetCorrections=jetCorrections)

    #from PhysicsTools.PatAlgos.tools.coreTools import removeMCMatching
    #if not runMC:
    #    removeMCMatching(process, ['All'],"")

 
    #-----------------Customization----------------
    process.pfPileUpPFlow.Enable = True
    process.pfPileUpPFlow.checkClosestZVertex = False
    process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfPileUpPFlow.verbose = True
    process.pfJetsPFlow.doAreaFastjet = True
    process.pfJetsPFlow.doRhoFastjet = False

    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
	"PrimaryVertexObjectFilter",
	filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
	src=cms.InputTag('offlinePrimaryVertices')
	)
    
    # Compute the mean pt per unit area (rho) from the PFCHS inputs
    #from RecoJets.Configuration.RecoPFJets_cff import kt6PFJets,ak5PFJets
    #process.kt6PFJetsPFlow = kt6PFJets.clone(
    #	src = cms.InputTag('pfNoElectron'+postfix),
    #	doAreaFastjet = cms.bool(True),
    #	doRhoFastjet = cms.bool(True)
    #	)
    #process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho")
    from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
    process.kt6PFJetsForPAT = kt4PFJets.clone(
	    rParam = cms.double(0.6),
	    doAreaFastjet = cms.bool(True),
	    doRhoFastjet = cms.bool(True)
	    )
    process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsForPAT", "rho")

    from RecoJets.JetProducers.ak5PFJets_cfi import ak5PFJets
    process.ak5PFJetsPileUp = ak5PFJets.clone( src = cms.InputTag('pfPileUp'+postfix) )

    # Switch on PAT trigger
    from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger
    #switchOnTrigger( process,triggerProducer = 'patTrigger', triggerEventProducer = 'patTriggerEvent', sequence = 'patPF2PATSequence',hltProcess = 'HLT', outputModule = 'out')
    
    switchOnTrigger( process ,sequence ='patPF2PATSequence'+postfix)
    process.patTrigger.addL1Algos = cms.bool( True )
    switchOnTrigger( process ,sequence = 'patPF2PATSequence'+postfix) # to fix event content
    #-------------------------------------------------------------------------------------------------------------
    
    # Add modules to default sequence
    #if runMC:
    #    getattr(process, "patElectrons"+postfix).embedGenMatch = True
    #    getattr(process, "patMuons"+postfix).embedGenMatch = True
    #else:
    #    getattr(process, "patElectrons"+postfix).embedGenMatch = False
    #    getattr(process, "patMuons"+postfix).embedGenMatch = False

    # Add modules to default sequence
    getattr(process,"patPF2PATSequence"+postfix).replace(
	getattr(process,"pfNoElectron"+postfix),
	getattr(process,"pfNoElectron"+postfix)*process.kt6PFJetsForPAT
	)

    getattr(process,"patPF2PATSequence"+postfix).replace(
	getattr(process,"pfNoPileUp"+postfix),
	getattr(process,"pfNoPileUp"+postfix) * process.ak5PFJetsPileUp
	)

    #----------------------------------------------
    # Let it run
    process.pat_step = cms.Path(
	process.goodOfflinePrimaryVertices * 
	#process.patDefaultSequence  +
	getattr(process,"patPF2PATSequence"+postfix)
    )

    # Add PatTrigger output to the created file
    from PhysicsTools.PatAlgos.patEventContent_cff import patTriggerEventContent
    # Add PF2PAT output to the created file
    from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning
    patOutputCommands = cms.untracked.vstring('drop *',
	    'keep recoPFCandidates_particleFlow_*_*',
	    *patEventContentNoCleaning) 

    # Adjust the event content
    patOutputCommands += [
	#'keep *_selectedPat*_*_*',
	'keep *_genParticles*_*_*',
	'keep *_offlinePrimaryVertices*_*_*',
	'keep *_goodOfflinePrimaryVertices*_*_*',
	#'keep *_pileUpN*PrimaryVertices_*_*',
	#'keep *_pfPileUpExclN*_*_*',
	'keep *_pfPileUpPFlow*_*_*',
	'keep *_pfNoPileUpPFlow*_*_*',
	'keep *_ak5PFJetsPileUp_*_*',
	'keep *_ak5PFJets_*_*',
	'keep recoTracks_generalTracks_*_*',
	'keep HcalNoiseSummary_hcalnoise_*_*',
	'keep *_BeamHaloSummary_*_*', 
     #------- Trigger collections ------
	'keep edmTriggerResults_TriggerResults_*_*',
	'keep *_hltTriggerSummaryAOD_*_*',
	'keep L1GlobalTriggerObjectMapRecord_*_*_*',
	'keep L1GlobalTriggerReadoutRecord_*_*_*',
     #------- CASTOR rec hits ------
	'keep *_logErrorHarvester_*_*', 
	'keep *_castorreco_*_*',
     #------- Calo towers (just for now) ------ 
	'keep *_towerMaker_*_*',
     #---------------PatTrigger----------------
	'keep patTriggerObjects_patTrigger*_*_*',
	'keep patTriggerFilters_patTrigger*_*_*',
	'keep patTriggerPaths_patTrigger*_*_*',
	'keep patTriggerEvent_patTriggerEvent*_*_*'
    ]
    process.out.outputCommands = patOutputCommands

    # top projections in PF2PAT:
    getattr(process,"pfNoPileUp"+postfix).enable = True 
    getattr(process,"pfNoMuon"+postfix).enable = True 
    getattr(process,"pfNoElectron"+postfix).enable = True 
    getattr(process,"pfNoTau"+postfix).enable = False 
    getattr(process,"pfNoJet"+postfix).enable = True

    # verbose flags for the PF2PAT modules
    getattr(process,"pfNoJet"+postfix).verbose = False
Пример #27
0
def baseconfig(
		globaltag,
		input_files,
		maxevents,
		nickname,
		outputfilename,
		channel='mm',
		is_data=None,
		kappa_verbosity=0,
	):
	"""
	Create the CMSSW/cmsRun config for the z+jet skim

	:param globaltag: CMS global tag for the data
	:param globaltag: str
	:param input_files: files to process
	:type input_files: list[str]
	:param maxevents: number of events to process; `-1` implies all events
	:type maxevents: int
	:param nickname: nickname of the skim
	:type nickname: str
	:param channel: decay channel of Z; either of `mm` , `em`, `ee`
	:type channel: str
	:param is_data: whether input is data or simulated; use `None` for autodetection
	:type is_data: bool or None
	"""

	#  Config parameters  ##############################################
	cmssw_version = os.environ["CMSSW_VERSION"].split('_')
	cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:])
	autostr = ""
	if globaltag.lower() == 'auto':
		from Configuration.AlCa.autoCond import autoCond
		globaltag = autoCond['startup']
		autostr = " (from autoCond)"
	if is_data is None:
		data = ('Double' in input_files[0]) or ('Single' in input_files[0])
	else:
		data = is_data
	miniaod = False
	add_puppi = (channel == 'mm')

	## print information
	print "\n------- CONFIGURATION 1 ---------"
	print "input:          ", input_files[0], "... (%d files)" % len(input_files) if len(input_files) > 1 else ""
	print "file type:      ", "miniAOD" if miniaod else "AOD"
	print "data:           ", data
	print "output:         ", outputfilename
	print "nickname:       ", nickname
	print "global tag:     ", globaltag + autostr
	print "max events:     ", maxevents if maxevents >= 0 else "all"
	print "cmssw version:  ", '.'.join([str(i) for i in cmssw_version])
	print "channel:        ", channel
	print "add_puppi:      ", add_puppi
	print "kappa verbosity:", kappa_verbosity
	print "---------------------------------"
	print

	#  Basic Process Setup  ############################################
	process = cms.Process("KAPPA")
	process.path = cms.Path()
	process.maxEvents = cms.untracked.PSet(
		input=cms.untracked.int32(maxevents)
	)
	process.options = cms.untracked.PSet(
		wantSummary=cms.untracked.bool(True)
	)
	process.source = cms.Source("PoolSource",
		fileNames=cms.untracked.vstring(input_files)
	)
	# message logger
	process.load("FWCore.MessageLogger.MessageLogger_cfi")
	process.MessageLogger.cerr.FwkReport.reportEvery = 50
	process.MessageLogger.default = cms.untracked.PSet(
		ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5))
	)

	## Geometry and Detector Conditions (needed for a few patTuple production steps)
	if cmssw_version > (7, 4, 0, 'pre8'):
		# https://twiki.cern.ch/twiki/bin/view/Sandbox/MyRootMakerFrom72XTo74X#DDVectorGetter_vectors_are_empty
		print "Use condDBv2 and GeometryRecoDB:"
		process.load("Configuration.Geometry.GeometryRecoDB_cff")
		process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_condDBv2_cff')
	else:
		process.load("Configuration.Geometry.GeometryIdeal_cff")
		process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
	process.load("Configuration.StandardSequences.MagneticField_cff")
	process.GlobalTag.globaltag = cms.string(globaltag)

	#  Kappa  ##########################################################
	process.load('Kappa.Producers.KTuple_cff')
	process.kappaTuple = cms.EDAnalyzer('KTuple',
		process.kappaTupleDefaultsBlock,
		outputFile = cms.string(outputfilename),
	)
	process.kappaTuple.verbose = kappa_verbosity
	process.kappaOut = cms.Sequence(process.kappaTuple)
	process.kappaTuple.active = cms.vstring('VertexSummary', 'BeamSpot')
	if data:
		process.kappaTuple.active += cms.vstring('DataInfo')
	else:
		process.kappaTuple.active += cms.vstring('GenInfo', 'GenParticles')

	if cmssw_version >= (7, 4, 0):
		process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True)
	# must be set explicitly for consume emchanic
	if cmssw_version >= (7, 6, 0):
		process.kappaTuple.Info.hltSource = cms.InputTag("TriggerResults", "", "HLT")

	if channel == 'mm':
		process.kappaTuple.Info.hltWhitelist = cms.vstring(
			# HLT regex selection can be tested at https://regex101.com (with gm options)
			# single muon triggers, e.g. HLT_Mu50_v1
			"^HLT_(Iso)?(Tk)?Mu[0-9]+(_eta2p1|_TrkIsoVVL)?_v[0-9]+$",
			# double muon triggers, e.g. HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v1
			"^HLT_Mu[0-9]+(_TrkIsoVVL)?_(Tk)?Mu[0-9]+(_TrkIsoVVL)?(_DZ)?_v[0-9]+$",
		)
	elif channel == 'ee':
		process.kappaTuple.Info.hltWhitelist = cms.vstring(
			"^HLT_Ele[0-9]+_Ele[0-9]+(_CaloIdL)?(_TrackIdL)?(_IsoVL)?(_DZ)?_v[0-9]+$",
		)

	# Primary Input Collections ###################################################
	## miniAOD has NOT been tested, I'm just guessing names - MF@20150907
	if miniaod:
		input_PFCandidates = 'packedPFCandidates'
		input_PFCandidatePtrs = 'packedPFCandidatesPtrs'
		input_PrimaryVertices = 'offlineSlimmedPrimaryVertices'
	else:
		input_PFCandidates = 'particleFlow'
		input_PFCandidatePtrs = 'particleFlowPtrs'
		input_PrimaryVertices = 'goodOfflinePrimaryVertices'


	#  PFCandidates  ###################################################
	## Good offline PV selection: 
	from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
	process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter',
		filterParams = pvSelector.clone(maxZ = 24.0),  # ndof >= 4, rho <= 2
	)

	## ------------------------------------------------------------------------
	## TopProjections from CommonTools/ParticleFlow:
	process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff")
	process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff")
	process.load("CommonTools.ParticleFlow.pfParticleSelection_cff")


	## pf candidate configuration for everything but CHS jets
	process.pfPileUpIso.PFCandidates		= cms.InputTag(input_PFCandidates)
	process.pfPileUpIso.Vertices			= cms.InputTag(input_PrimaryVertices)
	process.pfPileUpIso.checkClosestZVertex	= True
	process.pfNoPileUpIso.bottomCollection	= cms.InputTag(input_PFCandidates)


	## pf candidate configuration for deltaBeta corrections for muons and electrons 
	process.pfNoPileUpChargedHadrons	= process.pfAllChargedHadrons.clone()
	process.pfNoPileUpNeutralHadrons	= process.pfAllNeutralHadrons.clone()
	process.pfNoPileUpPhotons			= process.pfAllPhotons.clone()
	process.pfPileUpChargedHadrons		= process.pfAllChargedHadrons.clone(src = 'pfPileUpIso')

	## pf candidate configuration for CHS jets
	process.pfPileUp.Vertices				= cms.InputTag(input_PrimaryVertices)
	process.pfPileUp.checkClosestZVertex	= False

	# Modifications for new particleFlow Pointers
	process.pfPileUp.PFCandidates = cms.InputTag(input_PFCandidatePtrs)
	process.pfPileUpIso.PFCandidates = cms.InputTag(input_PFCandidatePtrs)
	process.pfNoPileUp.bottomCollection = cms.InputTag(input_PFCandidatePtrs)
	process.pfNoPileUpIso.bottomCollection = cms.InputTag(input_PFCandidatePtrs)
	process.path *= (
		process.goodOfflinePrimaryVertices
		* process.pfParticleSelectionSequence
	)

	if add_puppi:
		## PUPPI - https://twiki.cern.ch/twiki/bin/viewauth/CMS/PUPPI
		# creates filtered PFCandidates collection 'puppi'
		process.load('CommonTools.PileupAlgos.Puppi_cff')
		process.puppi.candName = cms.InputTag(input_PFCandidates)
		process.puppi.vertexName = cms.InputTag(input_PrimaryVertices)
		# PFCandidates w/o muons for PUPPI - avoid misidentification from high-PT muons
		process.PFCandidatesNoMu  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag(input_PFCandidates),
			cut = cms.string("abs(pdgId)!=13" )
		)
		process.PFCandidatesOnlyMu  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag(input_PFCandidates),
			cut = cms.string("abs(pdgId)==13" )
		)
		# veto without any muons
		process.puppinomutmp = process.puppi.clone(
			candName = cms.InputTag('PFCandidatesNoMu')
		)
		# nomu veto, muons merged back again for proper MET etc.
		process.puppinomu = cms.EDProducer("CandViewMerger",
			src = cms.VInputTag( "puppinomutmp", "PFCandidatesOnlyMu")
		)
		process.path *= (process.puppi * (process.PFCandidatesNoMu * process.PFCandidatesOnlyMu * process.puppinomutmp * process.puppinomu))

	#  Muons  ##########################################################
	if channel == 'mm':
		process.load('Kappa.Skimming.KMuons_run2_cff')
		process.muPreselection1 = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('muons'),
			cut = cms.string("pt>8.0"),
		)
		process.muPreselection2 = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('muPreselection1'),
			minNumber = cms.uint32(2),
		)
		process.kappaTuple.Muons.minPt = 8.0
		process.kappaTuple.Muons.doPfIsolation = cms.bool(False)
		process.kappaTuple.active += cms.vstring('Muons')

		process.path *= (process.muPreselection1 * process.muPreselection2 * process.makeKappaMuons)

	# Electrons ########################################################
	elif channel == 'ee':
		process.load('Kappa.Skimming.KElectrons_run2_cff')
		process.ePreselection1 = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('patElectrons'),
			cut = cms.string("pt>8.0"),
		)
		process.ePreselection2 = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('ePreselection1'),
			minNumber = cms.uint32(2),
		)
		process.kappaTuple.Electrons.minPt = 8.0

		from Kappa.Skimming.KElectrons_run2_cff import setupElectrons
		process.kappaTuple.Electrons.ids = cms.vstring("cutBasedElectronID_Spring15_25ns_V1_standalone_loose",
								 	 "cutBasedElectronID_Spring15_25ns_V1_standalone_medium",
								 	 "cutBasedElectronID_Spring15_25ns_V1_standalone_tight",
								 	 "cutBasedElectronID_Spring15_25ns_V1_standalone_veto",
								 "ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Values")
		setupElectrons(process)

		process.kappaTuple.active += cms.vstring('Electrons')
		process.path *= (process.makeKappaElectrons * process.ePreselection1 * process.ePreselection2)

	#  Jets  ###########################################################
	# Kappa jet processing
	process.kappaTuple.Jets.minPt = 5.0
	process.kappaTuple.Jets.taggers = cms.vstring()

	# containers for objects to process
	jet_resources = []
	cmssw_jets = {}  # algoname: cmssw module
	kappa_jets = {}  # algoname: kappa jet config

	# GenJets
	if not data:
		process.load('RecoJets.Configuration.GenJetParticles_cff')
		process.load('RecoJets.JetProducers.ak5GenJets_cfi')
		jet_resources.append(process.genParticlesForJetsNoNu)
		process.kappaTuple.active += cms.vstring('LV')
		process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') #default?
		genbase_jet = process.ak5GenJets.clone(src=cms.InputTag("genParticlesForJetsNoNu"), doAreaFastjet=True)

	## PFBRECO?
	process.load("RecoJets.JetProducers.ak5PFJets_cfi")
	pfbase_jet = process.ak5PFJets.clone(srcPVs = 'goodOfflinePrimaryVertices', doAreaFastjet=True)

	# create Jet variants
	for param in (4, 5, 8):
		# PFJets
		algos_and_tags = [("", input_PFCandidates), ("CHS", 'pfNoPileUp')]
		if add_puppi:
			algos_and_tags += [("Puppi", 'puppi'),("PuppiNoMu", 'puppinomu')]
		for algo, input_tag in algos_and_tags:
			variant_name = "ak%dPFJets%s" % (param, algo)
			variant_mod = pfbase_jet.clone(src=cms.InputTag(input_tag), rParam=param/10.0)
			cmssw_jets[variant_name] = variant_mod
			# Full Kappa jet definition
			kappa_jets["ak%dPFJets%s"%(param, algo)] = cms.PSet(
				src = cms.InputTag(variant_name),
				PUJetID = cms.InputTag("ak%dPF%sPuJetMva" % (param, algo)),
				PUJetID_full = cms.InputTag("full"),
				QGtagger = cms.InputTag("AK%dPFJets%sQGTagger" % (param, algo)),
				Btagger = cms.InputTag("ak%dPF%s" % (param, algo)),
			)
		# GenJets
		if not data:
			for collection in ("NoNu",): # TODO: add "NoMuNoNu", "" ?
				variant_name = "ak%sGenJets%s" % (param, collection)
				variant_mod = genbase_jet.clone(rParam=param/10.0)
				cmssw_jets[variant_name] = variant_mod
				# GenJets are just KLVs
				process.kappaTuple.LV.whitelist += cms.vstring(variant_name)
	# mount generated jets for processing
	for name, jet_module in cmssw_jets.iteritems():
		setattr(process, name, jet_module)
	for name, pset in kappa_jets.iteritems():
		setattr(process.kappaTuple.Jets, name, pset)
	process.path *= reduce(lambda a, b: a * b, jet_resources + sorted(cmssw_jets.values()))

	# Gluon tagging? - https://twiki.cern.ch/twiki/bin/viewauth/CMS/GluonTag

	# B-tagging (for ak5 jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets

	# B-tagging for (ak5 CHS jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets

	# PileupDensity ########################
	from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
	process.pileupDensitykt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True, Rho_EtaMax=2.5)

	process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
	process.kappaTuple.PileupDensity.rename = cms.vstring("fixedGridRhoFastjetAll => pileupDensity")

	process.path *= (
		process.pileupDensitykt6PFJets
	)

	# MET correction ----------------------------------------------------------
	#TODO check type 0 corrections
	from RecoMET.METProducers.PFMET_cfi import pfMet
	process.pfMETCHS = pfMet.clone(src=cms.InputTag(input_PFCandidates))
	process.kappaTuple.active += cms.vstring('MET')

	# MET without forward region
	process.PFCandidatesNoHF  = cms.EDFilter("CandPtrSelector",
		src = cms.InputTag(input_PFCandidates),
		cut = cms.string("abs(eta) < 3" )
	)
	process.pfMETCHSNoHF = pfMet.clone(src=cms.InputTag('PFCandidatesNoHF'))
	process.path *= (process.pfMETCHS * process.PFCandidatesNoHF * process.pfMETCHSNoHF)

	if add_puppi:
		process.pfMetPuppi = pfMet.clone(src=cms.InputTag('puppi'))
		process.pfMetPuppiNoMu = pfMet.clone(src=cms.InputTag('puppinomu'))
		process.path *= (
			process.pfMetPuppi
			* process.pfMetPuppiNoMu
		)
		process.PuppiNoHF  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag('puppi'),
			cut = cms.string("abs(eta) < 3" )
		)
		process.PuppiNoMuNoHF  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag('puppinomu'),
			cut = cms.string("abs(eta) < 3" )
		)
		process.pfMetPuppiNoHF = pfMet.clone(src=cms.InputTag('PuppiNoHF'))
		process.pfMetPuppiNoMuNoHF = pfMet.clone(src=cms.InputTag('PuppiNoMuNoHF'))
		process.path *= (
			process.PuppiNoHF * process.pfMetPuppiNoHF
			* process.PuppiNoMuNoHF * process.pfMetPuppiNoMuNoHF
		)

		process.kappaTuple.MET.whitelist += cms.vstring('pfMetPuppiNoHF', 'pfMetPuppiNoMuNoHF')


	#  Kappa  Output ###########################################################
	process.path *= (
		process.kappaOut
	)
	# explicit declaration until white/blacklist works again - MF@160119
	# note: extracted from running on CMSSW < 7_6
	if cmssw_version >= (7, 6, 0):
		process.kappaTuple.BeamSpot.offlineBeamSpot = cms.PSet(src=cms.InputTag("offlineBeamSpot"))
		process.kappaTuple.VertexSummary.offlinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("offlinePrimaryVertices"))
		process.kappaTuple.VertexSummary.goodOfflinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("goodOfflinePrimaryVertices"))

		if not data:
			process.kappaTuple.LV.ak4GenJetsNoNu = cms.PSet(src=cms.InputTag("ak4GenJetsNoNu"))
			process.kappaTuple.LV.ak5GenJetsNoNu = cms.PSet(src=cms.InputTag("ak5GenJetsNoNu"))
			process.kappaTuple.LV.ak8GenJetsNoNu = cms.PSet(src=cms.InputTag("ak8GenJetsNoNu"))

		process.kappaTuple.PileupDensity.pileupDensity = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAll"))
		process.kappaTuple.PileupDensity.pileupDensityCalo = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAllCalo"))

		process.kappaTuple.MET.pfChMet = cms.PSet(src=cms.InputTag("pfChMet"))
		process.kappaTuple.MET.metCHS = cms.PSet(src=cms.InputTag("pfMETCHS"))
		process.kappaTuple.MET.metCHSNoHF = cms.PSet(src=cms.InputTag("pfMETCHSNoHF"))
		process.kappaTuple.MET.met = cms.PSet(src=cms.InputTag("pfMet"))
		process.kappaTuple.MET.metEI = cms.PSet(src=cms.InputTag("pfMetEI"))
		if channel == 'mm':
			process.kappaTuple.MET.metPuppi = cms.PSet(src=cms.InputTag("pfMetPuppi"))
			process.kappaTuple.MET.metPuppiNoHF = cms.PSet(src=cms.InputTag("pfMetPuppiNoHF"))

	# final information:
	print "------- CONFIGURATION 2 ---------"
	print "CMSSW producers:"
	for p in str(process.path).split('+'):
		print "  %s" % p
	print "Kappa producers:"
	for p in sorted(process.kappaTuple.active):
		print "  %s" % p
	print "---------------------------------"
	return process
Пример #28
0
def mvaMET_MuTau(process):
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(minNdof=cms.double(4.0),
                                      maxZ=cms.double(24.0)),
        src=cms.InputTag('offlinePrimaryVertices'))
    # Muons (definition stolen from Roger)
    process.mvaMETMuons = cms.EDFilter(
        "MuonSelector",
        src=cms.InputTag('muons'),
        cut=cms.string(
            "abs(eta)<2.1 & pt>15" +
            ## muon ID
            "& isTrackerMuon" + "& isPFMuon" + "& globalTrack.isNonnull" +
            "& innerTrack.hitPattern.numberOfValidPixelHits    >  0" +
            "& innerTrack.normalizedChi2                       < 10" +
            "& numberOfMatches                                 >  0" +
            "& innerTrack.hitPattern.numberOfValidTrackerHits  >  5" +
            "& globalTrack.hitPattern.numberOfValidHits        >  0" +
            "& abs(innerTrack().dxy)                           <2.0" +
            ## muon isolation (w/o deltaBeta, therefore weaker selection criteria)
            "& (pfIsolationR03.sumChargedHadronPt+pfIsolationR03.sumNeutralHadronEt+pfIsolationR03.sumPhotonEt)/pt < 0.3"
        ),
        filter=cms.bool(False))
    # Taus for Mu+Tau channel (definition stolen from Roger)
    process.mvaMETTausMT = cms.EDFilter(
        "PFTauSelector",
        src=cms.InputTag('hpsPFTauProducer'),
        BooleanOperator=cms.string("and"),
        discriminators=cms.VPSet(
            cms.PSet(discriminator=cms.InputTag(
                "hpsPFTauDiscriminationByDecayModeFinding"),
                     selectionCut=cms.double(0.5)),
            cms.PSet(discriminator=cms.InputTag(
                "hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits"
            ),
                     selectionCut=cms.double(0.5)),
            cms.PSet(discriminator=cms.InputTag(
                "hpsPFTauDiscriminationByLooseElectronRejection"),
                     selectionCut=cms.double(0.5)),
            cms.PSet(discriminator=cms.InputTag(
                "hpsPFTauDiscriminationByTightMuonRejection"),
                     selectionCut=cms.double(0.5))),
        cut=cms.string("abs(eta) < 2.3 && pt > 20.0 "),
        filter=cms.bool(False))
    # define MVA-Met producer (for Mu+Tau)
    from RecoJets.JetProducers.PileupJetIDParams_cfi import JetIdParams
    process.pfMetMVAMuTau = cms.EDProducer(
        "PFMETProducerMVA",
        srcCorrJets=cms.InputTag('ak5PFJetsCorr'),
        srcUncorrJets=cms.InputTag('ak5PFJets'),
        srcPFCandidates=cms.InputTag('particleFlow'),
        srcVertices=cms.InputTag('goodOfflinePrimaryVertices'),
        srcLeptons=cms.VInputTag("mvaMETMuons", "mvaMETTausMT"),
        minNumLeptons=cms.int32(0),
        srcRho=cms.InputTag('kt6PFJets', 'rho'),
        globalThreshold=cms.double(-1.),  #pfMet.globalThreshold,
        minCorrJetPt=cms.double(-1.),
        inputFileNames=cms.PSet(
            U=cms.FileInPath(
                'RecoMET/METPUSubtraction/data/gbrmet_53_June2013_type1.root'),
            DPhi=cms.FileInPath(
                'RecoMET/METPUSubtraction/data/gbrmetphi_53_June2013_type1.root'
            ),
            CovU1=cms.FileInPath(
                'RecoMET/METPUSubtraction/data/gbru1cov_53_Dec2012.root'),
            CovU2=cms.FileInPath(
                'RecoMET/METPUSubtraction/data/gbru2cov_53_Dec2012.root')),
        loadMVAfromDB=cms.bool(False),
        is42=cms.bool(
            False
        ),  # CV: set this flag to true if you are running mvaPFMET in CMSSW_4_2_x                           
        corrector=cms.string("ak5PFL1Fastjet"),
        useType1=cms.bool(True),
        useOld42=cms.bool(False),
        dZcut=cms.double(0.1),
        impactParTkThreshold=cms.double(0.),
        tmvaWeights=cms.string(
            "RecoJets/JetProducers/data/TMVAClassificationCategory_JetID_MET_53X_Dec2012.weights.xml"
        ),
        tmvaMethod=cms.string("JetID"),
        version=cms.int32(-1),
        cutBased=cms.bool(False),
        tmvaVariables=cms.vstring(
            "nvtx",
            "jetPt",
            "jetEta",
            "jetPhi",
            "dZ",
            "beta",
            "betaStar",
            "nCharged",
            "nNeutrals",
            "dR2Mean",
            "ptD",
            "frac01",
            "frac02",
            "frac03",
            "frac04",
            "frac05",
        ),
        tmvaSpectators=cms.vstring(),
        JetIdParams=JetIdParams,
        verbosity=cms.int32(0))

    process.MVAMETMuTauSequence = cms.Sequence(
        process.goodOfflinePrimaryVertices * process.mvaMETMuons *
        process.mvaMETTausMT * process.pfMetMVAMuTau)
def createProcess(runOnMC, runCHS, correctMETWithT1, processCaloJets, globalTag):

  ## import skeleton process
  from PhysicsTools.PatAlgos.patTemplate_cfg import process

  # load the PAT config
  process.load("PhysicsTools.PatAlgos.patSequences_cff")
  process.load("JetMETCorrections.Configuration.JetCorrectionProducers_cff")

  # Do some CHS stuff
  process.ak5PFchsL1Fastjet  = process.ak5PFL1Fastjet.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsL2Relative = process.ak5PFL2Relative.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsL3Absolute = process.ak5PFL3Absolute.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsResidual   = process.ak5PFResidual.clone(algorithm = 'AK5PFchs')
  process.ak5PFchsL1FastL2L3 = cms.ESProducer(
      'JetCorrectionESChain',
      correctors = cms.vstring('ak5PFchsL1Fastjet', 'ak5PFchsL2Relative','ak5PFchsL3Absolute')
      )


  from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

  ## The good primary vertex filter ____________________________________________||
  ## This filter throw events with no primary vertex
  process.primaryVertexFilter = cms.EDFilter(
      "VertexSelector",
      src = cms.InputTag("offlinePrimaryVertices"),
      cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
      filter = cms.bool(True)
      )

  process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
      filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
      src = cms.InputTag('offlinePrimaryVertices')
      )

  # Configure PAT to use PF2PAT instead of AOD sources
  # this function will modify the PAT sequences.
  from PhysicsTools.PatAlgos.tools.coreTools import removeSpecificPATObjects, removeMCMatching
  from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT, adaptPFIsoElectrons, adaptPVs, usePFIso
  #from PhysicsTools.PatAlgos.tools.metTools import *

  def usePF2PATForAnalysis(jetAlgo, postfix, useTypeIMET, usePFNoPU):

    # Jet corrections
    # No L2L3 Residual on purpose
    if usePFNoPU:
      jetCorrections = ("%sPFchs" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute'])
      postfix += "chs"
    else:
      jetCorrections = ("%sPF" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute'])

    #if not runOnMC:
    #  jetCorrections[1].append('L2L3Residual')

    p = postfix

    usePF2PAT(process, runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=runOnMC, postfix=p, jetCorrections=jetCorrections, typeIMetCorrections = useTypeIMET)
    getattr(process, "pfPileUp" + p).Enable = True
    getattr(process, "pfPileUp" + p).Vertices = 'goodOfflinePrimaryVertices'
    getattr(process, "pfPileUp" + p).checkClosestZVertex = cms.bool(False)

    getattr(process, "pfJets" + p).doAreaFastjet = cms.bool(True)
    getattr(process, "pfJets" + p).doRhoFastjet = False
    getattr(process, 'patJetCorrFactors' + p).rho = cms.InputTag("kt6PFJets", "rho") # Do not use kt6PFJetsPFlowAK5, it's not ok for L1FastJet.

    # top projections in PF2PAT:
    getattr(process,"pfNoPileUp" + p).enable = cms.bool(usePFNoPU)
    getattr(process,"pfNoMuon" + p).enable = True
    getattr(process,"pfNoElectron" + p).enable = True
    getattr(process,"pfNoTau" + p).enable = True
    getattr(process,"pfNoJet" + p).enable = True

    getattr(process,"patElectrons" + p).embedTrack = True

    getattr(process,"patMuons" + p).embedTrack = True
    # enable delta beta correction for muon selection in PF2PAT?
    getattr(process,"pfIsolatedMuons" + p).doDeltaBetaCorrection = True

    getattr(process, "patJets" + p).embedPFCandidates = False
    # Keep only jets with pt > 2 Gev
    getattr(process, "selectedPatJets" + p).cut = "pt > 2";

    # Use a cone of 0.3 for photon isolation
    #adaptPFIsoPhotons(process, applyPostfix(process, "patPhotons", postfix), postfix, "03")

    # 2012 Photon ID

    # Electron conversion
    setattr(process, "patConversions" + p, cms.EDProducer("PATConversionProducer",
        # input collection
        electronSource = cms.InputTag("selectedPatElectrons" + p)
    ))

    # Switch electron isolation to dR = 0.3, for PF2PAT
    getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p))
    getattr(process, "pfIsolatedElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p)
    getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p))

    getattr(process, "pfElectrons" + p).isolationValueMapsCharged  = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p))
    getattr(process, "pfElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p)
    getattr(process, "pfElectrons" + p).isolationValueMapsNeutral  = cms.VInputTag(cms.InputTag( "elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p))

    # ... And for PAT
    adaptPFIsoElectrons(process, getattr(process, "pfElectrons" + p), p, "03")

##there used to be a modulo to keep track of muons gen info, doesnt work anymore and we don't use that info - so removed for now.
    setattr(process, "patMuonsLoose" + p, getattr(process, "patMuons" + p).clone(
        pfMuonSource = cms.InputTag("pfMuons" + p),
        embedGenMatch = False,
        addGenMatch = False
      )
    )

    setattr(process, "selectedPatMuonsLoose" + p, getattr(process, "selectedPatMuons" + p).clone(
        src = cms.InputTag("patMuonsLoose" + p)
      )
    )
    sequence = getattr(process, "patDefaultSequence" + p)

    sequence += getattr(process, "patMuonsLoose" + p)

    sequence += (getattr(process, "selectedPatMuonsLoose" + p))

    setattr(process, "patElectronsLoose" + p, getattr(process, "patElectrons" + p).clone(
        pfElectronSource = cms.InputTag("pfElectrons" + p)
      )
    )
    setattr(process, "selectedPatElectronsLoose" + p, getattr(process, "selectedPatElectrons" + p).clone(
        src = cms.InputTag("patElectronsLoose" + p)
      )
    )
    adaptPFIsoElectrons(process, getattr(process, "patElectronsLoose" + p), postfix, "03")
    sequence = getattr(process, "patDefaultSequence" + p)
    sequence += (getattr(process, "patElectronsLoose" + p) * getattr(process, "selectedPatElectronsLoose" + p))


    # Setup quark gluon tagger
    #process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff')
    #cloneProcessingSnippet(process, process.QuarkGluonTagger, p)
    #getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p)
    #getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True)
    #getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(usePFNoPU)

    ## Remove the processing of primary vertices, as it's already what we do here
    #getattr(process, 'QGTagger' + p).srcPV = cms.InputTag('goodOfflinePrimaryVertices')
    #getattr(process, 'QuarkGluonTagger' + p).remove(getattr(process, 'goodOfflinePrimaryVerticesQG' + p))

    if not runOnMC:
      if 'L2L3Residual' in jetCorrections:
        getattr(process, 'patPFJetMETtype1p2Corr' + p).jetCorrLabel = 'L2L3Residual'
      getattr(process, 'patPFMet' + p).addGenMET = cms.bool(False)

    names = ["Taus"]
    #if jetAlgo != "AK5":
      #names += ["Electrons", "Muons"]
    if len(names) > 0:
      removeSpecificPATObjects(process, names = names, outputModules = ['out'], postfix = p) 

    adaptPVs(process, pvCollection = cms.InputTag("goodOfflinePrimaryVertices"), postfix = p)

    getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatElectrons" + p), getattr(process, "selectedPatElectrons" + p) + getattr(process, "patConversions" + p))

    #getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatJets" + p), getattr(process, "selectedPatJets" + p) + getattr(process, "QuarkGluonTagger" + p))

    return getattr(process, "patPF2PATSequence" + p)

  if correctMETWithT1:
    process.load("PhysicsTools.PatUtils.patPFMETCorrections_cff")
    
  from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet

  print "##########################"
  print "PF jets with PF2PAT"
  print "Using Type I met" if correctMETWithT1 else "NOT using Type I met"
  print "##########################"

  #runCHS = False

  #postfixes = {'PFlowAK5': 'AK5', 'PFlowAK7': 'AK7'}
  postfixes = {'PFlowAK5': 'AK5'}

  # Setup quark gluon tagger
  process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff')

  process.sequence_chs = cms.Sequence()
  process.sequence_nochs = cms.Sequence()
  for p, algo in postfixes.items():
    process.sequence_nochs += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=False, useTypeIMET=correctMETWithT1)
    if runCHS:
      process.sequence_chs   += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=True, useTypeIMET=correctMETWithT1)

    setattr(process, 'QGTagger' + p, process.QGTagger.clone())
    getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p)
    getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True)
    getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(False)

    process.QuarkGluonTagger.replace(process.QGTagger, getattr(process, 'QGTagger' + p))

    if runCHS:
      chsP = p + "chs"

      setattr(process, 'QGTagger' + chsP, process.QGTagger.clone())
      getattr(process, "QGTagger" + chsP).srcJets = cms.InputTag("selectedPatJets" + chsP)
      getattr(process, "QGTagger" + chsP).isPatJet = cms.untracked.bool(True)
      getattr(process, "QGTagger" + chsP).useCHS = cms.untracked.bool(True)

      process.QuarkGluonTagger.replace(getattr(process, 'QGTagger' + p), getattr(process, 'QGTagger' + p) + getattr(process, 'QGTagger' + chsP))

  print "##########################"
  print "Calo jets" if processCaloJets else "No processing of calo jets"
  print "##########################"

  usePFIso(process, "")
  #adaptPFIsoPhotons(process,  process.patPhotons, "", "03")

  if processCaloJets:

    # No L2L3 Residual on purpose
    jetCorrections = ('AK5Calo', ['L1Offset', 'L2Relative', 'L3Absolute'])

    addJetCollection(process, cms.InputTag('ak7CaloJets'),
        'AK7',
        'Calo',
        doJTA            = True,
        doBTagging       = True,
        jetCorrLabel     = jetCorrections,
        doType1MET       = correctMETWithT1,
        doL1Cleaning     = False,
        doL1Counters     = False,
        genJetCollection = cms.InputTag("ak7GenJets"),
        doJetID          = True,
        jetIdLabel       = "ak7"
        )

    switchJetCollection(process, cms.InputTag('ak5CaloJets'),
        doJTA            = True,
        doBTagging       = True,
        jetCorrLabel     = jetCorrections,
        doType1MET       = correctMETWithT1,
        genJetCollection = cms.InputTag("ak5GenJets"),
        doJetID          = True,
        jetIdLabel       = "ak5"
        )

    process.selectedPatJets.cut = "pt > 2"
    process.selectedPatJetsAK7Calo.cut = "pt > 2"

  else:
    removeSpecificPATObjects(process, names = ['Jets', 'METs'])

  if not runOnMC:
    # Remove MC Matching
    removeMCMatching(process, names = ["All"])

  removeSpecificPATObjects(process, names = ['Electrons', 'Muons', 'Taus'])

  if runCHS:
    print "##########################"
    print "Running CHS sequence"
    print "##########################"

  process.analysisSequence = cms.Sequence()

  process.analysisSequence *= process.sequence_nochs
  if runCHS:
    process.analysisSequence *= process.sequence_chs

  # Quark Gluon tagging
  process.analysisSequence *= process.QuarkGluonTagger

  # Add default pat sequence to our path
  # This brings to life TcMET, Calo jets and Photons
  process.analysisSequence *= process.patDefaultSequence

  # Add our PhotonIsolationProducer to the analysisSequence. This producer compute pf isolations
  # for our photons
  process.photonPFIsolation = cms.EDProducer("PhotonIsolationProducer",
      src = cms.InputTag("selectedPatPhotons")
      )

  process.analysisSequence *= process.photonPFIsolation

  # Filtering

  # require physics declared
  process.load('HLTrigger.special.hltPhysicsDeclared_cfi')
  process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis'

  # require scraping filter
  process.scrapingVeto = cms.EDFilter("FilterOutScraping",
      applyfilter = cms.untracked.bool(True),
      debugOn = cms.untracked.bool(False),
      numtrack = cms.untracked.uint32(10),
      thresh = cms.untracked.double(0.25)
      )

  # Count events
  process.nEventsTotal    = cms.EDProducer("EventCountProducer")
  process.nEventsFiltered = cms.EDProducer("EventCountProducer")

  # MET Filters
  process.load("RecoMET.METFilters.metFilters_cff")

  # HCAL Laser filter : work only on Winter13 rereco
  process.load("EventFilter.HcalRawToDigi.hcallaserFilterFromTriggerResult_cff")

  #needed fot photon energy regression calculation
  process.load('Calibration.EleNewEnergiesProducer.elenewenergiesproducer_cfi')
  #getattr(process,"patPhotons" + p)
  process.patPhotons.userData.userFloats.src = [
        cms.InputTag("eleNewEnergiesProducer","energySCEleJoshPhoSemiParamV5ecorr")
            ]
## uncomment to run interactive
##  process.eleNewEnergiesProducer.regrPhoJoshV5_SemiParamFile = cms.string('../../../../src/HiggsAnalysis/GBRLikelihoodEGTools/data/regweights_v5_forest_ph.root')
##  process.eleNewEnergiesProducer.regrEleJoshV5_SemiParamFile = cms.string('../../../../src/HiggsAnalysis/GBRLikelihoodEGTools/data/regweights_v5_forest_ele.root')

        
  process.eleNewEnergiesProducer.electronCollection = getattr(process,"patPhotons" + p).photonSource

  # Let it run
  process.p = cms.Path(
      process.nEventsTotal +

      # Filters
      process.hcalfilter +
      process.primaryVertexFilter +
      process.scrapingVeto +
      process.metFilters +

      process.goodOfflinePrimaryVertices +
      # photon energy regression
      process.eleNewEnergiesProducer +
      # Physics
      process.analysisSequence +

      process.nEventsFiltered
      )

  if runOnMC:
    process.p.remove(process.hcalfilter)
    process.p.remove(process.scrapingVeto)

  # Add PF2PAT output to the created file
  from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning
  #process.load("CommonTools.ParticleFlow.PF2PAT_EventContent_cff")
  process.out.outputCommands = cms.untracked.vstring('drop *',
      'keep *_photonCore_*_*',
      'keep double_kt6*Jets*_rho_*',
      'keep *_goodOfflinePrimaryVertices_*_*',
      'keep recoPFCandidates_particleFlow_*_*',
      # Content of *patEventContentNoCleaning
      'keep *_selectedPatPhotons*_*_*', 'keep *_selectedPatElectrons*_*_*', 'keep *_selectedPatMuons*_*_*', 'keep *_selectedPatTaus*_*_*', 'keep *_selectedPatJets*_*_*', 'drop *_selectedPatJets_pfCandidates_*', 'drop *_*PF_caloTowers_*', 'drop *_*JPT_pfCandidates_*', 'drop *_*Calo_pfCandidates_*', 'keep *_patMETs*_*_*', 'keep *_selectedPatPFParticles*_*_*', 'keep *_selectedPatTrackCands*_*_*',
      'keep *_cleanPatPhotons*_*_*', 'keep *_cleanPatElectrons*_*_*', 'keep *_cleanPatMuons*_*_*', 'keep *_cleanPatTaus*_*_*',
      'keep *_cleanPatJets*_*_*', 'keep *_cleanPatHemispheres*_*_*', 'keep *_cleanPatPFParticles*_*_*',
      'keep *_cleanPatTrackCands*_*_*',
      'drop *_*PFlow_caloTowers_*',
      # Type I residual
      'drop *_selectedPatJetsForMET*_*_PAT',
      'keep *_patPFMet*_*_PAT', # Keep raw met
      # Trigger
      'keep *_TriggerResults_*_HLT',
      # Debug
      #'keep *_pf*_*_PAT'
      # Photon ID
      'keep *_patConversions*_*_*',
      'keep *_photonPFIsolation*_*_*',
      # Quark Gluon tagging
      'keep *_QGTagger*_*_*',
      'drop *_kt6PFJetsIsoQG_*_PAT',
      'drop *_kt6PFJetsQG_*_PAT',
      # MC truth
      'keep *_genParticles_*_*',
      # RecHits
      'keep *EcalRecHit*_*_*_*',
      # Beam spot
      'keep *_offlineBeamSpot_*_*',
      #photon energy regression
      'keep *_eleNewEnergiesProducer_*_*' 
      )

  if runOnMC:
    process.out.outputCommands.extend(['keep *_addPileupInfo_*_*', 'keep *_generator_*_*'])

  # switch on PAT trigger
  # from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger
  # switchOnTrigger( process )

  ## ------------------------------------------------------
  #  In addition you usually want to change the following
  #  parameters:
  ## ------------------------------------------------------
  #
  process.GlobalTag.globaltag = "%s::All" % (globalTag) ##  (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions)
  #                                         ##
  #process.source.fileNames =  cms.untracked.vstring('file:input_data.root')  ##  (e.g. 'file:AOD.root')
  #                                         ##
  process.maxEvents.input = 2500
  #                                         ##
  #   process.out.outputCommands = [ ... ]  ##  (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py)
  #                                         ##
  process.options.wantSummary = False   ##  (to suppress the long output at the end of the job)
  process.MessageLogger.cerr.FwkReport.reportEvery = 1000

  # Remove annoying ecalLaser messages
  process.MessageLogger.suppressError = cms.untracked.vstring ('ecalLaserCorrFilter')

  return process
Пример #30
0
def applyFilters(process):

    ## The beam scraping filter __________________________________________________||
    process.noscraping = cms.EDFilter("FilterOutScraping",
                                      applyfilter=cms.untracked.bool(True),
                                      debugOn=cms.untracked.bool(False),
                                      numtrack=cms.untracked.uint32(10),
                                      thresh=cms.untracked.double(0.25))

    ## The iso-based HBHE noise filter ___________________________________________||
    #process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi')

    ## The CSC beam halo tight filter ____________________________________________||
    #process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi')
    process.load("RecoMET.METFilters.metFilters_cff")

    ## The HCAL laser filter _____________________________________________________||
    process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi")
    process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(
        False)
    process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True)

    ## The ECAL dead cell trigger primitive filter _______________________________||
    process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi')
    ## For AOD and RECO recommendation to use recovered rechits
    process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag(
        "ecalTPSkimNA")

    ## The EE bad SuperCrystal filter ____________________________________________||
    process.load('RecoMET.METFilters.eeBadScFilter_cfi')

    ## The Good vertices collection needed by the tracking failure filter ________||
    process.goodVertices = cms.EDFilter(
        "VertexSelector",
        filter=cms.bool(False),
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string(
            "!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"))

    ## The tracking failure filter _______________________________________________||
    process.load('RecoMET.METFilters.trackingFailureFilter_cfi')
    process.load('RecoMET.METFilters.trackingPOGFilters_cfi')

    # Tracking TOBTEC fakes filter ##
    # if true, only events passing filter (bad events) will pass
    process.tobtecfakesfilter.filter = cms.bool(False)

    ## The good primary vertex filter ____________________________________________||
    pvSrc = 'offlinePrimaryVertices'
    process.primaryVertexFilter = cms.EDFilter(
        "VertexSelector",
        src=cms.InputTag("offlinePrimaryVertices"),
        cut=cms.string(
            "!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"),
        filter=cms.bool(True))

    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=pvSelector.clone(
            maxZ=cms.double(24.0),
            minNdof=cms.double(4.0)  # this is >= 4
        ),
        src=cms.InputTag(pvSrc))
Пример #31
0
def baseconfig(
		globaltag,
		input_files,
		maxevents,
		nickname,
		outputfilename,
		channel='mm',
		is_data=None,
		kappa_verbosity=0,
	):
	"""
	Create the CMSSW/cmsRun config for the z+jet skim

	:param globaltag: CMS global tag for the data
	:param globaltag: str
	:param input_files: files to process
	:type input_files: list[str]
	:param maxevents: number of events to process; `-1` implies all events
	:type maxevents: int
	:param nickname: nickname of the skim
	:type nickname: str
	:param channel: decay channel of Z; either of `mm` , `em`, `ee`
	:type channel: str
	:param is_data: whether input is data or simulated; use `None` for autodetection
	:type is_data: bool or None
	"""

	#  Config parameters  ##############################################
	cmssw_version = os.environ["CMSSW_VERSION"].split('_')
	cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:])
	autostr = ""
	if globaltag.lower() == 'auto':
		from Configuration.AlCa.autoCond import autoCond
		globaltag = autoCond['startup']
		autostr = " (from autoCond)"
	if is_data is None:
		data = ('Double' in input_files[0]) or ('Single' in input_files[0])
	else:
		data = is_data
	miniaod = False
	add_puppi = (channel == 'mm')

	## print information
	print "\n------- CONFIGURATION 1 ---------"
	print "input:          ", input_files[0], "... (%d files)" % len(input_files) if len(input_files) > 1 else ""
	print "file type:      ", "miniAOD" if miniaod else "AOD"
	print "data:           ", data
	print "output:         ", outputfilename
	print "nickname:       ", nickname
	print "global tag:     ", globaltag + autostr
	print "max events:     ", maxevents if maxevents >= 0 else "all"
	print "cmssw version:  ", '.'.join([str(i) for i in cmssw_version])
	print "channel:        ", channel
	print "add_puppi:      ", add_puppi
	print "kappa verbosity:", kappa_verbosity
	print "---------------------------------"
	print

	#  Basic Process Setup  ############################################
	process = cms.Process("KAPPA")
	process.path = cms.Path()
	process.maxEvents = cms.untracked.PSet(
		input=cms.untracked.int32(maxevents)
	)
	process.options = cms.untracked.PSet(
		wantSummary=cms.untracked.bool(True)
	)
	process.source = cms.Source("PoolSource",
		fileNames=cms.untracked.vstring(input_files)
	)
	# message logger
	process.load("FWCore.MessageLogger.MessageLogger_cfi")
	process.MessageLogger.cerr.FwkReport.reportEvery = 50
	process.MessageLogger.default = cms.untracked.PSet(
		ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5))
	)

	## Geometry and Detector Conditions (needed for a few patTuple production steps)
	if cmssw_version > (7, 4, 0, 'pre8'):
		# https://twiki.cern.ch/twiki/bin/view/Sandbox/MyRootMakerFrom72XTo74X#DDVectorGetter_vectors_are_empty
		print "Use condDBv2 and GeometryRecoDB:"
		process.load("Configuration.Geometry.GeometryRecoDB_cff")
		process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_condDBv2_cff')
	else:
		process.load("Configuration.Geometry.GeometryIdeal_cff")
		process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
	process.load("Configuration.StandardSequences.MagneticField_cff")
	process.GlobalTag.globaltag = cms.string(globaltag)

	#  Kappa  ##########################################################
	process.load('Kappa.Producers.KTuple_cff')
	process.kappaTuple = cms.EDAnalyzer('KTuple',
		process.kappaTupleDefaultsBlock,
		outputFile = cms.string(outputfilename),
	)
	process.kappaTuple.verbose = kappa_verbosity
	process.kappaOut = cms.Sequence(process.kappaTuple)
	process.kappaTuple.active = cms.vstring('VertexSummary', 'BeamSpot')
	if data:
		process.kappaTuple.active += cms.vstring('DataInfo')
	else:
		process.kappaTuple.active += cms.vstring('GenInfo', 'GenParticles')

	if cmssw_version >= (7, 4, 0):
		process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True)
	# must be set explicitly for consume emchanic
	if cmssw_version >= (7, 6, 0):
		process.kappaTuple.Info.hltSource = cms.InputTag("TriggerResults", "", "HLT")

	if channel == 'mm':
		process.kappaTuple.Info.hltWhitelist = cms.vstring(
			# HLT regex selection can be tested at https://regex101.com (with gm options)
			# single muon triggers, e.g. HLT_Mu50_v1
			"^HLT_(Iso)?(Tk)?Mu[0-9]+(_eta2p1|_TrkIsoVVL)?_v[0-9]+$",
			# double muon triggers, e.g. HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v1
			"^HLT_Mu[0-9]+(_TrkIsoVVL)?_(Tk)?Mu[0-9]+(_TrkIsoVVL)?(_DZ)?_v[0-9]+$",
		)
	elif channel == 'ee':
		process.kappaTuple.Info.hltWhitelist = cms.vstring(
			"^HLT_Ele[0-9]+_Ele[0-9]+(_CaloIdL)?(_TrackIdL)?(_IsoVL)?(_DZ)?_v[0-9]+$",
		)

	# Primary Input Collections ###################################################
	## miniAOD has NOT been tested, I'm just guessing names - MF@20150907
	if miniaod:
		input_PFCandidates = 'packedPFCandidates'
		input_PFCandidatePtrs = 'packedPFCandidatesPtrs'
		input_PrimaryVertices = 'offlineSlimmedPrimaryVertices'
	else:
		input_PFCandidates = 'particleFlow'
		input_PFCandidatePtrs = 'particleFlowPtrs'
		input_PrimaryVertices = 'goodOfflinePrimaryVertices'


	#  PFCandidates  ###################################################
	## Good offline PV selection: 
	from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
	process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter',
		filterParams = pvSelector.clone(maxZ = 24.0),  # ndof >= 4, rho <= 2
	)

	## ------------------------------------------------------------------------
	## TopProjections from CommonTools/ParticleFlow:
	process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff")
	process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff")
	process.load("CommonTools.ParticleFlow.pfParticleSelection_cff")


	## pf candidate configuration for everything but CHS jets
	process.pfPileUpIso.PFCandidates		= cms.InputTag(input_PFCandidates)
	process.pfPileUpIso.Vertices			= cms.InputTag(input_PrimaryVertices)
	process.pfPileUpIso.checkClosestZVertex	= True
	process.pfNoPileUpIso.bottomCollection	= cms.InputTag(input_PFCandidates)


	## pf candidate configuration for deltaBeta corrections for muons and electrons 
	process.pfNoPileUpChargedHadrons	= process.pfAllChargedHadrons.clone()
	process.pfNoPileUpNeutralHadrons	= process.pfAllNeutralHadrons.clone()
	process.pfNoPileUpPhotons			= process.pfAllPhotons.clone()
	process.pfPileUpChargedHadrons		= process.pfAllChargedHadrons.clone(src = 'pfPileUpIso')

	## pf candidate configuration for CHS jets
	process.pfPileUp.Vertices				= cms.InputTag(input_PrimaryVertices)
	process.pfPileUp.checkClosestZVertex	= False

	# Modifications for new particleFlow Pointers
	process.pfPileUp.PFCandidates = cms.InputTag(input_PFCandidatePtrs)
	process.pfPileUpIso.PFCandidates = cms.InputTag(input_PFCandidatePtrs)
	process.pfNoPileUp.bottomCollection = cms.InputTag(input_PFCandidatePtrs)
	process.pfNoPileUpIso.bottomCollection = cms.InputTag(input_PFCandidatePtrs)
	process.path *= (
		process.goodOfflinePrimaryVertices
		* process.pfParticleSelectionSequence
	)

	if add_puppi:
		## PUPPI - https://twiki.cern.ch/twiki/bin/viewauth/CMS/PUPPI
		# creates filtered PFCandidates collection 'puppi'
		process.load('CommonTools.PileupAlgos.Puppi_cff')
		process.puppi.candName = cms.InputTag(input_PFCandidates)
		process.puppi.vertexName = cms.InputTag(input_PrimaryVertices)
		# PFCandidates w/o muons for PUPPI - avoid misidentification from high-PT muons
		process.PFCandidatesNoMu  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag(input_PFCandidates),
			cut = cms.string("abs(pdgId)!=13" )
		)
		process.PFCandidatesOnlyMu  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag(input_PFCandidates),
			cut = cms.string("abs(pdgId)==13" )
		)
		# veto without any muons
		process.puppinomutmp = process.puppi.clone(
			candName = cms.InputTag('PFCandidatesNoMu')
		)
		# nomu veto, muons merged back again for proper MET etc.
		process.puppinomu = cms.EDProducer("CandViewMerger",
			src = cms.VInputTag( "puppinomutmp", "PFCandidatesOnlyMu")
		)
		process.path *= (process.puppi * (process.PFCandidatesNoMu * process.PFCandidatesOnlyMu * process.puppinomutmp * process.puppinomu))

	#  Muons  ##########################################################
	if channel == 'mm':
		process.load('Kappa.Skimming.KMuons_run2_cff')
		process.muPreselection1 = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('muons'),
			cut = cms.string("pt>8.0"),
		)
		process.muPreselection2 = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('muPreselection1'),
			minNumber = cms.uint32(2),
		)
		process.kappaTuple.Muons.minPt = 8.0
		process.kappaTuple.Muons.doPfIsolation = cms.bool(False)
		process.kappaTuple.active += cms.vstring('Muons')

		process.path *= (process.muPreselection1 * process.muPreselection2 * process.makeKappaMuons)

	# Electrons ########################################################
	elif channel == 'ee':
		process.load('Kappa.Skimming.KElectrons_run2_cff')
		process.ePreselection1 = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('patElectrons'),
			cut = cms.string("pt>8.0"),
		)
		process.ePreselection2 = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('ePreselection1'),
			minNumber = cms.uint32(2),
		)
		process.kappaTuple.Electrons.minPt = 8.0

		from Kappa.Skimming.KElectrons_run2_cff import setupElectrons
		process.kappaTuple.Electrons.ids = cms.VInputTag("cutBasedElectronID_Spring15_25ns_V1_standalone_loose",
								 	 "cutBasedElectronID_Spring15_25ns_V1_standalone_medium",
								 	 "cutBasedElectronID_Spring15_25ns_V1_standalone_tight",
								 	 "cutBasedElectronID_Spring15_25ns_V1_standalone_veto",
								 "ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Values")
		setupElectrons(process)

		process.kappaTuple.active += cms.vstring('Electrons')
		process.path *= (process.makeKappaElectrons * process.ePreselection1 * process.ePreselection2)

	#  Jets  ###########################################################
	# Kappa jet processing
	process.kappaTuple.Jets.minPt = 5.0
	process.kappaTuple.Jets.taggers = cms.vstring()

	# containers for objects to process
	jet_resources = []
	cmssw_jets = {}  # algoname: cmssw module
	kappa_jets = {}  # algoname: kappa jet config

	# GenJets
	if not data:
		process.load('RecoJets.Configuration.GenJetParticles_cff')
		process.load('RecoJets.JetProducers.ak5GenJets_cfi')
		jet_resources.append(process.genParticlesForJetsNoNu)
		process.kappaTuple.active += cms.vstring('LV')
		process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') #default?
		genbase_jet = process.ak5GenJets.clone(src=cms.InputTag("genParticlesForJetsNoNu"), doAreaFastjet=True)

	## PFBRECO?
	process.load("RecoJets.JetProducers.ak5PFJets_cfi")
	pfbase_jet = process.ak5PFJets.clone(srcPVs = 'goodOfflinePrimaryVertices', doAreaFastjet=True)

	# create Jet variants
	for param in (4, 5, 8):
		# PFJets
		algos_and_tags = [("", input_PFCandidates), ("CHS", 'pfNoPileUp')]
		if add_puppi:
			algos_and_tags += [("Puppi", 'puppi'),("PuppiNoMu", 'puppinomu')]
		for algo, input_tag in algos_and_tags:
			variant_name = "ak%dPFJets%s" % (param, algo)
			variant_mod = pfbase_jet.clone(src=cms.InputTag(input_tag), rParam=param/10.0)
			cmssw_jets[variant_name] = variant_mod
			# Full Kappa jet definition
			kappa_jets["ak%dPFJets%s"%(param, algo)] = cms.PSet(
				src = cms.InputTag(variant_name),
				PUJetID = cms.InputTag("ak%dPF%sPuJetMva" % (param, algo)),
				PUJetID_full = cms.InputTag("full"),
				QGtagger = cms.InputTag("AK%dPFJets%sQGTagger" % (param, algo)),
				Btagger = cms.InputTag("ak%dPF%s" % (param, algo)),
			)
		# GenJets
		if not data:
			for collection in ("NoNu",): # TODO: add "NoMuNoNu", "" ?
				variant_name = "ak%sGenJets%s" % (param, collection)
				variant_mod = genbase_jet.clone(rParam=param/10.0)
				cmssw_jets[variant_name] = variant_mod
				# GenJets are just KLVs
				process.kappaTuple.LV.whitelist += cms.vstring(variant_name)
	# mount generated jets for processing
	for name, jet_module in cmssw_jets.iteritems():
		setattr(process, name, jet_module)
	for name, pset in kappa_jets.iteritems():
		setattr(process.kappaTuple.Jets, name, pset)
	process.path *= reduce(lambda a, b: a * b, jet_resources + sorted(cmssw_jets.values()))

	# Gluon tagging? - https://twiki.cern.ch/twiki/bin/viewauth/CMS/GluonTag

	# B-tagging (for ak5 jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets

	# B-tagging for (ak5 CHS jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets

	# PileupDensity ########################
	from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
	process.pileupDensitykt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True, Rho_EtaMax=2.5)

	process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
	process.kappaTuple.PileupDensity.rename = cms.vstring("fixedGridRhoFastjetAll => pileupDensity")

	process.path *= (
		process.pileupDensitykt6PFJets
	)

	# MET correction ----------------------------------------------------------
	#TODO check type 0 corrections
	from RecoMET.METProducers.PFMET_cfi import pfMet
	process.pfMETCHS = pfMet.clone(src=cms.InputTag(input_PFCandidates))
	process.kappaTuple.active += cms.vstring('MET')

	# MET without forward region
	process.PFCandidatesNoHF  = cms.EDFilter("CandPtrSelector",
		src = cms.InputTag(input_PFCandidates),
		cut = cms.string("abs(eta) < 3" )
	)
	process.pfMETCHSNoHF = pfMet.clone(src=cms.InputTag('PFCandidatesNoHF'))
	process.path *= (process.pfMETCHS * process.PFCandidatesNoHF * process.pfMETCHSNoHF)

	if add_puppi:
		process.pfMetPuppi = pfMet.clone(src=cms.InputTag('puppi'))
		process.pfMetPuppiNoMu = pfMet.clone(src=cms.InputTag('puppinomu'))
		process.path *= (
			process.pfMetPuppi
			* process.pfMetPuppiNoMu
		)
		process.PuppiNoHF  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag('puppi'),
			cut = cms.string("abs(eta) < 3" )
		)
		process.PuppiNoMuNoHF  = cms.EDFilter("CandPtrSelector",
			src = cms.InputTag('puppinomu'),
			cut = cms.string("abs(eta) < 3" )
		)
		process.pfMetPuppiNoHF = pfMet.clone(src=cms.InputTag('PuppiNoHF'))
		process.pfMetPuppiNoMuNoHF = pfMet.clone(src=cms.InputTag('PuppiNoMuNoHF'))
		process.path *= (
			process.PuppiNoHF * process.pfMetPuppiNoHF
			* process.PuppiNoMuNoHF * process.pfMetPuppiNoMuNoHF
		)

		process.kappaTuple.MET.whitelist += cms.vstring('pfMetPuppiNoHF', 'pfMetPuppiNoMuNoHF')


	#  Kappa  Output ###########################################################
	process.path *= (
		process.kappaOut
	)
	# explicit declaration until white/blacklist works again - MF@160119
	# note: extracted from running on CMSSW < 7_6
	if cmssw_version >= (7, 6, 0):
		process.kappaTuple.BeamSpot.offlineBeamSpot = cms.PSet(src=cms.InputTag("offlineBeamSpot"))
		process.kappaTuple.VertexSummary.offlinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("offlinePrimaryVertices"))
		process.kappaTuple.VertexSummary.goodOfflinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("goodOfflinePrimaryVertices"))

		if not data:
			process.kappaTuple.LV.ak4GenJetsNoNu = cms.PSet(src=cms.InputTag("ak4GenJetsNoNu"))
			process.kappaTuple.LV.ak5GenJetsNoNu = cms.PSet(src=cms.InputTag("ak5GenJetsNoNu"))
			process.kappaTuple.LV.ak8GenJetsNoNu = cms.PSet(src=cms.InputTag("ak8GenJetsNoNu"))

		process.kappaTuple.PileupDensity.pileupDensity = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAll"))
		process.kappaTuple.PileupDensity.pileupDensityCalo = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAllCalo"))

		process.kappaTuple.MET.pfChMet = cms.PSet(src=cms.InputTag("pfChMet"))
		process.kappaTuple.MET.metCHS = cms.PSet(src=cms.InputTag("pfMETCHS"))
		process.kappaTuple.MET.metCHSNoHF = cms.PSet(src=cms.InputTag("pfMETCHSNoHF"))
		process.kappaTuple.MET.met = cms.PSet(src=cms.InputTag("pfMet"))
		process.kappaTuple.MET.metEI = cms.PSet(src=cms.InputTag("pfMetEI"))
		if channel == 'mm':
			process.kappaTuple.MET.metPuppi = cms.PSet(src=cms.InputTag("pfMetPuppi"))
			process.kappaTuple.MET.metPuppiNoHF = cms.PSet(src=cms.InputTag("pfMetPuppiNoHF"))

	# final information:
	print "------- CONFIGURATION 2 ---------"
	print "CMSSW producers:"
	for p in str(process.path).split('+'):
		print "  %s" % p
	print "Kappa producers:"
	for p in sorted(process.kappaTuple.active):
		print "  %s" % p
	print "---------------------------------"
	return process
## The good primary vertex filter ____________________________________________||
process.primaryVertexFilter = cms.EDFilter(
    "VertexSelector",
    src = cms.InputTag("offlinePrimaryVertices"),
    cut = cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho < 2"),
    filter = cms.bool(True)
    )


from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

process.goodOfflinePrimaryVertices = cms.EDFilter(
    "PrimaryVertexObjectFilter",
    filterParams = pvSelector.clone( maxZ = cms.double(24.0),
                                     minNdof = cms.double(4.0) # this is >= 4
                                     ),
    src=cms.InputTag(pvSrc)
    )
    
process.trackingFailureFilter.VertexSource = 'primaryVertexFilter'
  
process.filtersSeq = cms.Sequence(
   process.primaryVertexFilter *
   #process.noscraping *
   process.HBHENoiseFilter* 
   process.CSCTightHaloFilter *
   process.hcalLaserEventFilter *
   process.EcalDeadCellTriggerPrimitiveFilter *
   process.trackingFailureFilter *
   process.eeBadScFilter *
Пример #33
0
import FWCore.ParameterSet.Config as cms

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

goodOnlinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
    filterParams = pvSelector.clone( minNdof = 4.0, maxZ = 24.0 ),
    src = cms.InputTag('offlinePrimaryVertices')
)
process.kt6PFJets.doRhoFastjet = True
##-------------------- Turn-on the FastJet jet area calculation for your favorite algorithm -----------------------
#process.ak5PFJets.doAreaFastjet = True

process.primaryVertexFilter = cms.EDFilter("GoodVertexFilter",
                                           vertexCollection = cms.InputTag('offlinePrimaryVertices'),
                                           minimumNDOF = cms.uint32(4) ,
                                           maxAbsZ = cms.double(24), 
                                           maxd0 = cms.double(2) 
                                           )

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

process.goodOfflinePrimaryVertices = cms.EDFilter(
    "PrimaryVertexObjectFilter",
    filterParams = pvSelector.clone( maxZ = cms.double(24.0) ),
    src=cms.InputTag('offlinePrimaryVertices')
    )



############################### 
########## Electron ID ########
###############################
  
process.load('RecoEgamma.ElectronIdentification.cutsInCategoriesElectronIdentificationV06_cfi')
process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff")

process.patElectrons.electronIDSources = cms.PSet(
    #CiC
    eidVeryLooseMC = cms.InputTag("eidVeryLooseMC"),
def makeMiBiCommonNT(process, GlobalTag, HLT='HLT', MC=False, MCType='Other'):

    # Setup the process
    process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) )
    process.load("FWCore.MessageService.MessageLogger_cfi")
    process.MessageLogger.cerr.FwkReport.reportEvery = 100
    process.load('Configuration.StandardSequences.GeometryDB_cff')
    process.load("Configuration.StandardSequences.MagneticField_cff")
    process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
    process.GlobalTag.globaltag = GlobalTag
    

    # Source
    process.source = cms.Source(
        "PoolSource",
        fileNames = cms.untracked.vstring()
    )
    
    # Out
    process.out = cms.OutputModule(
        "PoolOutputModule",
        outputCommands = cms.untracked.vstring(),
        fileName = cms.untracked.string('file:./MiBiCommonPAT.root'),
    )
    #process.e = cms.EndPath(process.out)
    
    
    
    process.load("PhysicsTools.NtupleUtils.PUDumper_cfi")
    process.PUDumper.mcFlag = cms.untracked.bool(MC)
    
    process.load("PhysicsTools.NtupleUtils.AllPassFilter_cfi")
    
    #--------------------------
    # Counter1: All read events
    process.AllEvents = process.AllPassFilter.clone()

    
    #--------------------------
    # Counter2: Scraping filter
    process.scrapingFilter = cms.EDFilter(
        "FilterOutScraping",
        applyfilter = cms.untracked.bool(True),
        debugOn = cms.untracked.bool(False),
        numtrack = cms.untracked.uint32(10),
        thresh = cms.untracked.double(0.25)
    )
    
    process.NonScrapedEvents = process.AllPassFilter.clone()

    
    #-----------------------------------
    # Counter3: Filter on primary vertex
    
    # Get a list of good primary vertices, in 42x, these are DAF vertices
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone( minNdof = cms.double(3.0), maxZ = cms.double(24.0) ),
        src=cms.InputTag('offlinePrimaryVertices')
    )
    
    process.GoodVtxEvents = process.AllPassFilter.clone()

    #-------------------------------------
    # build muonless vertices
    #add track no muon producer
    process.load("PhysicsTools.MiBiCommonPAT.NoMuonTrackProducer_cfi")

    # re-do vertices
    process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi")
    from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import *

    process.offlinePrimaryVerticesNoMu=offlinePrimaryVertices.clone()
    process.offlinePrimaryVerticesNoMu.TrackLabel = cms.InputTag("NoMuonTrackProducer")

    process.noMuonVertexReco = cms.Sequence(process.NoMuonTrackProducer*process.offlinePrimaryVerticesNoMu)

    #-------------------------------------
    # build electron less vertices
    #add track no electron producer
    process.load("PhysicsTools.MiBiCommonPAT.NoElectronTrackProducer_cfi")

    # re-do vertices
    process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi")
    from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import *

    process.offlinePrimaryVerticesNoEle=offlinePrimaryVertices.clone()
    process.offlinePrimaryVerticesNoEle.TrackLabel = cms.InputTag("NoElectronTrackProducer")

    process.noElectronVertexReco = cms.Sequence(process.NoElectronTrackProducer*process.offlinePrimaryVerticesNoEle)

    
    #-------------------------------------
    # build electron+muon less vertices
    #add track no lepton producer
    process.load("PhysicsTools.MiBiCommonPAT.NoLeptonTrackProducer_cfi")

    # re-do vertices
    process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi")
    from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import *

    process.offlinePrimaryVerticesNoLep=offlinePrimaryVertices.clone()
    process.offlinePrimaryVerticesNoLep.TrackLabel = cms.InputTag("NoLeptonTrackProducer")

    process.noLeptonVertexReco = cms.Sequence(process.NoLeptonTrackProducer*process.offlinePrimaryVerticesNoLep)
    
    
    #------------------
    #Load PAT sequences
    process.load("PhysicsTools.PatAlgos.patSequences_cff")
    process.load("PhysicsTools.PatAlgos.tools.pfTools")
    postfix = "PFlow"

    if not MC:
      usePF2PAT(process, runPF2PAT=True, jetAlgo='AK5', runOnMC=MC, postfix = postfix, jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute','L2L3Residual']) )
    if MC:
      usePF2PAT(process, runPF2PAT=True, jetAlgo='AK5', runOnMC=MC, postfix = postfix, jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute']) )
    process.pfPileUpPFlow.Enable = True
    process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfPileUpPFlow.checkClosestZVertex = cms.bool(False)
    process.pfJetsPFlow.doAreaFastjet = True
    process.pfJetsPFlow.doRhoFastjet = False
    
    if not MC:
     removeMCMatching(process, ['All'])
    
    # remove taus from the sequence       
    removeSpecificPATObjects( process, ['Taus'] )
    process.patDefaultSequence.remove( process.patTaus )
    
    #### jets ####    
    process.load('JetMETCorrections.Configuration.DefaultJEC_cff')
    from RecoJets.JetProducers.kt4PFJets_cfi import *
       
    # compute FastJet rho to correct jets
    process.kt6PFJets = kt4PFJets.clone(
        rParam = cms.double(0.6),
        doAreaFastjet = cms.bool(True),
        doRhoFastjet = cms.bool(True)
        )
    process.patJetCorrFactors.rho = cms.InputTag("kt6PFJets","rho")
    
    # compute CHS rho to correct jets
    process.kt6PFJetsPFlow = kt4PFJets.clone(
        rParam = cms.double(0.6),
        src = cms.InputTag('pfNoElectron'+postfix),
        doAreaFastjet = cms.bool(True),
        doRhoFastjet = cms.bool(True)
        )
    process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho")
    
    # compute FastJet rho to correct isolation
    process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True )
    process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5)
    
    # compute area for ak5PFJets
    from RecoJets.JetProducers.ak5PFJets_cfi import *
    process.ak5PFJets = ak5PFJets.clone()
    process.ak5PFJets.doAreaFastjet = True
        
    
    # ---------------
    # add collections
    addTcMET(process, 'TC')
    addPfMET(process, 'PF')
    
    if not MC:
        addJetCollection(
            process,
            cms.InputTag('ak5PFJets'),
            'AK5',
            'PF',
            doJTA        = True,
            doBTagging   = True,
            jetCorrLabel = ('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual'])),
            doType1MET   = True,
            doL1Cleaning = True,
            doL1Counters = False,
            genJetCollection=cms.InputTag("ak5GenJets"),
            doJetID      = True,
            jetIdLabel   = "ak5"
            )
    
    if MC:
        addJetCollection(
            process,
            cms.InputTag('ak5PFJets'),
            'AK5',
            'PF',
            doJTA        = True,
            doBTagging   = True,
            jetCorrLabel = ('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])),
            doType1MET   = True,
            doL1Cleaning = True,
            doL1Counters = False,
            genJetCollection=cms.InputTag("ak5GenJets"),
            doJetID      = True,
            jetIdLabel   = "ak5"
            )        
    
    # -------------------
    # pat selection layer
    
    process.selectedPatElectrons.cut      = cms.string("pt > 17. & abs(eta) < 2.5")
    process.selectedPatElectronsPFlow.cut = cms.string("pt > 17. & abs(eta) < 2.5")
    
    process.selectedPatMuons.cut      = cms.string("pt > 17. & abs(eta) < 2.5")
    process.selectedPatMuonsPFlow.cut = cms.string("pt > 17. & abs(eta) < 2.5")
    
    process.selectedPatJets.cut        = cms.string("pt > 15. & abs(eta) < 5")
    process.selectedPatJetsPFlow.cut   = cms.string("pt > 15. & abs(eta) < 5")    
    process.selectedPatJetsAK5PF.cut   = cms.string("pt > 15. & abs(eta) < 5")
    
    process.selectedPatPhotons.cut      = cms.string("pt > 10. & abs(eta) < 5")
    process.selectedPatPhotonsPFlow.cut = cms.string("pt > 10. & abs(eta) < 5")    
    
    # the HCAL Noise Filter
    process.load('CommonTools.RecoAlgos.HBHENoiseFilterResultProducer_cfi')


    # Add the KT6 producer to the sequence
    getattr(process,"patPF2PATSequence"+postfix).replace(
        getattr(process,"pfNoElectron"+postfix),
        getattr(process,"pfNoElectron"+postfix)*process.kt6PFJetsPFlow
        )
    
    # the MiBiPAT path
    process.MiBiCommonPAT = cms.Sequence(
        process.PUDumper * 
        process.AllEvents * # -> Counter
        process.scrapingFilter *
        process.NonScrapedEvents * # -> Counter
        process.goodOfflinePrimaryVertices *
        process.GoodVtxEvents * # -> Counter
        process.HBHENoiseFilterResultProducer *
        getattr(process,"patPF2PATSequence"+postfix) *
        process.kt6PFJets *        
        process.kt6PFJetsForIsolation *
        process.ak5PFJets *
        process.patDefaultSequence
        )
    
    
    
    #----------------------
    # Lepton/Photon Filters
    process.load('PhysicsTools.PatAlgos.selectionLayer1.leptonCountFilter_cfi')
    
    process.LeptonsFilter = countPatLeptons.clone(
      electronSource = cms.InputTag("selectedPatElectrons"),
      muonSource     = cms.InputTag("selectedPatMuons"),
      minNumber      = cms.uint32(1)
     )

    process.LeptonsFilterPFlow = countPatLeptons.clone(
      electronSource = cms.InputTag("selectedPatElectronsPFlow"),
      muonSource     = cms.InputTag("selectedPatMuonsPFlow"),
      minNumber      = cms.uint32(1)
     )
    
    
    process.load('PhysicsTools.PatAlgos.selectionLayer1.photonCountFilter_cfi')

    process.PhotonsFilter = countPatPhotons.clone(
      src       = cms.InputTag("selectedPatPhotons"),
      minNumber = cms.uint32(2)
     )

    
    process.load('PhysicsTools.PatAlgos.selectionLayer1.electronCountFilter_cfi')
    
    process.ElectronsFilter = countPatElectrons.clone(
      src       = cms.InputTag("selectedPatElectrons"),
      minNumber = cms.uint32(1)
     )
    
    process.ElectronsPFlowFilter = countPatElectrons.clone(
      src       = cms.InputTag("selectedPatElectronsPFlow"),
      minNumber = cms.uint32(1)
     )


    process.load('PhysicsTools.PatAlgos.selectionLayer1.muonCountFilter_cfi')

    process.MuonsFilter = countPatMuons.clone(
      src       = cms.InputTag("selectedPatMuons"),
      minNumber = cms.uint32(2)
    )

    

    # add inv mass cut
    # build Z-> MuMu candidates
    process.dimuons = cms.EDProducer("CandViewShallowCloneCombiner",
                                     checkCharge = cms.bool(False),
                                     cut = cms.string('mass > 60.'),
                                     decay = cms.string("selectedPatMuons selectedPatMuons")
                                     )
    # Z filter
    process.dimuonsFilter = cms.EDFilter("CandViewCountFilter",
                                         src = cms.InputTag("dimuons"),
                                         minNumber = cms.uint32(1)
                                         )

    
    
    #------------
    # Jet Filters
    process.load('PhysicsTools.PatAlgos.selectionLayer1.jetCountFilter_cfi')    
    
    process.JetFilterAK5PF = countPatJets.clone(
      src = cms.InputTag("selectedPatJetsAK5PF"),
      minNumber      = cms.uint32(2)
    )
    
    process.JetFilterPFlow = countPatJets.clone(
      src = cms.InputTag("selectedPatJetsPFlow"),
      minNumber      = cms.uint32(2)
    )
    
    
    
    #-----------
    # Sequences & Other counters
    process.LeptonsFilterEvents = process.AllPassFilter.clone()
    process.LeptonsFilterPFlowEvents = process.AllPassFilter.clone()
    process.ElectronsFilterEvents = process.AllPassFilter.clone()
    process.ElectronsPFlowFilterEvents = process.AllPassFilter.clone()
    process.JetFilterAK5PFEvents = process.AllPassFilter.clone()
    process.JetFilterPFlowEvents = process.AllPassFilter.clone()
    process.PhotonsFilterEvents = process.AllPassFilter.clone()
    process.MuonsFilterEvents = process.AllPassFilter.clone()
     
    process.OneLeptonTwoJetsAK5PFSeq = cms.Sequence(
        process.LeptonsFilter*
        process.LeptonsFilterEvents*
        process.JetFilterAK5PF*
        process.JetFilterAK5PFEvents
        )
    
    
    process.OneLeptonTwoJetsPFlowSeq = cms.Sequence(
        process.LeptonsFilterPFlow*
        process.LeptonsFilterPFlowEvents*
        process.JetFilterPFlow*
        process.JetFilterPFlowEvents
        )

    process.OneEleSeq = cms.Sequence(
        process.ElectronsFilter*
        process.ElectronsFilterEvents
        )

    process.OneElePFlowSeq = cms.Sequence(
        process.ElectronsPFlowFilter*
        process.ElectronsPFlowFilterEvents
        )


    process.TwoPhotonsSeq = cms.Sequence(
        process.PhotonsFilter*
        process.PhotonsFilterEvents
        )

    process.TwoMuonsSeq = cms.Sequence(
        process.MuonsFilter*
        process.dimuons*
        process.dimuonsFilter*
        process.MuonsFilterEvents
    )
   
    process.TwoJetsPFlowSeq = cms.Sequence(
        process.JetFilterPFlow*
        process.JetFilterPFlowEvents
    )
    
    process.TwoJetsAK5PFSeq = cms.Sequence(
        process.JetFilterAK5PF*
        process.JetFilterAK5PFEvents
        )
        
    

    
    # the MiBiNTUPLE
    process.load("PhysicsTools.MiBiCommonPAT.SimpleNtuple_cfi")
    process.MiBiCommonNT = process.SimpleNtuple.clone()
    process.MiBiCommonNT.saveMCPU              = cms.untracked.bool (MC)
    process.MiBiCommonNT.saveProcessId         = cms.untracked.bool (MC)
    process.MiBiCommonNT.saveGenJet            = cms.untracked.bool (MC)
    process.MiBiCommonNT.saveMCPtHat           = cms.untracked.bool (MC)
    process.MiBiCommonNT.savePhotonsMother     = cms.untracked.bool (False)
    process.MiBiCommonNT.saveMCTTBar           = cms.untracked.bool (False)    
    process.MiBiCommonNT.saveMCHiggs           = cms.untracked.bool (False)
    process.MiBiCommonNT.saveMCHiggsWW         = cms.untracked.bool (False)
    process.MiBiCommonNT.saveMCHiggsGammaGamma = cms.untracked.bool (False)
    process.MiBiCommonNT.saveMCZW              = cms.untracked.bool (False)
    
    if MCType == 'TTBar':
        process.MiBiCommonNT.saveMCTTBar = cms.untracked.bool (True)
    if MCType == 'Higgs':
        process.MiBiCommonNT.saveMCHiggs = cms.untracked.bool (True)
    if MCType == 'HiggsWW':
        process.MiBiCommonNT.saveMCHiggs   = cms.untracked.bool (True)
        process.MiBiCommonNT.saveMCHiggsWW = cms.untracked.bool (True)
    if MCType == 'HiggsGammaGamma':
        process.MiBiCommonNT.saveMCHiggs           = cms.untracked.bool (True)
        process.MiBiCommonNT.saveMCHiggsGammaGamma = cms.untracked.bool (True)                
    if MCType == 'ZW':
        process.MiBiCommonNT.saveMCZW              = cms.untracked.bool (True)


    process.MiBiCommonNTOneLeptonTwoJetsAK5PF = process.MiBiCommonNT.clone()
    process.MiBiCommonNTOneLeptonTwoJetsAK5PF.JetTag    = cms.InputTag("selectedPatJetsAK5PF")
    
    process.MiBiCommonNTTwoJetsAK5PF = process.MiBiCommonNT.clone()
    process.MiBiCommonNTTwoJetsAK5PF.JetTag    = cms.InputTag("patJetsAK5PF")

    process.MiBiCommonNTOneLeptonTwoJetsPFlow = process.MiBiCommonNT.clone()
    process.MiBiCommonNTOneLeptonTwoJetsPFlow.TauTag    = cms.InputTag("patTausPFlow")
    process.MiBiCommonNTOneLeptonTwoJetsPFlow.MuTag     = cms.InputTag("patMuonsPFlow")
    process.MiBiCommonNTOneLeptonTwoJetsPFlow.EleTag    = cms.InputTag("patElectronsPFlow")
    process.MiBiCommonNTOneLeptonTwoJetsPFlow.JetTag    = cms.InputTag("selectedPatJetsPFlow")
    process.MiBiCommonNTOneLeptonTwoJetsPFlow.MetTag    = cms.InputTag("patMETsPFlow")
    
    process.MiBiCommonNTTwoJetsPFlow = process.MiBiCommonNT.clone()
    process.MiBiCommonNTTwoJetsPFlow.MuTag     = cms.InputTag("patMuonsPFlow")
    process.MiBiCommonNTTwoJetsPFlow.EleTag    = cms.InputTag("patElectronsPFlow")
    process.MiBiCommonNTTwoJetsPFlow.JetTag    = cms.InputTag("patJetsPFlow")
    process.MiBiCommonNTTwoJetsPFlow.MetTag    = cms.InputTag("patMETsPFlow")

    process.MiBiCommonNTTwoPhotons = process.MiBiCommonNT.clone()
    process.MiBiCommonNTTwoPhotons.JetTag = cms.InputTag("patJetsAK5PF")

    process.MiBiCommonNTOneElectron = process.MiBiCommonNT.clone()
    process.MiBiCommonNTOneElectron.JetTag = cms.InputTag("patJetsAK5PF")
    
    process.MiBiCommonNTOneElectronPFlow = process.MiBiCommonNT.clone()
    process.MiBiCommonNTOneElectronPFlow.MuTag     = cms.InputTag("patMuonsPFlow")
    process.MiBiCommonNTOneElectronPFlow.EleTag    = cms.InputTag("patElectronsPFlow")
    process.MiBiCommonNTOneElectronPFlow.JetTag    = cms.InputTag("patJetsPFlow")
    process.MiBiCommonNTOneElectronPFlow.MetTag    = cms.InputTag("patMETsPFlow")
    #process.MiBiCommonNTOneElectronPFlow.PhotonTag    = cms.InputTag("patPhotonsPFlow")
    
    
    
    
    # paths
    #process.MiBiPathAK5PF = cms.Path(process.MiBiCommonPAT)
    
    #process.MiBiPathAK5PF = cms.Path(process.MiBiCommonPAT*process.OneLeptonTwoJetsAK5PFSeq*process.MiBiCommonNTOneLeptonTwoJetsAK5PF)
    #process.MiBiPathPFlow = cms.Path(process.MiBiCommonPAT*process.OneLeptonTwoJetsPFlowSeq*process.MiBiCommonNTOneLeptonTwoJetsPFlow)    
    
    # GammaGamma paths
    #process.Mibipathphotons = cms.Path(process.MiBiCommonPAT*process.TwoPhotonsSeq*process.MiBiCommonNTTwoPhotons)
    process.MiBiPathPhotons = cms.Path( process.noMuonVertexReco*process.MiBiCommonPAT*process.TwoMuonsSeq*process.MiBiCommonNTTwoPhotons)
Пример #36
0
from DQM.TrackingMonitorSource.dEdxAnalyzer_cff import *

# temporary patch in order to have BXlumi
from RecoLuminosity.LumiProducer.lumiProducer_cff import *

# import v0 monitoring
from DQM.TrackingMonitor.V0Monitor_cff import *

# temporary test in order to temporary produce the "goodPrimaryVertexCollection"
# define with a new name if changes are necessary, otherwise simply include
# it from CommonTools/ParticleFlow/python/goodOfflinePrimaryVertices_cfi.py
# uncomment when necessary
from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
from CommonTools.ParticleFlow.goodOfflinePrimaryVertices_cfi import goodOfflinePrimaryVertices
trackingDQMgoodOfflinePrimaryVertices = goodOfflinePrimaryVertices.clone()
trackingDQMgoodOfflinePrimaryVertices.filterParams = pvSelector.clone(
    minNdof=cms.double(4.0), maxZ=cms.double(24.0))
trackingDQMgoodOfflinePrimaryVertices.src = cms.InputTag(
    'offlinePrimaryVertices')
trackingDQMgoodOfflinePrimaryVertices.filter = cms.bool(False)

# Sequence
TrackingDQMSourceTier0 = cms.Sequence()
# dEdx monitoring
TrackingDQMSourceTier0 += dedxHarmonicSequence * dEdxMonCommon * dEdxHitMonCommon
#    # temporary patch in order to have BXlumi
#    * lumiProducer
# track collections
for tracks in selectedTracks:
    if tracks != 'generalTracks':
        TrackingDQMSourceTier0 += sequenceName[tracks]
    label = 'TrackerCollisionSelectedTrackMonCommon' + str(tracks)
Пример #37
0
def pf2patChain(process, poolSource, runOnMC, postfix, GLOBAL_TAG):
    process.load("Configuration.StandardSequences.Geometry_cff")
    process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
    process.source = poolSource 
    process.GlobalTag.globaltag = GLOBAL_TAG
    process.load("Configuration.StandardSequences.MagneticField_cff")
    ## Standard PAT Configuration File
    process.load("PhysicsTools.PatAlgos.patSequences_cff")
    process.load("CommonTools.ParticleFlow.Isolation.pfIsolatedElectrons_cfi")
    process.pfIsolatedElectrons.isolationCut = cms.double(9999)


## Output Module Configuration (expects a path 'p')
    from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent
    process.out = cms.OutputModule("PoolOutputModule",
                               fileName = cms.untracked.string('patTuple.root'),
                               # save only events passing the full path
                               SelectEvents   = cms.untracked.PSet( SelectEvents = cms.vstring('p') ),
                               # save PAT Layer 1 output; you need a '*' to
                               # unpack the list of commands 'patEventContent'
                               outputCommands = cms.untracked.vstring('drop *', *patEventContent )
                               )


    #Get a list of good primary vertices, in 42x, these are DAF vertices
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
        src=cms.InputTag('offlinePrimaryVertices')
        )
   # Configure PAT to use PF2PAT instead of AOD sources
   # this function will modify the PAT sequences. It is currently 
   # not possible to run PF2PAT+PAT and standart PAT at the same time
    from PhysicsTools.PatAlgos.tools.pfTools import *
   #runOnMC = False
    jetAlgo="AK5"
    if(runOnMC==False):
	usePF2PAT(process, runPF2PAT=True, jetAlgo='AK5', runOnMC=runOnMC, postfix = postfix, jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute','L2L3Residual']) )
    else:
	usePF2PAT(process,runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=True, postfix=postfix,jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute']))
    process.pfPileUpPFlow.Enable = True
    process.pfPileUpPFlow.checkClosestZVertex = cms.bool(False)
    process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices')
    process.pfJetsPFlow.doAreaFastjet = True
    process.pfJetsPFlow.doRhoFastjet = False
    if runOnMC == False:
        # removing MC matching for standard PAT sequence
        # for the PF2PAT+PAT sequence, it is done in the usePF2PAT function
        removeMCMatchingPF2PAT( process, '' )
   #### jets ####
    process.load('JetMETCorrections.Configuration.DefaultJEC_cff')
    process.load('RecoJets.Configuration.RecoPFJets_cff')
    ##-------- Turn-on the FastJet density calculation -----------------------
    from RecoJets.JetProducers.kt4PFJets_cfi import *
    process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True, voronoiRfact = 0.9)
    process.kt6PFJets.Rho_EtaMax = cms.double(4.5)
    process.patJetCorrFactors.rho = cms.InputTag("kt6PFJets","rho")
    #to compute FastJet rho to correct isolation (note: EtaMax restricted to 2.5)
    process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True, voronoiRfact = 0.9 )
    process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5)
    ##------- Turn-on the FastJet jet area calculation for your favorite algorithm ----
    from RecoJets.JetProducers.ak5PFJets_cfi import *
    ak5PFJets.Rho_EtaMax = cms.double(4.5)
    ak5PFJets.doAreaFastjet = True
    # Compute the mean pt per unit area (rho) from the
    # PFchs inputs
    process.kt6PFJetsPFlow = kt4PFJets.clone(
        rParam = cms.double(0.6),
        src = cms.InputTag('pfNoElectron'+postfix),
        doAreaFastjet = cms.bool(True),
        doRhoFastjet = cms.bool(True)
        )
    process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho")
    
    
    process.primaryVertexFilter = cms.EDFilter("GoodVertexFilter",
                                               vertexCollection = cms.InputTag('offlinePrimaryVertices'),
                                               minimumNDOF = cms.uint32(4) ,
                                               maxAbsZ = cms.double(15), 
                                               maxd0 = cms.double(2) 
                                               )

    process.noscraping = cms.EDFilter("FilterOutScraping",
                                      applyfilter = cms.untracked.bool(True),
                                      debugOn = cms.untracked.bool(True),
                                      numtrack = cms.untracked.uint32(10),
                                      thresh = cms.untracked.double(0.25)
                                      )
 
  # HBHENoiseFilter
    process.load('CommonTools/RecoAlgos/HBHENoiseFilter_cfi')
    #process.HBHENoiseFilter.maxRBXEMF = cms.double(0.01)

  # Add the PV selector and KT6 producer to the sequence
    getattr(process,"patPF2PATSequence"+postfix).replace(
        getattr(process,"pfNoElectron"+postfix),
        getattr(process,"pfNoElectron"+postfix)*process.kt6PFJetsPFlow 
    )
    # top projections in PF2PAT:
    getattr(process,"pfNoPileUp"+postfix).enable = True
    getattr(process,"pfNoMuon"+postfix).enable = True
    getattr(process,"pfNoElectron"+postfix).enable = True
    getattr(process,"pfNoTau"+postfix).enable = False
    getattr(process,"pfNoJet"+postfix).enable = True
        
   # enable delta beta correction for muon selection in PF2PAT? 
    getattr(process,"pfIsolatedMuons"+postfix).doDeltaBetaCorrection = False
Пример #38
0
#
pvSrc = 'offlinePrimaryVertices'
#
### The good primary vertex filter ____________________________________________||
process.primaryVertexFilter = cms.EDFilter(
    "VertexSelector",
    src=cms.InputTag("offlinePrimaryVertices"),
    cut=cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"),
    filter=cms.bool(True))

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector

process.goodOfflinePrimaryVertices = cms.EDFilter(
    "PrimaryVertexObjectFilter",
    filterParams=pvSelector.clone(
        maxZ=cms.double(24.0),
        minNdof=cms.double(4.0)  # this is >= 4
    ),
    src=cms.InputTag(pvSrc))

#############################
##### PATtuplizers    #######
#############################
process.load('miniPAT.miniSubsPAT.PAT_ak5jets_simple_cff')
process.load('miniPAT.miniSubsPAT.PAT_ak7jets_simple_cff')
process.load('miniPAT.miniSubsPAT.PAT_ca8jets_simple_cff')

########################################
###### Additional JEC for Data    ######
########################################
if options.useData:
    process.patJetCorrFactorsAK5CHS.levels.append('L2L3Residual')
Пример #39
0
import FWCore.ParameterSet.Config as cms

from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector as pvSel
from PhysicsTools.SelectorUtils.jetIDSelector_cfi import jetIDSelector
from PhysicsTools.SelectorUtils.pfJetIDSelector_cfi import pfJetIDSelector



wplusjetsAnalysis = cms.PSet(
    # Primary vertex
    pvSelector = cms.PSet( pvSel.clone() ),
    # input parameter sets
    muonSrc = cms.InputTag('selectedPatMuons'),
    electronSrc = cms.InputTag('selectedPatElectrons'),
    jetSrc = cms.InputTag('selectedPatJets'),
    jetClonesSrc = cms.InputTag('myClones'),
    metSrc = cms.InputTag('patMETs'),
    trigSrc = cms.InputTag('patTriggerEvent'),
    muTrig = cms.string('HLT_Mu9'),
    eleTrig = cms.string('HLT_Ele15_LW_L1R'),
    # tight muons
    muonIdTight = cms.PSet(
        version = cms.string('SPRING10'),
        Chi2 = cms.double(10.0),
        D0 = cms.double(0.02),
        ED0 = cms.double(999.0),
        SD0 = cms.double(999.0),
        NHits = cms.int32(11),
        NValMuHits = cms.int32(0),
        ECalVeto = cms.double(999.0),
        HCalVeto = cms.double(999.0),
Пример #40
0
#PAT has a hissy fit if this OutputModule isn't defined before we try and "removeMCMatching"
from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent
process.out = cms.OutputModule("PoolOutputModule",
                               fileName = cms.untracked.string('patTuple.root'),
                               SelectEvents   = cms.untracked.PSet( SelectEvents = cms.vstring('p') ),             
                               outputCommands = cms.untracked.vstring('drop *', *patEventContent )
                               )


################################################################
### Vertex Modules
################################################################
from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
process.goodOfflinePrimaryVertices = cms.EDFilter(
    "PrimaryVertexObjectFilter",
    filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
    src=cms.InputTag('offlinePrimaryVertices')
    )

################################################################
### Start settting up the PAT default sequence
################################################################
process.load("PhysicsTools.PatAlgos.patSequences_cff")
from PhysicsTools.PatAlgos.tools.coreTools import *
from PhysicsTools.PatAlgos.tools.pfTools import *
from PhysicsTools.PatAlgos.tools.tauTools import *
from PhysicsTools.PatAlgos.tools.jetTools import *
from PhysicsTools.PatAlgos.tools.trigTools import *
from PhysicsTools.PatAlgos.tools.metTools import *
switchOnTrigger(process, outputModule="", hltProcess="HLT")
Пример #41
0
def mvaMET_MuTau(process):
    from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector
    process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter",
        filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ),
        src=cms.InputTag('offlinePrimaryVertices')
    )
    # Muons (definition stolen from Roger)
    process.mvaMETMuons = cms.EDFilter("MuonSelector",
        src = cms.InputTag('muons'),
        cut = cms.string(
            "abs(eta)<2.1 & pt>15"                                      +
            ## muon ID
            "& isTrackerMuon"                                           +
            "& isPFMuon"                                                +
            "& globalTrack.isNonnull"                                   +
            "& innerTrack.hitPattern.numberOfValidPixelHits    >  0"    +
            "& innerTrack.normalizedChi2                       < 10"    +
            "& numberOfMatches                                 >  0"    +
            "& innerTrack.hitPattern.numberOfValidTrackerHits  >  5"    +
            "& globalTrack.hitPattern.numberOfValidHits        >  0"    +
            "& abs(innerTrack().dxy)                           <2.0"    +
            ## muon isolation (w/o deltaBeta, therefore weaker selection criteria)
            "& (pfIsolationR03.sumChargedHadronPt+pfIsolationR03.sumNeutralHadronEt+pfIsolationR03.sumPhotonEt)/pt < 0.3"
        ),
        filter = cms.bool(False)
    )
    # Taus for Mu+Tau channel (definition stolen from Roger)
    process.mvaMETTausMT = cms.EDFilter("PFTauSelector",
        src = cms.InputTag('hpsPFTauProducer'),
        BooleanOperator = cms.string("and"),
        discriminators = cms.VPSet(              
            cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByDecayModeFinding"                       ), selectionCut=cms.double(0.5)),
            cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits" ), selectionCut=cms.double(0.5)),
            cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByLooseElectronRejection"                 ), selectionCut=cms.double(0.5)),
            cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByTightMuonRejection"                     ), selectionCut=cms.double(0.5)) 
            ),
        cut = cms.string("abs(eta) < 2.3 && pt > 20.0 "),
        filter = cms.bool(False)
    )
    # define MVA-Met producer (for Mu+Tau)
    from RecoJets.JetProducers.PileupJetIDParams_cfi import JetIdParams
    process.pfMetMVAMuTau = cms.EDProducer("PFMETProducerMVA",
        srcCorrJets     = cms.InputTag('ak5PFJetsCorr'),
        srcUncorrJets   = cms.InputTag('ak5PFJets'),
        srcPFCandidates = cms.InputTag('particleFlow'),
        srcVertices     = cms.InputTag('goodOfflinePrimaryVertices'),
        srcLeptons      = cms.VInputTag("mvaMETMuons"    , "mvaMETTausMT"),
        minNumLeptons   = cms.int32(0),
        srcRho          = cms.InputTag('kt6PFJets','rho'),
        globalThreshold = cms.double(-1.),#pfMet.globalThreshold,
        minCorrJetPt    = cms.double(-1.),
        inputFileNames  = cms.PSet(
            U = cms.FileInPath('RecoMET/METPUSubtraction/data/gbrmet_53_June2013_type1.root'),
            DPhi = cms.FileInPath('RecoMET/METPUSubtraction/data/gbrmetphi_53_June2013_type1.root'),
            CovU1 = cms.FileInPath('RecoMET/METPUSubtraction/data/gbru1cov_53_Dec2012.root'),
            CovU2 = cms.FileInPath('RecoMET/METPUSubtraction/data/gbru2cov_53_Dec2012.root')  
        ),
        loadMVAfromDB   = cms.bool(False),
        is42            = cms.bool(False), # CV: set this flag to true if you are running mvaPFMET in CMSSW_4_2_x                           
        corrector       = cms.string("ak5PFL1Fastjet"),
        useType1        = cms.bool(True),
        useOld42        = cms.bool(False),
        dZcut           = cms.double(0.1),
        impactParTkThreshold = cms.double(0.),
        tmvaWeights     = cms.string("RecoJets/JetProducers/data/TMVAClassificationCategory_JetID_MET_53X_Dec2012.weights.xml"),
        tmvaMethod      = cms.string("JetID"),
        version         = cms.int32(-1),
        cutBased        = cms.bool(False),                      
        tmvaVariables   = cms.vstring(
            "nvtx",
            "jetPt",
            "jetEta",
            "jetPhi",
            "dZ",
            "beta",
            "betaStar",
            "nCharged",
            "nNeutrals",
            "dR2Mean",
            "ptD",
            "frac01",
            "frac02",
            "frac03",
            "frac04",
            "frac05",
            ),
        tmvaSpectators  = cms.vstring(),
        JetIdParams     = JetIdParams,
        verbosity       = cms.int32(0)
    )
    
    process.MVAMETMuTauSequence = cms.Sequence( process.goodOfflinePrimaryVertices
    											* process.mvaMETMuons
                                          		* process.mvaMETTausMT
                                         		* process.pfMetMVAMuTau
                                         		)