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 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