def addDiscardedPFCandidates(process, inputCollection, verbose=False):

    task = getPatAlgosToolsTask(process)

    process.primaryVertexAssociationDiscardedCandidates = process.primaryVertexAssociation.clone(
        particles = inputCollection,
        )
    task.add(process.primaryVertexAssociationDiscardedCandidates)
    process.packedPFCandidatesDiscarded = process.packedPFCandidates.clone(
        inputCollection = inputCollection,
        PuppiNoLepSrc = cms.InputTag(""),
        PuppiSrc = cms.InputTag(""),
        secondaryVerticesForWhiteList = cms.VInputTag(),
        vertexAssociator = cms.InputTag("primaryVertexAssociationDiscardedCandidates","original")
        )
    task.add(process.packedPFCandidatesDiscarded)
    addKeepStatement(process, "keep patPackedCandidates_packedPFCandidates_*_*",
                             ["keep patPackedCandidates_packedPFCandidatesDiscarded_*_*"],
                              verbose=verbose)
    # Now make the mixed map for rekeying
    from PhysicsTools.PatAlgos.slimming.packedPFCandidateRefMixer_cfi import packedPFCandidateRefMixer
    process.oldPFCandToPackedOrDiscarded = packedPFCandidateRefMixer.clone(
        pf2pf = cms.InputTag(inputCollection.moduleLabel),
        pf2packed = cms.VInputTag(cms.InputTag("packedPFCandidates"), cms.InputTag("packedPFCandidatesDiscarded"))
    )
    task.add(process.oldPFCandToPackedOrDiscarded)
    # Fix slimmed muon keying
    process.slimmedMuons.pfCandidates = cms.VInputTag(cms.InputTag(inputCollection.moduleLabel), inputCollection)
    process.slimmedMuons.packedPFCandidates = cms.VInputTag(cms.InputTag("packedPFCandidates"), cms.InputTag("packedPFCandidatesDiscarded"))
  
    #MM point to uncleaned collection for hadronic taus, to avoid remaking them
    #no impact expected, as no muons are included here
    process.slimmedTaus.packedPFCandidates=cms.InputTag("packedPFCandidatesBackup")
def addDiscardedPFCandidates(process, inputCollection, verbose=False):
    process.primaryVertexAssociationDiscardedCandidates = process.primaryVertexAssociation.clone(
        particles=inputCollection, )
    process.packedPFCandidatesDiscarded = process.packedPFCandidates.clone(
        inputCollection=inputCollection,
        PuppiNoLepSrc=cms.InputTag(""),
        PuppiSrc=cms.InputTag(""),
        secondaryVerticesForWhiteList=cms.VInputTag(),
        vertexAssociator=cms.InputTag(
            "primaryVertexAssociationDiscardedCandidates", "original"))
    addKeepStatement(
        process,
        "keep patPackedCandidates_packedPFCandidates_*_*",
        ["keep patPackedCandidates_packedPFCandidatesDiscarded_*_*"],
        verbose=verbose)
    # Now make the mixed map for rekeying
    from PhysicsTools.PatAlgos.slimming.packedPFCandidateRefMixer_cfi import packedPFCandidateRefMixer
    process.oldPFCandToPackedOrDiscarded = packedPFCandidateRefMixer.clone(
        pf2pf=cms.InputTag(inputCollection.moduleLabel),
        pf2packed=cms.VInputTag(cms.InputTag("packedPFCandidates"),
                                cms.InputTag("packedPFCandidatesDiscarded")))
    # Fix slimmed muon keying
    process.slimmedMuons.pfCandidates = cms.VInputTag(
        cms.InputTag(inputCollection.moduleLabel), inputCollection)
    process.slimmedMuons.packedPFCandidates = cms.VInputTag(
        cms.InputTag("packedPFCandidates"),
        cms.InputTag("packedPFCandidatesDiscarded"))
def customizeAll(process, verbose=False):
    
    #disabled for now, backup in case 90X needs similar fix
    #process = customizeGSFixForPAT(process)

    loadJetMETBTag(process)
    backupJetSequences = backupJetsFirstStep(process)

    addBadMuonFilters(process)    
    badMuons = cms.VInputTag( cms.InputTag("badGlobalMuonTagger","bad"), cms.InputTag("cloneGlobalMuonTagger","bad") )
    # clean the muons and PF candidates, and make *everything* point to the new candidates
    cleanPFCandidates(process, badMuons, verbose=verbose) 

    addDiscardedPFCandidates(process, cms.InputTag("pfCandidatesBadMuonsCleaned","discarded"), verbose=verbose)

    # now make the backup sequences point to the right place
    backupJetsSecondStep(process, backupJetSequences, badMuons, verbose=verbose)

    
    process.patMuons.embedCaloMETMuonCorrs = False # FIXME
    ##extra METs and MET corrections ===============================================================
    from PhysicsTools.PatAlgos.slimming.extraSlimmedMETs_MuEGFixMoriond2017 import addExtraMETCollections,addExtraPuppiMETCorrections
    
    ### Gain switch collections not existing in 90X+ 
    ### -> corrections are set up to give no change on the MET computation
    addExtraMETCollections(process,
                           unCleanPFCandidateCollection="particleFlow",
                           cleanElectronCollection="slimmedElectrons",
                           cleanPhotonCollection="slimmedPhotons",
                           unCleanElectronCollection="slimmedElectrons",
                           unCleanPhotonCollection="slimmedPhotons")
    
    addExtraPuppiMETCorrections(process,
                                cleanPFCandidateCollection="particleFlow",
                                unCleanPFCandidateCollection="pfCandidatesBadMuonsCleaned",
                                cleanElectronCollection="slimmedElectrons",
                                cleanPhotonCollection="slimmedPhotons",
                                unCleanElectronCollection="slimmedElectrons",
                                unCleanPhotonCollection="slimmedPhotons")

    addKeepStatement(process,
                     "keep *_slimmedMETs_*_*",
                     ["keep *_slimmedMETsUncorrected_*_*",
                      "keep *_slimmedMETsEGClean_*_*",
                      "keep *_slimmedMETsMuEGClean_*_*"],
                     verbose=verbose)
    addKeepStatement(process,
                     "keep *_slimmedMETsPuppi_*_*",
                     ["keep *_puppiMETEGCor_*_*",
                      "keep *_puppiMETMuCor_*_*"],
                     verbose=verbose)



    #redo the miniAOD data customization for new JEC modules created during the backup process
    from PhysicsTools.PatAlgos.slimming.miniAOD_tools import miniAOD_customizeData
    miniAOD_customizeData(process)

    return process
def backupJetsSecondStep(process, sequences, badMuons, verbose=False):
    """Deploy the snapshots after the change of PFCandidates"""
    # put back the old input tags
    for sequence in sequences.itervalues():
        massSearchReplaceAnyInputTag(sequence, "pfCandidatesBadMuonsCleaned", "particleFlow")
        massSearchReplaceAnyInputTag(sequence, "muonsCleaned", "muons")
    # gate the input collections to avoid re-running most of PAT on good events
    reduceInputJetCollection(process, process.ak4PFJetsCHSBackup, badMuons)
    reduceInputJetCollection(process, process.ak4PFJetsPuppiBackup, badMuons)
    # fix names in the valuemaps
    process.patJetsBackup.userData.userInts.labelPostfixesToStrip = cms.vstring("Backup",)
    process.patJetsBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring("Backup",)
    process.patJetsAK8Backup.userData.userFloats.labelPostfixesToStrip = cms.vstring("Backup",)
    process.patJetsAK8PuppiBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring("Backup",)    
    #
    # now deal with daughter links
    # for these we can keep the daughters
    process.slimmedJetsBackup.mixedDaughters = True
    process.slimmedJetsBackup.packedPFCandidates = cms.InputTag("oldPFCandToPackedOrDiscarded")
    process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.mixedDaughters = True
    process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.packedPFCandidates = cms.InputTag("oldPFCandToPackedOrDiscarded")
    # for these we can't
    process.slimmedJetsPuppiBackup.dropDaughters = '1'
    process.slimmedJetsAK8PFPuppiSoftDropSubjetsBackup.dropDaughters = '1'
    # for these we do even if we wouldn't have done in the standard case, since we couldn't for the subjets
    process.packedPatJetsAK8Backup.fixDaughters = False
    process.slimmedJetsAK8Backup.rekeyDaughters = '1'
    process.slimmedJetsAK8Backup.mixedDaughters = True
    process.slimmedJetsAK8Backup.packedPFCandidates = cms.InputTag("oldPFCandToPackedOrDiscarded")
    #
    reduceFinalJetCollection(process, process.slimmedJetsBackup, badMuons)
    reduceFinalJetCollection(process, process.slimmedJetsPuppiBackup, badMuons)
    reduceFinalJetCollection(process, process.slimmedJetsAK8Backup, badMuons)
    #
    addKeepStatement(process,
                     "keep *_slimmedJets_*_*",
                     ["keep *_slimmedJetsBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process, "keep *_slimmedJetsPuppi_*_*",
                     ["keep *_slimmedJetsPuppiBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,
                     "keep *_slimmedJetsAK8_*_*",
                     ["keep *_slimmedJetsAK8Backup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,"keep *_slimmedJetsAK8PFCHSSoftDropPacked_SubJets_*",
                     ["keep *_slimmedJetsAK8PFCHSSoftDropPackedBackup_SubJets_*"],
                     verbose=verbose)
    addKeepStatement(process,"keep *_slimmedJetsAK8PFPuppiSoftDropPacked_SubJets_*",
                     ["keep *_slimmedJetsAK8PFPuppiSoftDropPackedBackup_SubJets_*"],
                     verbose=verbose)
def addDiscardedPFCandidates(process, inputCollection, verbose=False):

    task = getPatAlgosToolsTask(process)

    process.primaryVertexAssociationDiscardedCandidates = process.primaryVertexAssociation.clone(
        particles = inputCollection,
        )
    task.add(process.primaryVertexAssociationDiscardedCandidates)

    process.packedPFCandidatesDiscarded = process.packedPFCandidates.clone(
        inputCollection = inputCollection,
        PuppiNoLepSrc = cms.InputTag(""),
        PuppiSrc = cms.InputTag(""),
        secondaryVerticesForWhiteList = cms.VInputTag(),
        vertexAssociator = cms.InputTag("primaryVertexAssociationDiscardedCandidates","original")
        )
    task.add(process.packedPFCandidatesDiscarded)

    addKeepStatement(process, "keep patPackedCandidates_packedPFCandidates_*_*",
                             ["keep patPackedCandidates_packedPFCandidatesDiscarded_*_*"],
                              verbose=verbose)
def addDiscardedPFCandidates(process, inputCollection, verbose=False):
    process.primaryVertexAssociationDiscardedCandidates = process.primaryVertexAssociation.clone(
        particles = inputCollection,
        )
    process.packedPFCandidatesDiscarded = process.packedPFCandidates.clone(
        inputCollection = inputCollection,
        PuppiNoLepSrc = cms.InputTag(""),
        PuppiSrc = cms.InputTag(""),
        secondaryVerticesForWhiteList = cms.VInputTag(),
        vertexAssociator = cms.InputTag("primaryVertexAssociationDiscardedCandidates","original")
        )
    addKeepStatement(process, "keep patPackedCandidates_packedPFCandidates_*_*",
                             ["keep patPackedCandidates_packedPFCandidatesDiscarded_*_*"],
                              verbose=verbose)
    # Now make the mixed map for rekeying
    from PhysicsTools.PatAlgos.slimming.packedPFCandidateRefMixer_cfi import packedPFCandidateRefMixer
    process.oldPFCandToPackedOrDiscarded = packedPFCandidateRefMixer.clone(
        pf2pf = cms.InputTag(inputCollection.moduleLabel),
        pf2packed = cms.VInputTag(cms.InputTag("packedPFCandidates"), cms.InputTag("packedPFCandidatesDiscarded"))
    )
    # Fix slimmed muon keying
    process.slimmedMuons.pfCandidates = cms.VInputTag(cms.InputTag(inputCollection.moduleLabel), inputCollection)
    process.slimmedMuons.packedPFCandidates = cms.VInputTag(cms.InputTag("packedPFCandidates"), cms.InputTag("packedPFCandidatesDiscarded"))
def addExtraMETCollections(process, unCleanPFCandidateCollection,
                           cleanElectronCollection,
                           cleanPhotonCollection,
                           unCleanElectronCollection,
                           unCleanPhotonCollection ):

    # Muon/EGamma un/corrected pfMET ============
    from PhysicsTools.PatUtils.tools.corMETFromMuonAndEG import corMETFromMuonAndEG
    from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncForMiniAODProduction
    
    # uncorrected MET
    cloneProcessingSnippet(process, getattr(process,"makePatJets"),"BackupAllEvents")
    massSearchReplaceAnyInputTag(getattr(process,"makePatJetsBackupAllEvents"), "ak4PFJetsCHS", "ak4PFJetsCHSBackupAllEvents")
    massSearchReplaceAnyInputTag(getattr(process,"makePatJetsBackupAllEvents"), "pfCandidatesBadMuonsCleaned", "particleFlow")
    del process.patJetsBackupAllEvents.userData
    process.patJetsBackupAllEvents.addAssociatedTracks = cms.bool(False)
    process.patJetsBackupAllEvents.addBTagInfo = cms.bool(False)
    process.patJetsBackupAllEvents.addDiscriminators = cms.bool(False)
    process.patJetsBackupAllEvents.addGenJetMatch = cms.bool(False)
    process.patJetsBackupAllEvents.addGenPartonMatch = cms.bool(False)
    process.patJetsBackupAllEvents.addJetCharge = cms.bool(False)
    process.patJetsBackupAllEvents.addJetCorrFactors = cms.bool(True)
    process.patJetsBackupAllEvents.addJetFlavourInfo = cms.bool(False)
    process.patJetsBackupAllEvents.addJetID = cms.bool(False)
    process.patJetsBackupAllEvents.addPartonJetMatch = cms.bool(False)
    process.patJetsBackupAllEvents.addResolutions = cms.bool(False)
    process.patJetsBackupAllEvents.addTagInfos = cms.bool(False)
    process.patJetsBackupAllEvents.discriminatorSources = cms.VInputTag()
    process.patJetsBackupAllEvents.embedGenJetMatch = cms.bool(False)
  
    runMetCorAndUncForMiniAODProduction(process,
                                        metType="PF",
                                        pfCandColl=cms.InputTag(unCleanPFCandidateCollection),
                                        recoMetFromPFCs=True,
                                        jetCollUnskimmed="patJetsBackupAllEvents",
                                        postfix="Uncorrected"
                                        )

    if not hasattr(process, "slimmedMETs"):
        process.load('PhysicsTools.PatAlgos.slimming.slimmedMETs_cfi')
        
    process.slimmedMETsUncorrected = process.slimmedMETs.clone()
    process.slimmedMETsUncorrected.src = cms.InputTag("patPFMetT1Uncorrected")
    process.slimmedMETsUncorrected.rawVariation =  cms.InputTag("patPFMetUncorrected")
    process.slimmedMETsUncorrected.t1Uncertainties = cms.InputTag("patPFMetT1%sUncorrected") 
    process.slimmedMETsUncorrected.t01Variation = cms.InputTag("patPFMetT0pcT1Uncorrected")
    process.slimmedMETsUncorrected.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sUncorrected")
    process.slimmedMETsUncorrected.tXYUncForRaw = cms.InputTag("patPFMetTxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT1 = cms.InputTag("patPFMetT1TxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyUncorrected")
    del process.slimmedMETsUncorrected.caloMET
    
    # EG corrected MET
    corMETFromMuonAndEG(process,
                        pfCandCollection="", #not needed
                        electronCollection=unCleanElectronCollection,
                        photonCollection=unCleanPhotonCollection,
                        corElectronCollection=cleanElectronCollection,
                        corPhotonCollection=cleanPhotonCollection,
                        allMETEGCorrected=True,
                        muCorrection=False,
                        eGCorrection=True,
                        runOnMiniAOD=False,
                        eGPFix="Uncorrected",
                        postfix="EGOnly"
                        )
    process.slimmedMETsEGClean = process.slimmedMETs.clone()
    process.slimmedMETsEGClean.src = cms.InputTag("patPFMetT1UncorrectedEGOnly")
    process.slimmedMETsEGClean.rawVariation =  cms.InputTag("patPFMetRawUncorrectedEGOnly")
    process.slimmedMETsEGClean.t1Uncertainties = cms.InputTag("patPFMetT1%sUncorrectedEGOnly") 
    process.slimmedMETsEGClean.t01Variation = cms.InputTag("patPFMetT0pcT1UncorrectedEGOnly")
    process.slimmedMETsEGClean.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForRaw = cms.InputTag("patPFMetTxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT1 = cms.InputTag("patPFMetT1TxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyUncorrectedEGOnly")
    del process.slimmedMETsEGClean.caloMET
 
    # fully corrected MET
    corMETFromMuonAndEG(process,
                        pfCandCollection="", #not needed
                        electronCollection=unCleanElectronCollection,
                        photonCollection=unCleanPhotonCollection,
                        corElectronCollection=cleanElectronCollection,
                        corPhotonCollection=cleanPhotonCollection,
                        allMETEGCorrected=True,
                        muCorrection=False,
                        eGCorrection=True,
                        runOnMiniAOD=False,
                        postfix="MuEGClean"
                        )
    process.slimmedMETsMuEGClean = process.slimmedMETs.clone()
    process.slimmedMETsMuEGClean.src = cms.InputTag("patPFMetT1MuEGClean")
    process.slimmedMETsMuEGClean.rawVariation =  cms.InputTag("patPFMetRawMuEGClean")
    process.slimmedMETsMuEGClean.t1Uncertainties = cms.InputTag("patPFMetT1%sMuEGClean") 
    process.slimmedMETsMuEGClean.t01Variation = cms.InputTag("patPFMetT0pcT1MuEGClean")
    process.slimmedMETsMuEGClean.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForRaw = cms.InputTag("patPFMetTxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT1 = cms.InputTag("patPFMetT1TxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyMuEGClean")
    del process.slimmedMETsMuEGClean.caloMET

    addKeepStatement(process, "keep *_slimmedMETs_*_*",
                    ["keep *_slimmedMETsUncorrected_*_*", "keep *_slimmedMETsEGClean_*_*", "keep *_slimmedMETsMuEGClean_*_*"])
def addExtraPuppiMETCorrections(process,
                                cleanPFCandidateCollection,
                                unCleanPFCandidateCollection,
                                cleanElectronCollection,
                                cleanPhotonCollection,
                                unCleanElectronCollection,
                                unCleanPhotonCollection
                                ):

    from PhysicsTools.PatUtils.tools.corMETFromMuonAndEG import corMETFromMuonAndEG

    #EG correction for puppi, muon correction done right above
    corMETFromMuonAndEG(process,
                        pfCandCollection="puppiForMET",
                        electronCollection=unCleanElectronCollection,
                        photonCollection=unCleanPhotonCollection,
                        corElectronCollection=cleanElectronCollection,
                        corPhotonCollection=cleanPhotonCollection,
                        allMETEGCorrected=True,
                        muCorrection=False,
                        eGCorrection=True,
                        runOnMiniAOD=False,
                        eGPfCandMatching=True,
                        eGPFix="Puppi",
                        postfix="PuppiClean"
                        )

    if not hasattr(process, "slimmedMETs"):
        process.load('PhysicsTools.PatAlgos.slimming.slimmedMETs_cfi')

    process.slimmedMETsPuppi.src = cms.InputTag("patPFMetT1PuppiPuppiClean")
    process.slimmedMETsPuppi.rawVariation =  cms.InputTag("patPFMetRawPuppiPuppiClean")
    process.slimmedMETsPuppi.t1Uncertainties = cms.InputTag("patPFMetT1%sPuppiPuppiClean")
    process.slimmedMETsPuppi.t01Variation = cms.InputTag("patPFMetT0pcT1PuppiPuppiClean")
    process.slimmedMETsPuppi.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForRaw = cms.InputTag("patPFMetTxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT1 = cms.InputTag("patPFMetT1TxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyPuppiPuppiClean")
    #del process.slimmedMETsPuppi.caloMET    

    #EGamma correction
    process.puppiMETEGCor = cms.EDProducer("CorrMETDataExtractor",
                    corrections = cms.VInputTag(
                        cms.InputTag("corMETPhotonPuppiClean"),
                        cms.InputTag("corMETElectronPuppiClean") )
                                           )

    #Muon correction, restarting from PF candidates to take the weights
    process.puppiMuonCorrection = cms.EDProducer("ShiftedParticleMETcorrInputProducer",
                        srcOriginal = cms.InputTag(unCleanPFCandidateCollection),
                        srcShifted = cms.InputTag(cleanPFCandidateCollection),
                                  )
    
    process.puppiMETMuCor = cms.EDProducer("CorrMETDataExtractor",
                    corrections = cms.VInputTag(
                        cms.InputTag("puppiMuonCorrection") )
                                           )
    addKeepStatement(process, "keep *_slimmedMETsPuppi_*_*",
                    ["keep *_puppiMETEGCor_*_*", "keep *_puppiMETMuCor_*_*"])
Exemplo n.º 9
0
def customizeGSFixForPAT(process):
    process.load("RecoEgamma.EgammaTools.egammaGainSwitchFixForPAT_cff")
    process.load("RecoParticleFlow.PFProducer.pfGSFixLinkerForPAT_cff")
    process.load(
        "RecoEgamma.EgammaIsolationAlgos.pfClusterIsolationRemapForPAT_cff")
    process.load("RecoEgamma.ElectronIdentification.idExternalRemapForPAT_cff")
    process.load("RecoEgamma.EgammaTools.egammaGainSwitchFlag_cff")

    #this clones all the modules before they were modified to run on the orginal collections
    miniAOD_addOrginalEGamma(process, "BeforeGSFix")
    from PhysicsTools.PatAlgos.tools.helpers import addKeepStatement
    addKeepStatement(process, 'keep *_slimmedElectrons_*_*', [
        'keep *_reducedEgammaBeforeGSFix_*_*',
        'keep *_slimmedElectronsBeforeGSFix_*_*',
        'keep *_slimmedPhotonsBeforeGSFix_*_*',
        'keep EBDigiCollection_selectDigi_*_*',
        'keep EEDigiCollection_selectDigi_*_*',
        'drop *_reducedEgammaBeforeGSFix_reducedGedGsfElectrons_*',
        'drop *_reducedEgammaBeforeGSFix_reducedGedPhotons_*',
        'keep *_ecalMultiAndGSGlobalRecHitEB_hitsNotReplaced_*',
        'keep *_particleFlowEGammaGSFixed_dupECALClusters_*',
        'keep *_particleFlowEGammaGSFixed_dupESClusters_*',
    ])
    process.reducedEgamma.gsfElectrons = cms.InputTag("gedGsfElectronsGSFixed")
    process.reducedEgamma.gsfElectronsPFValMap = cms.InputTag(
        "particleBasedIsolationGSFixed", "gedGsfElectrons")
    process.reducedEgamma.gsfElectronPFClusterIsoSources = cms.VInputTag(
        cms.InputTag("electronEcalPFClusterIsolationProducerGSFixed"),
        cms.InputTag("electronHcalPFClusterIsolationProducerGSFixed"),
    )
    process.reducedEgamma.gsfElectronIDSources = cms.VInputTag(
        cms.InputTag("eidLooseGSFixed"),
        cms.InputTag("eidRobustHighEnergyGSFixed"),
        cms.InputTag("eidRobustLooseGSFixed"),
        cms.InputTag("eidRobustTightGSFixed"),
        cms.InputTag("eidTightGSFixed"),
    )
    process.reducedEgamma.photons = cms.InputTag("gedPhotonsGSFixed")
    process.reducedEgamma.conversions = cms.InputTag(
        "allConversions", processName=cms.InputTag.skipCurrentProcess())
    process.reducedEgamma.singleConversions = cms.InputTag(
        "particleFlowEGamma", processName=cms.InputTag.skipCurrentProcess())
    process.reducedEgamma.photonsPFValMap = cms.InputTag(
        "particleBasedIsolationGSFixed", "gedPhotons")
    process.reducedEgamma.photonPFClusterIsoSources = cms.VInputTag(
        cms.InputTag("photonEcalPFClusterIsolationProducerGSFixed"),
        cms.InputTag("photonHcalPFClusterIsolationProducerGSFixed"),
    )
    process.reducedEgamma.photonIDSources = cms.VInputTag(
        cms.InputTag("PhotonCutBasedIDLooseGSFixed"),
        cms.InputTag("PhotonCutBasedIDLooseEMGSFixed"),
        cms.InputTag("PhotonCutBasedIDTightGSFixed"))
    process.reducedEgamma.barrelEcalHits = cms.InputTag(
        "ecalMultiAndGSGlobalRecHitEB")
    process.reducedEgamma.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE")
    process.reducedEgamma.preshowerEcalHits = cms.InputTag(
        "reducedEcalRecHitsES")

    for modification in process.slimmedPhotons.modifierConfig.modifications:
        if modification.modifierName != 'EGExtraInfoModifierFromIntValueMaps':
            continue
        modification.photon_config.hasGainSwitchFlag = cms.InputTag(
            'PhotonGainSwitchFlagProducer:hasGainSwitchFlag')
    for modification in process.slimmedElectrons.modifierConfig.modifications:
        if modification.modifierName != 'EGExtraInfoModifierFromIntValueMaps':
            continue
        modification.electron_config.hasGainSwitchFlag = cms.InputTag(
            'ElectronGainSwitchFlagProducer:hasGainSwitchFlag')

    return process
Exemplo n.º 10
0
def backupJetsSecondStep(process, sequences, badMuons, verbose=False):
    """Deploy the snapshots after the change of PFCandidates"""
    # put back the old input tags
    for sequence in sequences.itervalues():
        massSearchReplaceAnyInputTag(sequence, "pfCandidatesBadMuonsCleaned",
                                     "particleFlow")
        massSearchReplaceAnyInputTag(sequence, "muonsCleaned", "muons")
    # gate the input collections to avoid re-running most of PAT on good events
    reduceInputJetCollection(process, process.ak4PFJetsCHSBackup, badMuons)
    reduceInputJetCollection(process, process.ak4PFJetsPuppiBackup, badMuons)
    # fix names in the valuemaps
    process.patJetsBackup.userData.userInts.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    process.patJetsBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    process.patJetsAK8Backup.userData.userFloats.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    process.patJetsAK8PuppiBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    #
    # now deal with daughter links
    # for these we can keep the daughters
    process.slimmedJetsBackup.mixedDaughters = True
    process.slimmedJetsBackup.packedPFCandidates = cms.InputTag(
        "oldPFCandToPackedOrDiscarded")
    process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.mixedDaughters = True
    process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.packedPFCandidates = cms.InputTag(
        "oldPFCandToPackedOrDiscarded")
    # for these we can't
    process.slimmedJetsPuppiBackup.dropDaughters = '1'
    process.slimmedJetsAK8PFPuppiSoftDropSubjetsBackup.dropDaughters = '1'
    # for these we do even if we wouldn't have done in the standard case, since we couldn't for the subjets
    process.packedPatJetsAK8Backup.fixDaughters = False
    process.slimmedJetsAK8Backup.rekeyDaughters = '1'
    process.slimmedJetsAK8Backup.mixedDaughters = True
    process.slimmedJetsAK8Backup.packedPFCandidates = cms.InputTag(
        "oldPFCandToPackedOrDiscarded")
    #
    reduceFinalJetCollection(process, process.slimmedJetsBackup, badMuons)
    reduceFinalJetCollection(process, process.slimmedJetsPuppiBackup, badMuons)
    reduceFinalJetCollection(process, process.slimmedJetsAK8Backup, badMuons)
    #
    addKeepStatement(process,
                     "keep *_slimmedJets_*_*",
                     ["keep *_slimmedJetsBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,
                     "keep *_slimmedJetsPuppi_*_*",
                     ["keep *_slimmedJetsPuppiBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,
                     "keep *_slimmedJetsAK8_*_*",
                     ["keep *_slimmedJetsAK8Backup_*_*"],
                     verbose=verbose)
    addKeepStatement(
        process,
        "keep *_slimmedJetsAK8PFCHSSoftDropPacked_SubJets_*",
        ["keep *_slimmedJetsAK8PFCHSSoftDropPackedBackup_SubJets_*"],
        verbose=verbose)
    addKeepStatement(
        process,
        "keep *_slimmedJetsAK8PFPuppiSoftDropPacked_SubJets_*",
        ["keep *_slimmedJetsAK8PFPuppiSoftDropPackedBackup_SubJets_*"],
        verbose=verbose)
Exemplo n.º 11
0
def addExtraMETCollections(process, unCleanPFCandidateCollection,
                           cleanElectronCollection,
                           cleanPhotonCollection,
                           unCleanElectronCollection,
                           unCleanPhotonCollection ):

    task = getPatAlgosToolsTask(process)

    # Muon/EGamma un/corrected pfMET ============
    from PhysicsTools.PatUtils.tools.corMETFromMuonAndEG import corMETFromMuonAndEG
    from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncForMiniAODProduction
    
    # uncorrected MET
    cloneProcessingSnippet(process, getattr(process,"makePatJets"),"BackupAllEvents", addToTask = True )
    massSearchReplaceAnyInputTag(getattr(process,"makePatJetsBackupAllEvents"), "ak4PFJetsCHS", "ak4PFJetsCHSBackupAllEvents")
    massSearchReplaceAnyInputTag(getattr(process,"makePatJetsBackupAllEvents"), "pfCandidatesBadMuonsCleaned", "particleFlow")
    del process.patJetsBackupAllEvents.userData
    process.patJetsBackupAllEvents.addAssociatedTracks = cms.bool(False)
    process.patJetsBackupAllEvents.addBTagInfo = cms.bool(False)
    process.patJetsBackupAllEvents.addDiscriminators = cms.bool(False)
    process.patJetsBackupAllEvents.addGenJetMatch = cms.bool(False)
    process.patJetsBackupAllEvents.addGenPartonMatch = cms.bool(False)
    process.patJetsBackupAllEvents.addJetCharge = cms.bool(False)
    process.patJetsBackupAllEvents.addJetCorrFactors = cms.bool(True)
    process.patJetsBackupAllEvents.addJetFlavourInfo = cms.bool(False)
    process.patJetsBackupAllEvents.addJetID = cms.bool(False)
    process.patJetsBackupAllEvents.addPartonJetMatch = cms.bool(False)
    process.patJetsBackupAllEvents.addResolutions = cms.bool(False)
    process.patJetsBackupAllEvents.addTagInfos = cms.bool(False)
    process.patJetsBackupAllEvents.discriminatorSources = cms.VInputTag()
    process.patJetsBackupAllEvents.embedGenJetMatch = cms.bool(False)
  
    runMetCorAndUncForMiniAODProduction(process,
                                        metType="PF",
                                        pfCandColl=cms.InputTag(unCleanPFCandidateCollection),
                                        recoMetFromPFCs=True,
                                        jetCollUnskimmed="patJetsBackupAllEvents",
                                        postfix="Uncorrected"
                                        )

    if not hasattr(process, "slimmedMETs"):
        process.load('PhysicsTools.PatAlgos.slimming.slimmedMETs_cfi')
        
    process.slimmedMETsUncorrected = process.slimmedMETs.clone()
    task.add(process.slimmedMETs)
    process.slimmedMETsUncorrected.src = cms.InputTag("patPFMetT1Uncorrected")
    process.slimmedMETsUncorrected.rawVariation =  cms.InputTag("patPFMetUncorrected")
    process.slimmedMETsUncorrected.t1Uncertainties = cms.InputTag("patPFMetT1%sUncorrected") 
    process.slimmedMETsUncorrected.t01Variation = cms.InputTag("patPFMetT0pcT1Uncorrected")
    process.slimmedMETsUncorrected.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sUncorrected")
    process.slimmedMETsUncorrected.tXYUncForRaw = cms.InputTag("patPFMetTxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT1 = cms.InputTag("patPFMetT1TxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyUncorrected")
    process.slimmedMETsUncorrected.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyUncorrected")
    del process.slimmedMETsUncorrected.caloMET
    
    # EG corrected MET
    corMETFromMuonAndEG(process,
                        pfCandCollection="", #not needed
                        electronCollection=unCleanElectronCollection,
                        photonCollection=unCleanPhotonCollection,
                        corElectronCollection=cleanElectronCollection,
                        corPhotonCollection=cleanPhotonCollection,
                        allMETEGCorrected=True,
                        muCorrection=False,
                        eGCorrection=True,
                        runOnMiniAOD=False,
                        eGPFix="Uncorrected",
                        postfix="EGOnly"
                        )
    process.slimmedMETsEGClean = process.slimmedMETs.clone()
    task.add(process.slimmedMETsEGClean)
    process.slimmedMETsEGClean.src = cms.InputTag("patPFMetT1UncorrectedEGOnly")
    process.slimmedMETsEGClean.rawVariation =  cms.InputTag("patPFMetRawUncorrectedEGOnly")
    process.slimmedMETsEGClean.t1Uncertainties = cms.InputTag("patPFMetT1%sUncorrectedEGOnly") 
    process.slimmedMETsEGClean.t01Variation = cms.InputTag("patPFMetT0pcT1UncorrectedEGOnly")
    process.slimmedMETsEGClean.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForRaw = cms.InputTag("patPFMetTxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT1 = cms.InputTag("patPFMetT1TxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyUncorrectedEGOnly")
    process.slimmedMETsEGClean.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyUncorrectedEGOnly")
    del process.slimmedMETsEGClean.caloMET
 
    # fully corrected MET
    corMETFromMuonAndEG(process,
                        pfCandCollection="", #not needed
                        electronCollection=unCleanElectronCollection,
                        photonCollection=unCleanPhotonCollection,
                        corElectronCollection=cleanElectronCollection,
                        corPhotonCollection=cleanPhotonCollection,
                        allMETEGCorrected=True,
                        muCorrection=False,
                        eGCorrection=True,
                        runOnMiniAOD=False,
                        postfix="MuEGClean"
                        )
    process.slimmedMETsMuEGClean = process.slimmedMETs.clone()
    task.add(process.slimmedMETsMuEGClean)
    process.slimmedMETsMuEGClean.src = cms.InputTag("patPFMetT1MuEGClean")
    process.slimmedMETsMuEGClean.rawVariation =  cms.InputTag("patPFMetRawMuEGClean")
    process.slimmedMETsMuEGClean.t1Uncertainties = cms.InputTag("patPFMetT1%sMuEGClean") 
    process.slimmedMETsMuEGClean.t01Variation = cms.InputTag("patPFMetT0pcT1MuEGClean")
    process.slimmedMETsMuEGClean.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForRaw = cms.InputTag("patPFMetTxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT1 = cms.InputTag("patPFMetT1TxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyMuEGClean")
    process.slimmedMETsMuEGClean.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyMuEGClean")
    del process.slimmedMETsMuEGClean.caloMET

    addKeepStatement(process, "keep *_slimmedMETs_*_*",
                    ["keep *_slimmedMETsUncorrected_*_*", "keep *_slimmedMETsEGClean_*_*", "keep *_slimmedMETsMuEGClean_*_*"])
Exemplo n.º 12
0
def addExtraPuppiMETCorrections(process,
                                cleanPFCandidateCollection,
                                unCleanPFCandidateCollection,
                                cleanElectronCollection,
                                cleanPhotonCollection,
                                unCleanElectronCollection,
                                unCleanPhotonCollection
                                ):

    task = getPatAlgosToolsTask(process)

    from PhysicsTools.PatUtils.tools.corMETFromMuonAndEG import corMETFromMuonAndEG
    #EG correction for puppi, muon correction done right above
    corMETFromMuonAndEG(process,
                        metType="Puppi",
                        electronCollection=unCleanElectronCollection,
                        photonCollection=unCleanPhotonCollection,
                        corElectronCollection=cleanElectronCollection,
                        corPhotonCollection=cleanPhotonCollection,
                        allMETEGCorrected=True,
                        muCorrection=False,
                        eGCorrection=True,
                        runOnMiniAOD=False,
                        eGPfCandMatching=True,
                        eGPFix="Puppi",
                        postfix="PuppiClean"
                        )

    if not hasattr(process, "slimmedMETs"):
        process.load('PhysicsTools.PatAlgos.slimming.slimmedMETs_cfi')
        task.add(process.slimmedMETs)

    process.slimmedMETsPuppi.src = cms.InputTag("patPFMetT1PuppiPuppiClean")
    process.slimmedMETsPuppi.rawVariation =  cms.InputTag("patPFMetRawPuppiPuppiClean")
    process.slimmedMETsPuppi.t1Uncertainties = cms.InputTag("patPFMetT1%sPuppiPuppiClean")
    process.slimmedMETsPuppi.t01Variation = cms.InputTag("patPFMetT0pcT1PuppiPuppiClean")
    process.slimmedMETsPuppi.t1SmearedVarsAndUncs = cms.InputTag("patPFMetT1Smear%sPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForRaw = cms.InputTag("patPFMetTxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT1 = cms.InputTag("patPFMetT1TxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT01 = cms.InputTag("patPFMetT0pcT1TxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT1Smear = cms.InputTag("patPFMetT1SmearTxyPuppiPuppiClean")
    process.slimmedMETsPuppi.tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxyPuppiPuppiClean")
    #del process.slimmedMETsPuppi.caloMET    

    #EGamma correction
    process.puppiMETEGCor = cms.EDProducer("CorrMETDataExtractor",
                    corrections = cms.VInputTag(
                        cms.InputTag("corMETPhotonPuppiClean"),
                        cms.InputTag("corMETElectronPuppiClean") )
                                           )
    task.add(process.puppiMETEGCor)

    #Muon correction, restarting from PF candidates to take the weights
    process.puppiMuonCorrection = cms.EDProducer("ShiftedParticleMETcorrInputProducer",
                        srcOriginal = cms.InputTag(unCleanPFCandidateCollection),
                        srcShifted = cms.InputTag(cleanPFCandidateCollection),
                        srcWeights = cms.InputTag("")
                                  )

    task.add(process.puppiMuonCorrection)

    process.puppiMETMuCor = cms.EDProducer("CorrMETDataExtractor",
                    corrections = cms.VInputTag(
                        cms.InputTag("puppiMuonCorrection") )
                                           )
    task.add(process.puppiMETMuCor)
    addKeepStatement(process, "keep *_slimmedMETsPuppi_*_*",
                    ["keep *_puppiMETEGCor_*_*", "keep *_puppiMETMuCor_*_*"])
def backupJetsSecondStep(process, sequences, badMuons, verbose=False):
    """Deploy the snapshots after the change of PFCandidates"""

    task = getPatAlgosToolsTask(process)

    # put back the old input tags and copy in task
    for sequence in six.itervalues(sequences):
        massSearchReplaceAnyInputTag(sequence, "pfCandidatesBadMuonsCleaned",
                                     "particleFlow")
        massSearchReplaceAnyInputTag(sequence, "muonsCleaned", "muons")
        for mod in listModules(sequence):
            task.add(mod)
    # gate the input collections to avoid re-running most of PAT on good events
    reduceInputJetCollection(process, process.ak4PFJetsCHSBackup, badMuons)
    reduceInputJetCollection(process, process.ak4PFJetsPuppiBackup, badMuons)
    # fix names in the valuemaps
    process.patJetsBackup.userData.userInts.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    process.patJetsBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    process.patJetsAK8Backup.userData.userFloats.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    process.patJetsAK8PuppiBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring(
        "Backup", )
    #
    # now deal with daughter links
    # for these we can keep the daughters
    if hasattr(process, "slimmedJetsBackup"):
        process.slimmedJetsBackup.mixedDaughters = True
        process.slimmedJetsBackup.packedPFCandidates = cms.InputTag(
            "oldPFCandToPackedOrDiscarded")
        process.packedPatJetsAK8Backup.fixDaughters = False
        #for this one the link is broken using oldPFCandToPackedOrDiscarded...
        #not sure why, but result is the same
        process.slimmedJetsAK8Backup.rekeyDaughters = '1'
        process.slimmedJetsAK8Backup.mixedDaughters = False
        process.slimmedJetsAK8Backup.packedPFCandidates = cms.InputTag(
            "packedPFCandidatesBackup")  #oldPFCandToPackedOrDiscarded
        reduceFinalJetCollection(process, process.slimmedJetsBackup, badMuons)

    if hasattr(process, "slimmedJetsAK8PFCHSSoftDropSubjetsBackup"):
        process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.mixedDaughters = True
        process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.packedPFCandidates = cms.InputTag(
            "oldPFCandToPackedOrDiscarded")
        reduceFinalJetCollection(process, process.slimmedJetsAK8Backup,
                                 badMuons)
        #for this one the link is broken using oldPFCandToPackedOrDiscarded...
        #not sure why, but result is the same
        process.slimmedJetsAK8BackupAllEvents.packedPFCandidates = cms.InpuTag(
            "packedPFCandidatesBackup")

    # for these we can't
    if hasattr(process, "slimmedJetsPuppiBackup"):
        process.slimmedJetsPuppiBackup.dropDaughters = '1'
        process.slimmedJetsAK8PFPuppiSoftDropSubjetsBackup.dropDaughters = '1'
        reduceFinalJetCollection(process, process.slimmedJetsPuppiBackup,
                                 badMuons)

    #
    addKeepStatement(process,
                     "keep *_slimmedJets_*_*",
                     ["keep *_slimmedJetsBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,
                     "keep *_slimmedJetsPuppi_*_*",
                     ["keep *_slimmedJetsPuppiBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,
                     "keep *_slimmedJetsAK8_*_*",
                     ["keep *_slimmedJetsAK8Backup_*_*"],
                     verbose=verbose)
    addKeepStatement(
        process,
        "keep *_slimmedJetsAK8PFCHSSoftDropPacked_SubJets_*",
        ["keep *_slimmedJetsAK8PFCHSSoftDropPackedBackup_SubJets_*"],
        verbose=verbose)
    addKeepStatement(
        process,
        "keep *_slimmedJetsAK8PFPuppiSoftDropPacked_SubJets_*",
        ["keep *_slimmedJetsAK8PFPuppiSoftDropPackedBackup_SubJets_*"],
        verbose=verbose)
def backupJetsSecondStep(process, sequences, badMuons, verbose=False):
    """Deploy the snapshots after the change of PFCandidates"""

    task = getPatAlgosToolsTask(process)

    # put back the old input tags and copy in task
    for sequence in sequences.itervalues():
        massSearchReplaceAnyInputTag(sequence, "pfCandidatesBadMuonsCleaned", "particleFlow")
        massSearchReplaceAnyInputTag(sequence, "muonsCleaned", "muons")
        for mod in listModules(sequence):
            task.add(mod)
    # gate the input collections to avoid re-running most of PAT on good events
    reduceInputJetCollection(process, process.ak4PFJetsCHSBackup, badMuons)
    reduceInputJetCollection(process, process.ak4PFJetsPuppiBackup, badMuons)
    # fix names in the valuemaps
    process.patJetsBackup.userData.userInts.labelPostfixesToStrip = cms.vstring("Backup",)
    process.patJetsBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring("Backup",)
    process.patJetsAK8Backup.userData.userFloats.labelPostfixesToStrip = cms.vstring("Backup",)
    process.patJetsAK8PuppiBackup.userData.userFloats.labelPostfixesToStrip = cms.vstring("Backup",)    
    #
    # now deal with daughter links
    # for these we can keep the daughters
    if hasattr(process,"slimmedJetsBackup"):
        process.slimmedJetsBackup.mixedDaughters = True
        process.slimmedJetsBackup.packedPFCandidates = cms.InputTag("oldPFCandToPackedOrDiscarded")
        process.packedPatJetsAK8Backup.fixDaughters = False
       #for this one the link is broken using oldPFCandToPackedOrDiscarded...
        #not sure why, but result is the same
        process.slimmedJetsAK8Backup.rekeyDaughters = '1'
        process.slimmedJetsAK8Backup.mixedDaughters = False
        process.slimmedJetsAK8Backup.packedPFCandidates = cms.InputTag("packedPFCandidatesBackup") #oldPFCandToPackedOrDiscarded
        reduceFinalJetCollection(process, process.slimmedJetsBackup, badMuons)

    if hasattr(process,"slimmedJetsAK8PFCHSSoftDropSubjetsBackup"):
        process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.mixedDaughters = True
        process.slimmedJetsAK8PFCHSSoftDropSubjetsBackup.packedPFCandidates = cms.InputTag("oldPFCandToPackedOrDiscarded")
        reduceFinalJetCollection(process, process.slimmedJetsAK8Backup, badMuons)
        #for this one the link is broken using oldPFCandToPackedOrDiscarded...
        #not sure why, but result is the same
        process.slimmedJetsAK8BackupAllEvents.packedPFCandidates = cms.InpuTag("packedPFCandidatesBackup")

    # for these we can't
    if hasattr(process,"slimmedJetsPuppiBackup"):
        process.slimmedJetsPuppiBackup.dropDaughters = '1'
        process.slimmedJetsAK8PFPuppiSoftDropSubjetsBackup.dropDaughters = '1'
        reduceFinalJetCollection(process, process.slimmedJetsPuppiBackup, badMuons)
  
    #
    addKeepStatement(process,
                     "keep *_slimmedJets_*_*",
                     ["keep *_slimmedJetsBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process, "keep *_slimmedJetsPuppi_*_*",
                     ["keep *_slimmedJetsPuppiBackup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,
                     "keep *_slimmedJetsAK8_*_*",
                     ["keep *_slimmedJetsAK8Backup_*_*"],
                     verbose=verbose)
    addKeepStatement(process,"keep *_slimmedJetsAK8PFCHSSoftDropPacked_SubJets_*",
                     ["keep *_slimmedJetsAK8PFCHSSoftDropPackedBackup_SubJets_*"],
                     verbose=verbose)
    addKeepStatement(process,"keep *_slimmedJetsAK8PFPuppiSoftDropPacked_SubJets_*",
                     ["keep *_slimmedJetsAK8PFPuppiSoftDropPackedBackup_SubJets_*"],
                     verbose=verbose)
def customizeGSFixForPAT(process): 
    process.load("RecoEgamma.EgammaTools.egammaGainSwitchFixForPAT_cff")
    process.load("RecoParticleFlow.PFProducer.pfGSFixLinkerForPAT_cff")
    process.load("RecoEgamma.EgammaIsolationAlgos.pfClusterIsolationRemapForPAT_cff")
    process.load("RecoEgamma.ElectronIdentification.idExternalRemapForPAT_cff")
    process.load("RecoEgamma.EgammaTools.egammaGainSwitchFlag_cff")

    #this clones all the modules before they were modified to run on the orginal collections
    miniAOD_addOrginalEGamma(process,"BeforeGSFix")
    from PhysicsTools.PatAlgos.tools.helpers import addKeepStatement
    addKeepStatement(process,'keep *_slimmedElectrons_*_*', 
                                                ['keep *_reducedEgammaBeforeGSFix_*_*',
                                                 'keep *_slimmedElectronsBeforeGSFix_*_*',
                                                 'keep *_slimmedPhotonsBeforeGSFix_*_*',
                                                 'keep EBDigiCollection_selectDigi_*_*',
                                                 'keep EEDigiCollection_selectDigi_*_*',
                                                 'drop *_reducedEgammaBeforeGSFix_reducedGedGsfElectrons_*',
                                                 'drop *_reducedEgammaBeforeGSFix_reducedGedPhotons_*',
                                                 'keep *_ecalMultiAndGSGlobalRecHitEB_hitsNotReplaced_*',
                                                 'keep *_particleFlowEGammaGSFixed_dupECALClusters_*',
                                                 'keep *_particleFlowEGammaGSFixed_dupESClusters_*',
                                                 ])
    process.reducedEgamma.gsfElectrons = cms.InputTag("gedGsfElectronsGSFixed")
    process.reducedEgamma.gsfElectronsPFValMap = cms.InputTag("particleBasedIsolationGSFixed","gedGsfElectrons")
    process.reducedEgamma.gsfElectronPFClusterIsoSources = cms.VInputTag(
        cms.InputTag("electronEcalPFClusterIsolationProducerGSFixed"),
        cms.InputTag("electronHcalPFClusterIsolationProducerGSFixed"),
        )
    process.reducedEgamma.gsfElectronIDSources = cms.VInputTag(
        cms.InputTag("eidLooseGSFixed"),
        cms.InputTag("eidRobustHighEnergyGSFixed"),
        cms.InputTag("eidRobustLooseGSFixed"),
        cms.InputTag("eidRobustTightGSFixed"),
        cms.InputTag("eidTightGSFixed"),
        )
    process.reducedEgamma.photons = cms.InputTag("gedPhotonsGSFixed")
    process.reducedEgamma.conversions = cms.InputTag("allConversions", processName=cms.InputTag.skipCurrentProcess())
    process.reducedEgamma.singleConversions = cms.InputTag("particleFlowEGamma", processName=cms.InputTag.skipCurrentProcess())
    process.reducedEgamma.photonsPFValMap = cms.InputTag("particleBasedIsolationGSFixed","gedPhotons")
    process.reducedEgamma.photonPFClusterIsoSources = cms.VInputTag(
        cms.InputTag("photonEcalPFClusterIsolationProducerGSFixed"),
        cms.InputTag("photonHcalPFClusterIsolationProducerGSFixed"),
        )
    process.reducedEgamma.photonIDSources = cms.VInputTag(
        cms.InputTag("PhotonCutBasedIDLooseGSFixed"),
        cms.InputTag("PhotonCutBasedIDLooseEMGSFixed"),    
        cms.InputTag("PhotonCutBasedIDTightGSFixed")
        )
    process.reducedEgamma.barrelEcalHits = cms.InputTag("ecalMultiAndGSGlobalRecHitEB")
    process.reducedEgamma.endcapEcalHits = cms.InputTag("reducedEcalRecHitsEE")
    process.reducedEgamma.preshowerEcalHits = cms.InputTag("reducedEcalRecHitsES")

    for modification in process.slimmedPhotons.modifierConfig.modifications:
        if modification.modifierName != 'EGExtraInfoModifierFromIntValueMaps': continue
        modification.photon_config.hasGainSwitchFlag = cms.InputTag('PhotonGainSwitchFlagProducer:hasGainSwitchFlag')
    for modification in process.slimmedElectrons.modifierConfig.modifications:
        if modification.modifierName != 'EGExtraInfoModifierFromIntValueMaps': continue
        modification.electron_config.hasGainSwitchFlag = cms.InputTag('ElectronGainSwitchFlagProducer:hasGainSwitchFlag')


    return process