def initMET(process, isData): """ Parts of MET re-reconstruction that are independent of PF candidate collection. """ sequence = cms.Sequence() addattr = AddAttr(process, sequence) addattr( 'caloMet', cms.EDProducer("RecoMETExtractor", metSource=cms.InputTag( "slimmedMETs", processName=cms.InputTag.skipCurrentProcess()), correctionLevel=cms.string('rawCalo'))) if not isData: addattr( 'genMetTrue', cms.EDProducer("GenMETExtractor", metSource=cms.InputTag( "slimmedMETs", processName=cms.InputTag.skipCurrentProcess()))) addattr( 'patCaloMet', patMETs.clone(metSource='caloMet', addMuonCorrections=False, addGenMET=False)) return sequence
def _addPATMEtProducer(self, process, metUncertaintySequence, metCollection, patMEtCollection, collectionsToKeep, postfix): module = patMETs.clone(metSource=cms.InputTag(metCollection), addMuonCorrections=cms.bool(False), genMETSource=cms.InputTag('genMetTrue')) patMEtCollectionName = patMEtCollection + postfix setattr(process, patMEtCollectionName, module) metUncertaintySequence += module collectionsToKeep.append(patMEtCollectionName)
def _addPATMEtProducer(self, process, metUncertaintySequence, metCollection, patMEtCollection, collectionsToKeep, postfix): module = patMETs.clone( metSource = cms.InputTag(metCollection), addMuonCorrections = cms.bool(False), genMETSource = cms.InputTag('genMetTrue') ) patMEtCollectionName = patMEtCollection+postfix setattr(process, patMEtCollectionName, module) metUncertaintySequence += module collectionsToKeep.append(patMEtCollectionName)
def toolCode(self, process): """ Tool code implementation """ ## initialize parameters labelName=self._parameters['labelName'].value metSource=self._parameters['metSource'].value ## do necessary imports from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs ## add module to the process setattr(process, labelName, patMETs.clone(metSource = metSource, addMuonCorrections=False)) ## add module to output if hasattr(process, "out"): process.out.outputCommands+=["keep *_{LABEL_NAME}_*_*".format(LABEL_NAME=labelName)]
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") ) )
"PATElectronSelector", src=cms.InputTag("cleanPatElectrons"), cut=e_cut, filter=cms.bool(False) ) # Modify taus isotaus = cms.EDFilter( "PATTauSelector", src=cms.InputTag("selectedPatTaus"), cut=cms.string( 'pt > 19 && abs(eta) < 2.3 && ' 'tauID("decayModeFinding") && ' 'tauID("byLooseCombinedIsolationDeltaBetaCorr3Hits") > 0.5 && ' 'tauID("againstElectronLoose") && tauID("againstMuonLoose2")'), filter=cms.bool(False) ) patMEtMVA = patMETs.clone(metSource=cms.InputTag("pfMEtMVA")) patMEtMVA.addMuonCorrections = False pfMEtMVA.verbosity = 0 print "Built MVA MET sequence" pfMEtMVAsequence = cms.Sequence( calibratedAK5PFJetsForPFMEtMVA * isomuons * isoelectrons * isotaus * pfMEtMVA * patMEtMVA ) except ImportError: import sys sys.stderr.write( "Warning: MVA MET dependencies not installed => MVA MET disabled.\n") pfMEtMVAsequence = cms.Sequence()
process.load("JetMETCorrections.Type1MET.correctionTermsPfMetType0PFCandidate_cff") process.load("JetMETCorrections.Type1MET.correctionTermsPfMetType0RecoTrack_cff") process.load("JetMETCorrections.Type1MET.correctionTermsPfMetShiftXY_cff") if data: process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_data else: process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_mc process.load("JetMETCorrections.Type1MET.correctedMet_cff") from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPfMetT0pcT1Txy = patMETs.clone( metSource = cms.InputTag('pfMetT0pcT1Txy'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) # Let it run if(data): process.p = cms.Path( process.scrapingVeto + process.metFilters + # process.type0PFMEtCorrection + # process.pfMEtSysShiftCorrSequence + process.correctionTermsPfMetType1Type2 + process.correctionTermsPfMetType0RecoTrack + process.correctionTermsPfMetType0PFCandidate +
import FWCore.ParameterSet.Config as cms # load modules for producing Type 1 / Type 1 + 2 corrections for reco::PFMET objects from JetMETCorrections.Type1MET.pfMETCorrections_cff import * #-------------------------------------------------------------------------------- # produce "raw" (uncorrected) pat::MET of PF-type from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs patPFMet = patMETs.clone( metSource = cms.InputTag('pfMet'), addMuonCorrections = cms.bool(False), genMETSource = cms.InputTag('genMetTrue') ) #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- # select collection of pat::Jets entering Type 1 + 2 MET corrections # selectedPatJetsForMETtype1p2Corr = cms.EDFilter("PATJetSelector", src = cms.InputTag('patJets'), cut = cms.string('abs(eta) < 9.9'), filter = cms.bool(False) ) selectedPatJetsForMETtype2Corr = cms.EDFilter("PATJetSelector", src = cms.InputTag('patJets'), cut = cms.string('abs(eta) > 9.9'), filter = cms.bool(False) ) #--------------------------------------------------------------------------------
def configurePatTuple(process, isMC=True, **kwargs): ''' Core function for PATTuple production ''' #fix argparser output isMC = bool(isMC) ######################## ## ## ## PATTuple content ## ## ## ######################## # Stuff we always keep output_commands = [ '*_addPileupInfo_*_*', 'edmMergeableCounter_*_*_*', '*_lumiProducer_*_*', '*_particleFlow_*_*', '*_offlineBeamSpot_*_*', '*_generalTracks_*_*', '*_electronGsfTracks_*_*', '*_gsfElectrons_*_*', '*_gsfElectronCores_*_*', '*_offlinePrimaryVertices*_*_*', '*_ak5GenJets_*_*', '*_hltTriggerSummaryAOD_*_*', 'edmTriggerResults_TriggerResults_*_%s' % process.name_(), '*_MEtoEDMConverter*_*_%s' % process.name_(), 'LHEEventProduct_*_*_*', 'GenEventInfoProduct_generator_*_*', '*_kt6PFJetsForRhoComputationVoronoi_rho_*', '*_kt6PFJetsForIso_rho_*', '*_kt6PFJets_rho_*', '*_kt6PFJetsHZGPho_rho_*', '*_kt6PFJetsCentralHZGEle_rho_*', '*_kt6PFJetsCentralHZGMu_rho_*', '*_kt6PFJetsCentralNeutralHZGMu_rho_*', '*_kt6PFJetsCentral_rho_*', '*_kt6PFJetsCentralNeutral_rho_*', # for zz muons '*_photonCore_*_*', '*_boostedFsrPhotons_*_*', # for Zmumu -> embedded samples # https://twiki.cern.ch/twiki/bin/view/CMS/MuonTauReplacementRecHit '*_generalTracksORG_*_EmbeddedRECO', '*_electronGsfTracksORG_*_EmbeddedRECO', 'double_TauSpinnerReco_TauSpinnerWT_EmbeddedSPIN', 'double_ZmumuEvtSelEffCorrWeightProducer_weight_EmbeddedRECO', 'double_muonRadiationCorrWeightProducer_weight_EmbeddedRECO', 'GenFilterInfo_generator_minVisPtFilter_EmbeddedRECO', ] # Define our patTuple production sequence process.tuplize = cms.Sequence() # Only keep interesting genParticles process.load("FinalStateAnalysis.RecoTools.genParticleTrimmer_cfi") process.genParticles = process.prunedGenParticles.clone() if isMC: #process.tuplize += process.genParticles #output_commands.append('*_genParticles_*_%s' % process.name_()) output_commands.append('*_genParticles_*_*') output_commands.append('*_tauGenJetsSelectorAllHadrons_*_*') output_commands.append('*_tauGenJets_*_*') output_commands.append('*_ak5GenJets_*_*') ######################## ## ## ## PAT ## ## ## ######################## # Run pat default sequence process.load("PhysicsTools.PatAlgos.patSequences_cff") # Embed PF Isolation in electrons & muons pfTools.usePFIso(process) # Setup H2Tau custom iso definitions setup_h2tau_iso(process) # Setup hZg custom iso definitions add_hZg_iso_needs(process) # Now run PAT process.tuplize += process.patDefaultSequence # Add FSR photons for ZZ analysis process.load("FinalStateAnalysis.PatTools.fsrPhotons_cff") process.tuplize += process.fsrPhotonSequence ######################## ## GEN ## ######################## # Disable gen match embedding - we keep it in the ntuple process.patMuons.embedGenMatch = False process.patElectrons.embedGenMatch = False process.patTaus.embedGenMatch = False process.patTaus.embedGenJetMatch = False process.patPhotons.embedGenMatch = False if not isMC: coreTools.runOnData(process) ######################## ## MUONS ## ######################## # Unembed junk process.patMuons.embedCaloMETMuonCorrs = False process.patMuons.embedTcMETMuonCorrs = False process.patMuons.embedTrack = True process.patMuons.pvSrc = cms.InputTag("selectedPrimaryVertex") process.load("FinalStateAnalysis.PatTools.patMuonProduction_cff") final_muon_collection = chain_sequence( process.customizeMuonSequence, "selectedPatMuons") process.customizeMuonSequence.insert(0, process.selectedPatMuons) process.patDefaultSequence.replace(process.selectedPatMuons, process.customizeMuonSequence) process.cleanPatMuons.src = final_muon_collection process.patMuonRochesterCorrectionEmbedder.isMC = cms.bool(bool(isMC)) ######################## ## TAUS ## ######################## # Use HPS taus tautools.switchToPFTauHPS(process) #this NEEDS a sequence called patDefaultSequence # Disable tau IsoDeposits process.patDefaultSequence.remove(process.patPFTauIsolation) process.patTaus.isoDeposits = cms.PSet() process.patTaus.userIsolation = cms.PSet() process.load("FinalStateAnalysis.PatTools.patTauProduction_cff") # Require all taus to pass decay mode finding and have high PT process.patTauGarbageRemoval.cut = cms.string( "pt > 17 && abs(eta) < 2.5 && tauID('decayModeFindingNewDMs')") final_tau_collection = chain_sequence( process.customizeTauSequence, "selectedPatTaus") # Inject into the pat sequence process.customizeTauSequence.insert(0, process.selectedPatTaus) process.patDefaultSequence.replace(process.selectedPatTaus, process.customizeTauSequence) process.cleanPatTaus.src = final_tau_collection # Remove muons and electrons process.cleanPatTaus.checkOverlaps.muons.requireNoOverlaps = False process.cleanPatTaus.checkOverlaps.electrons.requireNoOverlaps = False # Cuts already applied by the garbage removal process.cleanPatTaus.preselection = '' process.cleanPatTaus.finalCut = '' ######################## ## ELECTRONS ## ######################## # Use POG recommendations for (these) electron Isos process.elPFIsoValueGamma04PFIdPFIso.deposits[0].vetos = cms.vstring( 'EcalEndcaps:ConeVeto(0.08)') process.elPFIsoValueGamma04NoPFIdPFIso.deposits[0].vetos = cms.vstring( 'EcalEndcaps:ConeVeto(0.08)') process.elPFIsoValueCharged04PFIdPFIso.deposits[0].vetos = cms.vstring( 'EcalEndcaps:ConeVeto(0.015)') process.elPFIsoValueCharged04NoPFIdPFIso.deposits[0].vetos = cms.vstring( 'EcalEndcaps:ConeVeto(0.015)') # Do extra electron ID process.load("FinalStateAnalysis.PatTools.electrons.electronID_cff") if cmssw_major_version() == 4: process.patDefaultSequence.replace(process.patElectrons, process.recoElectronID42X + process.patElectrons) process.patElectrons.electronIDSources = process.electronIDSources42X else: process.patDefaultSequence.replace(process.patElectrons, process.recoElectronID5YX + process.patElectrons) process.patElectrons.electronIDSources = process.electronIDSources5YX process.electronMatch.checkCharge = cms.bool(False) process.patElectrons.embedTrack = False process.patElectrons.embedPFCandidate = False process.patElectrons.embedGsfElectronCore = False process.patElectrons.embedSuperCluster = True # Produce the electron collections process.load("FinalStateAnalysis.PatTools.patElectronProduction_cff") # Electron Energy Regression and Calibrations process.load( "EgammaAnalysis.ElectronTools.electronRegressionEnergyProducer_cfi") process.load("EgammaAnalysis.ElectronTools.calibratedPatElectrons_cfi") #setup the energy regression for the specific dataset if kwargs['eleReg']: print "-- Applying Electron Regression and Calibration --" process.customizeElectronSequence += process.eleRegressionEnergy process.customizeElectronSequence += process.calibratedPatElectrons process.eleRegressionEnergy.energyRegressionType = cms.uint32(2) process.calibratedPatElectrons.correctionsType = cms.int32(2) if isMC: process.calibratedPatElectrons.inputDataset = cms.string( "Summer12_LegacyPaper") else: process.calibratedPatElectrons.inputDataset = cms.string( "22Jan2013ReReco") process.calibratedPatElectrons.combinationType = cms.int32(3) process.calibratedPatElectrons.lumiRatio = cms.double(1.0) process.calibratedPatElectrons.synchronization = cms.bool(True) process.calibratedPatElectrons.isMC = cms.bool(isMC == 1) process.calibratedPatElectrons.verbose = cms.bool(False) final_electron_collection = chain_sequence( process.customizeElectronSequence, "selectedPatElectrons", # Some of the EGamma modules have non-standard src InputTags, # specify them here. ("src", "inputPatElectronsTag", "inputElectronsTag") ) #process.tuplize += process.customizeElectronSequence #why do we need this? process.customizeElectronSequence.insert(0, process.selectedPatElectrons) process.patDefaultSequence.replace(process.selectedPatElectrons, process.customizeElectronSequence) # We have to do the pat Jets before the pat electrons since we embed them process.customizeElectronSequence.insert(0, process.selectedPatJets) # Define cleanPatElectrons input collection process.cleanPatElectrons.src = final_electron_collection # Define the default lepton cleaning process.cleanPatElectrons.preselection = cms.string( 'pt > 5') process.cleanPatElectrons.checkOverlaps.muons.requireNoOverlaps = False # Make sure we don't kill any good taus by calling them electrons # Note that we don't actually remove these overlaps. process.cleanPatElectrons.checkOverlaps.taus = cms.PSet( src=final_tau_collection, algorithm=cms.string("byDeltaR"), preselection=cms.string( "tauID('decayModeFinding') > 0.5 &&" "tauID('byLooseCombinedIsolationDeltaBetaCorr') > 0.5 &&" "tauID('againstElectronLoose') > 0.5 && " "pt > 10" ), deltaR=cms.double(0.1), checkRecoComponents=cms.bool(False), pairCut=cms.string(""), requireNoOverlaps=cms.bool(False), ) ######################## ## JETS ## ######################## # Use PFJets and turn on JEC jec = ['L1FastJet', 'L2Relative', 'L3Absolute'] # If we are running on data (not MC), or embedded sample, # apply the MC-DATA residual correction. if not isMC or kwargs['embedded']: jec.extend(['L2L3Residual']) # tmp # define the b-tag squences for offline reconstruction process.load("RecoBTag.SecondaryVertex.secondaryVertex_cff") process.load("RecoBTau.JetTagComputer.combinedMVA_cff") process.load('RecoVertex/AdaptiveVertexFinder/inclusiveVertexing_cff') process.load('RecoBTag/SecondaryVertex/bToCharmDecayVertexMerger_cfi') #process.load("PhysicsTools.PatAlgos.patSequences_cff") # Define options for BTagging - these are release dependent. btag_options = {'doBTagging': True} if cmssw_major_version() == 5: btag_options['btagInfo'] = [ 'impactParameterTagInfos', 'secondaryVertexTagInfos', 'softMuonTagInfos', 'secondaryVertexNegativeTagInfos', 'inclusiveSecondaryVertexFinderFilteredTagInfos' ] btag_options['btagdiscriminators'] = [ 'trackCountingHighEffBJetTags', 'trackCountingHighPurBJetTags', 'simpleSecondaryVertexHighEffBJetTags', 'simpleSecondaryVertexHighPurBJetTags', 'simpleInclusiveSecondaryVertexHighEffBJetTags', 'simpleInclusiveSecondaryVertexHighPurBJetTags', 'combinedSecondaryVertexMVABJetTags', 'combinedSecondaryVertexBJetTags', 'jetBProbabilityBJetTags', 'jetProbabilityBJetTags', ] #Avoid embedding process.patJets.embedPFCandidates = True process.patJets.embedCaloTowers = False process.patJets.embedGenJetMatch = True process.patJets.addAssociatedTracks = True process.patJets.embedGenPartonMatch = True process.patJets.addTagInfos = True # Add AK5chs PFJets jettools.addJetCollection( process, cms.InputTag('ak5PFchsJets'), algoLabel = "AK5", typeLabel = "PFchs", doJTA = True, jetCorrLabel = ('AK5PFchs', jec), doType1MET = False, doL1Cleaning = False, doL1Counters = False, genJetCollection = cms.InputTag('ak5GenJets'), doJetID = True, **btag_options ) # Use AK5 PFJets jettools.switchJetCollection( process, cms.InputTag('ak5PFJets'), doJTA=True, jetCorrLabel=('AK5PF', jec), #jetCorrLabel = None, doType1MET=False, doJetID=True, genJetCollection=cms.InputTag("ak5GenJets"), **btag_options ) process.patJetsMET = cms.EDProducer("PATJetProducer", addJetCharge = cms.bool(True), addGenJetMatch = cms.bool(True), embedPFCandidates = cms.bool(True), embedGenJetMatch = cms.bool(True), addAssociatedTracks = cms.bool(True), partonJetSource = cms.InputTag("NOT_IMPLEMENTED"), addGenPartonMatch = cms.bool(True), JetPartonMapSource = cms.InputTag("patJetFlavourAssociation"), resolutions = cms.PSet( ), genPartonMatch = cms.InputTag("patJetPartonMatch"), addTagInfos = cms.bool(True), addPartonJetMatch = cms.bool(False), embedGenPartonMatch = cms.bool(True), efficiencies = cms.PSet( ), genJetMatch = cms.InputTag("patJetGenJetMatch"), userData = cms.PSet( userCands = cms.PSet( src = cms.VInputTag("") ), userInts = cms.PSet( src = cms.VInputTag("") ), userFloats = cms.PSet( src = cms.VInputTag("") ), userClasses = cms.PSet( src = cms.VInputTag("") ), userFunctionLabels = cms.vstring(), userFunctions = cms.vstring() ), jetSource = cms.InputTag("ak5PFJets"), addEfficiencies = cms.bool(False), jetCorrFactorsSource = cms.VInputTag(cms.InputTag("patJetCorrFactors")), trackAssociationSource = cms.InputTag("jetTracksAssociatorAtVertex"), tagInfoSources = cms.VInputTag(cms.InputTag("impactParameterTagInfosAOD"), cms.InputTag("secondaryVertexTagInfosAOD"), cms.InputTag("softMuonTagInfosAOD"), cms.InputTag("secondaryVertexNegativeTagInfosAOD"), cms.InputTag("inclusiveSecondaryVertexFinderFilteredTagInfosAOD")), discriminatorSources = cms.VInputTag(cms.InputTag("trackCountingHighEffBJetTagsAOD"), cms.InputTag("trackCountingHighPurBJetTagsAOD"), cms.InputTag("simpleSecondaryVertexHighEffBJetTagsAOD"), cms.InputTag("simpleSecondaryVertexHighPurBJetTagsAOD"), cms.InputTag("simpleInclusiveSecondaryVertexHighEffBJetTagsAOD"), cms.InputTag("simpleInclusiveSecondaryVertexHighPurBJetTagsAOD"), cms.InputTag("combinedSecondaryVertexMVABJetTagsAOD"), cms.InputTag("combinedSecondaryVertexBJetTagsAOD"), cms.InputTag("jetBProbabilityBJetTagsAOD"), cms.InputTag("jetProbabilityBJetTagsAOD")), addBTagInfo = cms.bool(False), embedCaloTowers = cms.bool(False), addResolutions = cms.bool(False), getJetMCFlavour = cms.bool(True), addDiscriminators = cms.bool(False), jetChargeSource = cms.InputTag("patJetCharge"), addJetCorrFactors = cms.bool(False), jetIDMap = cms.InputTag("ak5JetID"), addJetID = cms.bool(True) ) # Customize/embed all our sequences process.load("FinalStateAnalysis.PatTools.patJetProduction_cff") process.patJetEmbedSystematicsFull.srcPFJets = cms.InputTag("ak5PFJets") process.patJetEmbedSystematicsFull.srcPatJets = cms.InputTag("patJetsMET") helpers.cloneProcessingSnippet( process, process.customizeJetSequence, 'AK5PFchs' ) process.patJetGarbageRemoval.cut = 'pt > 12' final_jet_collection = chain_sequence( process.customizeJetSequence, "patJets") process.customizeJetSequence.insert(0, process.patJetEmbedSystematicsFull) process.customizeJetSequence.insert(0, process.patJetsMET) process.customizeJetSequence.insert(0, process.patJets) # Make it a "complete" sequence process.customizeJetSequence += process.selectedPatJets # process.customizeJetSequence += process.btagging # We can't mess up the selected pat jets because the taus use them. process.selectedPatJets.src = final_jet_collection process.patDefaultSequence.replace(process.patJets, process.customizeJetSequence) process.customizeJetSequenceAK5PFchs.remove( process.patJetsPUIDAK5PFchs ) process.customizeJetSequenceAK5PFchs.remove( process.pileupJetIdProducerAK5PFchs ) process.patJetGarbageRemovalAK5PFchs.cut = 'pt > 20' process.patJetCorrFactorsAK5PFchs.payload = cms.string('AK5PFchs') final_jetchs_collection = chain_sequence( process.customizeJetSequenceAK5PFchs, "patJetsAK5PFchs") process.customizeJetSequenceAK5PFchs.insert(0, process.patJetsAK5PFchs) # Make it a "complete" sequence process.customizeJetSequenceAK5PFchs += process.selectedPatJetsAK5PFchs # We can't mess up the selected pat jets because the taus use them. process.selectedPatJetsAK5PFchs.src = final_jetchs_collection process.selectedPatJetsAK5chsPF = process.selectedPatJetsAK5PFchs.clone() #that's what we keep process.customizeJetSequenceAK5PFchs += process.selectedPatJetsAK5chsPF process.patDefaultSequence.replace(process.patJetsAK5PFchs, process.customizeJetSequenceAK5PFchs) output_commands.append('*_selectedPatJets_*_*') output_commands.append('*_selectedPatJetsAK5chsPF_*_*') output_commands.append('*SecondaryVertexTagInfo*_*_*_*') output_commands.append('*TrackIPTagInfo*_*_*_*') output_commands.append('*SoftLeptonTagInfo*_*_*_*') output_commands.append('*_ak5PFJets_*_*') output_commands.append('*_ak5PFchsJets_*_*') ######################## ## PHOTONS ## ######################## #alter the photon matching to accept various fakes # and sort matches by d-pt-rel if isMC: process.photonMatch = cms.EDProducer( "MCMatcherByPt", src=cms.InputTag("photons"), maxDPtRel=cms.double(100.0), mcPdgId=cms.vint32(), mcStatus=cms.vint32(1), resolveByMatchQuality=cms.bool(False), maxDeltaR=cms.double(0.3), checkCharge=cms.bool(False), resolveAmbiguities=cms.bool(True), matched=cms.InputTag("genParticles") ) # Setup pat::Photon Production process.load("FinalStateAnalysis.PatTools.patPhotonProduction_cff") final_photon_collection = chain_sequence(process.customizePhotonSequence, "selectedPatPhotons") #setup PHOSPHOR for a specific dataset if cmssw_major_version() == 4: # for now 2011 = CMSSW42X process.patPhotonPHOSPHOREmbedder.year = cms.uint32(2011) else: # 2012 is 5YX process.patPhotonPHOSPHOREmbedder.year = cms.uint32(2012) process.patPhotonPHOSPHOREmbedder.isMC = cms.bool(bool(isMC)) #inject photons into pat sequence process.customizePhotonSequence.insert(0, process.selectedPatPhotons) process.patDefaultSequence.replace(process.selectedPatPhotons, process.customizePhotonSequence) process.cleanPatPhotons.src = final_photon_collection ######################## ## MET ## ######################## # Use PFMEt mettools.addPfMET(process) # We cut out a lot of the junky taus and jets - but we need these # to correctly apply the MET uncertainties. So, let's make a # non-cleaned version of the jet and tau sequence. process.jetsForMetSyst = helpers.cloneProcessingSnippet( process, process.customizeJetSequence, 'ForMETSyst') process.tausForMetSyst = helpers.cloneProcessingSnippet( process, process.customizeTauSequence, 'ForMETSyst') # Don't apply any cut for these process.patTauGarbageRemovalForMETSyst.cut = '' process.patJetGarbageRemovalForMETSyst.cut = '' process.tuplize += process.jetsForMetSyst process.tuplize += process.tausForMetSyst # We have to make our clone of cleanPatTaus separately, since e/mu # cleaning is applied - therefore it isn't in the customizeTausSequence. process.cleanPatTausForMETSyst = process.cleanPatTaus.clone( src=cms.InputTag(process.cleanPatTaus.src.value() + "ForMETSyst")) process.cleanPatTausForMETSyst.preselection = '' process.cleanPatTausForMETSyst.finalCut = '' process.patTausEmbedJetInfoForMETSyst.jetSrc = \ final_jet_collection.value() + "ForMETSyst" process.tuplize += process.cleanPatTausForMETSyst # Setup MET production process.load("FinalStateAnalysis.PatTools.patMETProduction_cff") if isMC: process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_mc process.corrPfMetType1.jetCorrLabel = cms.string("ak5PFL1FastL2L3") else: process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_data process.corrPfMetType1.jetCorrLabel = cms.string("ak5PFL1FastL2L3Residual") # The MET systematics depend on all other systematics process.systematicsMET.jetSrc = cms.InputTag("patJetEmbedSystematicsFull") process.systematicsMET.tauSrc = cms.InputTag("cleanPatTausForMETSyst") process.systematicsMET.muonSrc = cms.InputTag("cleanPatMuons") process.systematicsMET.electronSrc = cms.InputTag("cleanPatElectrons") from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPfMet = patMETs.clone( metSource = cms.InputTag('pfMet'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0rt = patMETs.clone( metSource = cms.InputTag('pfMetT0rt'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0rtT1 = patMETs.clone( metSource = cms.InputTag('pfMetT0rtT1'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0pc = patMETs.clone( metSource = cms.InputTag('pfMetT0pc'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0pcT1 = patMETs.clone( metSource = cms.InputTag('pfMetT0pcT1'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0rtTxy = patMETs.clone( metSource = cms.InputTag('pfMetT0rtTxy'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0rtT1Txy = patMETs.clone( metSource = cms.InputTag('pfMetT0rtT1Txy'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0pcTxy = patMETs.clone( metSource = cms.InputTag('pfMetT0pcTxy'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT0pcT1Txy = patMETs.clone( metSource = cms.InputTag('pfMetT0pcT1Txy'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT1 = patMETs.clone( metSource = cms.InputTag('pfMetT1'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.patPfMetT1xy = patMETs.clone( metSource = cms.InputTag('pfMetT1Txy'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) process.officialMETSequence = cms.Sequence( process.correctionTermsPfMetType1Type2 + process.correctionTermsPfMetType0RecoTrack + process.correctionTermsPfMetType0PFCandidate + process.correctionTermsPfMetShiftXY + process.correctionTermsCaloMet + process.caloMetT1 + process.caloMetT1T2 + process.pfMetT0rt + process.pfMetT0rtT1 + process.pfMetT0pc + process.pfMetT0pcT1 + process.pfMetT0rtTxy + process.pfMetT0rtT1Txy + process.pfMetT0pcTxy + process.pfMetT0pcT1Txy + process.pfMetT1 + process.pfMetT1Txy + process.patPfMet + process.patPfMetT1 + process.patPfMetT1xy + process.patPfMetT0rt + process.patPfMetT0rtT1 + process.patPfMetT0pc + process.patPfMetT0pcT1 + process.patPfMetT0rtTxy + process.patPfMetT0rtT1Txy + process.patPfMetT0pcTxy + process.patPfMetT0pcT1Txy ) output_commands.append('*_patPfMet*_*_*') output_commands.append('*_pfMet_*_*') output_commands.append('*_patPFMetForMEtUncertainty*_*_*') output_commands.append('*_patJets*_*_*') final_met_collection = chain_sequence( process.customizeMETSequence, "patPfMet") process.tuplize += process.officialMETSequence process.tuplize += process.customizeMETSequence process.patMETsPF.addGenMET = bool(isMC) output_commands.append('*_%s_*_*' % final_met_collection.value()) # Make a version with the MVA MET reconstruction method process.load("FinalStateAnalysis.PatTools.met.mvaMetOnPatTuple_cff") process.tuplize += process.pfMEtMVAsequence mva_met_sequence = helpers.cloneProcessingSnippet( process, process.customizeMETSequence, "MVA") final_mvamet_collection = chain_sequence( mva_met_sequence, "patMEtMVA") process.tuplize += mva_met_sequence output_commands.append('*_%s_*_*' % final_mvamet_collection.value()) # Keep all the data formats needed for the systematics output_commands.append('recoLeafCandidates_*_*_%s' % process.name_()) # We can drop to jet and tau MET specific products. They were only used for # computation of the MET numbers. output_commands.append('drop recoLeafCandidates_*ForMETSyst_*_%s' % process.name_()) ######################## ## TRIGGER ## ######################## trigtools.switchOnTrigger(process) #configure the PAT trigger if kwargs['HLTprocess']: process.patTrigger.processName = cms.string(kwargs['HLTprocess']) process.patTriggerEvent.processName = cms.string(kwargs['HLTprocess']) ######################## ## -------------- ## ######################## output_commands.append('*_cleanPatTaus_*_*') output_commands.append('*_cleanPatElectrons_*_*') output_commands.append('*_cleanPatMuons_*_*') output_commands.append('*_cleanPatPhotons_*_*') ######################## ## ## ## FSA ## ## ## ######################## # Now build the PATFinalStateLS object, which holds LumiSection info. process.load( "FinalStateAnalysis.PatTools.finalStates.patFinalStateLSProducer_cfi") process.tuplize += process.finalStateLS output_commands.append('*_finalStateLS_*_*') if isMC: process.finalStateLS.xSec = kwargs['xSec'] # Tell the framework to shut up! process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 1000 # Which collections are used to build the final states fs_daughter_inputs = { 'electrons': 'cleanPatElectrons', 'muons': 'cleanPatMuons', 'taus': 'cleanPatTaus', 'photons': 'cleanPatPhotons', 'jets': 'selectedPatJets', 'pfmet': final_met_collection, 'mvamet': final_mvamet_collection, } # Setup all the PATFinalState objects produce_final_states(process, fs_daughter_inputs, output_commands, process.tuplize, kwargs['puTag'], zzMode=kwargs.get('zzMode', False)) return process.tuplize, output_commands
import FWCore.ParameterSet.Config as cms # load modules for producing Type 1 / Type 1 + 2 corrections for reco::PFMET objects from JetMETCorrections.Type1MET.correctionTermsPfMetType1Type2_cff import * #from PhysicsTools.PatAlgos.producerLayer1.jetProducer_cfi import patJets #-------------------------------------------------------------------------------- # produce "raw" (uncorrected) pat::MET of PF-type from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs patPFMet = patMETs.clone(metSource=cms.InputTag('pfMet'), addMuonCorrections=cms.bool(False), genMETSource=cms.InputTag('genMetTrue')) #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- # select collection of pat::Jets entering Type 1 + 2 MET corrections # selectedPatJetsForMetT1T2Corr = cms.EDFilter("PATJetSelector", src=cms.InputTag('patJets'), cut=cms.string('abs(eta) < 9.9'), filter=cms.bool(False)) selectedPatJetsForMetT2Corr = cms.EDFilter("PATJetSelector", src=cms.InputTag('patJets'), cut=cms.string('abs(eta) > 9.9'), filter=cms.bool(False)) #-------------------------------------------------------------------------------- #--------------------------------------------------------------------------------
import FWCore.ParameterSet.Config as cms # load modules for producing Type 1 / Type 1 + 2 corrections for reco::PFMET objects #-------------------------------------------------------------------------------- # produce "raw" (uncorrected) pat::MET of calo-type from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs patCaloMet = patMETs.clone(metSource=cms.InputTag('corMetGlobalMuons'), addMuonCorrections=cms.bool(False), genMETSource=cms.InputTag('genMetTrue')) #-------------------------------------------------------------------------------- patCaloMetType1Corr = cms.EDProducer( "CaloJetMETcorrInputProducer", src=cms.InputTag('ak4CaloJets'), jetCorrLabel=cms.string( "ak4CaloL2L3" ), # NOTE: use "ak4CaloL2L3" for MC / "ak4CaloL2L3Residual" for Data jetCorrEtaMax=cms.double(9.9), type1JetPtThreshold=cms.double(20.0), skipEM=cms.bool(True), skipEMfractionThreshold=cms.double(0.90), srcMET=cms.InputTag('corMetGlobalMuons')) ##____________________________________________________________________________|| patCaloMetMuCorr = cms.EDProducer("MuonMETcorrInputProducer", src=cms.InputTag('muons'), srcMuonCorrections=cms.InputTag( 'muonMETValueMapProducer', 'muCorrData')) ##____________________________________________________________________________||
# Modify electrons e_cut = isoelectrons.cut isoelectrons = cms.EDFilter("PATElectronSelector", src=cms.InputTag("cleanPatElectrons"), cut=e_cut, filter=cms.bool(False)) # Modify taus isotaus = cms.EDFilter( "PATTauSelector", src=cms.InputTag("selectedPatTaus"), cut=cms.string( 'pt > 19 && abs(eta) < 2.3 && ' 'tauID("decayModeFinding") && ' 'tauID("byIsolationMVAraw") > 0.8 && ' 'tauID("againstElectronLoose") && tauID("againstMuonLoose2")'), filter=cms.bool(False)) patMEtMVA = patMETs.clone(metSource=cms.InputTag("pfMEtMVA")) patMEtMVA.addMuonCorrections = False pfMEtMVA.verbosity = 0 print "Built MVA MET sequence" pfMEtMVAsequence = cms.Sequence(calibratedAK5PFJetsForPFMEtMVA * isomuons * isoelectrons * isotaus * pfMEtMVA * patMEtMVA) except ImportError: import sys sys.stderr.write( "Warning: MVA MET dependencies not installed => MVA MET disabled.\n") pfMEtMVAsequence = cms.Sequence()
) #-------------------------------------------------------------------------------- from PhysicsTools.PatUtils.tools.metUncertaintyTools import runMEtUncertainties runMEtUncertainties(process, 'selectedPatElectrons', '', 'selectedPatMuons', 'selectedPatTaus' , 'selectedPatJetsAK5PF') ### build type1/2 correction also on top of pfMETnoPU process.patType1CorrectedPFMetNoPU = process.patType1CorrectedPFMet.clone() from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPFMetNoPU = patMETs.clone( metSource = cms.InputTag('pfMETNoPU'), addMuonCorrections = cms.bool(False), genMETSource = cms.InputTag('genMetTrue') ) #process.patPFMetNoPU = process.patMets.clone() #process.patPFMetNoPU.metSource = cms.InputTag('pfMETNoPU'), process.patType1CorrectedPFMetNoPU.src = cms.InputTag('patPFMetNoPU') process.patType1p2CorrectedPFMetNoPU = process.patType1p2CorrectedPFMet.clone() process.patType1p2CorrectedPFMetNoPU.src = cms.InputTag('patPFMetNoPU') from PhysicsTools.PatUtils.tools.metUncertaintyTools import runMEtUncertainties process.dump = cms.EDAnalyzer("EventContentAnalyzer")
def toolCode(self, process): """ Tool code implementation """ ## initialize parameters labelName='patJets'+self._parameters['labelName'].value postfix=self._parameters['postfix'].value jetSource=self._parameters['jetSource'].value algo=self._parameters['algo'].value jetCorrections=self._parameters['jetCorrections'].value btagDiscriminators=list(self._parameters['btagDiscriminators'].value) btagInfos=list(self._parameters['btagInfos'].value) jetTrackAssociation=self._parameters['jetTrackAssociation'].value outputModules=list(self._parameters['outputModules'].value) ## a list of all producer modules, which are already known to process knownModules = process.producerNames().split() ## determine whether btagging information is required or not if btagDiscriminators.count('None')>0: btagDiscriminators.remove('None') if btagInfos.count('None')>0: btagInfos.remove('None') bTagging=(len(btagDiscriminators)>0 or len(btagInfos)>0) ## construct postfix label for auxiliary modules; this postfix ## label will start with a capitalized first letter following ## the CMS nameing conventions and for improved readablility _labelName=labelName[:1].upper()+labelName[1:] #_labelName=labelName ## determine jet algorithm from jetSource; supported algo types ## are ak, kt, sc, ic. This loop expects that the algo type is ## followed by a single integer corresponding to the opening ## angle parameter dR times 10 (examples ak5, kt4, kt6, ...) _algo=algo #jetSource=cms.InputTag("ak5PFJets") for x in ["ak", "kt", "sc", "ic"]: if jetSource.getModuleLabel().lower().find(x)>-1: _algo=jetSource.getModuleLabel()[jetSource.getModuleLabel().lower().find(x):jetSource.getModuleLabel().lower().find(x)+3] #print _algo ## add new patJets to process (keep instance for later further modifications) from PhysicsTools.PatAlgos.producersLayer1.jetProducer_cfi import patJets if labelName in knownModules : _newPatJets=getattr(process, labelName+postfix) _newPatJets.jetSource=jetSource else : #setattr(process, labelName, patJets.clone(jetSource=jetSource)) setattr(process, labelName+postfix, patJets.clone(jetSource=jetSource)) _newPatJets=getattr(process, labelName+postfix) knownModules.append(labelName+postfix) ## add new selectedPatJets to process from PhysicsTools.PatAlgos.selectionLayer1.jetSelector_cfi import selectedPatJets if 'selected'+_labelName+postfix in knownModules : _newSelectedPatJets=getattr(process, 'selected'+_labelName+postfix) _newSelectedPatJets.src=labelName+postfix else : setattr(process, 'selected'+_labelName+postfix, selectedPatJets.clone(src=labelName+postfix)) knownModules.append('selected'+_labelName+postfix) ## set postfix label to '' if there is no labelName given. In this case all ## modules should keep there names w/o postfixes. This will cover the case ## of switchJectCollection if self._parameters['labelName'].value == '' : _labelName = '' ## add new patJetPartonMatch to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetMatch_cfi import patJetPartonMatch if 'patJetPartonMatch'+_labelName+postfix in knownModules : _newPatJetPartonMatch=getattr(process, 'patJetPartonMatch'+_labelName+postfix) _newPatJetPartonMatch.src=jetSource else : setattr(process, 'patJetPartonMatch'+_labelName+postfix, patJetPartonMatch.clone(src=jetSource)) knownModules.append('patJetPartonMatch'+_labelName+postfix) ## add new patJetGenJetMatch to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetMatch_cfi import patJetGenJetMatch if 'patJetGenJetMatch'+_labelName+postfix in knownModules : _newPatJetGenJetMatch=getattr(process, 'patJetGenJetMatch'+_labelName+postfix) _newPatJetGenJetMatch.src=jetSource _newPatJetGenJetMatch.matched=_algo.lower()+'GenJets'+postfix else : setattr(process, 'patJetGenJetMatch'+_labelName+postfix, patJetGenJetMatch.clone(src=jetSource, matched=_algo+'GenJets')) knownModules.append('patJetGenJetMatch'+_labelName+postfix) ## add new patJetPartonAssociation to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetFlavourId_cff import patJetPartonAssociation if 'patJetPartonAssociation'+_labelName+postfix in knownModules : _newPatJetPartonAssociation=getattr(process, 'patJetPartonAssociation'+_labelName+postfix, patJetPartonAssociation.clone(jets=jetSource)) _newPatJetPartonAssociation.jets=jetSource else : setattr(process, 'patJetPartonAssociation'+_labelName+postfix, patJetPartonAssociation.clone(jets=jetSource)) knownModules.append('patJetPartonAssociation'+_labelName+postfix) ## add new patJetPartonAssociation to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetFlavourId_cff import patJetFlavourAssociation if 'patJetFlavourAssociation'+_labelName+postfix in knownModules : _newPatJetFlavourAssociation=getattr(process, 'patJetFlavourAssociation'+_labelName+postfix, patJetFlavourAssociation.clone(srcByReference='patJetPartonAssociation'+_labelName+postfix)) _newPatJetFlavourAssociation.srcByReference='patJetPartonAssociation'+_labelName+postfix else: setattr(process, 'patJetFlavourAssociation'+_labelName+postfix, patJetFlavourAssociation.clone(srcByReference='patJetPartonAssociation'+_labelName+postfix)) knownModules.append('patJetFlavourAssociation'+_labelName+postfix) ## modify new patJets collection accordingly _newPatJets.genJetMatch.setModuleLabel('patJetGenJetMatch'+_labelName+postfix) _newPatJets.genPartonMatch.setModuleLabel('patJetPartonMatch'+_labelName+postfix) _newPatJets.JetPartonMapSource.setModuleLabel('patJetFlavourAssociation'+_labelName+postfix) ## add jetTrackAssociation for btagging (or jetTracksAssociation only) if required by user if (jetTrackAssociation or bTagging): ## add new jetTracksAssociationAtVertex to process from RecoJets.JetAssociationProducers.ak5JTA_cff import ak5JetTracksAssociatorAtVertex if 'jetTracksAssociationAtVertex'+_labelName+postfix in knownModules : _newJetTracksAssociationAtVertex=getattr(process, 'jetTracksAssociatorAtVertex'+_labelName+postfix) _newJetTracksAssociationAtVertex.jets=jetSource else: setattr(process, 'jetTracksAssociatorAtVertex'+_labelName+postfix, ak5JetTracksAssociatorAtVertex.clone(jets=jetSource)) knownModules.append('jetTracksAssociationAtVertex'+_labelName+postfix) ## add new patJetCharge to process from PhysicsTools.PatAlgos.recoLayer0.jetTracksCharge_cff import patJetCharge if 'patJetCharge'+_labelName+postfix in knownModules : _newPatJetCharge=getattr(process, 'patJetCharge'+_labelName+postfix) _newPatJetCharge.src='jetTracksAssociatorAtVertex'+_labelName+postfix else: setattr(process, 'patJetCharge'+_labelName+postfix, patJetCharge.clone(src = 'jetTracksAssociatorAtVertex'+_labelName+postfix)) knownModules.append('patJetCharge'+_labelName+postfix) ## modify new patJets collection accordingly _newPatJets.addAssociatedTracks=True _newPatJets.trackAssociationSource=cms.InputTag('jetTracksAssociatorAtVertex'+_labelName+postfix) _newPatJets.addJetCharge=True _newPatJets.jetChargeSource=cms.InputTag('patJetCharge'+_labelName+postfix) else: ## modify new patJets collection accordingly _newPatJets.addAssociatedTracks=False _newPatJets.trackAssociationSource='' _newPatJets.addJetCharge=False _newPatJets.jetChargeSource='' ## run btagging if required by user if (bTagging): ## expand tagInfos to what is explicitely required by user + implicit ## requirements that come in from one or the other discriminator requiredTagInfos = list(btagInfos) for btagDiscr in btagDiscriminators : for requiredTagInfo in supportedBtagDiscr[btagDiscr] : tagInfoCovered = False for tagInfo in requiredTagInfos : if requiredTagInfo == tagInfo : tagInfoCovered = True break if not tagInfoCovered : requiredTagInfos.append(requiredTagInfo) ## load sequences and setups needed fro btagging ## This loads all available btagger, but the ones we need are added to the process by hand lader. Only needed to get the ESProducer. Needs improvement #loadWithPostFix(process,"RecoBTag.Configuration.RecoBTag_cff",postfix) process.load("RecoBTag.Configuration.RecoBTag_cff") #addESProducers(process,'RecoBTag.Configuration.RecoBTag_cff') import RecoBTag.Configuration.RecoBTag_cff as btag ## prepare setups for simple secondary vertex infos setattr(process, "simpleSecondaryVertex2Trk", simpleSecondaryVertex2Trk) ## prepare setups for transient tracks setattr(process, "TransientTrackBuilderESProducer", TransientTrackBuilderESProducer) ## setup all required btagInfos : we give a dedicated treatment for all five different ## types of tagINfos here. A common treatment is possible but might require a more ## general approach anyway in coordination with the btaggin POG. for btagInfo in requiredTagInfos : if 'impactParameterTagInfos' in btagInfo : setattr(process, btagInfo+_labelName+postfix, btag.impactParameterTagInfos.clone(jetTracks = cms.InputTag('jetTracksAssociatorAtVertex'+_labelName+postfix))) if 'secondaryVertexTagInfos' in btagInfo : setattr(process, btagInfo+_labelName+postfix, btag.secondaryVertexTagInfos.clone(trackIPTagInfos = cms.InputTag('impactParameterTagInfos'+_labelName+postfix))) if 'secondaryVertexNegativeTagInfos' in btagInfo : setattr(process, btagInfo+_labelName+postfix, btag.secondaryVertexNegativeTagInfos.clone(trackIPTagInfos = cms.InputTag('impactParameterTagInfos'+_labelName+postfix))) if 'softElectronTagInfos' in btagInfo : setattr(process, btagInfo+_labelName+postfix, btag.softElectronTagInfos.clone(jets = cms.InputTag(_newJetCollection))) if 'softMuonTagInfos' in btagInfo : setattr(process, btagInfo+_labelName+postfix, btag.softMuonTagInfos.clone(jets = cms.InputTag(_newJetCollection))) ## setup all required btagDiscriminators for btagDiscr in btagDiscriminators : setattr(process, btagDiscr+_labelName+postfix, getattr(btag, btagDiscr).clone(tagInfos = cms.VInputTag( *[ cms.InputTag(x+_labelName+postfix) for x in supportedBtagDiscr[btagDiscr] ] ))) ## replace corresponding tags for pat jet production _newPatJets.tagInfoSources = cms.VInputTag( *[ cms.InputTag(x+_labelName+postfix) for x in btagInfos ] ) _newPatJets.discriminatorSources = cms.VInputTag( *[ cms.InputTag(x+_labelName+postfix) for x in btagDiscriminators ] ) else: _newPatJets.addBTagInfo = False ## adjust output module; these collections will be empty anyhow, but we do it to stay clean for outputModule in outputModules: if hasattr(process,outputModule): getattr(process,outputModule).outputCommands.append("drop *_"+'selected'+_labelName+postfix+"_tagInfos_*") ## add jet correction factors if required by user if (jetCorrections != None): ## check for the correct format if type(jetCorrections) != type(('PAYLOAD-LABEL',['CORRECTION-LEVEL-A','CORRECTION-LEVEL-B'], 'MET-LABEL')): raise ValueError, "In addJetCollection: 'jetCorrections' must be 'None' (as a python value w/o quotation marks), or of type ('PAYLOAD-LABEL', ['CORRECTION-LEVEL-A', \ 'CORRECTION-LEVEL-B', ...], 'MET-LABEL'). Note that 'MET-LABEL' can be set to 'None' (as a string in quotation marks) in case you do not want to apply MET(Type1) \ corrections." ## determine type of jet constituents from jetSource; supported ## jet constituent types are calo, pf, jpt, for pf also particleflow ## is aloowed as part of the jetSource label, which might be used ## in CommonTools.ParticleFlow _type="NONE" if jetCorrections[0].count('PF')>0: _type='PF' elif jetCorrections[0].count('Calo')>0: _type='Calo' elif jetCorrections[0].count('JPT')>0: _type='JPT' else: raise TypeError, "In addJetCollection: Jet energy corrections are only supported for PF, JPT and Calo jets." from PhysicsTools.PatAlgos.recoLayer0.jetCorrFactors_cfi import patJetCorrFactors if 'patJetCorrFactors'+_labelName+postfix in knownModules : _newPatJetCorrFactors=getattr(process, 'patJetCorrFactors'+_labelName+postfix) _newPatJetCorrFactors.src=jetSource else : setattr(process, 'patJetCorrFactors'+_labelName+postfix, patJetCorrFactors.clone(src=jetSource)) _newPatJetCorrFactors=getattr(process, "patJetCorrFactors"+_labelName+postfix) _newPatJetCorrFactors.payload=jetCorrections[0] _newPatJetCorrFactors.levels=jetCorrections[1] ## check whether L1Offset or L1FastJet is part of levels error=False for x in jetCorrections[1]: if x == 'L1Offset' : if not error : _newPatJetCorrFactors.useNPV=True _newPatJetCorrFactors.primaryVertices='offlinePrimaryVertices' ## we set this to True now as a L1 correction type should appear only once ## otherwise levels is miss configured error=True else: raise ValueError, "In addJetCollection: Correction levels for jet energy corrections are miss configured. An L1 correction type should appear not more than \ once. Check the list of correction levels you requested to be applied: ", jetCorrections[1] if x == 'L1FastJet' : if not error : if _type == "JPT" : raise TypeError, "In addJetCollection: L1FastJet corrections are only supported for PF and Calo jets." ## configure module _newPatJetCorrFactors.useRho=True _newPatJetCorrFactors.rho=cms.InputTag('kt6'+_type+'Jets', 'rho') ## we set this to True now as a L1 correction type should appear only once ## otherwise levels is miss configured error=True else: raise ValueError, "In addJetCollection: Correction levels for jet energy corrections are miss configured. An L1 correction type should appear not more than \ once. Check the list of correction levels you requested to be applied: ", jetCorrections[1] _newPatJets.jetCorrFactorsSource=cms.VInputTag(cms.InputTag('patJetCorrFactors'+_labelName+postfix)) ## configure MET(Type1) corrections if jetCorrections[2].lower() != 'none' and jetCorrections[2] != '': if not jetCorrections[2].lower() == 'type-1' and not jetCorrections[2].lower() == 'type-2': raise valueError, "In addJetCollection: Wrong choice of MET corrections for new jet collection. Possible choices are None (or empty string), Type-1, Type-2 (i.e.\ Type-1 and Type-2 corrections applied). This choice is not case sensitive. Your choice was: ", jetCorrections[2] if _type == "JPT": raise ValueError, "In addJecCollection: MET(type1) corrections are not supported for JPTJets. Please set the MET-LABEL to \"None\" (as string in quatiation \ marks) and use raw tcMET together with JPTJets." ## set up jet correctors for MET corrections from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL1Fastjet from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL1Offset from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL2Relative from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL3Absolute from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFResidual setattr(process, jetCorrections[0]+'L1FastJet', ak5PFL1Fastjet.clone(algorithm=jetCorrections[0], srcRho=cms.InputTag('kt6'+_type+'Jets','rho'))) setattr(process, jetCorrections[0]+'L1Offset', ak5PFL1Offset.clone(algorithm=jetCorrections[0])) setattr(process, jetCorrections[0]+'L2Relative', ak5PFL2Relative.clone(algorithm=jetCorrections[0])) setattr(process, jetCorrections[0]+'L3Absolute', ak5PFL3Absolute.clone(algorithm=jetCorrections[0])) setattr(process, jetCorrections[0]+'L2L3Residual', ak5PFResidual.clone(algorithm=jetCorrections[0])) setattr(process, jetCorrections[0]+'CombinedCorrector', cms.ESProducer( 'JetCorrectionESChain', correctors = cms.vstring())) for x in jetCorrections[1]: if x != 'L1FastJet' and x != 'L1Offset' and x != 'L2Relative' and x != 'L3Absolute' and x != 'L2L3Residual': raise ValueError, 'In addJetCollection: Unsupported JEC for MET(Type1). Currently supported jet correction levels are L1FastJet, L1Offset, L2Relative, \ L3Asolute, L2L3Residual. Requested was:', x else: getattr(process, jetCorrections[0]+'CombinedCorrector').correctors.append(jetCorrections[0]+x) ## set up MET(Type1) correction modules if _type == 'Calo': from JetMETCorrections.Type1MET.caloMETCorrections_cff import caloJetMETcorr from JetMETCorrections.Type1MET.caloMETCorrections_cff import caloType1CorrectedMet from JetMETCorrections.Type1MET.caloMETCorrections_cff import caloType1p2CorrectedMet setattr(process,jetCorrections[0]+'JetMETcorr'+postfix, caloJetMETcorr.clone(src=jetSource,srcMET = "corMetGlobalMuons",jetCorrections = cms.string(jetCorrections[0]+'CombinedCorrector'+postfix))) setattr(process,jetCorrections[0]+'Type1CorMet'+postfix, caloType1CorrectedMet.clone(src = "corMetGlobalMuons"+postfix,srcType1Corrections = cms.VInputTag(cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'type1')))) setattr(process,jetCorrections[0]+'Type1p2CorMet'+postfix,caloType1p2CorrectedMet.clone(src = "corMetGlobalMuons"+postfix,srcType1Corrections = cms.VInputTag(cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'type1')),srcUnclEnergySums = cms.VInputTag(cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'type2'),cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'offset'),cms.InputTag('muonCaloMETcorr'+postfix)))) elif _type == 'PF': from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfCandsNotInJet from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfJetMETcorr from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfCandMETcorr from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfType1CorrectedMet from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfType1p2CorrectedMet setattr(process,jetCorrections[0]+'CandsNotInJet'+postfix,pfCandsNotInJet.clone(topCollection = jetSource)) setattr(process,jetCorrections[0]+'CandMETcorr'+postfix, pfCandMETcorr.clone(src = cms.InputTag(jetCorrections[0]+'CandsNotInJet'+postfix))) setattr(process,jetCorrections[0]+'JetMETcorr'+postfix, pfJetMETcorr.clone(src = jetSource)) setattr(process,jetCorrections[0]+'Type1CorMet'+postfix, pfType1CorrectedMet.clone(srcType1Corrections = cms.VInputTag(cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'type1')))) setattr(process,jetCorrections[0]+'Type1p2CorMet'+postfix, pfType1p2CorrectedMet.clone(srcType1Corrections = cms.VInputTag(cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'type1')),srcUnclEnergySums = cms.VInputTag(cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'type2'),cms.InputTag(jetCorrections[0]+'JetMETcorr'+postfix, 'offset'),cms.InputTag(jetCorrections[0]+'CandMETcorr'+postfix)))) ## common configuration for Calo and PF if ('L1FastJet' in jetCorrections[1] or 'L1Fastjet' in jetCorrections[1]): getattr(process,jetCorrections[0]+'JetMETcorr'+postfix).offsetCorrLabel = cms.string(jetCorrections[0]+'L1FastJet') elif ('L1Offset' in jetCorrections[1]): getattr(process,jetCorrections[0]+'JetMETcorr'+postfix).offsetCorrLabel = cms.string(jetCorrections[0]+'L1Offset') else: getattr(process,jetCorrections[0]+'JetMETcorr'+postfix).offsetCorrLabel = cms.string('') from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs if jetCorrections[2].lower() == 'type-1': setattr(process, 'patMETs'+_labelName+postfix, patMETs.clone(metSource = cms.InputTag(jetCorrections[0]+'Type1CorMet'+postfix), addMuonCorrections = False)) elif jetCorrections[2].lower() == 'type-1': setattr(process, 'patMETs'+_labelName+postfix, patMETs.clone(metSource = cms.InputTag(jetCorrections[0]+'Type1p2CorMet'+postfix), addMuonCorrections = False)) else: ## switch jetCorrFactors off _newPatJets.addJetCorrFactors=False
from JetMETCorrections.Configuration.JetCorrectors_cff import ak4PFCHSL1FastL2L3Corrector,ak4PFCHSL1FastjetCorrector,ak4PFCHSL2RelativeCorrector,ak4PFCHSL3AbsoluteCorrector process.ak4PFCHSL1FastL2L3Corrector = ak4PFCHSL1FastL2L3Corrector.clone() from JetMETCorrections.Type1MET.correctedMet_cff import pfMetT1 from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.pfMet = pfMet.clone(src = "packedPFCandidates") process.pfMet.calculateSignificance = False corrPfMetType1.jetCorrLabel = cms.InputTag('ak4PFCHSL1FastL2L3Corrector') corrPfMetType1.src = cms.InputTag('ak4PFJetsCHS') corrPfMetType1.offsetCorrLabel = cms.InputTag("ak4PFCHSL1FastjetCorrector") process.pfMetT1 = pfMetT1.clone() process.patMETs = patMETs.clone() process.patMETs.addGenMET = False # There's no point in recalculating this, and we can't remake it since we don't have genParticles beyond |eta|=5 if doMETReclustering: process.redoPatMET+=process.ak4PFJetsCHS process.redoPatMET+=process.pfMet process.redoPatMET+=process.ak4PFCHSL1FastjetCorrector process.redoPatMET+=process.ak4PFCHSL2RelativeCorrector process.redoPatMET+=process.ak4PFCHSL3AbsoluteCorrector process.redoPatMET+=process.ak4PFCHSL1FastL2L3Corrector process.redoPatMET+=process.corrPfMetType1 process.redoPatMET+=process.pfMetT1 process.redoPatMET+=process.patMETs
process.load( "JetMETCorrections.Type1MET.correctionTermsPfMetType0PFCandidate_cff") process.load( "JetMETCorrections.Type1MET.correctionTermsPfMetType0RecoTrack_cff") process.load("JetMETCorrections.Type1MET.correctionTermsPfMetShiftXY_cff") if data: process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_data else: process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_mc process.load("JetMETCorrections.Type1MET.correctedMet_cff") from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPfMetT0pcT1Txy = patMETs.clone( metSource=cms.InputTag('pfMetT0pcT1Txy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.npartfilter = cms.EDFilter("NPartonFilter") # Let it run if (data): process.p = cms.Path(process.scrapingVeto + process.metFilters + process.correctionTermsPfMetType1Type2 + process.correctionTermsPfMetType0RecoTrack + process.correctionTermsPfMetType0PFCandidate + process.correctionTermsPfMetShiftXY + process.pfMetT0rt + process.pfMetT0rtT1 + process.pfMetT0pc + process.pfMetT0pcT1 + process.pfMetT0rtTxy + process.pfMetT0rtT1Txy + process.pfMetT0pcTxy + process.pfMetT0pcT1Txy +
* process.patType1CorrectedPFMet * process.patType1p2CorrectedPFMet ) # -------------------------------------------------------------------------------- from PhysicsTools.PatUtils.tools.metUncertaintyTools import runMEtUncertainties runMEtUncertainties(process, "selectedPatElectrons", "", "selectedPatMuons", "selectedPatTaus", "selectedPatJetsAK5PF") ### build type1/2 correction also on top of pfMETnoPU process.patType1CorrectedPFMetNoPU = process.patType1CorrectedPFMet.clone() from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPFMetNoPU = patMETs.clone( metSource=cms.InputTag("pfMETNoPU"), addMuonCorrections=cms.bool(False), genMETSource=cms.InputTag("genMetTrue") ) # process.patPFMetNoPU = process.patMets.clone() # process.patPFMetNoPU.metSource = cms.InputTag('pfMETNoPU'), process.patType1CorrectedPFMetNoPU.src = cms.InputTag("patPFMetNoPU") process.patType1p2CorrectedPFMetNoPU = process.patType1p2CorrectedPFMet.clone() process.patType1p2CorrectedPFMetNoPU.src = cms.InputTag("patPFMetNoPU") from PhysicsTools.PatUtils.tools.metUncertaintyTools import runMEtUncertainties process.dump = cms.EDAnalyzer("EventContentAnalyzer") # drop the meta data for dropped data # process.out.dropMetaData = cms.string("DROPPED") process.load("RecoVertex/AdaptiveVertexFinder/inclusiveVertexing_cff")
def runPatMET(process): from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPfMetT0rt = patMETs.clone(metSource=cms.InputTag('pfMetT0rt'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT0rtT1 = patMETs.clone( metSource=cms.InputTag('pfMetT0rtT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT0pc = patMETs.clone(metSource=cms.InputTag('pfMetT0pc'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT0pcT1 = patMETs.clone( metSource=cms.InputTag('pfMetT0pcT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT0rtTxy = patMETs.clone( metSource=cms.InputTag('pfMetT0rtTxy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT0rtT1Txy = patMETs.clone( metSource=cms.InputTag('pfMetT0rtT1Txy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT0pcTxy = patMETs.clone( metSource=cms.InputTag('pfMetT0pcTxy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT0pcT1Txy = patMETs.clone( metSource=cms.InputTag('pfMetT0pcT1Txy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT1 = patMETs.clone(metSource=cms.InputTag('pfMetT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patPfMetT1Txy = patMETs.clone(metSource=cms.InputTag('pfMetT1Txy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patCaloMetT1 = patMETs.clone(metSource=cms.InputTag('caloMetT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patCaloMetT1T2 = patMETs.clone( metSource=cms.InputTag('caloMetT1T2'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patMet = patMETs.clone(metSource=cms.InputTag('pfMet'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patMVAMet = patMETs.clone(metSource=cms.InputTag('pfMEtMVA'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.patMVAMetMuTau = patMETs.clone( metSource=cms.InputTag('pfMetMVAMuTau'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False)) process.runPatMetSequence = cms.Sequence( process.patPfMetT0rt * process.patPfMetT0rtT1 * process.patPfMetT0pc * process.patPfMetT0pcT1 * process.patPfMetT0rtTxy * process.patPfMetT0rtT1Txy * process.patPfMetT0pcTxy * process.patPfMetT0pcT1Txy * process.patPfMetT1 * process.patPfMetT1Txy * process.patCaloMetT1 * process.patCaloMetT1T2 * process.patMet * process.patMVAMet * process.patMVAMetMuTau)
def toolCode(self, process): """ Tool code implementation """ ## initialize parameters labelName = "patJets" + self._parameters["labelName"].value postfix = self._parameters["postfix"].value jetSource = self._parameters["jetSource"].value algo = self._parameters["algo"].value jetCorrections = self._parameters["jetCorrections"].value btagDiscriminators = list(self._parameters["btagDiscriminators"].value) btagInfos = list(self._parameters["btagInfos"].value) jetTrackAssociation = self._parameters["jetTrackAssociation"].value outputModules = list(self._parameters["outputModules"].value) ## a list of all producer modules, which are already known to process knownModules = process.producerNames().split() ## determine whether btagging information is required or not if btagDiscriminators.count("None") > 0: btagDiscriminators.remove("None") if btagInfos.count("None") > 0: btagInfos.remove("None") bTagging = len(btagDiscriminators) > 0 or len(btagInfos) > 0 ## construct postfix label for auxiliary modules; this postfix ## label will start with a capitalized first letter following ## the CMS nameing conventions and for improved readablility _labelName = labelName[:1].upper() + labelName[1:] # _labelName=labelName ## determine jet algorithm from jetSource; supported algo types ## are ak, kt, sc, ic. This loop expects that the algo type is ## followed by a single integer corresponding to the opening ## angle parameter dR times 10 (examples ak5, kt4, kt6, ...) _algo = algo # jetSource=cms.InputTag("ak5PFJets") for x in ["ak", "kt", "sc", "ic"]: if jetSource.getModuleLabel().lower().find(x) > -1: _algo = jetSource.getModuleLabel()[ jetSource.getModuleLabel().lower().find(x) : jetSource.getModuleLabel().lower().find(x) + 3 ] # print _algo ## add new patJets to process (keep instance for later further modifications) from PhysicsTools.PatAlgos.producersLayer1.jetProducer_cfi import patJets if labelName in knownModules: _newPatJets = getattr(process, labelName + postfix) _newPatJets.jetSource = jetSource else: # setattr(process, labelName, patJets.clone(jetSource=jetSource)) setattr(process, labelName + postfix, patJets.clone(jetSource=jetSource)) _newPatJets = getattr(process, labelName + postfix) knownModules.append(labelName + postfix) ## add new selectedPatJets to process from PhysicsTools.PatAlgos.selectionLayer1.jetSelector_cfi import selectedPatJets if "selected" + _labelName + postfix in knownModules: _newSelectedPatJets = getattr(process, "selected" + _labelName + postfix) _newSelectedPatJets.src = labelName + postfix else: setattr(process, "selected" + _labelName + postfix, selectedPatJets.clone(src=labelName + postfix)) knownModules.append("selected" + _labelName + postfix) ## set postfix label to '' if there is no labelName given. In this case all ## modules should keep there names w/o postfixes. This will cover the case ## of switchJectCollection if self._parameters["labelName"].value == "": _labelName = "" ## add new patJetPartonMatch to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetMatch_cfi import patJetPartonMatch if "patJetPartonMatch" + _labelName + postfix in knownModules: _newPatJetPartonMatch = getattr(process, "patJetPartonMatch" + _labelName + postfix) _newPatJetPartonMatch.src = jetSource else: setattr(process, "patJetPartonMatch" + _labelName + postfix, patJetPartonMatch.clone(src=jetSource)) knownModules.append("patJetPartonMatch" + _labelName + postfix) ## add new patJetGenJetMatch to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetMatch_cfi import patJetGenJetMatch if "patJetGenJetMatch" + _labelName + postfix in knownModules: _newPatJetGenJetMatch = getattr(process, "patJetGenJetMatch" + _labelName + postfix) _newPatJetGenJetMatch.src = jetSource _newPatJetGenJetMatch.matched = _algo.lower() + "GenJets" + postfix else: setattr( process, "patJetGenJetMatch" + _labelName + postfix, patJetGenJetMatch.clone(src=jetSource, matched=_algo + "GenJets"), ) knownModules.append("patJetGenJetMatch" + _labelName + postfix) ## add new patJetPartonAssociation to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetFlavourId_cff import patJetPartonAssociation if "patJetPartonAssociation" + _labelName + postfix in knownModules: _newPatJetPartonAssociation = getattr( process, "patJetPartonAssociation" + _labelName + postfix, patJetPartonAssociation.clone(jets=jetSource) ) _newPatJetPartonAssociation.jets = jetSource else: setattr( process, "patJetPartonAssociation" + _labelName + postfix, patJetPartonAssociation.clone(jets=jetSource) ) knownModules.append("patJetPartonAssociation" + _labelName + postfix) ## add new patJetPartonAssociation to process from PhysicsTools.PatAlgos.mcMatchLayer0.jetFlavourId_cff import patJetFlavourAssociation if "patJetFlavourAssociation" + _labelName + postfix in knownModules: _newPatJetFlavourAssociation = getattr( process, "patJetFlavourAssociation" + _labelName + postfix, patJetFlavourAssociation.clone(srcByReference="patJetPartonAssociation" + _labelName + postfix), ) _newPatJetFlavourAssociation.srcByReference = "patJetPartonAssociation" + _labelName + postfix else: setattr( process, "patJetFlavourAssociation" + _labelName + postfix, patJetFlavourAssociation.clone(srcByReference="patJetPartonAssociation" + _labelName + postfix), ) knownModules.append("patJetFlavourAssociation" + _labelName + postfix) ## modify new patJets collection accordingly _newPatJets.genJetMatch.setModuleLabel("patJetGenJetMatch" + _labelName + postfix) _newPatJets.genPartonMatch.setModuleLabel("patJetPartonMatch" + _labelName + postfix) _newPatJets.JetPartonMapSource.setModuleLabel("patJetFlavourAssociation" + _labelName + postfix) ## add jetTrackAssociation for btagging (or jetTracksAssociation only) if required by user if jetTrackAssociation or bTagging: ## add new jetTracksAssociationAtVertex to process from RecoJets.JetAssociationProducers.ak5JTA_cff import ak5JetTracksAssociatorAtVertex if "jetTracksAssociationAtVertex" + _labelName + postfix in knownModules: _newJetTracksAssociationAtVertex = getattr( process, "jetTracksAssociatorAtVertex" + _labelName + postfix ) _newJetTracksAssociationAtVertex.jets = jetSource else: setattr( process, "jetTracksAssociatorAtVertex" + _labelName + postfix, ak5JetTracksAssociatorAtVertex.clone(jets=jetSource), ) knownModules.append("jetTracksAssociationAtVertex" + _labelName + postfix) ## add new patJetCharge to process from PhysicsTools.PatAlgos.recoLayer0.jetTracksCharge_cff import patJetCharge if "patJetCharge" + _labelName + postfix in knownModules: _newPatJetCharge = getattr(process, "patJetCharge" + _labelName + postfix) _newPatJetCharge.src = "jetTracksAssociatorAtVertex" + _labelName + postfix else: setattr( process, "patJetCharge" + _labelName + postfix, patJetCharge.clone(src="jetTracksAssociatorAtVertex" + _labelName + postfix), ) knownModules.append("patJetCharge" + _labelName + postfix) ## modify new patJets collection accordingly _newPatJets.addAssociatedTracks = True _newPatJets.trackAssociationSource = cms.InputTag("jetTracksAssociatorAtVertex" + _labelName + postfix) _newPatJets.addJetCharge = True _newPatJets.jetChargeSource = cms.InputTag("patJetCharge" + _labelName + postfix) else: ## modify new patJets collection accordingly _newPatJets.addAssociatedTracks = False _newPatJets.trackAssociationSource = "" _newPatJets.addJetCharge = False _newPatJets.jetChargeSource = "" ## run btagging if required by user if bTagging: ## expand tagInfos to what is explicitely required by user + implicit ## requirements that come in from one or the other discriminator requiredTagInfos = list(btagInfos) for btagDiscr in btagDiscriminators: for requiredTagInfo in supportedBtagDiscr[btagDiscr]: tagInfoCovered = False for tagInfo in requiredTagInfos: if requiredTagInfo == tagInfo: tagInfoCovered = True break if not tagInfoCovered: requiredTagInfos.append(requiredTagInfo) ## load sequences and setups needed fro btagging ## This loads all available btagger, but the ones we need are added to the process by hand lader. Only needed to get the ESProducer. Needs improvement # loadWithPostFix(process,"RecoBTag.Configuration.RecoBTag_cff",postfix) process.load("RecoBTag.Configuration.RecoBTag_cff") # addESProducers(process,'RecoBTag.Configuration.RecoBTag_cff') import RecoBTag.Configuration.RecoBTag_cff as btag ## prepare setups for simple secondary vertex infos setattr(process, "simpleSecondaryVertex2Trk", simpleSecondaryVertex2Trk) ## prepare setups for transient tracks setattr(process, "TransientTrackBuilderESProducer", TransientTrackBuilderESProducer) ## setup all required btagInfos : we give a dedicated treatment for all five different ## types of tagINfos here. A common treatment is possible but might require a more ## general approach anyway in coordination with the btaggin POG. for btagInfo in requiredTagInfos: if "impactParameterTagInfos" in btagInfo: setattr( process, btagInfo + _labelName + postfix, btag.impactParameterTagInfos.clone( jetTracks=cms.InputTag("jetTracksAssociatorAtVertex" + _labelName + postfix) ), ) if "secondaryVertexTagInfos" in btagInfo: setattr( process, btagInfo + _labelName + postfix, btag.secondaryVertexTagInfos.clone( trackIPTagInfos=cms.InputTag("impactParameterTagInfos" + _labelName + postfix) ), ) if "secondaryVertexNegativeTagInfos" in btagInfo: setattr( process, btagInfo + _labelName + postfix, btag.secondaryVertexNegativeTagInfos.clone( trackIPTagInfos=cms.InputTag("impactParameterTagInfos" + _labelName + postfix) ), ) if "softElectronTagInfos" in btagInfo: setattr( process, btagInfo + _labelName + postfix, btag.softElectronTagInfos.clone(jets=cms.InputTag(_newJetCollection)), ) if "softMuonTagInfos" in btagInfo: setattr( process, btagInfo + _labelName + postfix, btag.softMuonTagInfos.clone(jets=cms.InputTag(_newJetCollection)), ) ## setup all required btagDiscriminators for btagDiscr in btagDiscriminators: setattr( process, btagDiscr + _labelName + postfix, getattr(btag, btagDiscr).clone( tagInfos=cms.VInputTag( *[cms.InputTag(x + _labelName + postfix) for x in supportedBtagDiscr[btagDiscr]] ) ), ) ## replace corresponding tags for pat jet production _newPatJets.tagInfoSources = cms.VInputTag(*[cms.InputTag(x + _labelName + postfix) for x in btagInfos]) _newPatJets.discriminatorSources = cms.VInputTag( *[cms.InputTag(x + _labelName + postfix) for x in btagDiscriminators] ) else: _newPatJets.addBTagInfo = False ## adjust output module; these collections will be empty anyhow, but we do it to stay clean for outputModule in outputModules: if hasattr(process, outputModule): getattr(process, outputModule).outputCommands.append( "drop *_" + "selected" + _labelName + postfix + "_tagInfos_*" ) ## add jet correction factors if required by user if jetCorrections != None: ## check for the correct format if type(jetCorrections) != type( ("PAYLOAD-LABEL", ["CORRECTION-LEVEL-A", "CORRECTION-LEVEL-B"], "MET-LABEL") ): raise ValueError, "In addJetCollection: 'jetCorrections' must be 'None' (as a python value w/o quotation marks), or of type ('PAYLOAD-LABEL', ['CORRECTION-LEVEL-A', \ 'CORRECTION-LEVEL-B', ...], 'MET-LABEL'). Note that 'MET-LABEL' can be set to 'None' (as a string in quotation marks) in case you do not want to apply MET(Type1) \ corrections." ## determine type of jet constituents from jetSource; supported ## jet constituent types are calo, pf, jpt, for pf also particleflow ## is aloowed as part of the jetSource label, which might be used ## in CommonTools.ParticleFlow _type = "NONE" if jetCorrections[0].count("PF") > 0: _type = "PF" elif jetCorrections[0].count("Calo") > 0: _type = "Calo" elif jetCorrections[0].count("JPT") > 0: _type = "JPT" else: raise TypeError, "In addJetCollection: Jet energy corrections are only supported for PF, JPT and Calo jets." from PhysicsTools.PatAlgos.recoLayer0.jetCorrFactors_cfi import patJetCorrFactors if "patJetCorrFactors" + _labelName + postfix in knownModules: _newPatJetCorrFactors = getattr(process, "patJetCorrFactors" + _labelName + postfix) _newPatJetCorrFactors.src = jetSource else: setattr(process, "patJetCorrFactors" + _labelName + postfix, patJetCorrFactors.clone(src=jetSource)) _newPatJetCorrFactors = getattr(process, "patJetCorrFactors" + _labelName + postfix) _newPatJetCorrFactors.payload = jetCorrections[0] _newPatJetCorrFactors.levels = jetCorrections[1] ## check whether L1Offset or L1FastJet is part of levels error = False for x in jetCorrections[1]: if x == "L1Offset": if not error: _newPatJetCorrFactors.useNPV = True _newPatJetCorrFactors.primaryVertices = "offlinePrimaryVertices" ## we set this to True now as a L1 correction type should appear only once ## otherwise levels is miss configured error = True else: raise ValueError, "In addJetCollection: Correction levels for jet energy corrections are miss configured. An L1 correction type should appear not more than \ once. Check the list of correction levels you requested to be applied: ", jetCorrections[ 1 ] if x == "L1FastJet": if not error: if _type == "JPT": raise TypeError, "In addJetCollection: L1FastJet corrections are only supported for PF and Calo jets." ## configure module _newPatJetCorrFactors.useRho = True _newPatJetCorrFactors.rho = cms.InputTag("kt6" + _type + "Jets", "rho") ## we set this to True now as a L1 correction type should appear only once ## otherwise levels is miss configured error = True else: raise ValueError, "In addJetCollection: Correction levels for jet energy corrections are miss configured. An L1 correction type should appear not more than \ once. Check the list of correction levels you requested to be applied: ", jetCorrections[ 1 ] _newPatJets.jetCorrFactorsSource = cms.VInputTag(cms.InputTag("patJetCorrFactors" + _labelName + postfix)) ## configure MET(Type1) corrections if jetCorrections[2].lower() != "none" and jetCorrections[2] != "": if not jetCorrections[2].lower() == "type-1" and not jetCorrections[2].lower() == "type-2": raise valueError, "In addJetCollection: Wrong choice of MET corrections for new jet collection. Possible choices are None (or empty string), Type-1, Type-2 (i.e.\ Type-1 and Type-2 corrections applied). This choice is not case sensitive. Your choice was: ", jetCorrections[ 2 ] if _type == "JPT": raise ValueError, 'In addJecCollection: MET(type1) corrections are not supported for JPTJets. Please set the MET-LABEL to "None" (as string in quatiation \ marks) and use raw tcMET together with JPTJets.' ## set up jet correctors for MET corrections from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL1Fastjet from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL1Offset from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL2Relative from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFL3Absolute from JetMETCorrections.Configuration.JetCorrectionServicesAllAlgos_cff import ak5PFResidual setattr( process, jetCorrections[0] + "L1FastJet", ak5PFL1Fastjet.clone( algorithm=jetCorrections[0], srcRho=cms.InputTag("kt6" + _type + "Jets", "rho") ), ) setattr(process, jetCorrections[0] + "L1Offset", ak5PFL1Offset.clone(algorithm=jetCorrections[0])) setattr(process, jetCorrections[0] + "L2Relative", ak5PFL2Relative.clone(algorithm=jetCorrections[0])) setattr(process, jetCorrections[0] + "L3Absolute", ak5PFL3Absolute.clone(algorithm=jetCorrections[0])) setattr(process, jetCorrections[0] + "L2L3Residual", ak5PFResidual.clone(algorithm=jetCorrections[0])) setattr( process, jetCorrections[0] + "CombinedCorrector", cms.ESProducer("JetCorrectionESChain", correctors=cms.vstring()), ) for x in jetCorrections[1]: if ( x != "L1FastJet" and x != "L1Offset" and x != "L2Relative" and x != "L3Absolute" and x != "L2L3Residual" ): raise ValueError, "In addJetCollection: Unsupported JEC for MET(Type1). Currently supported jet correction levels are L1FastJet, L1Offset, L2Relative, \ L3Asolute, L2L3Residual. Requested was:", x else: getattr(process, jetCorrections[0] + "CombinedCorrector").correctors.append( jetCorrections[0] + x ) ## set up MET(Type1) correction modules if _type == "Calo": from JetMETCorrections.Type1MET.caloMETCorrections_cff import caloJetMETcorr from JetMETCorrections.Type1MET.caloMETCorrections_cff import caloType1CorrectedMet from JetMETCorrections.Type1MET.caloMETCorrections_cff import caloType1p2CorrectedMet setattr( process, jetCorrections[0] + "JetMETcorr" + postfix, caloJetMETcorr.clone( src=jetSource, srcMET="corMetGlobalMuons", jetCorrections=cms.string(jetCorrections[0] + "CombinedCorrector" + postfix), ), ) setattr( process, jetCorrections[0] + "Type1CorMet" + postfix, caloType1CorrectedMet.clone( src="corMetGlobalMuons" + postfix, srcType1Corrections=cms.VInputTag( cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "type1") ), ), ) setattr( process, jetCorrections[0] + "Type1p2CorMet" + postfix, caloType1p2CorrectedMet.clone( src="corMetGlobalMuons" + postfix, srcType1Corrections=cms.VInputTag( cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "type1") ), srcUnclEnergySums=cms.VInputTag( cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "type2"), cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "offset"), cms.InputTag("muonCaloMETcorr" + postfix), ), ), ) elif _type == "PF": from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfCandsNotInJet from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfJetMETcorr from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfCandMETcorr from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfType1CorrectedMet from JetMETCorrections.Type1MET.pfMETCorrections_cff import pfType1p2CorrectedMet setattr( process, jetCorrections[0] + "CandsNotInJet" + postfix, pfCandsNotInJet.clone(topCollection=jetSource), ) setattr( process, jetCorrections[0] + "CandMETcorr" + postfix, pfCandMETcorr.clone(src=cms.InputTag(jetCorrections[0] + "CandsNotInJet" + postfix)), ) setattr(process, jetCorrections[0] + "JetMETcorr" + postfix, pfJetMETcorr.clone(src=jetSource)) setattr( process, jetCorrections[0] + "Type1CorMet" + postfix, pfType1CorrectedMet.clone( srcType1Corrections=cms.VInputTag( cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "type1") ) ), ) setattr( process, jetCorrections[0] + "Type1p2CorMet" + postfix, pfType1p2CorrectedMet.clone( srcType1Corrections=cms.VInputTag( cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "type1") ), srcUnclEnergySums=cms.VInputTag( cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "type2"), cms.InputTag(jetCorrections[0] + "JetMETcorr" + postfix, "offset"), cms.InputTag(jetCorrections[0] + "CandMETcorr" + postfix), ), ), ) ## common configuration for Calo and PF if "L1FastJet" in jetCorrections[1] or "L1Fastjet" in jetCorrections[1]: getattr(process, jetCorrections[0] + "JetMETcorr" + postfix).offsetCorrLabel = cms.string( jetCorrections[0] + "L1FastJet" ) elif "L1Offset" in jetCorrections[1]: getattr(process, jetCorrections[0] + "JetMETcorr" + postfix).offsetCorrLabel = cms.string( jetCorrections[0] + "L1Offset" ) else: getattr(process, jetCorrections[0] + "JetMETcorr" + postfix).offsetCorrLabel = cms.string("") from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs if jetCorrections[2].lower() == "type-1": setattr( process, "patMETs" + _labelName + postfix, patMETs.clone( metSource=cms.InputTag(jetCorrections[0] + "Type1CorMet" + postfix), addMuonCorrections=False, ), ) elif jetCorrections[2].lower() == "type-1": setattr( process, "patMETs" + _labelName + postfix, patMETs.clone( metSource=cms.InputTag(jetCorrections[0] + "Type1p2CorMet" + postfix), addMuonCorrections=False, ), ) else: ## switch jetCorrFactors off _newPatJets.addJetCorrFactors = False
def runPatMET(process): from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPfMetT0rt = patMETs.clone( metSource=cms.InputTag('pfMetT0rt'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT0rtT1 = patMETs.clone( metSource=cms.InputTag('pfMetT0rtT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT0pc = patMETs.clone( metSource=cms.InputTag('pfMetT0pc'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT0pcT1 = patMETs.clone( metSource=cms.InputTag('pfMetT0pcT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT0rtTxy = patMETs.clone( metSource=cms.InputTag('pfMetT0rtTxy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT0rtT1Txy = patMETs.clone( metSource=cms.InputTag('pfMetT0rtT1Txy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT0pcTxy = patMETs.clone( metSource=cms.InputTag('pfMetT0pcTxy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT0pcT1Txy = patMETs.clone( metSource=cms.InputTag('pfMetT0pcT1Txy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT1 = patMETs.clone( metSource=cms.InputTag('pfMetT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patPfMetT1Txy = patMETs.clone( metSource=cms.InputTag('pfMetT1Txy'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patCaloMetT1 = patMETs.clone( metSource=cms.InputTag('caloMetT1'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patCaloMetT1T2 = patMETs.clone( metSource=cms.InputTag('caloMetT1T2'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patMet = patMETs.clone( metSource=cms.InputTag('pfMet'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patMVAMet = patMETs.clone( metSource=cms.InputTag('pfMEtMVA'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.patMVAMetMuTau = patMETs.clone( metSource=cms.InputTag('pfMetMVAMuTau'), addMuonCorrections=cms.bool(False), addGenMET=cms.bool(False) ) process.runPatMetSequence = cms.Sequence( process.patPfMetT0rt * process.patPfMetT0rtT1 * process.patPfMetT0pc * process.patPfMetT0pcT1 * process.patPfMetT0rtTxy * process.patPfMetT0rtT1Txy * process.patPfMetT0pcTxy * process.patPfMetT0pcT1Txy * process.patPfMetT1 * process.patPfMetT1Txy * process.patCaloMetT1 * process.patCaloMetT1T2 * process.patMet * process.patMVAMet * process.patMVAMetMuTau )
import FWCore.ParameterSet.Config as cms # load modules for producing Type 1 / Type 1 + 2 corrections for reco::PFMET objects from JetMETCorrections.Type1MET.correctionTermsPfMetType1Type2_cff import * #from PhysicsTools.PatAlgos.producerLayer1.jetProducer_cfi import patJets #-------------------------------------------------------------------------------- # produce "raw" (uncorrected) pat::MET of PF-type from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs patPFMet = patMETs.clone(metSource='pfMet') #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- # select collection of pat::Jets entering Type 1 + 2 MET corrections # selectedPatJetsForMetT1T2Corr = cms.EDFilter("PATJetSelector", src=cms.InputTag('patJets'), cut=cms.string('abs(eta) < 9.9'), filter=cms.bool(False)) selectedPatJetsForMetT2Corr = cms.EDFilter("PATJetSelector", src=cms.InputTag('patJets'), cut=cms.string('abs(eta) > 9.9'), filter=cms.bool(False)) #-------------------------------------------------------------------------------- #-------------------------------------------------------------------------------- # produce Type 1 + 2 MET corrections for pat::Jets of PF-type import PhysicsTools.PatUtils.pfJetMETcorrInputProducerTPatJetPATJetCorrExtractor_cfi as _mod
def addJetMETExtra(process, isData=False, applyResJEC=True, isAOD=False) : #process.load('JetMETCorrections.Configuration.DefaultJEC_cff') ##-------------------- Import the Jet RECO modules ----------------------- #process.load('RecoJets.Configuration.RecoPFJets_cff') ##-------------------- Turn-on the FastJet density calculation ----------------------- #process.kt6PFJets.doRhoFastjet = True ##-------------------- Turn-on the FastJet jet area calculation for your favorite algorithm ----------------------- #process.ak5PFJets.doAreaFastjet = True #process.FastJetSequence = cms.Sequence(process.kt6PFJets * process.ak5PFJets) if(isData) : if(applyResJEC) : corrections = ['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual'] else : corrections = ['L1FastJet','L2Relative','L3Absolute'] runOnData(process, ['All']) else : corrections = ['L1FastJet','L2Relative','L3Absolute'] if( isAOD ) : process.patJets.addTagInfos = cms.bool(False) print "Jet corrections used ", corrections #from PhysicsTools.PatAlgos.recoLayer0.jetCorrFactors_cfi import * #process.patJetCorrFactors.levels = ['L1Offset', 'L2Relative', 'L3Absolute'] #process.patJetCorrFactors.useRho = cms.bool(True) print "*** Switching to PF ak5 jets ***" switchJetCollection(process,cms.InputTag('ak5PFJets'), doJTA = True, doBTagging = True, jetCorrLabel = ('AK5PF',corrections), doType1MET = False, genJetCollection = cms.InputTag("ak5GenJets"), doJetID = True, jetIdLabel = "ak5" ) #if( isAOD ) : process.patJets.addTagInfos = cms.bool(False) process.patJets.addTagInfos = cms.bool(True) print "*** Adding PF MET ***" ##process.load("JetMETCorrections.Type1MET.pfMETCorrectionType0_cfi") ##process.pfType1CorrectedMet.applyType0Corrections = cms.bool(False) ##process.pfType1CorrectedMet.srcType1Corrections = cms.VInputTag( ## cms.InputTag('pfMETcorrType0'), ## cms.InputTag('pfJetMETcorr', 'type1') ## ) ##addPfMET(process, 'PF') process.load("JetMETCorrections.Type1MET.correctionTermsPfMetType1Type2_cff") if(isData) : process.corrPfMetType1.jetCorrLabel = cms.string("ak5PFL1FastL2L3Residual") else : process.corrPfMetType1.jetCorrLabel = cms.string("ak5PFL1FastL2L3") process.load("JetMETCorrections.Type1MET.correctionTermsPfMetType0PFCandidate_cff") #process.load("JetMETCorrections.Type1MET.correctionTermsPfMetType0RecoTrack_cff") process.load("JetMETCorrections.Type1MET.correctionTermsPfMetShiftXY_cff") if(isData) : process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_data else : process.corrPfMetShiftXY.parameter = process.pfMEtSysShiftCorrParameters_2012runABCDvsNvtx_mc process.load("JetMETCorrections.Type1MET.correctedMet_cff") process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.RecoMetSequence = cms.Sequence(process.pfCandsNotInJet * process.pfJetMETcorr * process.pfCandMETcorr * process.pfchsMETcorr * process.corrPfMetType1 * process.correctionTermsPfMetType1Type2 * process.correctionTermsPfMetType0PFCandidate * process.correctionTermsPfMetShiftXY * process.pfMetT0pcT1Txy) from PhysicsTools.PatAlgos.producersLayer1.metProducer_cfi import patMETs process.patPfMetT0pcT1Txy = patMETs.clone( metSource = cms.InputTag('pfMetT0pcT1Txy'), addMuonCorrections = cms.bool(False), addGenMET = cms.bool(False) ) print "*** Adding PileupJetID ***" process.load("CMGTools.External.pujetidsequence_cff") # Add user residual correction for Data from Mikko if(isData and not applyResJEC ) : process.selectedPatJetsResCor = resCorJet.clone() process.selectedPatJetsResCor.inputJets = cms.InputTag("selectedPatJets") process.selectedPatJetsResCor.JECSrcFile = cms.FileInPath("MiniTree/Utilities/data/53XPTFIXV2_DATA_L2L3Residual_AK5PFchs.txt") process.selectedPatJetsResCor.rho = cms.InputTag('kt6PFJets', 'rho') process.puJetIdResCor = process.puJetId.clone() process.puJetIdResCor.jets = cms.InputTag("selectedPatJetsResCor") process.puJetMvaResCor = process.puJetMva.clone() process.puJetMvaResCor.jets = cms.InputTag("selectedPatJetsResCor") process.puJetMvaResCor.jetids = cms.InputTag("puJetIdResCor") process.ResJetCorSequence = cms.Sequence(process.selectedPatJetsResCor*process.puJetIdResCor*process.puJetMvaResCor)