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',
'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)
# 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(
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
# 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')
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 ----------------------------------------------------------
# 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
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(
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")
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
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) )
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
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',
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
# 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
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")))
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",
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