Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 51 additions & 18 deletions python/EgammaPostRecoTools.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def _validRelease():
allowedVersions = { 8 : [0],
9 : [4],
10 : [2,6],
11 : [0]
11 : [0,1]
}

if majorVersion not in allowedVersions:
Expand All @@ -25,7 +25,13 @@ def _validRelease():

def _isULDataformat():
cmsswVersion =_getCMSSWVersion()
return int(cmsswVersion[0]) >= 10 and int(cmsswVersion[1]) >= 5
isUL = (int(cmsswVersion[0]) >= 10 and int(cmsswVersion[1]) >= 5) or (int(cmsswVersion[0]) >=11)
return isUL


def _CMSSWGT11():
cmsswVersion =_getCMSSWVersion()
return int(cmsswVersion[0]) >=11


#define the default IDs to produce in VID
Expand Down Expand Up @@ -78,7 +84,7 @@ def _isULDataformat():
print "EgammaPostRecoTools: Fall17V2 cut based Photons ID modules not found, running ID without them. If you want Fall17V2 CutBased Photon IDs, please merge the approprate PR\n 94X: git cms-merge-topic cms-egamma/EgammaID_949\n 102X: git cms-merge-topic cms-egamma/EgammaID_1023"

def _check_valid_era(era):
valid_eras = ['2017-Nov17ReReco','2016-Legacy','2016-Feb17ReMiniAOD','2018-Prompt','2017-UL']
valid_eras = ['2017-Nov17ReReco','2016-Legacy','2016-Feb17ReMiniAOD','2018-Prompt','2016-UL', '2017-UL', '2018-UL']
if era not in valid_eras:
raise RuntimeError('error, era {} not in list of allowed eras {}'.format(value,str(valid_eras)))
return True
Expand All @@ -95,9 +101,17 @@ def _getEnergyCorrectionFile(era):
if era=="2018-Prompt":
return "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_Step2Closure_CoarseEtaR9Gain_v2"
if era=="2017-UL":
raise RuntimeError('Error in postRecoEgammaTools, era 2017-UL does not yet have energy corrections, please contact the e/gamma pog for more information')
return "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2017_24Feb2020_runEtaR9Gain_v2"
if era=="2018-UL":
return "EgammaAnalysis/ElectronTools/data/ScalesSmearings/Run2018_13Apr2020_RunEtaR9Gain_v2"

if era=="2016-UL":
raise RuntimeError('Error in postRecoEgammaTools, era 2016-UL does not yet have energy corrections, please contact the e/gamma pog for more information')

raise LogicError('Error in postRecoEgammaTools, era '+era+' not added to energy corrections function, please update this function')



def _isInputFrom80X(era):
_check_valid_era(era)
if era=="2016-Legacy" or era=="2016-Feb17ReMiniAOD": return True
Expand Down Expand Up @@ -221,10 +235,15 @@ def _setupEgammaPreVIDUpdator(eleSrc,phoSrc,cfg):
process.load('RecoEgamma.EgammaIsolationAlgos.egmPhotonIsolationMiniAOD_cff')
phoIsoTask = process.egmPhotonIsolationMiniAODTask
process.heepIDVarValueMaps.elesMiniAOD = eleSrc
process.photonIDValueMapProducer.srcMiniAOD = phoSrc
if not _CMSSWGT11():
process.photonIDValueMapProducer.srcMiniAOD = phoSrc
process.photonIDValueMapProducer.src = cms.InputTag("")
else:
process.photonIDValueMapProducer.src = phoSrc
#now disabling miniAOD/AOD auto detection...
process.heepIDVarValueMaps.dataFormat = 2
process.photonIDValueMapProducer.src = cms.InputTag("")



else:
raise Exception("EgammaPostRecoTools: It is currently not possible to read AOD produced pre 106X in 106X+, please email e/gamma pog to get a resolution")
Expand Down Expand Up @@ -309,6 +328,7 @@ def _setupEgammaEnergyCorrections(eleSrc,phoSrc,cfg):
eleCalibProd.correctionFile = energyCorrectionFile
phoCalibProd.correctionFile = energyCorrectionFile


if cfg.applyEPCombBug and hasattr(eleCalibProd,'useSmearCorrEcalEnergyErrInComb'):
eleCalibProd.useSmearCorrEcalEnergyErrInComb=True
elif hasattr(eleCalibProd,'useSmearCorrEcalEnergyErrInComb'):
Expand All @@ -322,7 +342,7 @@ def _setupEgammaEnergyCorrections(eleSrc,phoSrc,cfg):
if cfg.applyEnergyCorrections or cfg.applyVIDOnCorrectedEgamma:
eleCalibProd.produceCalibratedObjs = True
phoCalibProd.produceCalibratedObjs = True
return cms.InputTag(eleCalibName),cms.InputTag(eleCalibName)
return cms.InputTag(eleCalibName),cms.InputTag(phoCalibName)
else:
eleCalibProd.produceCalibratedObjs = False
phoCalibProd.produceCalibratedObjs = False
Expand All @@ -345,12 +365,17 @@ def _setupEgammaVID(eleSrc,phoSrc,cfg):
process.egmPhotonIDs.physicsObjectSrc = phoSrc

if cfg.isMiniAOD:
process.electronMVAValueMapProducer.srcMiniAOD = eleSrc
process.photonMVAValueMapProducer.srcMiniAOD = phoSrc
if not _CMSSWGT11():
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("")
process.electronMVAValueMapProducer.src = cms.InputTag("")
process.photonMVAValueMapProducer.src = cms.InputTag("")
else:
process.electronMVAValueMapProducer.src = eleSrc
process.photonMVAValueMapProducer.src = phoSrc

else:
process.electronMVAValueMapProducer.src = eleSrc
process.photonMVAValueMapProducer.src = phoSrc
Expand All @@ -360,20 +385,27 @@ def _setupEgammaVID(eleSrc,phoSrc,cfg):

if hasattr(process,'electronMVAVariableHelper'):
if cfg.isMiniAOD:
process.electronMVAVariableHelper.srcMiniAOD = eleSrc
process.electronMVAVariableHelper.src = cms.InputTag("")
if not _CMSSWGT11():
process.electronMVAVariableHelper.srcMiniAOD = eleSrc
process.electronMVAVariableHelper.src = cms.InputTag("")
else:
process.electronMVAVariableHelper.src = eleSrc
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 not _CMSSWGT11():
process.photonIDValueMapProducer.srcMiniAOD = phoSrc
process.photonIDValueMapProducer.src = cms.InputTag("")
else:
process.photonIDValueMapProducer.src = phoSrc
if hasattr(process,'heepIDVarValueMaps'):
process.heepIDVarValueMaps.elesMiniAOD = eleSrc
process.heepIDVarValueMaps.dataFormat = 2
Expand Down Expand Up @@ -410,6 +442,7 @@ def _setupEgammaPostVIDUpdator(eleSrc,phoSrc,cfg):
egamma_modifications.append(makeEnergyScaleAndSmearingSysModifier("calibratedPatElectrons","calibratedPatPhotons"))
egamma_modifications.append(egamma8XLegacyEtScaleSysModifier)



#add any missing variables to the slimmed electron
if cfg.runVID:
Expand Down Expand Up @@ -494,13 +527,13 @@ def _setupEgammaPostRecoSeq(*args,**kwargs):
process.egammaVIDSeq = cms.Sequence(process.egammaVIDTask)
process.egammaPostRecoPatUpdatorSeq = cms.Sequence(process.egammaPostRecoPatUpdatorTask)


process.egammaPostRecoSeq = cms.Sequence(
process.egammaUpdatorSeq +
process.egammaScaleSmearSeq +
process.egammaVIDSeq +
process.egammaPostRecoPatUpdatorSeq
)


def setupEgammaPostRecoSeq(process,
applyEnergyCorrections=False,
Expand Down Expand Up @@ -533,8 +566,8 @@ def setupEgammaPostRecoSeq(process,
setupAllVIDIdsInModule(process,idmod,setupVIDPhotonSelection)

if autoAdjustParams:
if era=="2017-UL" and runEnergyCorrections:
print "EgammaPostRecoTools:INFO auto adjusting runEnergyCorrections to False as they are not yet availible for 2017-UL, set autoAdjustParams = False to force them to run"
if ((era=="2016-UL") and runEnergyCorrections):
print "EgammaPostRecoTools:INFO auto adjusting runEnergyCorrections to False as they are not yet availible for 2016-UL, set autoAdjustParams = False to force them to run"
runEnergyCorrections = False


Expand Down