示例#1
0
def getBaseConfig(
		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 = any([name in testfile[0] for name in 'SingleMu', 'DoubleMu', 'DoubleElectron', 'MuEG'])
	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")
	## MessageLogger
	process.load("FWCore.MessageLogger.MessageLogger_cfi")
	process.MessageLogger.default = cms.untracked.PSet(
		ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5))
		#suppressError = cms.untracked.vstring("electronIdMVAProducer")
	)
	process.MessageLogger.cerr.FwkReport.reportEvery = 50
	## Options and Output Report
	process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) )
	## Source
	process.source = cms.Source("PoolSource",
		fileNames = cms.untracked.vstring()
	)
	## Maximal number of Events
	process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
	## Geometry and Detector Conditions (needed for a few patTuple production steps)
	import Kappa.Skimming.tools as tools
	cmssw_version_number = tools.get_cmssw_version_number()
	process.load("Configuration.Geometry.GeometryIdeal_cff")
	process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
	from Configuration.AlCa.autoCond import autoCond
	process.GlobalTag.globaltag = cms.string(autoCond['startup'])
	# print the global tag until it is clear whether this auto global tag is fine
	print "GT from autoCond:", process.GlobalTag.globaltag
	process.load("Configuration.StandardSequences.MagneticField_cff")


	############################################################################
	#  KAPPA
	############################################################################
	process.load('Kappa.Producers.KTuple_cff')
	process.kappaTuple = cms.EDAnalyzer('KTuple',
		process.kappaTupleDefaultsBlock,
		outputFile = cms.string("kappaTuple.root"),
	)
	process.kappaTuple.active = cms.vstring()
	process.kappaTuple.outputFile = outputfilename			## name of output file
	process.kappaTuple.verbose	= 0				## verbosity level
	process.kappaTuple.profile	= cms.bool(False)
	process.kappaOut = cms.Sequence(process.kappaTuple)

	process.path = cms.Path()


	process.source.fileNames	  = testfile
	process.maxEvents.input		  = maxevents				## number of events to be processed (-1 = all in file)
	if not globaltag.lower() == 'auto' :
		process.GlobalTag.globaltag = globaltag
	data = datasetsHelper.isData(nickname)
	process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) )


	############################################################################
	#  Basic Objects
	############################################################################
	process.kappaTuple.active += cms.vstring('VertexSummary')	## save VertexSummary,
	process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices')
	#process.kappaTuple.active += cms.vstring('BeamSpot')		## save Beamspot,
	#process.kappaTuple.active += cms.vstring('TriggerObjects')
	if data:
		process.kappaTuple.active+= cms.vstring('DataInfo')		## produce Metadata for data,
	else:
		process.kappaTuple.active+= cms.vstring('GenInfo')		## produce Metadata for MC,
		process.kappaTuple.active+= cms.vstring('GenParticles')

	#Trigger 
	trigger_dict = {
		'mtrigger': ['^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$'],
		'etrigger': ['HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*'],
		'emtrigger': ["HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*", "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*",]
	}
	channel_dict = {
		'ee': ['etrigger'],
		'mm': ['mtrigger'],
		'eemm': ['etrigger', 'mtrigger'],
		'em': ['emtrigger']
	}	
	process.kappaTuple.Info.hltWhitelist = cms.vstring("")
	for triggers in channel_dict[channel]:
		for trigger in trigger_dict[triggers]:
			process.kappaTuple.Info.hltWhitelist += cms.vstring(trigger)


	############################################################################
	#  PFCandidates
	############################################################################
	process.load('Kappa.Skimming.KPFCandidates_cff')
	process.path *= (
		process.goodOfflinePrimaryVertices
		* process.pfPileUp
		* process.pfNoPileUp
		#* process.makePFBRECO
		#* process.makeKappaPFCandidates
	)

	if 'm' in channel:
		############################################################################
		#  Muons
		############################################################################

		process.kappaTuple.active += cms.vstring('Muons')	## produce/save KappaMuons
		process.kappaTuple.Muons.minPt = cms.double(8.0)

		## Isodeposits for muons
		process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi')
		process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi')
		process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi')

		process.pfmuIsoDepositPFCandidates = cms.EDProducer(
			"CandIsoDepositProducer",
			src = cms.InputTag("muons"),
			MultipleDepositsFlag = cms.bool(False),
			trackType = cms.string('candidate'),
			ExtractorPSet = cms.PSet(
				Diff_z = cms.double(99999.99),
				ComponentName = cms.string('CandViewExtractor'),
				DR_Max = cms.double(1.0),
				Diff_r = cms.double(99999.99),
				inputCandView = cms.InputTag("particleFlow"),
				DR_Veto = cms.double(1e-05),
				DepositLabel = cms.untracked.string('')
			)
		)
		process.path *= (process.pfmuIsoDepositPFCandidates)
		process.goodMuons = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('muons'),
			cut = cms.string("pt > 15.0"),
		)
		process.oneGoodMuon = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('goodMuons'),
			minNumber = cms.uint32(1),
		)
		process.twoGoodMuons = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('goodMuons'),
			minNumber = cms.uint32(2),
		)
		if 'mm' in channel:
			process.path *= (process.goodMuons * process.twoGoodMuons)

	if 'e' in channel:
		############################################################################
		#  Electrons
		############################################################################

		#TODO Add Electron
		process.load('EgammaAnalysis.ElectronTools.electronIdMVAProducer_cfi')
		process.load('TrackingTools.TransientTrack.TransientTrackBuilder_cfi')
		process.load('PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi')
		process.patElectrons.electronIDSources = cms.PSet(
			## default cut based Id
			eidRobustLoose      = cms.InputTag("eidRobustLoose"     ),
			eidRobustTight      = cms.InputTag("eidRobustTight"     ),
			eidLoose            = cms.InputTag("eidLoose"           ),
			eidTight            = cms.InputTag("eidTight"           ),
			eidRobustHighEnergy = cms.InputTag("eidRobustHighEnergy"),
			## MVA based Id
			idMvaTrigV0           = cms.InputTag("mvaTrigV0"          ),
			idMvaTrigNoIPV0       = cms.InputTag("mvaTrigNoIPV0"      ),
			idMvaNonTrigV0        = cms.InputTag("mvaNonTrigV0"       ),
		)
		process.patElectrons.genParticleMatch = ""
		process.patElectrons.addGenMatch = False
		process.patElectrons.embedGenMatch = False
		process.patElectrons.embedGsfElectronCore          = True
		process.patElectrons.embedGsfTrack                 = True
		process.patElectrons.embedSuperCluster             = True
		process.patElectrons.embedPflowSuperCluster        = True
		process.patElectrons.embedSeedCluster              = True
		process.patElectrons.embedBasicClusters            = True
		process.patElectrons.embedPreshowerClusters        = True
		process.patElectrons.embedPflowBasicClusters       = True
		process.patElectrons.embedPflowPreshowerClusters   = True
		process.patElectrons.embedPFCandidate              = True
		process.patElectrons.embedTrack                    = True
		process.patElectrons.embedRecHits                  = True

		process.patElectrons.embedHighLevelSelection.pvSrc = "goodOfflinePrimaryVertices"
		process.electronIdMVA = cms.Sequence(
			process.mvaTrigV0+
			process.mvaTrigNoIPV0+
			process.mvaNonTrigV0
		)
		process.makeKappaElectrons = cms.Sequence(
			process.electronIdMVA *
			process.patElectrons
		)
		process.path *= (process.makeKappaElectrons)


		## CALIBRATIONS
		# momentum corrections
		process.load('EgammaAnalysis.ElectronTools.electronRegressionEnergyProducer_cfi')
		process.eleRegressionEnergy.inputElectronsTag = cms.InputTag('patElectrons')
		process.eleRegressionEnergy.inputCollectionType = cms.uint32(1)

		process.load("Configuration.StandardSequences.Services_cff")
		process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService",
				calibratedPatElectrons = cms.PSet(
					initialSeed = cms.untracked.uint32(1),
					engineName = cms.untracked.string('TRandom3')
				),
		)

		# calibrate pat electrons
		process.load("EgammaAnalysis.ElectronTools.calibratedPatElectrons_cfi")
		if data:
			inputDataset =  "22Jan2013ReReco"
		else:
			#inputDataset =  "Summer12_DR53X_HCP2012"
			inputDataset =  "Summer12_LegacyPaper"
		print "Using electron calibration", inputDataset
		process.calibratedPatElectrons.inputDataset = cms.string(inputDataset)
		process.calibratedPatElectrons.isMC = cms.bool(not data)

		## for cutbased ID
		from CommonTools.ParticleFlow.Tools.pfIsolation import setupPFElectronIso, setupPFMuonIso
		process.calibeleIsoSequence = setupPFElectronIso(process, 'calibratedPatElectrons', "PFIsoCal")
		process.eleIsoSequence = setupPFElectronIso(process, 'patElectrons')
		process.pfiso = cms.Sequence(process.pfParticleSelectionSequence
			+ process.eleIsoSequence + process.calibeleIsoSequence 
		)

		# rho for e isolation
		from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
		process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True )
		process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5)

		process.path *= (
			process.eleRegressionEnergy *
			process.calibratedPatElectrons * 
			process.pfiso *
			process.kt6PFJetsForIsolation
		)


		#add to Kappa
		process.kappaTuple.active += cms.vstring('Electrons')
		process.kappaTuple.Electrons = cms.PSet(
			process.kappaNoCut, process.kappaNoRegEx,
			ids = cms.vstring(),
			srcIds = cms.string("pat"),
			electrons = cms.PSet(
				src = cms.InputTag("patElectrons"),
				allConversions = cms.InputTag("allConversions"),
				offlineBeamSpot = cms.InputTag("offlineBeamSpot"),
				vertexcollection = cms.InputTag("goodOfflinePrimaryVertices"),
				isoValInputTags = cms.VInputTag(
					cms.InputTag('elPFIsoValueChargedAll04PFIdPFIso'),
					cms.InputTag('elPFIsoValueGamma04PFIdPFIso'),
					cms.InputTag('elPFIsoValueNeutral04PFIdPFIso'),
					cms.InputTag('elPFIsoValuePU04PFIdPFIso')),
				rhoIsoInputTag = cms.InputTag("kt6PFJetsForIsolation", "rho"),
			),
		)
		process.kappaTuple.Electrons.correlectrons = process.kappaTuple.Electrons.electrons.clone(
				src = cms.InputTag("calibratedPatElectrons"),
				isoValInputTags = cms.VInputTag(
					cms.InputTag('elPFIsoValueChargedAll04PFIdPFIsoCal'),
					cms.InputTag('elPFIsoValueGamma04PFIdPFIsoCal'),
					cms.InputTag('elPFIsoValueNeutral04PFIdPFIsoCal'),
					cms.InputTag('elPFIsoValuePU04PFIdPFIsoCal')),
		)

		#process.kappaTuple.Electrons.ids = cms.VInputTag("mvaTrigV0", "mvaTrigNoIPV0", "mvaNonTrigV0")
		process.kappaTuple.Electrons.ids = cms.VInputTag('idMvaNonTrigV0', 'idMvaTrigNoIPV0', 'idMvaTrigV0')
		process.kappaTuple.Electrons.minPt = cms.double(8.0)


		### Filter
		process.goodElectrons = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('calibratedPatElectrons'),
			cut = cms.string("pt > 15.0"),
		)
		process.oneGoodElectron = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('goodElectrons'),
			minNumber = cms.uint32(1),
		)
		process.twoGoodElectrons = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('goodElectrons'),
			minNumber = cms.uint32(2),
		)
		if 'ee' in channel:
			process.path *= (process.goodElectrons * process.twoGoodElectrons)

	if 'em' in channel:
		process.path *= (process.goodElectrons * process.oneGoodElectron
						* process.goodMuons * process.oneGoodMuon)


	############################################################################
	#  Jets
	############################################################################

	process.load('RecoJets.JetProducers.ak5PFJets_cfi')
	process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
	process.ak5PFJetsCHS = process.ak5PFJets.clone( src = cms.InputTag('pfNoPileUp') )

	process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
	process.kappaTuple.Jets = cms.PSet(
		process.kappaNoCut,
		process.kappaNoRegEx,
		taggers = cms.vstring(),
		ak5PFJets = cms.PSet(
			src = cms.InputTag('ak5PFJets'),
			QGtagger = cms.InputTag('AK5PFJetsQGTagger'),
			Btagger  = cms.InputTag('ak5PF'),
			PUJetID  = cms.InputTag('ak5PFPuJetMva'),
			PUJetID_full = cms.InputTag('full'),
			),
		ak5PFJetsCHS = 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.Jets.minPt = cms.double(5.0)

	if not data:
		process.load('RecoJets.JetProducers.ak5GenJets_cfi')
		process.path *= (
			process.genParticlesForJetsNoNu *
			process.ak5GenJetsNoNu
		)
		process.kappaTuple.active += cms.vstring('LV')
		process.kappaTuple.LV.rename = cms.vstring('ak => AK')
		process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu')

	# add kt6PFJets, needed for the PileupDensity
	from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
	process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True )
	process.kt6PFJets.Rho_EtaMax = cms.double(2.5)

	process.path *= (
		process.ak5PFJets
		* process.ak5PFJetsCHS
		* process.kt6PFJets
	)


	############################################################################
	#  MET
	############################################################################
	# MET correction ----------------------------------------------------------
	process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi')
	process.path *= (
		process.type0PFMEtCorrection
	)
	#TODO check type 0 corrections
	process.kappaTuple.active += cms.vstring('MET')					   ## produce/save KappaPFMET
	process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_')

	if cmssw_version_number.startswith("5"):
		# 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.path *= (
			process.producePFMETCorrections * process.pfMETCHS
		)
		process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS")


	############################################################################
	#  Almost done ...
	############################################################################
	process.path *= (
		process.kappaOut
	)
	return process
示例#2
0
def getBaseConfig(globaltag= 'START53_V15A::All', testfile=cms.untracked.vstring(""), maxevents=100, nickname = 'SM_VBFHToTauTau_M_90_powheg_pythia_8TeV', kappaTag = 'Kappa_1_0_0'):

	from Kappa.Skimming.KSkimming_template_cfg import process
	process.source.fileNames      = testfile
	process.maxEvents.input	      = maxevents				## number of events to be processed (-1 = all in file)
	process.kappaTuple.outputFile = 'kappaTuple.root'			## name of output file
	process.kappaTuple.verbose    = cms.int32(0)				## verbosity level
	process.kappaTuple.profile    = cms.bool(True)
	if not globaltag.lower() == 'auto' :
		process.GlobalTag.globaltag   = globaltag
		print "GT (overwritten):", process.GlobalTag.globaltag
	data = datasetsHelper.isData(nickname)
	centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname)
	isEmbedded = datasetsHelper.getIsEmbedded(nickname)

	process.p = cms.Path()
	## ------------------------------------------------------------------------
	# Configure Metadata describing the file
	process.kappaTuple.active										= cms.vstring('TreeInfo')
	process.kappaTuple.TreeInfo.parameters = cms.PSet(
		dataset						= cms.string(datasetsHelper.getDatasetName(nickname)),
		generator					= cms.string(datasetsHelper.getGenerator(nickname)),
		productionProcess			= cms.string(datasetsHelper.getProcess(nickname)),
		globalTag					= cms.string(globaltag),
		prodCampaignGlobalTag	= cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)),
		runPeriod					= cms.string(datasetsHelper.getRunPeriod(nickname)),
		kappaTag						= cms.string(kappaTag),
		isEmbedded					= cms.bool(isEmbedded),
		jetMultiplicity			= cms.int32(datasetsHelper.getJetMultiplicity(nickname)),
		centerOfMassEnergy		= cms.int32(centerOfMassEnergy),
		puScenario					= cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)),
		isData						= cms.bool(data),
	)


	## ------------------------------------------------------------------------
	# General configuration

	process.kappaTuple.active += cms.vstring('VertexSummary')	## save VertexSummary,
	process.kappaTuple.active += cms.vstring('BeamSpot')		## save Beamspot,
	process.kappaTuple.active += cms.vstring('TriggerObjects')

	if not isEmbedded:
		if data:
			process.kappaTuple.active+= cms.vstring('DataInfo')		## produce Metadata for data,
		else:
			process.kappaTuple.active+= cms.vstring('GenInfo')		## produce Metadata for MC,
			process.kappaTuple.active+= cms.vstring('GenParticles')		## save GenParticles,
			process.kappaTuple.active+= cms.vstring('GenTaus')				## save GenParticles,
	
	# prune GenParticles
	if not data:
		process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi")
		process.prunedGenParticles = cms.EDProducer("GenParticlePruner",
			src = cms.InputTag("genParticles", "", "SIM"),
			select = cms.vstring(
				"drop  *",
				"keep status == 3",  # all status 3
				"keep++ abs(pdgId) == 23", # Z
				"keep++ abs(pdgId) == 24", # W
				"keep++ abs(pdgId) == 25", # H
				"keep abs(pdgId) == 11 || abs(pdgId) == 13",  # charged leptons
				"keep++ abs(pdgId) == 15"  # keep full tau decay chain
			)
		)
	
	process.kappaTuple.Info.hltWhitelist = cms.vstring(			## HLT selection
		# https://github.com/cms-analysis/HiggsAnalysis-KITHiggsToTauTau/blob/master/data/triggerTables-2011-2012.txt
		# https://twiki.cern.ch/twiki/bin/viewauth/CMS/HiggsToTauTauWorkingSummer2013
		# can be tested at http://regexpal.com
		# e
		"^HLT_Ele[0-9]+_CaloIdVT(_CaloIsoT)?_TrkIdT(_TrkIsoT)?_v[0-9]+$",
		"^HLT_Ele[0-9]+_WP[0-9]+_v[0-9]+$",
		# m
		"^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_v[0-9]+$",
		# ee
		"^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?" +
			"_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?_v[0-9]+$",
		"^HLT_Ele[0-9]+_Ele[0-9]+_CaloId(L|T)_CaloIsoVL(_TrkIdVL_TrkIsoVL)?_v[0-9]+$",
		# mm
		"^HLT_(Double)?Mu[0-9]+(_(Mu|Jet)[0-9]+)?_v[0-9]+$",
		# em
		"^HLT_Mu[0-9]+_(Ele|Photon)[0-9]+_CaloId(L|T|VT)(_CaloIsoVL|_IsoT)?(_TrkIdVL_TrkIsoVL)?_v[0-9]+$",
		# et
		"^HLT_Ele[0-9]+_CaloIdVT(_Calo(IsoRho|Iso)T)?_TrkIdT(_TrkIsoT)?_(Loose|Medium|Tight)IsoPFTau[0-9]+_v[0-9]+$",
		"^HLT_Ele[0-9]+_eta2p1_WP[0-9]+(Rho|NoIso)_LooseIsoPFTau[0-9]+_v[0-9]+$",
		# mt
		"^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_(Loose|Medium|Tight)IsoPFTau[0-9]+(_Trk[0-9]_eta2p1)?_v[0-9]+$",
		# tt
		"^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)_eta2p1_(Jet[0-9]+|Prong[0-9])?_v[0-9]+$",
		"^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)(_eta2p1)?_v[0-9]+$",
		# specials (possible generalization: Mu15, L1ETM20, Photon20, Ele8)
		"^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT)?(_TrkIsoVT)?_(SC|Ele)[0-9](_Mass[0-9]+)?_v[0-9]+$",
		"^HLT_Ele8_v[0-9]+$",
		"^HLT_IsoMu15(_eta2p1)?_L1ETM20_v[0-9]+$",
		"^HLT_Photon20_CaloIdVT_IsoT_Ele8_CaloIdL_CaloIsoVL_v[0-9]+$",
		# specials for tag and probe and em fakerate studies could be added if enough bits are ensured
		#"^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT_TrkIso(T|VT))?_(SC|Ele)[0-9]+(_Mass[0-9]+)?_v[0-9]+$",
		#"^HLT_Mu[0-9]+_Photon[0-9]+_CaloIdVT_IsoT_v[0-9]+$",
		#"^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL_TrkIsoVL)?(_TrkIsoVL)?(_Jet[0-9]+|)?_v[0-9]+$",
		)
	
	process.kappaTuple.Info.hltBlacklist = cms.vstring(
		"HLT_Mu13_Mu8", # v21 gives errors for the trigger objects
		)

	## ------------------------------------------------------------------------
	# Configure PFCandidates and offline PV
	process.load("Kappa.Skimming.KPFCandidates_cff")
	#process.kappaTuple.active += cms.vstring('PFCandidates')		## save PFCandidates for deltaBeta corrected
	process.kappaTuple.PFCandidates.whitelist = cms.vstring(                ## isolation used for electrons and muons.
##		"pfNoPileUpChargedHadrons",    ## switch to pfAllChargedParticles
		"pfAllChargedParticles",       ## same as pfNoPileUpChargedHadrons +pf_electrons + pf_muons
		"pfNoPileUpNeutralHadrons",
		"pfNoPileUpPhotons",
		"pfPileUpChargedHadrons",
		)

	process.p *= ( process.makePFBRECO * process.makePFCandidatesForDeltaBeta )
	
	## ------------------------------------------------------------------------
	# Configure Muons
	process.load("Kappa.Skimming.KMuons_cff")
	process.kappaTuple.active += cms.vstring('Muons')	                ## produce/save KappaMuons
	process.kappaTuple.Muons.minPt = cms.double(8.0)
	process.p *= process.makeKappaMuons

	## ------------------------------------------------------------------------
	# Configure Electrons
	process.load("Kappa.Skimming.KElectrons_cff")
	process.kappaTuple.active += cms.vstring('Electrons')	                ## produce/save KappaElectrons,
	process.kappaTuple.Electrons.ids = cms.vstring("mvaTrigV0",
	                                               "mvaTrigNoIPV0",
	                                               "mvaNonTrigV0")
	process.kappaTuple.Electrons.minPt = cms.double(8.0)
	process.p *= process.makeKappaElectrons
	
	## for electron/muon iso
	# https://github.com/ajgilbert/ICHiggsTauTau/blob/master/test/higgstautau_cfg.py#L418-L448
	from CommonTools.ParticleFlow.Tools.pfIsolation import setupPFElectronIso, setupPFMuonIso
	process.eleIsoSequence = setupPFElectronIso(process, 'patElectrons')
	process.muIsoSequence = setupPFMuonIso(process, 'muons')
	
	process.eleIsoSequence.remove(process.elPFIsoValueCharged03NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValueChargedAll03NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValueGamma03NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValueNeutral03NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValuePU03NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValueCharged04NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValueChargedAll04NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValueGamma04NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValueNeutral04NoPFIdPFIso)
	process.eleIsoSequence.remove(process.elPFIsoValuePU04NoPFIdPFIso)
	process.elPFIsoValueGamma04PFIdPFIso.deposits[0].vetos      = cms.vstring('EcalEndcaps:ConeVeto(0.08)','EcalBarrel:ConeVeto(0.08)')
	process.elPFIsoValueNeutral04PFIdPFIso.deposits[0].vetos    = cms.vstring()
	process.elPFIsoValuePU04PFIdPFIso.deposits[0].vetos         = cms.vstring()
	process.elPFIsoValueCharged04PFIdPFIso.deposits[0].vetos    = cms.vstring('EcalEndcaps:ConeVeto(0.015)')
	process.elPFIsoValueChargedAll04PFIdPFIso.deposits[0].vetos = cms.vstring('EcalEndcaps:ConeVeto(0.015)','EcalBarrel:ConeVeto(0.01)')
	process.pfiso = cms.Sequence(process.pfParticleSelectionSequence + process.eleIsoSequence + process.muIsoSequence)

	# rho for electron iso
	from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
	process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True )
	process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5)
	process.p *= (process.pfiso * process.kt6PFJetsForIsolation)

	## ------------------------------------------------------------------------
	# Configure Taus
	process.load("Kappa.Skimming.KTaus_cff")
	process.kappaTuple.active += cms.vstring('Taus')	                ## produce/save KappaTaus
	process.kappaTuple.Taus.minPt = cms.double(8.0)
	process.p *= process.makeKappaTaus

	## ------------------------------------------------------------------------
	## Kappa Jets
	process.load("Kappa.Skimming.KJets_cff")
	process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
	process.kappaTuple.Jets = cms.PSet(
		process.kappaNoCut,
		process.kappaNoRegEx,
		taggers = cms.vstring(
			"QGlikelihood",
			"QGmlp",
			"TrackCountingHighEffBJetTags",
			"TrackCountingHighPurBJetTags", 
			"JetProbabilityBJetTags",
			"JetBProbabilityBJetTags", 
			"SoftElectronBJetTags",
			"SoftMuonBJetTags",
			"SoftMuonByIP3dBJetTags",
			"SoftMuonByPtBJetTags",
			"SimpleSecondaryVertexBJetTags", 
			"CombinedSecondaryVertexBJetTags",
			"CombinedSecondaryVertexMVABJetTags",
			"puJetIDFullDiscriminant",
			"puJetIDFullLoose",
			"puJetIDFullMedium",
			"puJetIDFullTight",
			"puJetIDCutbasedDiscriminant",
			"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.Jets.minPt = cms.double(10.0)

	## ------------------------------------------------------------------------
	# Special settings for embedded samples
	# https://twiki.cern.ch/twiki/bin/viewauth/CMS/MuonTauReplacementWithPFlow
	if isEmbedded:
		process.load('RecoBTag/Configuration/RecoBTag_cff')
		process.load('RecoJets/JetAssociationProducers/ak5JTA_cff')
		process.ak5PFJetNewTracksAssociatorAtVertex.tracks = "tmfTracks"
		process.ak5PFCHSNewJetTracksAssociatorAtVertex.tracks = "tmfTracks"
		process.p *= process.btagging
		# disable overrideHLTCheck for embedded samples, since it triggers an Kappa error
		process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True)
		process.kappaTuple.active+= cms.vstring('DataInfo')
		process.kappaTuple.active+= cms.vstring('GenParticles')		## save GenParticles,
		process.kappaTuple.active+= cms.vstring('GenTaus')				## save GenParticles,
		process.kappaTuple.GenParticles.genParticles.src = cms.InputTag("genParticles","","EmbeddedRECO")
		process.kappaTuple.Info.isEmbedded = cms.bool(True)

	# Let Jets run
	process.p *= (
		process.makeKappaTaus *
		process.makePFJets *
		process.makePFJetsCHS *
		process.makeQGTagging *
		process.makeBTagging *
		process.makePUJetID
	)

	## ------------------------------------------------------------------------
	## MET
	process.load("Kappa.Skimming.KMET_cff")
	process.kappaTuple.active += cms.vstring('GenMET')                         ## produce/save KappaMET
	process.kappaTuple.active += cms.vstring('MET')                       ## produce/save KappaPFMET
	process.p *= process.makeKappaMET
	#"""
	
	if not data:
		process.load('PhysicsTools/JetMCAlgos/TauGenJets_cfi')
		process.load('PhysicsTools/JetMCAlgos/TauGenJetsDecayModeSelectorAllHadrons_cfi')
		process.p *= (process.tauGenJets+process.tauGenJetsSelectorAllHadrons)
		process.kappaTuple.GenJets.whitelist = cms.vstring("tauGenJets")
		process.kappaTuple.active += cms.vstring('GenJets')
	
	# add python config to TreeInfo
	process.kappaTuple.TreeInfo.parameters.config = cms.string(process.dumpPython())
	
	# add repository revisions to TreeInfo
	for repo, rev in tools.get_repository_revisions().iteritems():
		setattr(process.kappaTuple.TreeInfo.parameters, repo, cms.string(rev))
	

	## ------------------------------------------------------------------------
	## And let it run
	process.p *= (
		process.kappaOut
	)
	## ------------------------------------------------------------------------
	## declare edm OutputModule (expects a path 'p'), uncommented if wanted

	#process.edmOut = cms.OutputModule(
	#	"PoolOutputModule",
	#	fileName = cms.untracked.string('dump.root'),				## name of output file
	#	SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('p') ),	## save only events passing the full path
	#	outputCommands = cms.untracked.vstring('drop *', 'keep *_*_*_KAPPA')	## save each edm object that has been produced by process KAPPA
	#	)
	#process.ep = cms.EndPath(process.edmOut)

	return process
def getBaseConfig(
		globaltag,
		testfile,
		maxevents,
		nickname,
		outputfilename,
		kappaverbosity,
	):
	from Kappa.Skimming.KSkimming_template_cfg import process
	process.source.fileNames	  = testfile
	process.maxEvents.input		  = maxevents				## number of events to be processed (-1 = all in file)
	process.kappaTuple.outputFile = outputfilename			## name of output file
	process.kappaTuple.verbose	= cms.int32(kappaverbosity)				## verbosity level
	process.kappaTuple.profile	= cms.bool(False)
	if not globaltag.lower() == 'auto' :
		process.GlobalTag.globaltag   = globaltag
	data = datasetsHelper.isData(nickname)
	centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname)
	process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) )


	## some infos
	print "\n--------CONFIGURATION----------"
	print "input:          ", testfile
	print "nickname:       ", nickname
	print "global tag:     ", process.GlobalTag.globaltag
	print "max events:     ", maxevents
	print "output filename:", outputfilename
	print "------------------\n"

	process.p = cms.Path ( )
	## ------------------------------------------------------------------------
	# Configure Metadata describing the file
	process.kappaTuple.active = cms.vstring('TreeInfo')
	process.kappaTuple.TreeInfo.parameters = cms.PSet(
		dataset						= cms.string(datasetsHelper.getDatasetName(nickname)),
		generator					= cms.string(datasetsHelper.getGenerator(nickname)),
		productionProcess			= cms.string(datasetsHelper.getProcess(nickname)),
		globalTag					= cms.string(globaltag),
		prodCampaignGlobalTag	= cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)),
		runPeriod					= cms.string(datasetsHelper.getRunPeriod(nickname)),
		jetMultiplicity			= cms.int32(datasetsHelper.getJetMultiplicity(nickname)),
		centerOfMassEnergy		= cms.int32(centerOfMassEnergy),
		puScenario					= cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)),
		isData						= cms.bool(data)
		)

	## ------------------------------------------------------------------------
	# General configuration

	process.kappaTuple.active += cms.vstring('VertexSummary')	## save VertexSummary,
	process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices')
	#process.kappaTuple.active += cms.vstring('BeamSpot')		## save Beamspot,
	#process.kappaTuple.active += cms.vstring('TriggerObjects')

	if data:
		process.kappaTuple.active+= cms.vstring('DataInfo')		## produce Metadata for data,
	else:
		process.kappaTuple.active+= cms.vstring('GenInfo')		## produce Metadata for MC,
		process.kappaTuple.active+= cms.vstring('GenParticles')

	process.kappaTuple.Info.hltWhitelist = cms.vstring(			## HLT selection
		# can be tested at http://regexpal.com
		# 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:]]+)?$',
		)



	## ------------------------------------------------------------------------
	# Configure PFCandidates and offline PV
	# PFCandidates ------------------------------------------------------------
	process.load('Kappa.Skimming.KPFCandidates_cff')
	# 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.p *= (process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp)# process.makePFBRECO * process.makeKappaPFCandidates)


	## ------------------------------------------------------------------------
	# Configure Muons
	process.load('Kappa.Skimming.KMuons_cff')
	process.kappaTuple.active += cms.vstring('Muons')					## produce/save KappaMuons
	#process.kappaTuple.Muons.minPt = cms.double(8.0)

	process.goodMuons = cms.EDFilter('CandViewSelector',
		src = cms.InputTag('muons'),
		cut = cms.string("pt > 15.0 & abs(eta) < 8.0"),# & isGlobalMuon()"),
	)
	process.twoGoodMuons = cms.EDFilter('CandViewCountFilter',
		src = cms.InputTag('goodMuons'),
		minNumber = cms.uint32(2),
	)
	process.p *= (#process.goodMuons * process.twoGoodMuons * 
		process.makeKappaMuons)

	## for muon iso
	# https://github.com/ajgilbert/ICHiggsTauTau/blob/master/test/higgstautau_new_cfg.py#L430-L460
	process.load('CommonTools.ParticleFlow.Isolation.pfMuonIsolation_cff')
	process.muPFIsoValueCharged04PFIso = process.muPFIsoValueCharged04.clone()
	process.muPFIsoValueChargedAll04PFIso = process.muPFIsoValueChargedAll04.clone()
	process.muPFIsoValueGamma04PFIso = process.muPFIsoValueGamma04.clone()
	process.muPFIsoValueNeutral04PFIso = process.muPFIsoValueNeutral04.clone()
	process.muPFIsoValuePU04PFIso = process.muPFIsoValuePU04.clone()

	process.muonPFIsolationValuesSequence = cms.Sequence(
		process.muPFIsoValueCharged04PFIso+
		process.muPFIsoValueChargedAll04PFIso+
		process.muPFIsoValueGamma04PFIso+
		process.muPFIsoValueNeutral04PFIso+
		process.muPFIsoValuePU04PFIso
	)
	process.muPFIsoDepositCharged.src = cms.InputTag('muons')
	process.muPFIsoDepositChargedAll.src = cms.InputTag('muons')
	process.muPFIsoDepositNeutral.src = cms.InputTag('muons')
	process.muPFIsoDepositGamma.src = cms.InputTag('muons')
	process.muPFIsoDepositPU.src = cms.InputTag('muons')

	## ------------------------------------------------------------------------
	## KappaJets
	process.load('Kappa.Skimming.KJets_cff')
	process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
	process.kappaTuple.Jets = cms.PSet(
		process.kappaNoCut,
		process.kappaNoRegEx,
		taggers = cms.vstring(
	#		'QGlikelihood',
	#		'QGmlp',
			'TrackCountingHighEffBJetTags',
			'TrackCountingHighPurBJetTags',
			'JetProbabilityBJetTags',
			'JetBProbabilityBJetTags',
			'SoftElectronBJetTags',
			'SoftMuonBJetTags',
			'SoftMuonByIP3dBJetTags',
			'SoftMuonByPtBJetTags',
			'SimpleSecondaryVertexBJetTags',
			'CombinedSecondaryVertexBJetTags',
			'CombinedSecondaryVertexMVABJetTags',
			'puJetIDFullDiscriminant',
			'puJetIDFullLoose',
			'puJetIDFullMedium',
			'puJetIDFullTight',
			#'puJetIDCutbasedDiscriminant',
			#'puJetIDCutbasedLoose',
			#'puJetIDCutbasedMedium',
			#'puJetIDCutbasedTight'
			),
		AK5PFTaggedJets = cms.PSet(
			src = cms.InputTag('ak5PFJets'),
			#QGtagger = cms.InputTag('AK5PFJetsQGTagger'),
			QGtagger = cms.InputTag(''),
			Btagger  = cms.InputTag('ak5PF'),
			PUJetID  = cms.InputTag('ak5PFPuJetMva'),
			PUJetID_full = cms.InputTag('full'),
			),
		AK5PFTaggedJetsCHS = cms.PSet(
			src = cms.InputTag('ak5PFJetsCHS'),
			#QGtagger = cms.InputTag('AK5PFJetsCHSQGTagger'),
			QGtagger = cms.InputTag(''),
			Btagger  = cms.InputTag('ak5PFCHS'),
			PUJetID  = cms.InputTag('ak5PFCHSPuJetMva'),
			PUJetID_full = cms.InputTag('full'),
			),
		)
	#process.kappaTuple.Jets.minPt = cms.double(5.0)

	if not data:
		process.kappaTuple.active += cms.vstring('GenJets')
		process.kappaTuple.GenJets.whitelist = cms.vstring('ak5GenJets')
		process.kappaTuple.GenJets.rename = cms.vstring('ak => AK')


	# add kt6PFJets, needed for the PileupDensity
	from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
	process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True )
	process.kt6PFJets.Rho_EtaMax = cms.double(2.5)

	process.p *= (
		process.makePFJets *
		process.makePFJetsCHS *
		process.kt6PFJets *
	#	process.makeQGTagging *
		process.makeBTagging *
		process.makePUJetID
	)

	## ------------------------------------------------------------------------
	## MET
	# MET correction ----------------------------------------------------------
	process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi')
	process.p *= (
		process.type0PFMEtCorrection
	)
	#TODO check type 0 corrections
	process.kappaTuple.active += cms.vstring('MET')					   ## produce/save KappaPFMET
	process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_')
	#process.kappaTuple.MET.rename = cms.vstring('pfChMet => PFMETCHS', 'pfMet => PFMET')

	# 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.p *= (
		process.producePFMETCorrections * process.pfMETCHS
	)
	process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS")





	## ------------------------------------------------------------------------
	## And let it run
	process.p *= (
		process.kappaOut
	)

	print process.p

	return process
示例#4
0
def getBaseConfig(globaltag= 'START53_V15A::All', testfile=cms.untracked.vstring(""), maxevents=100, nickname = 'SM_VBFHToTauTau_M_90_powheg_pythia_8TeV', kappaTag = 'Kappa_1_0_0'):
	print "getBaseConfig", globaltag, testfile, maxevents, nickname, kappaTag
	from Kappa.Skimming.KSkimming_template_cfg import process
	process.source.fileNames      = testfile
	process.maxEvents.input	      = maxevents				## number of events to be processed (-1 = all in file)
	process.kappaTuple.outputFile = 'kappaTuple.root'			## name of output file
	process.kappaTuple.verbose    = cms.int32(0)				## verbosity level
	if not globaltag.lower() == 'auto' :
		process.GlobalTag.globaltag   = globaltag
		print "GT (overwritten):", process.GlobalTag.globaltag
	data = datasetsHelper.isData(nickname)
	centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname)
	isEmbedded = datasetsHelper.getIsEmbedded(nickname)
	process.p = cms.Path ( )
	## ------------------------------------------------------------------------
	# Configure Metadata describing the file
	process.kappaTuple.active										= cms.vstring('TreeInfo')
	process.kappaTuple.TreeInfo.parameters = cms.PSet(
		dataset						= cms.string(datasetsHelper.getDatasetName(nickname)),
		generator					= cms.string(datasetsHelper.getGenerator(nickname)),
		productionProcess			= cms.string(datasetsHelper.getProcess(nickname)),
		globalTag					= cms.string(globaltag),
		prodCampaignGlobalTag	= cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)),
		runPeriod					= cms.string(datasetsHelper.getRunPeriod(nickname)),
		kappaTag						= cms.string(kappaTag),
		isEmbedded					= cms.bool(isEmbedded),
		jetMultiplicity			= cms.int32(datasetsHelper.getJetMultiplicity(nickname)),
		centerOfMassEnergy		= cms.int32(centerOfMassEnergy),
		puScenario					= cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)),
		isData						= cms.bool(data)
		)


	## ------------------------------------------------------------------------
	# General configuration
	process.kappaTuple.active += cms.vstring('VertexSummary')	## save VertexSummary,
	process.kappaTuple.active += cms.vstring('BeamSpot')		## save Beamspot,
	process.kappaTuple.active += cms.vstring('TriggerObjects')

	if not isEmbedded:
		if data:
			process.kappaTuple.active+= cms.vstring('DataMetadata')		## produce Metadata for data,
		else:
			process.kappaTuple.active+= cms.vstring('GenMetadata')		## produce Metadata for MC,
			process.kappaTuple.active+= cms.vstring('GenParticles')		## save GenParticles,
			process.kappaTuple.active+= cms.vstring('GenTaus')				## save GenParticles,

	process.kappaTuple.Metadata.hltWhitelist = cms.vstring(			## HLT selection
		# https://github.com/cms-analysis/HiggsAnalysis-KITHiggsToTauTau/blob/master/data/triggerTables-2011-2012.txt
		# https://twiki.cern.ch/twiki/bin/viewauth/CMS/HiggsToTauTauWorkingSummer2013
		# can be tested at http://regexpal.com
		# e
		"^HLT_Ele[0-9]+_CaloIdVT(_CaloIsoT)?_TrkIdT(_TrkIsoT)?_v[0-9]+$",
		"^HLT_Ele[0-9]+_WP[0-9]+_v[0-9]+$",
		# m
		"^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_v[0-9]+$",
		# ee
		"^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?" +
			"_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL)?(_TrkIsoVL)?_v[0-9]+$",
		"^HLT_Ele[0-9]+_Ele[0-9]+_CaloId(L|T)_CaloIsoVL(_TrkIdVL_TrkIsoVL)?_v[0-9]+$",
		# mm
		"^HLT_(Double)?Mu[0-9]+(_(Mu|Jet)[0-9]+)?_v[0-9]+$",
		# em
		"^HLT_Mu[0-9]+_(Ele|Photon)[0-9]+_CaloId(L|T|VT)(_CaloIsoVL|_IsoT)?(_TrkIdVL_TrkIsoVL)?_v[0-9]+$",
		# et
		"^HLT_Ele[0-9]+_CaloIdVT(_Calo(IsoRho|Iso)T)?_TrkIdT(_TrkIsoT)?_(Loose|Medium|Tight)IsoPFTau[0-9]+_v[0-9]+$",
		"^HLT_Ele[0-9]+_eta2p1_WP[0-9]+(Rho|NoIso)_LooseIsoPFTau[0-9]+_v[0-9]+$",
		# mt
		"^HLT_(Iso)?Mu[0-9]+(_eta2p1)?_(Loose|Medium|Tight)IsoPFTau[0-9]+(_Trk[0-9]_eta2p1)?_v[0-9]+$",
		# tt
		"^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)_eta2p1_(Jet[0-9]+|Prong[0-9])?_v[0-9]+$",
		"^HLT_Double(Medium)?IsoPFTau[0-9]+_Trk(1|5)(_eta2p1)?_v[0-9]+$",
		# specials (possible generalization: Mu15, L1ETM20, Photon20, Ele8)
		"^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT)?(_TrkIsoVT)?_(SC|Ele)[0-9](_Mass[0-9]+)?_v[0-9]+$",
		"^HLT_Ele8_v[0-9]+$",
		"^HLT_IsoMu15(_eta2p1)?_L1ETM20_v[0-9]+$",
		"^HLT_Photon20_CaloIdVT_IsoT_Ele8_CaloIdL_CaloIsoVL_v[0-9]+$",
		# specials for tag and probe and em fakerate studies could be added if enough bits are ensured
		#"^HLT_Ele[0-9]+_CaloId(L|T|VT)_CaloIso(VL|T|VT)(_TrkIdT_TrkIso(T|VT))?_(SC|Ele)[0-9]+(_Mass[0-9]+)?_v[0-9]+$",
		#"^HLT_Mu[0-9]+_Photon[0-9]+_CaloIdVT_IsoT_v[0-9]+$",
		#"^HLT_Ele[0-9]+_CaloId(L|T)(_TrkIdVL)?_CaloIsoVL(_TrkIdVL_TrkIsoVL)?(_TrkIsoVL)?(_Jet[0-9]+|)?_v[0-9]+$",
		)

	process.kappaTuple.Metadata.hltBlacklist = cms.vstring(
		"HLT_Mu13_Mu8", # v21 gives errors for the trigger objects
		)

	process.kappaTuple.Metadata.hltFailToleranceList = cms.vstring(
		"hltDoubleL2Tau25eta2p1",
		"hltDoubleL2Tau30eta2p1",
		"hltDoubleL2Tau35eta2p1",
		"hltL2Tau25eta2p1",
		"hltL2Tau35eta2p1",
		"hltL2fL1sMu16Eta2p1L1f0L2Filtered16Q",
		"hltL1sL1DoubleEG137", # problematic in HLT_Mu17_Mu8_v21
		"hltL1sL1Mu3p5EG12ORL1MuOpenEG12", # problematic in HLT_Ele22_eta2p1_WP90Rho_LooseIsoPFTau20_v7
		"hltL3fL1sMu16Eta2p1L1f0L2f16QL3Filtered40Q", # problematic in HLT_Ele22_eta2p1_WP90Rho_LooseIsoPFTau20_v7
		"hltL2fL1sMu16L1f0L2Filtered16Q", # problematic in HLT_IsoMu17_eta2p1_LooseIsoPFTau20_v7
		"hltL1sL1SingleMu7", # problematic in HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_Jet30_v5
		"hltL1Mu3p5EG12L2Filtered12", # problematic in HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_Jet30_v5
		"hltTripleL2Jets30eta3", # problematic in HLT_DoubleMediumIsoPFTau30_Trk1_eta2p1_v4
		"hltDiMuonGlb17Glb8DzFiltered0p2", # problematic in HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v18
		"hltL1sL1DoubleMu10MuOpenORDoubleMu103p5", # 
		)

	## ------------------------------------------------------------------------
	# Configure PFCandidates and offline PV
	process.load("Kappa.Skimming.KPFCandidates_cff")
	process.kappaTuple.active += cms.vstring('PFCandidates')		## save PFCandidates for deltaBeta corrected 
	process.kappaTuple.PFCandidates.whitelist = cms.vstring(                ## isolation used for electrons and muons.
##		"pfNoPileUpChargedHadrons",    ## switch to pfAllChargedParticles
		"pfAllChargedParticles",       ## same as pfNoPileUpChargedHadrons +pf_electrons + pf_muons
		"pfNoPileUpNeutralHadrons",
		"pfNoPileUpPhotons",
		"pfPileUpChargedHadrons",
		)

	process.p *= ( process.makePFBRECO * process.makePFCandidatesForDeltaBeta )

	## ------------------------------------------------------------------------
	# Configure Muons
	process.load("Kappa.Skimming.KMuons_cff")
	process.kappaTuple.active += cms.vstring('Muons')	                ## produce/save KappaMuons
	process.p *= process.makeKappaMuons

	## ------------------------------------------------------------------------
	# Configure Electrons
	process.load("Kappa.Skimming.KElectrons_cff")
	process.kappaTuple.active += cms.vstring('Electrons')	                ## produce/save KappaElectrons,
	process.p *= process.makeKappaElectrons

	## ------------------------------------------------------------------------
	# Configure Taus
	process.load("Kappa.Skimming.KTaus_cff")
	process.kappaTuple.active += cms.vstring('Taus')	                ## produce/save KappaTaus
	process.kappaTuple.PFTaus.hpsPFTaus.binaryDiscrWhitelist = cms.vstring(
		"hpsPFTauDiscriminationByDecayModeFinding",
		"hpsPFTauDiscriminationByDecayModeFindingOldDMs",
		"hpsPFTauDiscriminationByDecayModeFindingNewDMs",
		#against electrons
		"hpsPFTauDiscriminationByLooseElectronRejection",
		"hpsPFTauDiscriminationByMediumElectronRejection",
		"hpsPFTauDiscriminationByTightElectronRejection",
		"hpsPFTauDiscriminationByMVA5VLooseElectronRejection",
		"hpsPFTauDiscriminationByMVA5LooseElectronRejection",
		"hpsPFTauDiscriminationByMVA5MediumElectronRejection",
		"hpsPFTauDiscriminationByMVA5TightElectronRejection",
		"hpsPFTauDiscriminationByMVA5VTightElectronRejection",
		#against muons
		"hpsPFTauDiscriminationByMVALooseMuonRejection",
		"hpsPFTauDiscriminationByMVAMediumMuonRejection",
		"hpsPFTauDiscriminationByMVATightMuonRejection",
		"hpsPFTauDiscriminationByLooseMuonRejection3",
		"hpsPFTauDiscriminationByTightMuonRejection3",
		#isolation
		"hpsPFTauDiscriminationByVLooseIsolation",
		
		"hpsPFTauDiscriminationByVLooseCombinedIsolationDBSumPtCorr",
		"hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr",
		"hpsPFTauDiscriminationByMediumCombinedIsolationDBSumPtCorr",
		"hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr",
		
		"hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits",
		"hpsPFTauDiscriminationByMediumCombinedIsolationDBSumPtCorr3Hits"
		"hpsPFTauDiscriminationByTightCombinedIsolationDBSumPtCorr3Hits",
		
		"hpsPFTauDiscriminationByVLooseIsolationMVA3oldDMwoLT",
		"hpsPFTauDiscriminationByLooseIsolationMVA3oldDMwoLT",
		"hpsPFTauDiscriminationByMediumIsolationMVA3oldDMwoLT",
		"hpsPFTauDiscriminationByTightIsolationMVA3oldDMwoLT",
		"hpsPFTauDiscriminationByVTightIsolationMVA3oldDMwoLT",
		"hpsPFTauDiscriminationByVVTightIsolationMVA3oldDMwoLT",
		
		"hpsPFTauDiscriminationByVLooseIsolationMVA3oldDMwLT",
		"hpsPFTauDiscriminationByLooseIsolationMVA3oldDMwLT",
		"hpsPFTauDiscriminationByMediumIsolationMVA3oldDMwLT",
		"hpsPFTauDiscriminationByTightIsolationMVA3oldDMwLT",
		"hpsPFTauDiscriminationByVTightIsolationMVA3oldDMwLT",
		"hpsPFTauDiscriminationByVVTightIsolationMVA3oldDMwLT",
		
		"hpsPFTauDiscriminationByVLooseIsolationMVA3newDMwoLT",
		"hpsPFTauDiscriminationByLooseIsolationMVA3newDMwoLT",
		"hpsPFTauDiscriminationByMediumIsolationMVA3newDMwoLT",
		"hpsPFTauDiscriminationByTightIsolationMVA3newDMwoLT",
		"hpsPFTauDiscriminationByVTightIsolationMVA3newDMwoLT",
		"hpsPFTauDiscriminationByVVTightIsolationMVA3newDMwoLT",
		
		"hpsPFTauDiscriminationByVLooseIsolationMVA3newDMwLT",
		"hpsPFTauDiscriminationByLooseIsolationMVA3newDMwLT",
		"hpsPFTauDiscriminationByMediumIsolationMVA3newDMwLT",
		"hpsPFTauDiscriminationByTightIsolationMVA3newDMwLT",
		"hpsPFTauDiscriminationByVTightIsolationMVA3newDMwLT",
		"hpsPFTauDiscriminationByVVTightIsolationMVA3newDMwLT",

		#old (and not in new)
		#"hpsPFTauDiscriminationByMVA3LooseElectronRejection", #not working
		#"hpsPFTauDiscriminationByMVA3MediumElectronRejection", #not working
		
		"hpsPFTauDiscriminationByLooseMuonRejection",
		"hpsPFTauDiscriminationByTightMuonRejection",
		)
	process.p *= process.makeKappaTaus

	## ------------------------------------------------------------------------
	## KappaPFTaggedJets
	process.load("Kappa.Skimming.KPFTaggedJets_cff")
	process.kappaTuple.active += cms.vstring('Jets')           ## produce KappaPFTaggedJets
	process.kappaTuple.PFTaggedJets = cms.PSet(
		process.kappaNoCut,
		process.kappaNoRegEx,
		taggers = cms.vstring(
			"QGlikelihood",
			"QGmlp",
			"TrackCountingHighEffBJetTags",
			"TrackCountingHighPurBJetTags", 
			"JetProbabilityBJetTags",
			"JetBProbabilityBJetTags", 
			"SoftElectronBJetTags",
			"SoftMuonBJetTags",
			"SoftMuonByIP3dBJetTags",
			"SoftMuonByPtBJetTags",
			"SimpleSecondaryVertexBJetTags", 
			"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.active += cms.vstring('JetArea')

	## ------------------------------------------------------------------------
	# Special settings for embedded samples
	# https://twiki.cern.ch/twiki/bin/viewauth/CMS/MuonTauReplacementWithPFlow
	if isEmbedded:
		process.load('RecoBTag/Configuration/RecoBTag_cff')
		process.load('RecoJets/JetAssociationProducers/ak5JTA_cff')
		process.ak5PFJetNewTracksAssociatorAtVertex.tracks = "tmfTracks"
		process.ak5PFCHSNewJetTracksAssociatorAtVertex.tracks = "tmfTracks"
		process.p *= process.btagging
		# disable overrideHLTCheck for embedded samples, since it triggers an Kappa error
		process.kappaTuple.Metadata.overrideHLTCheck = cms.untracked.bool(True)
		process.kappaTuple.active+= cms.vstring('DataMetadata')
		process.kappaTuple.active+= cms.vstring('GenParticles')		## save GenParticles,
		process.kappaTuple.active+= cms.vstring('GenTaus')				## save GenParticles,
		process.kappaTuple.GenParticles.genParticles.src = cms.InputTag("genParticles","","EmbeddedRECO")
		process.kappaTuple.Metadata.isEmbedded = cms.bool(True)

	# Let Jets run
	process.p *= (
		process.makeKappaTaus *
		process.makePFJets *
		process.makePFJetsCHS *
		process.makeQGTagging *
		process.makeBTagging *
		process.makePUJetID
	)

	## ------------------------------------------------------------------------
	## MET
	process.load("Kappa.Skimming.KMET_mssm_cff")
	process.kappaTuple.active += cms.vstring('BasicMET')                         ## produce/save KappaMET
	process.kappaTuple.active += cms.vstring('MET')                       ## produce/save KappaPFMET
	process.p *= process.makeKappaMET

	## ------------------------------------------------------------------------
	## And let it run
	process.p *= (
		process.kappaOut
	)
	## ------------------------------------------------------------------------
	## declare edm OutputModule (expects a path 'p'), uncommented if wanted

	#process.edmOut = cms.OutputModule(
	#	"PoolOutputModule",
	#	fileName = cms.untracked.string('dump.root'),				## name of output file
	#	SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('p') ),	## save only events passing the full path
	#	outputCommands = cms.untracked.vstring('drop *', 'keep *_*_*_KAPPA')	## save each edm object that has been produced by process KAPPA
	#	)
	#process.ep = cms.EndPath(process.edmOut)

	return process
示例#5
0
def getBaseConfig(
		globaltag,
		testfile,
		maxevents,
		nickname,
		outputfilename,
		kappaverbosity,
		channel='mm'
	):
	from Kappa.Skimming.KSkimming_template_cfg import process
	process.source.fileNames	  = testfile
	process.maxEvents.input		  = maxevents				## number of events to be processed (-1 = all in file)
	process.kappaTuple.outputFile = outputfilename			## name of output file
	process.kappaTuple.verbose	= cms.int32(kappaverbosity)				## verbosity level
	process.kappaTuple.profile	= cms.bool(False)
	if not globaltag.lower() == 'auto' :
		process.GlobalTag.globaltag = globaltag
	data = datasetsHelper.isData(nickname)
	centerOfMassEnergy = datasetsHelper.getCenterOfMassEnergy(nickname)
	process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) )

	# TODO is there a better way to do this?
	cmssw_version = os.environ["CMSSW_RELEASE_BASE"].split('/')[-1]
	cmssw_version_number = cmssw_version.split("CMSSW_")[1]

	## some infos
	print "\n--------CONFIGURATION----------"
	print "input:          ", testfile
	print "nickname:       ", nickname
	print "global tag:     ", process.GlobalTag.globaltag
	print "max events:     ", maxevents
	print "output filename:", outputfilename
	print "cmssw version:  ", cmssw_version
	print "channel:        ", channel
	print "-------------------------------\n"

	process.p = cms.Path ( )
	## ------------------------------------------------------------------------
	# Configure Metadata describing the file
	process.kappaTuple.active = cms.vstring('TreeInfo')
	process.kappaTuple.TreeInfo.parameters = cms.PSet(
		dataset						= cms.string(datasetsHelper.getDatasetName(nickname)),
		generator					= cms.string(datasetsHelper.getGenerator(nickname)),
		productionProcess			= cms.string(datasetsHelper.getProcess(nickname)),
		globalTag					= cms.string(globaltag),
		prodCampaignGlobalTag	= cms.string(datasetsHelper.getProductionCampaignGlobalTag(nickname, centerOfMassEnergy)),
		runPeriod					= cms.string(datasetsHelper.getRunPeriod(nickname)),
		jetMultiplicity			= cms.int32(datasetsHelper.getJetMultiplicity(nickname)),
		centerOfMassEnergy		= cms.int32(centerOfMassEnergy),
		puScenario					= cms.string(datasetsHelper.getPuScenario(nickname, centerOfMassEnergy)),
		isData						= cms.bool(data)
		)

	## ------------------------------------------------------------------------
	# General configuration

	process.kappaTuple.active += cms.vstring('VertexSummary')	## save VertexSummary,
	process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices')
	#process.kappaTuple.active += cms.vstring('BeamSpot')		## save Beamspot,
	#process.kappaTuple.active += cms.vstring('TriggerObjects')

	if data:
		process.kappaTuple.active+= cms.vstring('DataInfo')		## produce Metadata for data,
	else:
		process.kappaTuple.active+= cms.vstring('GenInfo')		## produce Metadata for MC,
		process.kappaTuple.active+= cms.vstring('GenParticles')

	if channel == 'mm':
		process.kappaTuple.Info.hltWhitelist = cms.vstring(			## HLT selection
			# can be tested at http://regexpal.com
			# 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:]]+)?$',
			)



	## ------------------------------------------------------------------------
	# Configure PFCandidates and offline PV
	# PFCandidates ------------------------------------------------------------
	#
	process.load('Kappa.Skimming.KPFCandidates_cff')
	if cmssw_version_number.startswith("7"):
		# 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.p *= (process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp)
	process.p *= (process.goodOfflinePrimaryVertices * process.pfPileUp * process.pfNoPileUp * process.makePFBRECO * process.makeKappaPFCandidates)

	## ------------------------------------------------------------------------
	if channel == 'mm':
		# Configure Muons
		process.load('Kappa.Skimming.KMuons_cff')
		process.kappaTuple.active += cms.vstring('Muons')					## produce/save KappaMuons
		process.kappaTuple.Muons.minPt = cms.double(8.0)

		process.goodMuons = cms.EDFilter('CandViewSelector',
			src = cms.InputTag('muons'),
			cut = cms.string("pt > 15.0 & abs(eta) < 8.0"),# & isGlobalMuon()"),
		)
		process.twoGoodMuons = cms.EDFilter('CandViewCountFilter',
			src = cms.InputTag('goodMuons'),
			minNumber = cms.uint32(2),
		)
		process.p *= (process.goodMuons * process.twoGoodMuons * process.makeKappaMuons)

		## for muon iso
		# https://github.com/ajgilbert/ICHiggsTauTau/blob/master/test/higgstautau_new_cfg.py#L430-L460
		process.load('CommonTools.ParticleFlow.Isolation.pfMuonIsolation_cff')
		process.muPFIsoValueCharged04PFIso = process.muPFIsoValueCharged04.clone()
		process.muPFIsoValueChargedAll04PFIso = process.muPFIsoValueChargedAll04.clone()
		process.muPFIsoValueGamma04PFIso = process.muPFIsoValueGamma04.clone()
		process.muPFIsoValueNeutral04PFIso = process.muPFIsoValueNeutral04.clone()
		process.muPFIsoValuePU04PFIso = process.muPFIsoValuePU04.clone()

		process.muonPFIsolationValuesSequence = cms.Sequence(
			process.muPFIsoValueCharged04PFIso+
			process.muPFIsoValueChargedAll04PFIso+
			process.muPFIsoValueGamma04PFIso+
			process.muPFIsoValueNeutral04PFIso+
			process.muPFIsoValuePU04PFIso
		)
		process.muPFIsoDepositCharged.src = cms.InputTag('muons')
		process.muPFIsoDepositChargedAll.src = cms.InputTag('muons')
		process.muPFIsoDepositNeutral.src = cms.InputTag('muons')
		process.muPFIsoDepositGamma.src = cms.InputTag('muons')
		process.muPFIsoDepositPU.src = cms.InputTag('muons')

	## ------------------------------------------------------------------------
	## KappaJets
	process.load('Kappa.Skimming.KJets{0}_cff'.format('_run2' if cmssw_version_number.startswith("7") else ''))
	process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
	process.kappaTuple.Jets = cms.PSet(
		process.kappaNoCut,
		process.kappaNoRegEx,
		taggers = cms.vstring(
	#		'QGlikelihood',
	#		'QGmlp',
			'TrackCountingHighEffBJetTags',
			'TrackCountingHighPurBJetTags',
			'JetProbabilityBJetTags',
			'JetBProbabilityBJetTags',
			'SoftElectronBJetTags',
			'SoftMuonBJetTags',
			'SoftMuonByIP3dBJetTags',
			'SoftMuonByPtBJetTags',
			#'SimpleSecondaryVertexBJetTags',
			'CombinedSecondaryVertexBJetTags',
			#'CombinedSecondaryVertexMVABJetTags',
			'puJetIDFullDiscriminant',
			'puJetIDFullLoose',
			'puJetIDFullMedium',
			'puJetIDFullTight',
			#'puJetIDCutbasedDiscriminant',
			#'puJetIDCutbasedLoose',
			#'puJetIDCutbasedMedium',
			#'puJetIDCutbasedTight'
			),
		AK5PFTaggedJets = cms.PSet(
			src = cms.InputTag('ak5PFJets'),
			#QGtagger = cms.InputTag('AK5PFJetsQGTagger'),
			QGtagger = cms.InputTag(''),
			Btagger  = cms.InputTag('ak5PF'),
			PUJetID  = cms.InputTag('ak5PFPuJetMva'),
			PUJetID_full = cms.InputTag('full'),
			),
		AK5PFTaggedJetsCHS = cms.PSet(
			src = cms.InputTag('ak5PFJetsCHS'),
			#QGtagger = cms.InputTag('AK5PFJetsCHSQGTagger'),
			QGtagger = cms.InputTag(''),
			Btagger  = cms.InputTag('ak5PFCHS'),
			PUJetID  = cms.InputTag('ak5PFCHSPuJetMva'),
			PUJetID_full = cms.InputTag('full'),
			),
		)
	process.kappaTuple.Jets.minPt = cms.double(5.0)

	if not data:
		process.kappaTuple.active += cms.vstring('GenJets')
		process.kappaTuple.GenJets.whitelist = cms.vstring('ak5GenJets')
		process.kappaTuple.GenJets.rename = cms.vstring('ak => AK')


	# add kt6PFJets, needed for the PileupDensity
	from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
	process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True )
	process.kt6PFJets.Rho_EtaMax = cms.double(2.5)

	process.p *= (
		process.makePFJets *
		process.makePFJetsCHS *
		process.kt6PFJets *
	#	process.makeQGTagging *
		process.makeBTagging *
		process.makePUJetID
	)

	## ------------------------------------------------------------------------
	## MET
	# MET correction ----------------------------------------------------------
	process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi')
	process.p *= (
		process.type0PFMEtCorrection
	)
	#TODO check type 0 corrections
	process.kappaTuple.active += cms.vstring('MET')					   ## produce/save KappaPFMET
	process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_')

	if cmssw_version_number.startswith("5"):
		# 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.p *= (
			process.producePFMETCorrections * process.pfMETCHS
		)
		process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS")

	## ------------------------------------------------------------------------
	## And let it run
	process.p *= (
		process.kappaOut
	)

	return process
示例#6
0
def getBaseConfig(
		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 = any([name in testfile[0] for name in 'SingleMu', 'DoubleMu', 'DoubleElectron', 'MuEG'])
	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")
	## MessageLogger
	process.load("FWCore.MessageLogger.MessageLogger_cfi")
	process.MessageLogger.default = cms.untracked.PSet(
		ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5))
		#suppressError = cms.untracked.vstring("electronIdMVAProducer")
	)
	process.MessageLogger.cerr.FwkReport.reportEvery = 50
	## Options and Output Report
	process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) )
	## Source
	process.source = cms.Source("PoolSource",
		fileNames = cms.untracked.vstring()
	)
	## Maximal number of Events
	process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
	## Geometry and Detector Conditions (needed for a few patTuple production steps)
	import Kappa.Skimming.tools as tools
	cmssw_version_number = tools.get_cmssw_version_number()
	process.load("Configuration.Geometry.GeometryIdeal_cff")
	process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
	from Configuration.AlCa.autoCond import autoCond
	process.GlobalTag.globaltag = cms.string(autoCond['startup'])
	# print the global tag until it is clear whether this auto global tag is fine
	print "GT from autoCond:", process.GlobalTag.globaltag
	process.load("Configuration.StandardSequences.MagneticField_cff")


	############################################################################
	#  KAPPA
	############################################################################
	process.load('Kappa.Producers.KTuple_cff')
	process.kappaTuple = cms.EDAnalyzer('KTuple',
		process.kappaTupleDefaultsBlock,
		outputFile = cms.string("kappaTuple.root"),
	)
	process.kappaTuple.active = cms.vstring()
	process.kappaTuple.outputFile = outputfilename			## name of output file
	process.kappaTuple.verbose	= 0				## verbosity level
	process.kappaTuple.profile	= cms.bool(False)
	process.kappaOut = cms.Sequence(process.kappaTuple)

	process.path = cms.Path()


	process.source.fileNames	  = testfile
	process.maxEvents.input		  = maxevents				## number of events to be processed (-1 = all in file)
	if not globaltag.lower() == 'auto' :
		process.GlobalTag.globaltag = globaltag
	data = datasetsHelper.isData(nickname)
	process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(False) )


	############################################################################
	#  Basic Objects
	############################################################################
	#process.kappaTuple.active += cms.vstring('VertexSummary')	## save VertexSummary,
	#process.kappaTuple.VertexSummary.whitelist = cms.vstring('goodOfflinePrimaryVertices')
	#process.kappaTuple.active += cms.vstring('BeamSpot')		## save Beamspot,
	#process.kappaTuple.active += cms.vstring('TriggerObjects')
	if data:
		process.kappaTuple.active+= cms.vstring('DataInfo')		## produce Metadata for data,
	else:
		process.kappaTuple.active+= cms.vstring('GenInfo')		## produce Metadata for MC,
		process.kappaTuple.active+= cms.vstring('GenParticles')

	#Trigger 
	trigger_dict = {
		'mtrigger': ['^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$'],
		'etrigger': ['HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*'],
		'emtrigger': ["HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*", "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*",]
	}
	channel_dict = {
		'ee': ['etrigger'],
		'mm': ['mtrigger'],
		'eemm': ['etrigger', 'mtrigger'],
		'em': ['emtrigger']
	}	
	process.kappaTuple.Info.hltWhitelist = cms.vstring("")
	for triggers in channel_dict[channel]:
		for trigger in trigger_dict[triggers]:
			process.kappaTuple.Info.hltWhitelist += cms.vstring(trigger)

	############################################################################
	#  Almost done ...
	############################################################################
	process.path *= (
		process.kappaOut
	)
	return process
示例#7
0
def getBaseConfig(
    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 = any([
            name in testfile[0]
            for name in 'SingleMu', 'DoubleMu', 'DoubleElectron', 'MuEG'
        ])
    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")
    ## MessageLogger
    process.load("FWCore.MessageLogger.MessageLogger_cfi")
    process.MessageLogger.default = cms.untracked.PSet(
        ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5))
        #suppressError = cms.untracked.vstring("electronIdMVAProducer")
    )
    process.MessageLogger.cerr.FwkReport.reportEvery = 50
    ## Options and Output Report
    process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(True))
    ## Source
    process.source = cms.Source("PoolSource",
                                fileNames=cms.untracked.vstring())
    ## Maximal number of Events
    process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(100))
    ## Geometry and Detector Conditions (needed for a few patTuple production steps)
    import Kappa.Skimming.tools as tools
    cmssw_version_number = tools.get_cmssw_version_number()
    process.load("Configuration.Geometry.GeometryIdeal_cff")
    process.load(
        "Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
    from Configuration.AlCa.autoCond import autoCond
    process.GlobalTag.globaltag = cms.string(autoCond['startup'])
    # print the global tag until it is clear whether this auto global tag is fine
    print "GT from autoCond:", process.GlobalTag.globaltag
    process.load("Configuration.StandardSequences.MagneticField_cff")

    ############################################################################
    #  KAPPA
    ############################################################################
    process.load('Kappa.Producers.KTuple_cff')
    process.kappaTuple = cms.EDAnalyzer(
        'KTuple',
        process.kappaTupleDefaultsBlock,
        outputFile=cms.string("kappaTuple.root"),
    )
    process.kappaTuple.active = cms.vstring()
    process.kappaTuple.outputFile = outputfilename  ## name of output file
    process.kappaTuple.verbose = 0  ## verbosity level
    process.kappaTuple.profile = cms.bool(False)
    process.kappaOut = cms.Sequence(process.kappaTuple)

    process.path = cms.Path()

    process.source.fileNames = testfile
    process.maxEvents.input = maxevents  ## number of events to be processed (-1 = all in file)
    if not globaltag.lower() == 'auto':
        process.GlobalTag.globaltag = globaltag
    data = datasetsHelper.isData(nickname)
    process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(False))

    ############################################################################
    #  Basic Objects
    ############################################################################
    process.kappaTuple.active += cms.vstring(
        'VertexSummary')  ## save VertexSummary,
    process.kappaTuple.VertexSummary.whitelist = cms.vstring(
        'goodOfflinePrimaryVertices')
    #process.kappaTuple.active += cms.vstring('BeamSpot')		## save Beamspot,
    #process.kappaTuple.active += cms.vstring('TriggerObjects')
    if data:
        process.kappaTuple.active += cms.vstring(
            'DataInfo')  ## produce Metadata for data,
    else:
        process.kappaTuple.active += cms.vstring(
            'GenInfo')  ## produce Metadata for MC,
        process.kappaTuple.active += cms.vstring('GenParticles')

    #Trigger
    trigger_dict = {
        'mtrigger':
        ['^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$'],
        'etrigger': [
            'HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*'
        ],
        'emtrigger': [
            "HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*",
            "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL.*",
        ]
    }
    channel_dict = {
        'ee': ['etrigger'],
        'mm': ['mtrigger'],
        'eemm': ['etrigger', 'mtrigger'],
        'em': ['emtrigger']
    }
    process.kappaTuple.Info.hltWhitelist = cms.vstring("")
    for triggers in channel_dict[channel]:
        for trigger in trigger_dict[triggers]:
            process.kappaTuple.Info.hltWhitelist += cms.vstring(trigger)

    ############################################################################
    #  PFCandidates
    ############################################################################
    process.load('Kappa.Skimming.KPFCandidates_cff')
    process.path *= (
        process.goodOfflinePrimaryVertices * process.pfPileUp *
        process.pfNoPileUp
        #* process.makePFBRECO
        #* process.makeKappaPFCandidates
    )

    if 'm' in channel:
        ############################################################################
        #  Muons
        ############################################################################

        process.kappaTuple.active += cms.vstring(
            'Muons')  ## produce/save KappaMuons
        process.kappaTuple.Muons.minPt = cms.double(8.0)

        ## Isodeposits for muons
        process.load(
            'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi'
        )
        process.load(
            'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi'
        )
        process.load(
            'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi'
        )

        process.pfmuIsoDepositPFCandidates = cms.EDProducer(
            "CandIsoDepositProducer",
            src=cms.InputTag("muons"),
            MultipleDepositsFlag=cms.bool(False),
            trackType=cms.string('candidate'),
            ExtractorPSet=cms.PSet(
                Diff_z=cms.double(99999.99),
                ComponentName=cms.string('CandViewExtractor'),
                DR_Max=cms.double(1.0),
                Diff_r=cms.double(99999.99),
                inputCandView=cms.InputTag("particleFlow"),
                DR_Veto=cms.double(1e-05),
                DepositLabel=cms.untracked.string('')))
        process.path *= (process.pfmuIsoDepositPFCandidates)
        process.goodMuons = cms.EDFilter(
            'CandViewSelector',
            src=cms.InputTag('muons'),
            cut=cms.string("pt > 15.0"),
        )
        process.oneGoodMuon = cms.EDFilter(
            'CandViewCountFilter',
            src=cms.InputTag('goodMuons'),
            minNumber=cms.uint32(1),
        )
        process.twoGoodMuons = cms.EDFilter(
            'CandViewCountFilter',
            src=cms.InputTag('goodMuons'),
            minNumber=cms.uint32(2),
        )
        if 'mm' in channel:
            process.path *= (process.goodMuons * process.twoGoodMuons)

    if 'e' in channel:
        ############################################################################
        #  Electrons
        ############################################################################

        #TODO Add Electron
        process.load('EgammaAnalysis.ElectronTools.electronIdMVAProducer_cfi')
        process.load('TrackingTools.TransientTrack.TransientTrackBuilder_cfi')
        process.load(
            'PhysicsTools.PatAlgos.producersLayer1.electronProducer_cfi')
        process.patElectrons.electronIDSources = cms.PSet(
            ## default cut based Id
            eidRobustLoose=cms.InputTag("eidRobustLoose"),
            eidRobustTight=cms.InputTag("eidRobustTight"),
            eidLoose=cms.InputTag("eidLoose"),
            eidTight=cms.InputTag("eidTight"),
            eidRobustHighEnergy=cms.InputTag("eidRobustHighEnergy"),
            ## MVA based Id
            idMvaTrigV0=cms.InputTag("mvaTrigV0"),
            idMvaTrigNoIPV0=cms.InputTag("mvaTrigNoIPV0"),
            idMvaNonTrigV0=cms.InputTag("mvaNonTrigV0"),
        )
        process.patElectrons.genParticleMatch = ""
        process.patElectrons.addGenMatch = False
        process.patElectrons.embedGenMatch = False
        process.patElectrons.embedGsfElectronCore = True
        process.patElectrons.embedGsfTrack = True
        process.patElectrons.embedSuperCluster = True
        process.patElectrons.embedPflowSuperCluster = True
        process.patElectrons.embedSeedCluster = True
        process.patElectrons.embedBasicClusters = True
        process.patElectrons.embedPreshowerClusters = True
        process.patElectrons.embedPflowBasicClusters = True
        process.patElectrons.embedPflowPreshowerClusters = True
        process.patElectrons.embedPFCandidate = True
        process.patElectrons.embedTrack = True
        process.patElectrons.embedRecHits = True

        process.patElectrons.embedHighLevelSelection.pvSrc = "goodOfflinePrimaryVertices"
        process.electronIdMVA = cms.Sequence(process.mvaTrigV0 +
                                             process.mvaTrigNoIPV0 +
                                             process.mvaNonTrigV0)
        process.makeKappaElectrons = cms.Sequence(process.electronIdMVA *
                                                  process.patElectrons)
        process.path *= (process.makeKappaElectrons)

        ## CALIBRATIONS
        # momentum corrections
        process.load(
            'EgammaAnalysis.ElectronTools.electronRegressionEnergyProducer_cfi'
        )
        process.eleRegressionEnergy.inputElectronsTag = cms.InputTag(
            'patElectrons')
        process.eleRegressionEnergy.inputCollectionType = cms.uint32(1)

        process.load("Configuration.StandardSequences.Services_cff")
        process.RandomNumberGeneratorService = cms.Service(
            "RandomNumberGeneratorService",
            calibratedPatElectrons=cms.PSet(
                initialSeed=cms.untracked.uint32(1),
                engineName=cms.untracked.string('TRandom3')),
        )

        # calibrate pat electrons
        process.load("EgammaAnalysis.ElectronTools.calibratedPatElectrons_cfi")
        if data:
            inputDataset = "22Jan2013ReReco"
        else:
            #inputDataset =  "Summer12_DR53X_HCP2012"
            inputDataset = "Summer12_LegacyPaper"
        print "Using electron calibration", inputDataset
        process.calibratedPatElectrons.inputDataset = cms.string(inputDataset)
        process.calibratedPatElectrons.isMC = cms.bool(not data)

        ## for cutbased ID
        from CommonTools.ParticleFlow.Tools.pfIsolation import setupPFElectronIso, setupPFMuonIso
        process.calibeleIsoSequence = setupPFElectronIso(
            process, 'calibratedPatElectrons', "PFIsoCal")
        process.eleIsoSequence = setupPFElectronIso(process, 'patElectrons')
        process.pfiso = cms.Sequence(process.pfParticleSelectionSequence +
                                     process.eleIsoSequence +
                                     process.calibeleIsoSequence)

        # rho for e isolation
        from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
        process.kt6PFJetsForIsolation = kt4PFJets.clone(rParam=0.6,
                                                        doRhoFastjet=True)
        process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5)

        process.path *= (process.eleRegressionEnergy *
                         process.calibratedPatElectrons * process.pfiso *
                         process.kt6PFJetsForIsolation)

        #add to Kappa
        process.kappaTuple.active += cms.vstring('Electrons')
        process.kappaTuple.Electrons = cms.PSet(
            process.kappaNoCut,
            process.kappaNoRegEx,
            ids=cms.vstring(),
            srcIds=cms.string("pat"),
            electrons=cms.PSet(
                src=cms.InputTag("patElectrons"),
                allConversions=cms.InputTag("allConversions"),
                offlineBeamSpot=cms.InputTag("offlineBeamSpot"),
                vertexcollection=cms.InputTag("goodOfflinePrimaryVertices"),
                isoValInputTags=cms.VInputTag(
                    cms.InputTag('elPFIsoValueChargedAll04PFIdPFIso'),
                    cms.InputTag('elPFIsoValueGamma04PFIdPFIso'),
                    cms.InputTag('elPFIsoValueNeutral04PFIdPFIso'),
                    cms.InputTag('elPFIsoValuePU04PFIdPFIso')),
                rhoIsoInputTag=cms.InputTag("kt6PFJetsForIsolation", "rho"),
            ),
        )
        process.kappaTuple.Electrons.correlectrons = process.kappaTuple.Electrons.electrons.clone(
            src=cms.InputTag("calibratedPatElectrons"),
            isoValInputTags=cms.VInputTag(
                cms.InputTag('elPFIsoValueChargedAll04PFIdPFIsoCal'),
                cms.InputTag('elPFIsoValueGamma04PFIdPFIsoCal'),
                cms.InputTag('elPFIsoValueNeutral04PFIdPFIsoCal'),
                cms.InputTag('elPFIsoValuePU04PFIdPFIsoCal')),
        )

        #process.kappaTuple.Electrons.ids = cms.vstring("mvaTrigV0", "mvaTrigNoIPV0", "mvaNonTrigV0")
        process.kappaTuple.Electrons.ids = cms.vstring('idMvaNonTrigV0',
                                                       'idMvaTrigNoIPV0',
                                                       'idMvaTrigV0')
        process.kappaTuple.Electrons.minPt = cms.double(8.0)

        ### Filter
        process.goodElectrons = cms.EDFilter(
            'CandViewSelector',
            src=cms.InputTag('calibratedPatElectrons'),
            cut=cms.string("pt > 15.0"),
        )
        process.oneGoodElectron = cms.EDFilter(
            'CandViewCountFilter',
            src=cms.InputTag('goodElectrons'),
            minNumber=cms.uint32(1),
        )
        process.twoGoodElectrons = cms.EDFilter(
            'CandViewCountFilter',
            src=cms.InputTag('goodElectrons'),
            minNumber=cms.uint32(2),
        )
        if 'ee' in channel:
            process.path *= (process.goodElectrons * process.twoGoodElectrons)

    if 'em' in channel:
        process.path *= (process.goodElectrons * process.oneGoodElectron *
                         process.goodMuons * process.oneGoodMuon)

    ############################################################################
    #  Jets
    ############################################################################

    process.load('RecoJets.JetProducers.ak5PFJets_cfi')
    process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices')
    process.ak5PFJetsCHS = process.ak5PFJets.clone(
        src=cms.InputTag('pfNoPileUp'))

    process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity')
    process.kappaTuple.Jets = cms.PSet(
        process.kappaNoCut,
        process.kappaNoRegEx,
        taggers=cms.vstring(),
        ak5PFJets=cms.PSet(
            src=cms.InputTag('ak5PFJets'),
            QGtagger=cms.InputTag('AK5PFJetsQGTagger'),
            Btagger=cms.InputTag('ak5PF'),
            PUJetID=cms.InputTag('ak5PFPuJetMva'),
            PUJetID_full=cms.InputTag('full'),
        ),
        ak5PFJetsCHS=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.Jets.minPt = cms.double(5.0)

    if not data:
        process.load('RecoJets.JetProducers.ak5GenJets_cfi')
        process.path *= (process.genParticlesForJetsNoNu *
                         process.ak5GenJetsNoNu)
        process.kappaTuple.active += cms.vstring('LV')
        process.kappaTuple.LV.rename = cms.vstring('ak => AK')
        process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu')

    # add kt6PFJets, needed for the PileupDensity
    from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets
    process.kt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True)
    process.kt6PFJets.Rho_EtaMax = cms.double(2.5)

    process.path *= (process.ak5PFJets * process.ak5PFJetsCHS *
                     process.kt6PFJets)

    ############################################################################
    #  MET
    ############################################################################
    # MET correction ----------------------------------------------------------
    process.load('JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi')
    process.path *= (process.type0PFMEtCorrection)
    #TODO check type 0 corrections
    process.kappaTuple.active += cms.vstring('MET')  ## produce/save KappaPFMET
    process.kappaTuple.MET.whitelist = cms.vstring('pfChMet', '_pfMet_')

    if cmssw_version_number.startswith("5"):
        # 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.path *= (process.producePFMETCorrections * process.pfMETCHS)
        process.kappaTuple.MET.whitelist += cms.vstring("pfMETCHS")

    ############################################################################
    #  Almost done ...
    ############################################################################
    process.path *= (process.kappaOut)
    return process