def addJetMET(process,theJetNames,jetMetCorrections,mcVersion): #-- Extra Jet/MET collections ------------------------------------------------- # Add a few jet collections... for jetName in theJetNames: addSUSYJetCollection(process,jetMetCorrections,jetName,mcVersion) #-- Tune contents of jet collections ----------------------------------------- theJetNames.append('') for jetName in theJetNames: module = getattr(process,'patJets'+jetName) module.addTagInfos = False # Remove tag infos module.embedGenJetMatch = False # Only keep reference, since we anyway keep the genJet collections #module.embedCaloTowers = True # To drop calo towers theJetNames.pop() # Add tcMET from PhysicsTools.PatAlgos.tools.metTools import addTcMET #, addPfMET addTcMET(process,'TC') #addPfMET(process,'PF') #is in PF2PAT # Rename default jet collection for uniformity process.cleanPatJetsAK5Calo = process.cleanPatJets process.patMETsAK5Calo = process.patMETs #process.patMHTsAK5Calo = process.patMHTs addTypeIIMet(process) # Modify subsequent modules process.patHemispheres.patJets = process.cleanPatJetsAK5Calo.label() process.countPatJets.src = process.cleanPatJetsAK5Calo.label() # Add MHT (inserted until officially suported) #from PhysicsTools.PatAlgos.producersLayer1.mhtProducer_cff import makePatMHTs, patMHTs #process.countPatCandidates.replace(process.countPatJets, process.countPatJets + process.makePatMHTs) #process.patMHTs.jetTag = 'patJets' #process.patMHTs.electronTag = 'patElectrons' #process.patMHTs.muonTag = 'patMuons' #process.patMHTs.tauTag = 'patTaus' #process.patMHTs.photonTag = 'patPhotons' # Modify counters' input process.patCandidateSummary.candidates.remove(cms.InputTag('patMETs')) process.patCandidateSummary.candidates.append(cms.InputTag('patMETsAK5Calo')) process.patCandidateSummary.candidates.append(cms.InputTag('patMHTsAK5Calo')) process.cleanPatCandidateSummary.candidates.remove(cms.InputTag('cleanPatJets')) process.cleanPatCandidateSummary.candidates.append(cms.InputTag('cleanPatJetsAK5Calo')) # Add new jet collections to counters (MET done automatically) for jets in theJetNames: process.patCandidateSummary.candidates.append(cms.InputTag('patJets'+jets)) process.selectedPatCandidateSummary.candidates.append(cms.InputTag('selectedPatJets'+jets)) process.cleanPatCandidateSummary.candidates.append(cms.InputTag('cleanPatJets'+jets))
def addJetMET(process, theJetNames, jetMetCorrections, mcVersion): #-- Extra Jet/MET collections ------------------------------------------------- # Add a few jet collections... for jetName in theJetNames: addSUSYJetCollection(process, jetMetCorrections, jetName, mcVersion) #-- Tune contents of jet collections ----------------------------------------- theJetNames.append('') for jetName in theJetNames: module = getattr(process, 'patJets' + jetName) module.addTagInfos = False # Remove tag infos module.embedGenJetMatch = False # Only keep reference, since we anyway keep the genJet collections #module.embedCaloTowers = True # To drop calo towers theJetNames.pop() # Add tcMET from PhysicsTools.PatAlgos.tools.metTools import addTcMET #, addPfMET addTcMET(process, 'TC') #addPfMET(process,'PF') #is in PF2PAT # Rename default jet collection for uniformity process.cleanPatJetsAK5Calo = process.cleanPatJets process.patMETsAK5Calo = process.patMETs # TODO: fix type2 MET in 52X #addTypeIIMet(process) # Modify subsequent modules process.patHemispheres.patJets = process.cleanPatJetsAK5Calo.label() process.countPatJets.src = process.cleanPatJetsAK5Calo.label() # Modify counters' input process.patCandidateSummary.candidates.remove(cms.InputTag('patMETs')) process.patCandidateSummary.candidates.append( cms.InputTag('patMETsAK5Calo')) process.patCandidateSummary.candidates.append( cms.InputTag('patMHTsAK5Calo')) process.cleanPatCandidateSummary.candidates.remove( cms.InputTag('cleanPatJets')) process.cleanPatCandidateSummary.candidates.append( cms.InputTag('cleanPatJetsAK5Calo')) # Add new jet collections to counters (MET done automatically) for jets in theJetNames: process.patCandidateSummary.candidates.append( cms.InputTag('patJets' + jets)) process.selectedPatCandidateSummary.candidates.append( cms.InputTag('selectedPatJets' + jets)) process.cleanPatCandidateSummary.candidates.append( cms.InputTag('cleanPatJets' + jets))
def addPlainPat(process, dataVersion, doPatTrigger=True, doPatTaus=True, doHChTauDiscriminators=True, doPatMET=True, doPatElectronID=True, doPatCalo=True, doBTagging=True, doPatMuonPFIsolation=False, doPatTauIsoDeposits=False, doTauHLTMatching=True, matchingTauTrigger=None, matchingJetTrigger=None, includePFCands=False): out = None outdict = process.outputModules_() if outdict.has_key("out"): out = outdict["out"] outputCommands = [] # Tau Discriminators process.hplusPatTauSequence = cms.Sequence() if doPatTaus: process.hplusPatTauSequence = addPFTausAndDiscriminators(process, dataVersion, doPatCalo, doHChTauDiscriminators) # PAT Layer 0+1 process.load("PhysicsTools.PatAlgos.patSequences_cff") sequence = cms.Sequence( process.hplusPatTauSequence ) # Restrict input to AOD restrictInputToAOD(process, ["All"]) # Remove MC stuff if we have collision data (has to be done any add*Collection!) # This also adds the L2L3Residual JEC correction to the process.patJetCorrFactors if dataVersion.isData(): runOnData(process, outputInProcess = out!=None) # Jets # Produce kt6 rho for L1Fastjet process.load('RecoJets.Configuration.RecoPFJets_cff') process.kt6PFJets.doRhoFastjet = True process.ak5PFJets.doAreaFastjet = True process.ak5PFJetSequence = cms.Sequence(process.kt6PFJets * process.ak5PFJets) # Set defaults process.patJets.jetSource = cms.InputTag("ak5CaloJets") process.patJets.trackAssociationSource = cms.InputTag("ak5JetTracksAssociatorAtVertex") setPatJetDefaults(process.patJets) setPatJetCorrDefaults(process.patJetCorrFactors, dataVersion) process.patDefaultSequence.replace(process.patJetCorrFactors, process.ak5PFJetSequence*process.patJetCorrFactors) process.selectedPatJets.cut = jetPreSelection # The default JEC to be embedded to pat::Jets are L2Relative, # L3Absolute, L5Flavor and L7Parton. The default JEC to be applied # is L2L3Residual, or L3Absolute, or Uncorrected (in this order). if doPatCalo: # Add JPT jets # FIXME: Disabled for now until the JEC for JPT works again (with the latest JEC) # addJetCollection(process, cms.InputTag('JetPlusTrackZSPCorJetAntiKt5'), # 'AK5', 'JPT', # doJTA = True, # doBTagging = doBTagging, # jetCorrLabel = ('AK5JPT', process.patJetCorrFactors.levels), # doType1MET = False, # doL1Cleaning = False, # doL1Counters = True, # genJetCollection = cms.InputTag("ak5GenJets"), # doJetID = True # ) # Add PF jets addJetCollection(process, cms.InputTag('ak5PFJets'), 'AK5', 'PF', doJTA = True, doBTagging = doBTagging, jetCorrLabel = ('AK5PF', process.patJetCorrFactors.levels), doType1MET = False, doL1Cleaning = False, doL1Counters = True, genJetCollection = cms.InputTag("ak5GenJets"), doJetID = True ) setPatJetCorrDefaults(process.patJetCorrFactorsAK5PF, dataVersion, True) else: setPatJetCorrDefaults(process.patJetCorrFactors, dataVersion, True) switchJetCollection(process, cms.InputTag('ak5PFJets'), doJTA = True, doBTagging = doBTagging, jetCorrLabel = ('AK5PF', process.patJetCorrFactors.levels), doType1MET = False, genJetCollection = cms.InputTag("ak5GenJets"), doJetID = True ) outputCommands.extend([ "keep *_selectedPatJets_*_*", "keep *_selectedPatJetsAK5JPT_*_*", "keep *_selectedPatJetsAK5PF_*_*", 'drop *_selectedPatJets_pfCandidates_*', ## drop for default patJets which are CaloJets 'drop *_*PF_caloTowers_*', 'drop *_*JPT_pfCandidates_*', 'drop *_*Calo_pfCandidates_*', ]) # Taus # Set default PATTauProducer options here, they should be # replicated to all added tau collections (and the first call to # addTauCollection should replace the default producer modified # here) setPatTauDefaults(process.patTaus, includePFCands) process.selectedPatTaus.cut = tauPreSelection if doPatTaus: if doHChTauDiscriminators: addHChTauDiscriminators() # Don't enable TCTau nor shrinking cone tau # if doPatCalo: # tauTools.addTauCollection(process,cms.InputTag('caloRecoTauProducer'), # algoLabel = "caloReco", # typeLabel = "Tau") # setPatTauDefaults(process.patTausCaloRecoTau, True) # process.patTausCaloRecoTau.embedLeadTrack = not includePFCands # process.patTausCaloRecoTau.embedLeadPFChargedHadrCand = False # tauTools.addTauCollection(process,cms.InputTag('shrinkingConePFTauProducer'), # algoLabel = "shrinkingCone", # typeLabel = "PFTau") # # Disable isoDeposits like this until the problem with doPFIsoDeposits is fixed # if not doPatTauIsoDeposits: # process.patTausShrinkingConePFTau.isoDeposits = cms.PSet() tauTools.addTauCollection(process,cms.InputTag('hpsPFTauProducer'), algoLabel = "hps", typeLabel = "PFTau") if not doPatTauIsoDeposits: process.patTausHpsPFTau.isoDeposits = cms.PSet() addPatTauIsolationEmbedding(process, process.patDefaultSequence, "HpsPFTau") tauTools.addTauCollection(process,cms.InputTag('hpsTancTaus'), algoLabel = "hpsTanc", typeLabel = "PFTau") if not doPatTauIsoDeposits: process.patTausHpsTancPFTau.isoDeposits = cms.PSet() # Disable discriminators which are not in AOD # del process.patTausHpsTancPFTau.tauIDSources.againstCaloMuon # del process.patTausHpsTancPFTau.tauIDSources.byHPSvloose addPatTauIsolationEmbedding(process, process.patDefaultSequence, "HpsTancPFTau") # Add visible taus if dataVersion.isMC(): process.VisibleTaus = cms.EDProducer("HLTTauMCProducer", GenParticles = cms.untracked.InputTag("genParticles"), ptMinTau = cms.untracked.double(3), ptMinMuon = cms.untracked.double(3), ptMinElectron = cms.untracked.double(3), BosonID = cms.untracked.vint32(23), EtaMax = cms.untracked.double(2.5) ) sequence *= process.VisibleTaus outputCommands.append("keep *_VisibleTaus_*_*") else: # FIXME: this is broken at the moment #removeSpecificPATObjects(process, ["Taus"], outputInProcess= out != None) process.patDefaultSequence.remove(process.patTaus) process.patDefaultSequence.remove(process.selectedPatTaus) outputCommands.extend(["drop *_selectedPatTaus_*_*", # "keep *_selectedPatTausCaloRecoTau_*_*", # "keep *_selectedPatTausShrinkingConePFTau_*_*", "keep *_selectedPatTausHpsPFTau_*_*", "keep *_selectedPatTausHpsTancPFTau_*_*", #"keep *_cleanPatTaus_*_*", #"drop *_cleanPatTaus_*_*", #"keep *_patTaus*_*_*", #"keep *_patPFTauProducerFixedCone_*_*", # keep these until the embedding problem with pat::Tau is fixed #"keep recoPFCandidates_particleFlow_*_*", #"keep recoTracks_generalTracks_*_*" ]) # MET addPfMET(process, 'PF') if doPatCalo: addTcMET(process, 'TC') else: # FIXME: This is broken at the moment... #removeSpecificPATObjects(process, ["METs"], outputInProcess= out != None) #process.patDefaultSequen process.patDefaultSequence.remove(process.patMETCorrections) process.patDefaultSequence.remove(process.patMETs) del process.patMETCorrections del process.patMETs outputCommands.extend([ "keep *_patMETs_*_*", "keep *_patMETsTC_*_*", "keep *_patMETsPF_*_*", "keep *_genMetTrue_*_*", ]) # Muons setPatLeptonDefaults(process.patMuons, includePFCands) if doPatMuonPFIsolation: addPFMuonIsolation(process, process.patMuons, sequence, verbose=True) outputCommands.extend([ "keep *_selectedPatMuons_*_*" ]) # Electrons # In order to calculate the transverse impact parameter w.r.t. # beam spot instead of primary vertex, see setPatLeptonDefaults(process.patMuons, includePFCands) # Electron ID, see # https://twiki.cern.ch/twiki/bin/view/CMS/SimpleCutBasedEleID if doPatElectronID: addPatElectronID(process, process.patElectrons, process.patDefaultSequence) outputCommands.extend([ "keep *_selectedPatElectrons_*_*" ]) # Photons # process.patPhotons.embedGenMatch = False outputCommands.extend([ "keep *_selectedPatPhotons_*_*" ]) # Trigger if doPatTrigger: outMod= '' if out != None: outMod = 'out' switchOnTrigger(process, hltProcess=dataVersion.getTriggerProcess(), outputModule=outMod) process.patTrigger.addL1Algos = cms.bool(True) process.patTrigger.l1ExtraMu = cms.InputTag("l1extraParticles") process.patTrigger.l1ExtraCenJet = cms.InputTag("l1extraParticles", "Central") process.patTrigger.l1ExtraTauJet = cms.InputTag("l1extraParticles", "Tau") process.patTrigger.l1ExtraForJet = cms.InputTag("l1extraParticles", "Forward") process.patTrigger.l1ExtraETM = cms.InputTag("l1extraParticles", "MET") process.patTrigger.l1ExtraHTM = cms.InputTag("l1extraParticles", "MHT") # Keep StandAlone trigger objects for enabling trigger # matching in the analysis phase with PAT tools outputCommands.extend(patTriggerStandAloneEventContent) # Remove cleaning step and set the event content if out == None: myRemoveCleaning(process) else: backup = out.outputCommands[:] myRemoveCleaning(process) # backup_pat = out.outputCommands[:] # Remove PFParticles here, they are explicitly included when needed # backup_pat = filter(lambda n: "selectedPatPFParticles" not in n, backup_pat) out.outputCommands = backup # out.outputCommands.extend(backup_pat) out.outputCommands.extend(outputCommands) # Build sequence sequence *= process.patDefaultSequence # Tau+HLT matching if doTauHLTMatching: sequence *= HChTriggerMatching.addTauHLTMatching(process, matchingTauTrigger, matchingJetTrigger) return sequence
, cms.InputTag( jetAlgo.lower() + pfSuffix + 'Jets' ) , jetAlgo , pfSuffix , doJTA = True , doBTagging = True , jetCorrLabel = ( jecSetAddPF, jecLevels ) , doType1MET = False , doL1Cleaning = False , doL1Counters = True , genJetCollection = cms.InputTag( jetAlgo.lower() + 'GenJets' ) , doJetID = True ) addPfMET( process , jetAlgo + pfSuffix ) addTcMET(process, jetAlgo+'TC') process.patMETsAK5Calo = process.patMETs removeSpecificPATObjects( process , names = [ 'Taus' ] # , names = [ 'Photons', 'Taus' ] ) # includes 'removeCleaning' if runPF2PAT: if not runOnMC: runOnData( process , names = [ 'PFAll' ] , postfix = postfix ) removeSpecificPATObjects( process , names = [ 'Photons', 'Taus' ] , postfix = postfix ) # includes 'removeCleaning'
# # Make one path for each (a very small storage burden) so they can be # accessed separately in the TriggerResults object; the "All" path # isn't necessary because it could be emulated using the AND of all of # the separate ones, but it's nice for convenience. process.load("SUSYBSMAnalysis.Zprime2muAnalysis.goodData_cff") process.goodDataHLTPhysicsDeclared = cms.Path(process.hltPhysicsDeclared) process.goodDataPrimaryVertexFilter = cms.Path(process.primaryVertexFilter) process.goodDataNoScraping = cms.Path(process.noscraping) process.goodDataAll = cms.Path(process.hltPhysicsDeclared * process.primaryVertexFilter * process.noscraping) # Add MET and jets. Configuration to be revisited later. from PhysicsTools.PatAlgos.tools.metTools import addPfMET, addTcMET addPfMET(process) addTcMET(process) from PhysicsTools.PatAlgos.tools.jetTools import switchJetCollection switchJetCollection( process, cms.InputTag("ak5PFJets"), doJTA=True, doBTagging=True, jetCorrLabel=("AK5PF", ["L1FastJet", "L2Relative", "L3Absolute"]), doType1MET=False, genJetCollection=cms.InputTag("ak5GenJets"), doJetID=False, jetIdLabel="ak5", )
addJetCollection( process, cms.InputTag(jetAlgo.lower() + pfSuffix + "Jets"), jetAlgo, pfSuffix, doJTA=True, doBTagging=True, jetCorrLabel=(jecSetAddPF, jecLevels), doType1MET=False, doL1Cleaning=False, doL1Counters=True, genJetCollection=cms.InputTag(jetAlgo.lower() + "GenJets"), doJetID=True, ) addPfMET(process, jetAlgo + pfSuffix) addTcMET(process, jetAlgo + "TC") process.patMETsAK5Calo = process.patMETs removeSpecificPATObjects( process, names=["Taus"] # , names = [ 'Photons', 'Taus' ] ) # includes 'removeCleaning' if runPF2PAT: if not runOnMC: runOnData(process, names=["PFAll"], postfix=postfix) removeSpecificPATObjects(process, names=["Photons", "Taus"], postfix=postfix) # includes 'removeCleaning' # JetCorrFactorsProducer configuration has to be fixed in standard work flow after a call to 'runOnData()': if runStandardPAT: process.patJetCorrFactors.payload = jecSet
# filter later, for example.) # # Make one path for each (a very small storage burden) so they can be # accessed separately in the TriggerResults object; the "All" path # isn't necessary because it could be emulated using the AND of all of # the separate ones, but it's nice for convenience. process.load('SUSYBSMAnalysis.Zprime2muAnalysis.goodData_cff') process.goodDataHLTPhysicsDeclared = cms.Path(process.hltPhysicsDeclared) process.goodDataPrimaryVertexFilter = cms.Path(process.primaryVertexFilter) process.goodDataNoScraping = cms.Path(process.noscraping) process.goodDataAll = cms.Path(process.hltPhysicsDeclared * process.primaryVertexFilter * process.noscraping) # Add MET and jets. Configuration to be revisited later. from PhysicsTools.PatAlgos.tools.metTools import addPfMET, addTcMET addPfMET(process) addTcMET(process) from PhysicsTools.PatAlgos.tools.jetTools import switchJetCollection switchJetCollection(process, cms.InputTag('ak5PFJets'), doJTA = True, doBTagging = True, jetCorrLabel = ('AK5PF', ['L1FastJet', 'L2Relative', 'L3Absolute']), doType1MET = False, genJetCollection = cms.InputTag("ak5GenJets"), doJetID = False, jetIdLabel = "ak5" ) # Make a collection of muons with our final selection applied so that # the muon-jet cleaning will use only muons passing those cuts. This