def makePatPuppiMetSequence( process ):
 # puppi met
  setattr(process,"pfMetPuppi", pfMet.clone( src = cms.InputTag('puppi'),
                                   calculateSignificance = False))          

  setattr(process,"patMetPuppi",patMETs.clone( 
                                         metSource = cms.InputTag("pfMetPuppi"),
					 addGenMET = cms.bool(False)
					 #getMETSource = cms.InputTag("slimmedGenMetTrue")
					   )
					 )
  #process.patMetPuppi = process.patMETs.clone( metSource = cms.InputTag("pfMetPuppi"))

  process.makePatMetPuppi = cms.Sequence()
  setattr(process, "makePatMetPuppi", cms.Sequence( getattr(process,"pfMetPuppi")*
                                                    getattr(process,"patMetPuppi")
						    )
						    )
    process,
    isData=True,  # false for MC
    fixEE2017=True,
    fixEE2017Params={
        'userawPt': True,
        'ptThreshold': 50.0,
        'minEtaThreshold': 2.65,
        'maxEtaThreshold': 3.139
    },
    postfix="ModifiedMET")

##
## This is for Uncorrected MET
from RecoMET.METProducers.PFMET_cfi import pfMet

process.pfMet = pfMet.clone(src="packedPFCandidates")
process.pfMet.calculateSignificance = False  # this can't be easily implemented on packed PF candidates at the moment
## Uncorrected MET edns here
##

pvSource = 'offlineSlimmedPrimaryVertices'

bTagDiscriminators = [
    'pfJetBProbabilityBJetTags', 'pfJetProbabilityBJetTags',
    'pfPositiveOnlyJetBProbabilityBJetTags',
    'pfPositiveOnlyJetProbabilityBJetTags',
    'pfNegativeOnlyJetBProbabilityBJetTags',
    'pfNegativeOnlyJetProbabilityBJetTags', 'pfTrackCountingHighPurBJetTags',
    'pfTrackCountingHighEffBJetTags', 'pfNegativeTrackCountingHighPurBJetTags',
    'pfNegativeTrackCountingHighEffBJetTags',
    'pfSimpleSecondaryVertexHighEffBJetTags',
示例#3
0
                                                        'ak5PFL3AbsoluteNoPU'))

from CommonTools.ParticleFlow.pfNoPileUp_cff import *
pfPileUp.checkClosestZVertex = cms.bool(False)
pfPileUp.Vertices = cms.InputTag('offlinePrimaryVertices')
pfPileUp.PFCandidates = cms.InputTag("particleFlow")

# Jets
from RecoJets.JetProducers.ak5PFJets_cfi import ak5PFJets
ak5PFJetsNoPU = ak5PFJets.clone(src=cms.InputTag("pfNoPileUp"),
                                doAreaFastjet=cms.bool(True))

ak7PFJetsNoPU = ak5PFJetsNoPU.clone(rParam=0.7)

# MET
from RecoMET.METProducers.PFMET_cfi import pfMet
pfMetNoPU = pfMet.clone(src=cms.InputTag("pfNoPileUp"),
                        jets=cms.InputTag("ak5PFJetsNoPU"))

pfNoPileUp.bottomCollection = cms.InputTag("particleFlow")

producePFNoPileUp = cms.Sequence(
    goodOfflinePrimaryVertices
    #  * ak5CaloL1FastjetNoPU
    #  * ak5PFL1FastjetNoPU
    #  * ak5JPTL1FastjetNoPU
    * pfNoPileUpSequence
    #  * kt6CaloJetsNoPU
    * kt6PFJetsNoPU * kt6PFJetsNoPUForIso * ak5PFJetsNoPU * ak7PFJetsNoPU *
    pfMetNoPU)
示例#4
0
文件: data.py 项目: cpausmit/MitProd
# Load PUPPI
from MitProd.TreeFiller.PuppiSetup_cff import puppiSequence, photonIdForPuppi
process.load('MitProd.TreeFiller.PuppiSetup_cff')
egmPhotonIDSequence = photonIdForPuppi(process)

# PUPPI jets
from RecoJets.JetProducers.ak4PFJetsPuppi_cfi import ak4PFJetsPuppi
process.load('RecoJets.JetProducers.ak4PFJetsPuppi_cfi')
ak4PFJetsPuppi.src = 'puppi'
ak4PFJetsPuppi.doAreaFastjet = True

# PUPPI MET
from RecoMET.METProducers.PFMET_cfi import pfMet
process.pfMETPuppi = pfMet.clone(
    src = cms.InputTag('puppiForMET'),
    calculateSignificance = cms.bool(False)
)
pfMETPuppi = process.pfMETPuppi

# Load HPS tau reconstruction (tau in AOD is older than the latest reco in release)
from RecoTauTag.Configuration.RecoPFTauTag_cff import PFTau
process.load('RecoTauTag.Configuration.RecoPFTauTag_cff')

# Load btagging
from MitProd.TreeFiller.utils.setupBTag import initBTag, setupBTag, setupDoubleBTag
vertexingPFPV = initBTag(process, 'PFPV', candidates = 'particleFlow', primaryVertex = 'offlinePrimaryVertices')
ak4PFBTagSequence = setupBTag(process, 'ak4PFJets', 'AKt4PF', 'PFPV')
ak4PFCHSBTagSequence = setupBTag(process, 'ak4PFJetsCHS', 'AKt4PFCHS', 'PFPV')
ak4PFPuppiBTagSequence = setupBTag(process, 'ak4PFJetsPuppi', 'AKt4PFPuppi', 'PFPV')

btagSequence = cms.Sequence(
示例#5
0
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
示例#6
0
#    pfTracksFromL1Tracks +
#    pfClustersFromHGC3DClustersEM +
#    pfClustersFromL1EGClusters +
#    pfClustersFromCombinedCalo +
#    l1pfProducer
#)
l1pfProducerTightTK = l1pfProducer.clone(trkMinStubs=6)
l1ParticleFlow += l1pfProducerTightTK

phase2_SimL1Emulator += l1ParticleFlow

# PF METs
# ########################################################################
from RecoMET.METProducers.PFMET_cfi import pfMet
pfMet.calculateSignificance = False
l1MetCalo = pfMet.clone(src="l1pfProducer:Calo")
l1MetTK = pfMet.clone(src="l1pfProducer:TK")
l1MetTKV = pfMet.clone(src="l1pfProducer:TKVtx")
l1MetTightTK = pfMet.clone(src="l1pfProducerTightTK:TK")
l1MetTightTKV = pfMet.clone(src="l1pfProducerTightTK:TKVtx")
l1MetPF = pfMet.clone(src="l1pfProducer:PF")
l1MetPuppi = pfMet.clone(src="l1pfProducer:Puppi")
l1PFMets = cms.Sequence(l1MetCalo + l1MetTK + l1MetTKV + l1MetPF + l1MetPuppi +
                        l1MetTightTK + l1MetTightTKV)

phase2_SimL1Emulator += l1PFMets

# PF Jets
# ########################################################################
from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets
ak4L1Calo = ak4PFJets.clone(src='l1pfProducer:Calo')
示例#7
0
    genJetCollection=cms.InputTag('ak4GenJetsNoNu'),
    genParticles=cms.InputTag('prunedGenParticles'),
    getJetMCFlavour=False,  # jet flavor disabled
)

if not isData:
    process.puppiJetMETSequence += process.patJetPartonMatchPFAK4Puppi
    process.puppiJetMETSequence += process.patJetGenJetMatchPFAK4Puppi
process.puppiJetMETSequence += process.pfImpactParameterTagInfosPFAK4Puppi
process.puppiJetMETSequence += process.pfInclusiveSecondaryVertexFinderTagInfosPFAK4Puppi
process.puppiJetMETSequence += process.pfCombinedInclusiveSecondaryVertexV2BJetTagsPFAK4Puppi
process.puppiJetMETSequence += process.patJetsPFAK4Puppi

# compute puppi MET
from RecoMET.METProducers.PFMET_cfi import pfMet
process.pfMETPuppi = pfMet.clone()
process.pfMETPuppi.src = cms.InputTag('puppiForMET')
process.pfMETPuppi.calculateSignificance = False
process.puppiJetMETSequence += process.pfMETPuppi

# correct puppi jets
jeclabel = 'DATA' if isData else 'MC'
process.jec = cms.ESSource(
    "PoolDBESSource",
    CondDBSetup,
    toGet=cms.VPSet(
        cms.PSet(record=cms.string('JetCorrectionsRecord'),
                 tag=cms.string(
                     'JetCorrectorParametersCollection_Spring16_25nsV6_' +
                     jeclabel + '_AK4PFPuppi'),
                 label=cms.untracked.string('AK4Puppi')),
    src=cms.InputTag("tauPreSelection"),
    minNumber=cms.uint32(1),
)

if addPuppi:
    process.load('CommonTools/PileupAlgos/Puppi_cff')

    process.puppi.candName = cms.InputTag('packedPFCandidates')
    process.puppi.vertexName = cms.InputTag('offlineSlimmedPrimaryVertices')

    process.packedPFCandidatesWoMuon = cms.EDFilter("CandPtrSelector", src=cms.InputTag("packedPFCandidates"), cut=cms.string("fromPV>=2 && abs(pdgId)!=13 "))
    process.particleFlowNoMuonPUPPI = process.puppi.clone()
    process.particleFlowNoMuonPUPPI.candName = 'packedPFCandidatesWoMuon'

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

    process.puppiPath = cms.Path(
        process.tauPreSelection +
        process.tauCount +
        process.puppi +
        process.packedPFCandidatesWoMuon +
        process.particleFlowNoMuonPUPPI +
        process.pfMetPuppi
    )


# OUTPUT definition ----------------------------------------------------------

示例#9
0
# 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
示例#10
0
alpacaPuppiNoLepMC = alpacaPuppiMC.clone()
alpacaPuppiNoLepMC.candName = 'puppinolep'

alpacaPuppiData = alpacaData.clone()
alpacaPuppiData.candName = 'puppi'
alpacaPuppiData.chJecFiles = jecFilesPuppiData
alpacaPuppiData.emJecFiles = jecFilesPuppiData
alpacaPuppiData.nhJecFiles = jecFilesPuppiData

alpacaPuppiNoLepData = alpacaData.clone()
alpacaPuppiNoLepData.candName = 'puppinolep'

alpacaFullMC = cms.EDProducer("CandViewMerger",
                              src=cms.VInputTag('alpacaMC', 'pfCandLep'))
pfMetAlpacaMC = pfMet.clone()
pfMetAlpacaMC.src = cms.InputTag('alpacaFullMC')

alpacaFullData = cms.EDProducer("CandViewMerger",
                                src=cms.VInputTag('alpacaData', 'pfCandLep'))
pfMetAlpacaData = pfMet.clone()
pfMetAlpacaData.src = cms.InputTag('alpacaFullData')

puppiAlpacaForMETMC = cms.EDProducer("CandViewMerger",
                                     src=cms.VInputTag('alpacaPuppiNoLepMC',
                                                       'pfCandLep'))
pfMetPuppiAlpacaMC = pfMet.clone()
pfMetPuppiAlpacaMC.src = cms.InputTag('puppiAlpacaForMETMC')

puppiAlpacaForMETData = cms.EDProducer("CandViewMerger",
                                       src=cms.VInputTag(
示例#11
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
)

#load run conditions
process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
process.load('Configuration.Geometry.GeometryIdeal_cff')
process.load('Configuration.StandardSequences.MagneticField_38T_cff')

#global tag for PHYS14 asymptotic 25ns scenario
#process.GlobalTag.globaltag = 'MCRUN2_74_V9'
process.GlobalTag.globaltag = '76X_mcRun2_asymptotic_v12'

from RecoMET.METProducers.PFMET_cfi import pfMet
process.packedPFCandidates30 = cms.EDFilter("CandPtrSelector",
                                            src = cms.InputTag("particleFlow"),
                                            cut = cms.string("abs(eta) < 3.0"))
process.pfMet30                      = pfMet.clone();
process.pfMet30.src                  = cms.InputTag('packedPFCandidates30')

#process.load('RecoMET.METFilters.primaryVertexFilter_cfi')
#from RecoMET.METFilters.primaryVertexFilter_cfi import primaryVertexFilter

#process.pvFilter = cms.EDFilter(
#  "VertexSelector",
#  filter = cms.bool(True),
#  src = cms.InputTag("offlinePrimaryVertices"),
#  cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2")
#)

process.load('RecoMET.METFilters.metFilters_cff')        # apply MET filters set to tagging mode

process.content = cms.EDAnalyzer("EventContentAnalyzer")
示例#13
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
示例#14
0
from Dummy.Puppi.Puppi_cff import puppiCentral, puppiForward, puppi 



####### make clustering in AK4 puppi jets
from RecoJets.JetProducers.ak5PFJets_cfi  import ak5PFJets

AK4PFJetsPuppi = ak5PFJets.clone(
    src      = cms.InputTag('puppi','Puppi'),
    rParam   = cms.double(0.4),
    jetPtMin = cms.double(10)
)

AK5PFJetsPuppi = ak5PFJets.clone(
    src      = cms.InputTag('puppi','Puppi'),
    rParam   = cms.double(0.5),
    jetPtMin = cms.double(10)
)

### puppi met
from RecoMET.METProducers.PFMET_cfi import pfMet
pfMetPuppi = pfMet.clone();
pfMetPuppi.src = cms.InputTag('puppi','Puppi')
pfMetPuppi.calculateSignificance = False # this can't be easily implemented on packed PF candidates at the moment                                                                  

### final sequence ###
puppiSequence = cms.Sequence(puppi*
                             AK5PFJetsPuppi*
                             pfMetPuppi)
process.ca8GenJetsPruned = ca4GenJets.clone(
  rParam = cms.double(0.8),
  src = cms.InputTag(genjetparticles),
  usePruning = cms.bool(True),
  zcut = cms.double(0.1),
  rcut_factor = cms.double(0.5),
  nFilt = cms.int32(2),
  writeCompound = cms.bool(True),
  jetCollInstanceName=cms.string("SubJets")
  )

##########################################################################################
# RECO

from RecoMET.METProducers.PFMET_cfi import pfMet
process.pfMet = pfMet.clone(src = "packedPFCandidates")
process.pfMet.calculateSignificance = False # this can't be easily implemented on packed PF candidates at the moment


if useMiniAOD:
  process.chs = cms.EDFilter("CandPtrSelector", 
    src = cms.InputTag("packedPFCandidates"), 
    cut = cms.string("fromPV"))
  chsstring = 'chs'
process.ak4PFJets.src = pfcandidates
process.ak5PFJets.src = pfcandidates
process.ca4PFJets.src = pfcandidates
process.kt6PFJets.src = pfcandidates

# kt6PFJets = kt6PFJets.clone( rParam = 0.6, doRhoFastjet = True, src = cms.InputTag(pfcandidates) ) 
示例#16
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
示例#17
0
process.load('RecoParticleFlow.PFProducer.pfLinker_cff')

# Load PUPPI
from MitProd.TreeFiller.PuppiSetup_cff import puppiSequence, photonIdForPuppi
process.load('MitProd.TreeFiller.PuppiSetup_cff')
egmPhotonIDSequence = photonIdForPuppi(process)

# PUPPI jets
from RecoJets.JetProducers.ak4PFJetsPuppi_cfi import ak4PFJetsPuppi
process.load('RecoJets.JetProducers.ak4PFJetsPuppi_cfi')
ak4PFJetsPuppi.src = 'puppi'
ak4PFJetsPuppi.doAreaFastjet = True

# PUPPI MET
from RecoMET.METProducers.PFMET_cfi import pfMet
process.pfMETPuppi = pfMet.clone(src=cms.InputTag('puppiForMET'),
                                 calculateSignificance=cms.bool(False))
pfMETPuppi = process.pfMETPuppi

# Load HPS tau reconstruction (tau in AOD is older than the latest reco in release)
from RecoTauTag.Configuration.RecoPFTauTag_cff import PFTau
process.load('RecoTauTag.Configuration.RecoPFTauTag_cff')

# Load btagging
from MitProd.TreeFiller.utils.setupBTag import initBTag, setupBTag, setupDoubleBTag
vertexingPFPV = initBTag(process,
                         'PFPV',
                         candidates='particleFlow',
                         primaryVertex='offlinePrimaryVertices')
ak4PFBTagSequence = setupBTag(process, 'ak4PFJets', 'AKt4PF', 'PFPV')
ak4PFCHSBTagSequence = setupBTag(process, 'ak4PFJetsCHS', 'AKt4PFCHS', 'PFPV')
ak4PFPuppiBTagSequence = setupBTag(process, 'ak4PFJetsPuppi', 'AKt4PFPuppi',
示例#18
0
def setup_nohf_met_(process, isData):
    from PhysicsTools.PatAlgos.tools.metTools import addMETCollection

    process.noHFCands = cms.EDFilter("CandPtrSelector",
            src=cms.InputTag("packedPFCandidates"),
            cut=cms.string("abs(pdgId)!=1 && abs(pdgId)!=2 && abs(eta)<3.0")
            )

    if not isData and not hasattr(process, 'genMetExtractor'):
        process.genMetExtractor = cms.EDProducer("GenMETExtractor",
                metSource = cms.InputTag("slimmedMETs", "" , cms.InputTag.skipCurrentProcess())
                )

    if not hasattr(process, 'pfMet'):
        from RecoMET.METProducers.PFMET_cfi import pfMet
        process.pfMetNoHF = pfMet.clone()
    else:
        process.pfMetNoHF = process.pfMet.clone()

    process.pfMetNoHF.calculateSignificance = False
    process.pfMetNoHF.src = cms.InputTag('noHFCands')
    addMETCollection(process, labelName='patPFMetNoHF', metSource='pfMetNoHF') # RAW MET
    process.patPFMetNoHF.addGenMET = False

    ## Type 1 corrections
    if not hasattr(process, 'ak4PFCHSL1FastL2L3Corrector'):
        process.load('JetMETCorrections.Configuration.JetCorrectors_cff')

    from JetMETCorrections.Type1MET.correctionTermsPfMetType1Type2_cff import corrPfMetType1
    from JetMETCorrections.Type1MET.correctedMet_cff import pfMetT1

    if not hasattr(process, 'ak4PFJetsCHS'):
        print("WARNING: No AK4 CHS jets produced. Type 1 corrections for MET are not available.")
    else:
        if not hasattr(process, 'corrPfMetType1'):
            process.corrPfMetType1 = corrPfMetType1.clone(
                src = 'ak4PFJetsCHS',
                jetCorrLabel = 'ak4PFCHSL1FastL2L3Corrector' if not isData else 'ak4PFCHSL1FastL2L3ResidualCorrector',
                offsetCorrLabel = 'ak4PFCHSL1FastjetCorrector'
            )

        process.pfMetT1NoHF = pfMetT1.clone(
            src = 'pfMetNoHF',
            srcCorrections = [cms.InputTag("corrPfMetType1", "type1")]
        )

        addMETCollection(process, labelName='patMETNoHF', metSource='pfMetT1NoHF') # T1 MET
        process.patMETNoHF.addGenMET = False

    ## Slimmed METs

    from PhysicsTools.PatAlgos.slimming.slimmedMETs_cfi import slimmedMETs
    #### CaloMET is not available in MiniAOD
    if hasattr(slimmedMETs, 'caloMET'):
        del slimmedMETs.caloMET

    process.slimmedMETsNoHF = slimmedMETs.clone()
    if hasattr(process, "patMETNoHF"):
        # Create MET from Type 1 PF collection
        process.patMETNoHF.addGenMET = not isData
        if not isData:
            process.patMETNoHF.genMETSource = cms.InputTag("genMetExtractor")
        process.slimmedMETsNoHF.src = cms.InputTag("patMETNoHF")
        process.slimmedMETsNoHF.rawUncertainties = cms.InputTag("patPFMetNoHF") # only central value
    else:
        # Create MET from RAW PF collection
        process.patPFMetNoHF.addGenMET = not isData
        if not isData:
            process.patPFMetNoHF.genMETSource = cms.InputTag("genMetExtractor")
        process.slimmedMETsNoHF.src = cms.InputTag("patPFMetNoHF")
        del process.slimmedMETsNoHF.rawUncertainties # not available

    del process.slimmedMETsNoHF.type1Uncertainties # not available
    del process.slimmedMETsNoHF.type1p2Uncertainties # not available
示例#19
0
	# 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('pupinolepforjets'))
process.path *= (
			process.pfMetPuppi
示例#20
0
def metCorrector(process, jetCollection, metCollection, isMC, payloadName,
                 applyL2L3Residuals, addMETSystematics,
                 useOfficialMETSystematics):

    ## propagation on missing energy + full systematics
    if "Puppi" in metCollection or "PUPPI" in metCollection:
        postfix = "Puppi"
    else:
        postfix = ""

    #### run the right recipe for puppi candidates for MET (as well taking last for jets)
    if postfix == "Puppi" and not hasattr(process, "puppi") and not hasattr(
            process, "puppiForMET"):
        from PhysicsTools.PatAlgos.slimming.puppiForMET_cff import makePuppiesFromMiniAOD
        makePuppiesFromMiniAOD(process, False)
        process.puppi.useExistingWeights = cms.bool(False)
        process.puppiNoLep.useExistingWeights = cms.bool(False)

    ######################
    if useOfficialMETSystematics and addMETSystematics:
        ## use the official jet-MET tool
        ## re-run for standard met
        if postfix == "Puppi":
            if isMC:
                runMetCorAndUncFromMiniAOD(
                    process,
                    isData=False,
                    pfCandColl=cms.InputTag("puppiForMET"),
                    recoMetFromPFCs=True,
                    metType=postfix,
                    postfix=postfix,
                    jetFlavor="AK4PFPuppi")
            else:
                runMetCorAndUncFromMiniAOD(
                    process,
                    isData=True,
                    pfCandColl=cms.InputTag("puppiForMET"),
                    recoMetFromPFCs=True,
                    metType=postfix,
                    postfix=postfix,
                    jetFlavor="AK4PFPuppi")

            if applyL2L3Residuals == False and not isMC:
                process.patPFMetT1T2CorrPuppi.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.patPFMetT1T2SmearCorrPuppi.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.patPFMetT2CorrPuppi.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.patPFMetT2SmearCorrPuppi.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.shiftedPatJetEnDownPuppi.jetCorrLabelUpToL3Res = cms.InputTag(
                    "ak4PFCHSL1FastL2L3Corrector")
                process.shiftedPatJetEnUpPuppi.jetCorrLabelUpToL3Res = cms.InputTag(
                    "ak4PFCHSL1FastL2L3Corrector")
        else:
            if isMC:
                runMetCorAndUncFromMiniAOD(process, isData=False)
            else:
                runMetCorAndUncFromMiniAOD(process, isData=True)

            if applyL2L3Residuals == False and not isMC:
                process.patPFMetT1T2Corr.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.patPFMetT1T2SmearCorr.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.patPFMetT2Corr.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.patPFMetT2SmearCorr.jetCorrLabelRes = cms.InputTag(
                    "L3Absolute")
                process.shiftedPatJetEnDown.jetCorrLabelUpToL3Res = cms.InputTag(
                    "ak4PFCHSL1FastL2L3Corrector")
                process.shiftedPatJetEnUp.jetCorrLabelUpToL3Res = cms.InputTag(
                    "ak4PFCHSL1FastL2L3Corrector")

    else:
        ## extract genMet
        if not hasattr(process, "genMetExtractor") and isMC:
            setattr(
                process, "genMetExtractor",
                cms.EDProducer("GenMETExtractor",
                               metSource=cms.InputTag(metCollection, "",
                                                      "@skipCurrentProcess")))

    ## redo raw PF met for both collections
        if not hasattr(process, "pfMet" + postfix):
            setattr(
                process, "pfMet" + postfix,
                pfMet.clone(src=cms.InputTag("packedPFCandidates"),
                            alias=cms.string('pfMet' + postfix)))
        if postfix == "Puppi":
            getattr(process,
                    "pfMet" + postfix).src = cms.InputTag('puppiForMET')

## re-cast PFMets into PAT objects
        addMETCollection(process,
                         labelName='patPFMet' + postfix,
                         metSource='pfMet' + postfix)

        if isMC:
            getattr(process, "patPFMet" + postfix).addGenMET = cms.bool(True)
            getattr(process, "patPFMet" +
                    postfix).genMETSource = cms.InputTag("genMetExtractor")
        else:
            getattr(process, "patPFMet" + postfix).addGenMET = cms.bool(False)

## derive type-I corrector object
        setattr(
            process, "patPFMetT1Corr" + postfix,
            patPFMetT1T2Corr.clone(
                src=cms.InputTag(jetCollection),
                type1JetPtThreshold=cms.double(15.0),
            ))

        ## no L1 correction for Puppi
        if postfix == "Puppi":
            getattr(process,
                    "patPFMetT1Corr" + postfix).offsetCorrLabel = cms.InputTag(
                        "")  ## info embedded in the jet object

    ## apply type-I corrections
        setattr(
            process, "patPFMetT1" + postfix,
            cms.EDProducer("CorrectedPATMETProducer",
                           src=cms.InputTag("patPFMet" + postfix),
                           srcCorrections=cms.VInputTag(
                               cms.InputTag("patPFMetT1Corr" + postfix,
                                            "type1"))))

        ## re-compute all MET systematics
        if addMETSystematics:

            setattr(
                process,
                "metSysProducer" + postfix,
                cms.EDProducer(
                    "METSystematicsProducer",
                    inputMET=cms.InputTag("patPFMetT1" + postfix),
                    rho=cms.InputTag("fixedGridRhoFastjetAll"),
                    pfCandidate=cms.InputTag("packedPFCandidates"),
                    ## skip candidates
                    storeSmearedShiftedCollections=cms.bool(True),
                    skipMuon=cms.bool(False),
                    skipElectron=cms.bool(False),
                    skipTau=cms.bool(False),
                    skipPhoton=cms.bool(False),
                    skipJet=cms.bool(False),
                    ## muons
                    muon=cms.PSet(
                        src=cms.InputTag("slimmedMuons"),
                        useExternalUncertainty=cms.bool(True),
                        binning=cms.VPSet(
                            cms.PSet(binSelection=cms.string("pt < 100"),
                                     uncertainty=cms.double(0.002)),
                            cms.PSet(binSelection=cms.string("pt >= 100"),
                                     uncertainty=cms.double(0.05)))),
                    ## electrons
                    electron=cms.PSet(
                        src=cms.InputTag("slimmedElectrons"),
                        useExternalUncertainty=cms.bool(True),
                        binning=cms.VPSet(
                            cms.PSet(binSelection=cms.string("isEB"),
                                     uncertainty=cms.double(0.006)),
                            cms.PSet(binSelection=cms.string("!isEB"),
                                     uncertainty=cms.double(0.015)))),
                    ## electrons
                    photon=cms.PSet(
                        src=cms.InputTag("slimmedPhotons"),
                        useExternalUncertainty=cms.bool(True),
                        binning=cms.VPSet(
                            cms.PSet(binSelection=cms.string('isEB'),
                                     uncertainty=cms.double(0.01)),
                            cms.PSet(binSelection=cms.string('!isEB'),
                                     uncertainty=cms.double(0.025)))),
                    ## taus
                    tau=cms.PSet(
                        src=cms.InputTag("slimmedTaus"),
                        useExternalUncertainty=cms.bool(True),
                        binning=cms.VPSet(
                            cms.PSet(binSelection=cms.string(
                                "abs(eta) < 2.5 && pt > 18. && tauID(\'decayModeFindingNewDMs\')> 0.5"
                            ),
                                     uncertainty=cms.double(0.03)), )),
                    jet=cms.PSet(
                        ## input collection
                        src=cms.InputTag(jetCollection),
                        selection=cms.string(
                            'pt > 15 && abs(eta) < 9.9 && (chargedEmEnergyFraction+neutralEmEnergyFraction) < 0.9'
                        ),
                        ## information for jet energy correction
                        payloadName=cms.string(payloadName),
                        useExternalJECUncertainty=cms.bool(False),
                        JECUncFile=cms.FileInPath(
                            "AnalysisCode/MonoXAnalysis/data/JEC/Fall15_25nsV2_DATA_Uncertainty_"
                            + payloadName + ".txt"),
                        #https://twiki.cern.ch/twiki/bin/view/CMS/JetResolution
                        JERFile=cms.FileInPath(
                            "AnalysisCode/MonoXAnalysis/data/JER/Fall15_25nsV2_DATA_PtResolution_"
                            + payloadName + ".txt"),
                        JERSFFile=cms.FileInPath(
                            "AnalysisCode/MonoXAnalysis/data/JER/Fall15_25nsV2_DATA_SF_"
                            + payloadName + ".txt"),
                        jetCorrLabel=cms.InputTag("L3Absolute"),
                        jetCorrLabelRes=cms.InputTag("L2L3Residual"),
                        useExternalJERSF=cms.bool(False),
                        useExternalJER=cms.bool(False)),
                    ## unclustered component
                    unclustered=cms.PSet(
                        useExternalUncertainty=cms.bool(True),
                        binning=cms.VPSet(
                            cms.PSet(
                                binSelection=cms.string("charge!=0"),
                                binUncertainty=cms.string(
                                    "sqrt(pow(0.00009*pt,2)+pow(0.0085/sqrt(sin(2*atan(exp(eta)))),2))"
                                )),
                            cms.PSet(
                                binSelection=cms.string("pdgId==130"),
                                binUncertainty=cms.string(
                                    "((abs(eta)<1.3)?(max(0.25,sqrt(pow(0.8/sqrt(energy), 2)+0.05*0.05))):(max(0.30,sqrt(pow(1.0/sqrt(energy),2)+0.04*0.04))))"
                                )),
                            cms.PSet(
                                binSelection=cms.string("pdgId==22"),
                                binUncertainty=cms.string(
                                    "sqrt(pow(0.00009*energy,2)+pow(0.0085/sqrt(sin(2*atan(exp(eta)))),2))"
                                )),
                            cms.PSet(
                                binSelection=cms.string(
                                    'pdgId==1 || pdgId==2'),
                                binUncertainty=cms.string(
                                    'sqrt(pow(1/sqrt(energy),2)+0.05*0.05)+0*eta'
                                ),
                            )),
                    )))

            if isMC:
                getattr(
                    process, "metSysProducer" + postfix
                ).jet.JECUncFile = cms.FileInPath(
                    "AnalysisCode/MonoXAnalysis/data/JEC/Fall15_25nsV2_MC_Uncertainty_"
                    + payloadName + ".txt")
                getattr(
                    process, "metSysProducer" + postfix
                ).jet.JERFile = cms.FileInPath(
                    "AnalysisCode/MonoXAnalysis/data/JER/Fall15_25nsV2_MC_PtResolution_"
                    + payloadName + ".txt")

            ### add xy corrections
            if not hasattr(process, "patPFMetTxyCorr" + postfix):
                setattr(
                    process, "patPFMetTxyCorr" + postfix,
                    pfMEtMultShiftCorr.clone(
                        srcPFlow=cms.InputTag('packedPFCandidates'),
                        vertexCollection=cms.InputTag(
                            'offlineSlimmedPrimaryVertices')))

                setattr(
                    process, 'patPFMetT1Txy' + postfix,
                    cms.EDProducer(
                        "CorrectedPATMETProducer",
                        src=cms.InputTag("patPFMet" + postfix),
                        srcCorrections=cms.VInputTag(
                            cms.InputTag("patPFMetT1Corr" + postfix, "type1"),
                            cms.InputTag("patPFMetTxyCorr" + postfix))))

            ## final slimmed MET
            setattr(
                process, metCollection,
                cms.EDProducer(
                    "PATMETSlimmer",
                    caloMET=cms.InputTag("patPFMet" + postfix),
                    rawVariation=cms.InputTag("patPFMet" + postfix),
                    runningOnMiniAOD=cms.bool(True),
                    src=cms.InputTag("patPFMetT1" + postfix),
                    t01Variation=cms.InputTag(metCollection, "",
                                              "@skipCurrentProcess"),
                    t1Uncertainties=cms.InputTag("metSysProducer" + postfix,
                                                 "patPFMetT1" + postfix +
                                                 "%s"),
                    tXYUncForRaw=cms.InputTag(metCollection, "",
                                              "@skipCurrentProcess"),
                    tXYUncForT1=cms.InputTag('patPFMetT1Txy' + postfix),
                    t1SmearedVarsAndUncs=cms.InputTag(
                        "metSysProducer" + postfix,
                        "patPFMetT1" + postfix + "Smear%s")))

        else:
            setattr(
                process, metCollection,
                cms.EDProducer(
                    "PATMETSlimmer",
                    caloMET=cms.InputTag("patPFMet" + postfix),
                    rawVariation=cms.InputTag("patPFMet" + postfix),
                    runningOnMiniAOD=cms.bool(True),
                    src=cms.InputTag("patPFMetT1" + postfix),
                    t01Variation=cms.InputTag(metCollection, "",
                                              "@skipCurrentProcess"),
                    tXYUncForRaw=cms.InputTag(metCollection, "",
                                              "@skipCurrentProcess"),
                    tXYUncForT1=cms.InputTag(metCollection, "",
                                             "@skipCurrentProcess"),
                    t1Uncertainties=cms.InputTag(metCollection, "",
                                                 "@skipCurrentProcess"),
                    t1SmearedVarsAndUncs=cms.InputTag(metCollection, "",
                                                      "@skipCurrentProcess")))
示例#21
0
process.load("CondCore.DBCommon.CondDBCommon_cfi")
from CondCore.DBCommon.CondDBSetup_cfi import *
## load Puppi stuff
#PUPPI JEC
process.load('CommonTools/PileupAlgos/Puppi_cff') 
process.load('BaconProd/Ntupler/myPUPPICorrections_cff')
process.pfCandNoLep = cms.EDFilter("CandPtrSelector", src = cms.InputTag("particleFlow"), cut = cms.string("abs(pdgId) != 13 && abs(pdgId) != 11 && abs(pdgId) != 15"))
process.pfCandLep = cms.EDFilter("CandPtrSelector", src = cms.InputTag("particleFlow"), cut = cms.string("abs(pdgId) == 13 || abs(pdgId) == 11 || abs(pdgId) == 15"))
process.puppinolep = process.puppi.clone()
process.puppinolep.candName = 'pfCandNoLep'
process.puppimetinput = cms.EDProducer("CandViewMerger",
                                       src = cms.VInputTag( "pfCandLep","puppinolep")
                                       )
# Include the stuff for Puppi MET
process.pfMetPuppi = pfMet.clone();
process.pfMetPuppi.src = cms.InputTag('puppimetinput')
process.pfMetPuppi.calculateSignificance = False
process.puppi30 = process.puppi.clone()
process.puppi30.candName = 'packedPFCandidates30'
process.ak4PFJetsPuppi   = ak4PFJets.clone(src = cms.InputTag("puppimetinput"))

hlt_file = open(cmssw_base + "/src/" + hlt_filename, "r")
for line in hlt_file.readlines():
  line = line.strip()              # strip preceding and trailing whitespaces
  if (line[0:3] == 'HLT'):         # assumes typical lines begin with HLT path name (e.g. HLT_Mu15_v1)
    hlt_path = line.split()[0]
    process.hltHighLevel.HLTPaths.extend(cms.untracked.vstring(hlt_path))

    process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
    process.source = cms.Source("PoolSource",
示例#22
0
pfPileUp.Vertices = cms.InputTag('offlinePrimaryVertices')
pfPileUp.PFCandidates = cms.InputTag("particleFlow")

# Jets
from RecoJets.JetProducers.ak5PFJets_cfi import ak5PFJets
ak5PFJetsNoPU = ak5PFJets.clone(
    src = cms.InputTag("pfNoPileUp"),
    doAreaFastjet = cms.bool(True)
    )

ak7PFJetsNoPU = ak5PFJetsNoPU.clone( rParam = 0.7 )

# MET
from RecoMET.METProducers.PFMET_cfi import pfMet
pfMetNoPU = pfMet.clone(
    src = cms.InputTag("pfNoPileUp"),
    jets = cms.InputTag("ak5PFJetsNoPU")
    )

pfNoPileUp.bottomCollection = cms.InputTag("particleFlow")

producePFNoPileUp = cms.Sequence(
    goodOfflinePrimaryVertices
#  * ak5CaloL1FastjetNoPU
#  * ak5PFL1FastjetNoPU
#  * ak5JPTL1FastjetNoPU
  * pfNoPileUpSequence
#  * kt6CaloJetsNoPU
  * kt6PFJetsNoPU
  * kt6PFJetsNoPUForIso
  * ak5PFJetsNoPU
  * ak7PFJetsNoPU