Ejemplo n.º 1
0
def setupVIDElectronSelection(process,
                              cutflow,
                              patProducer=None,
                              addUserData=True,
                              task=None):
    if not hasattr(process, 'egmGsfElectronIDs'):
        raise Exception(
            'VIDProducerNotAvailable',
            'egmGsfElectronIDs producer not available in process!')
    setupVIDSelection(process.egmGsfElectronIDs, cutflow)
    #add to PAT electron producer if available or specified
    if hasattr(process, 'patElectrons') or patProducer is not None:
        if patProducer is None:
            patProducer = process.patElectrons
        idName = cutflow.idName.value()
        addVIDSelectionToPATProducer(patProducer, 'egmGsfElectronIDs', idName,
                                     addUserData)

    #we know cutflow has a name otherwise an exception would have been thrown in setupVIDSelection
    #run this for all heep IDs except V60 standard for which it is not needed
    #it is needed for V61 and V70
    if (cutflow.idName.value().find("HEEP") != -1
            and cutflow.idName.value() != "heepElectronID-HEEPV60"):

        #not the ideal way but currently the easiest
        useMiniAOD = process.egmGsfElectronIDs.physicsObjectSrc == cms.InputTag(
            'slimmedElectrons')

        from RecoEgamma.ElectronIdentification.Identification.heepElectronID_tools import addHEEPProducersToSeq
        addHEEPProducersToSeq(process=process,
                              seq=process.egmGsfElectronIDSequence,
                              useMiniAOD=useMiniAOD,
                              task=task)
Ejemplo n.º 2
0
def setupVIDElectronSelection(process,cutflow,patProducer=None,addUserData=True,task=None):
    if not hasattr(process,'egmGsfElectronIDs'):
        raise Exception('VIDProducerNotAvailable','egmGsfElectronIDs producer not available in process!')
    setupVIDSelection(process.egmGsfElectronIDs,cutflow)
    #add to PAT electron producer if available or specified
    if hasattr(process,'patElectrons') or patProducer is not None:
        if patProducer is None:
            patProducer = process.patElectrons
        idName = cutflow.idName.value()
        addVIDSelectionToPATProducer(patProducer,'egmGsfElectronIDs',idName,addUserData)

    #we know cutflow has a name otherwise an exception would have been thrown in setupVIDSelection
    #run this for all heep IDs except V60 standard for which it is not needed
    #it is needed for V61 and V70
    if (cutflow.idName.value().find("HEEP")!=-1 and
        cutflow.idName.value()!="heepElectronID-HEEPV60"):

        #not the ideal way but currently the easiest
        useMiniAOD = process.egmGsfElectronIDs.physicsObjectSrc == cms.InputTag('slimmedElectrons')
            
        from RecoEgamma.ElectronIdentification.Identification.heepElectronID_tools import addHEEPProducersToSeq
        addHEEPProducersToSeq(process=process,seq=process.egmGsfElectronIDSequence,
                              useMiniAOD=useMiniAOD,task=task)
def _setupEgammaVID(eleSrc, phoSrc, cfg):
    process = cfg.process
    process.egammaVIDTask = cms.Task()
    if cfg.runVID:
        #heep value map needs to be manually added to the task
        if not _isULDataformat():
            import RecoEgamma.ElectronIdentification.Identification.heepElectronID_tools as heep_tools
            heep_tools.addHEEPProducersToSeq(process, cms.Sequence(),
                                             cfg.isMiniAOD,
                                             process.egammaVIDTask)
        process.egammaVIDTask.add(process.egmGsfElectronIDTask)
        process.egammaVIDTask.add(process.egmPhotonIDTask)

        process.egmGsfElectronIDs.physicsObjectSrc = eleSrc
        process.egmPhotonIDs.physicsObjectSrc = phoSrc

        if cfg.isMiniAOD:
            process.electronMVAValueMapProducer.srcMiniAOD = eleSrc
            process.photonMVAValueMapProducer.srcMiniAOD = phoSrc
            #we need to also zero out the AOD srcs as otherwise it gets confused in two tier jobs
            #and bad things happen
            process.electronMVAValueMapProducer.src = cms.InputTag("")
            process.photonMVAValueMapProducer.src = cms.InputTag("")
        else:
            process.electronMVAValueMapProducer.src = eleSrc
            process.photonMVAValueMapProducer.src = phoSrc
            process.electronMVAValueMapProducer.srcMiniAOD = cms.InputTag("")
            process.photonMVAValueMapProducer.srcMiniAOD = cms.InputTag("")

        if hasattr(process, 'electronMVAVariableHelper'):
            if cfg.isMiniAOD:
                process.electronMVAVariableHelper.srcMiniAOD = eleSrc
                process.electronMVAVariableHelper.src = cms.InputTag("")
            else:
                process.electronMVAVariableHelper.src = eleSrc
                process.electronMVAVariableHelper.srcMiniAOD = cms.InputTag("")

        #pre UL dataformat, we have to run the egmPhotonIsolation and the like as part of vid
        #post UL dataformat its in the object, how if we are reading old data it will be running
        #as part of the updator sequence so even more important not to touch it
        if not _isULDataformat():
            process.egmPhotonIsolation.srcToIsolate = phoSrc
            if cfg.isMiniAOD:
                process.photonIDValueMapProducer.srcMiniAOD = phoSrc
                process.photonIDValueMapProducer.src = cms.InputTag("")
                if hasattr(process, 'heepIDVarValueMaps'):
                    process.heepIDVarValueMaps.elesMiniAOD = eleSrc
                    process.heepIDVarValueMaps.dataFormat = 2

            else:
                process.photonIDValueMapProducer.src = phoSrc
                process.photonIDValueMapProducer.srcMiniAOD = cms.InputTag("")
                if hasattr(process, 'heepIDVarValueMaps'):
                    process.heepIDVarValueMaps.elesAOD = eleSrc
                    process.heepIDVarValueMaps.dataFormat = 1
                if hasattr(
                        process,
                        'packedCandsForTkIso') and cfg.era.find("2016") != -1:
                    process.packedCandsForTkIso.chargedHadronIsolation = ""

    return eleSrc, phoSrc