1 from __future__
import print_function
2 import FWCore.ParameterSet.Config
as cms
12 if isinstance(input, cms.InputTag):
13 input_str = input.value()
14 if input
is None or input_str ==
'""':
22 _label=
'RunMETCorrectionsAndUncertainties' 23 _defaultParameters=dicttypes.SortedKeysDict()
26 ConfigToolBase.__init__(self)
28 "Type of considered MET (only PF and Puppi supported so far)", Type=str)
30 "level of correction : available corrections for pfMet are T0, T1, T2, Txy and Smear; irrelevant entry for MVAMet)",
31 allowedValues=[
"T0",
"T1",
"T2",
"Txy",
"Smear",
""])
33 "enable/disable the uncertainty computation", Type=bool)
35 "enable/disable the production of all correction schemes (only for the most common)", Type=bool)
36 self.addParameter(self.
_defaultParameters,
'electronCollection', cms.InputTag(
'selectedPatElectrons'),
37 "Input electron collection", Type=cms.InputTag, acceptNoneValue=
True)
39 self.addParameter(self.
_defaultParameters,
'photonCollection', cms.InputTag(
'selectedPatPhotons'),
40 "Input photon collection", Type=cms.InputTag, acceptNoneValue=
True)
41 self.addParameter(self.
_defaultParameters,
'muonCollection', cms.InputTag(
'selectedPatMuons'),
42 "Input muon collection", Type=cms.InputTag, acceptNoneValue=
True)
43 self.addParameter(self.
_defaultParameters,
'tauCollection', cms.InputTag(
'selectedPatTaus'),
44 "Input tau collection", Type=cms.InputTag, acceptNoneValue=
True)
45 self.addParameter(self.
_defaultParameters,
'jetCollectionUnskimmed', cms.InputTag(
'patJets'),
46 "Input unskimmed jet collection for T1 MET computation", Type=cms.InputTag, acceptNoneValue=
True)
47 self.addParameter(self.
_defaultParameters,
'pfCandCollection', cms.InputTag(
'particleFlow'),
48 "pf Candidate collection", Type=cms.InputTag, acceptNoneValue=
True)
50 "Enable the jet cleaning for the uncertainty computation: Full for tau/photons/jet cleaning, Partial for jet cleaning, LepClean for jet cleaning with muon and electrons only, None or Manual for no cleaning", Type=str)
52 "Use AK4PF/AK4PFchs for PFJets,AK4Calo for CaloJets", Type=str)
54 "Use L1L2L3-L1 for the standard L1 removal / L1L2L3-RC for the random-cone correction", Type=str)
56 self.addParameter(self.
_defaultParameters,
'jetCorLabelUpToL3',
"ak4PFCHSL1FastL2L3Corrector",
"Use ak4PFL1FastL2L3Corrector (ak4PFCHSL1FastL2L3Corrector) for PFJets with (without) charged hadron subtraction, ak4CaloL1FastL2L3Corrector for CaloJets", Type=str)
57 self.addParameter(self.
_defaultParameters,
'jetCorLabelL3Res',
"ak4PFCHSL1FastL2L3ResidualCorrector",
"Use ak4PFL1FastL2L3ResidualCorrector (ak4PFCHSL1FastL2L3ResidualCorrector) for PFJets with (without) charged hadron subtraction, ak4CaloL1FastL2L3ResidualCorrector for CaloJets", Type=str)
61 "Extra JES uncertainty file", Type=str)
63 "JES uncertainty Tag", acceptNoneValue=
True)
66 "Leptons to be used for recoil computation in the MVA MET, available values are: Electrons, Muons, Taus, Photons", allowedValues=[
"Electrons",
"Muons",
"Taus",
"Photons",
""])
69 "Flag to enable/disable that metUncertaintySequence is inserted into patDefaultSequence", Type=bool)
71 "Enable jet configuration options", Type=bool)
73 "Advanced jet kinematic selection", Type=str)
75 "Recompute the MET from scratch using the pfCandidate collection", Type=bool)
77 "Flag to enable/disable JEC update", Type=bool)
79 "Flag to enable/disable the jet reclustering", Type=bool)
81 "Flag to enable/disable the MET significance computation", Type=bool)
83 "Flag to enable/disable the CHS jets", Type=bool)
85 "Switch for data/MC processing", Type=bool)
87 "Switch on miniAOD configuration", Type=bool)
89 "Technical parameter to identify the resulting sequence and its modules (allows multiple calls in a job)", Type=str)
91 "Exclude jets and PF candidates with EE noise characteristics (fix for 2017 run)", Type=bool)
92 self.addParameter(self.
_defaultParameters,
'fixEE2017Params', {
'userawPt':
True,
'ptThreshold': 50.0,
'minEtaThreshold': 2.65,
'maxEtaThreshold': 3.139},
93 "Parameters dict for fixEE2017: userawPt, ptThreshold, minEtaThreshold, maxEtaThreshold", Type=dict)
95 "Extract DeepMETs from miniAOD, instead of recomputing them.", Type=bool)
99 "Puppi algorithm (private)", Type=bool)
112 correctionLevel =
None,
113 computeUncertainties =
None,
114 produceIntermediateCorrections =
None,
115 electronCollection =
None,
116 photonCollection =
None,
117 muonCollection =
None,
119 jetCollectionUnskimmed =
None,
120 pfCandCollection =
None,
121 autoJetCleaning =
None,
124 jetCorLabelUpToL3 =
None,
125 jetCorLabelL3Res =
None,
126 jecUncertaintyFile =
None,
127 jecUncertaintyTag =
None,
129 addToPatDefaultSequence =
None,
130 manualJetConfig =
None,
132 recoMetFromPFCs =
None,
135 computeMETSignificance =
None,
140 fixEE2017Params =
None,
141 extractDeepMETs =
None,
143 electronCollection = self.
initializeInputTag(electronCollection,
'electronCollection')
147 jetCollectionUnskimmed = self.
initializeInputTag(jetCollectionUnskimmed,
'jetCollectionUnskimmed')
151 if correctionLevel
is None :
153 if computeUncertainties
is None :
155 if produceIntermediateCorrections
is None :
156 produceIntermediateCorrections = self.
_defaultParameters[
'produceIntermediateCorrections'].value
157 if electronCollection
is None :
159 if photonCollection
is None :
161 if muonCollection
is None :
163 if tauCollection
is None :
165 if jetCollectionUnskimmed
is None :
167 if pfCandCollection
is None :
169 if autoJetCleaning
is None :
171 if jetFlavor
is None :
175 if jetCorLabelUpToL3
is None:
177 if jetCorLabelL3Res
is None:
179 if jecUncertaintyFile
is None:
181 if jecUncertaintyTag
is None:
184 if mvaMetLeptons
is None:
187 if addToPatDefaultSequence
is None :
189 if manualJetConfig
is None :
191 if jetSelection
is None :
193 recoMetFromPFCsIsNone = (recoMetFromPFCs
is None)
194 if recoMetFromPFCs
is None :
196 if reapplyJEC
is None :
198 reclusterJetsIsNone = (reclusterJets
is None)
199 if reclusterJets
is None :
201 if computeMETSignificance
is None :
205 if runOnData
is None :
207 if onMiniAOD
is None :
211 if fixEE2017
is None :
213 if fixEE2017Params
is None :
215 if extractDeepMETs
is None :
218 self.setParameter(
'metType',metType),
219 self.setParameter(
'correctionLevel',correctionLevel),
220 self.setParameter(
'computeUncertainties',computeUncertainties),
221 self.setParameter(
'produceIntermediateCorrections',produceIntermediateCorrections),
222 self.setParameter(
'electronCollection',electronCollection),
223 self.setParameter(
'photonCollection',photonCollection),
224 self.setParameter(
'muonCollection',muonCollection),
225 self.setParameter(
'tauCollection',tauCollection),
226 self.setParameter(
'jetCollectionUnskimmed',jetCollectionUnskimmed),
227 self.setParameter(
'pfCandCollection',pfCandCollection),
229 self.setParameter(
'autoJetCleaning',autoJetCleaning),
230 self.setParameter(
'jetFlavor',jetFlavor),
233 self.setParameter(
'jecUncertaintyFile',jecUncertaintyFile),
234 self.setParameter(
'jecUncertaintyTag',jecUncertaintyTag),
236 self.setParameter(
'mvaMetLeptons',mvaMetLeptons),
238 self.setParameter(
'addToPatDefaultSequence',addToPatDefaultSequence),
239 self.setParameter(
'jetSelection',jetSelection),
240 self.setParameter(
'recoMetFromPFCs',recoMetFromPFCs),
241 self.setParameter(
'reclusterJets',reclusterJets),
242 self.setParameter(
'computeMETSignificance',computeMETSignificance),
243 self.setParameter(
'reapplyJEC',reapplyJEC),
244 self.setParameter(
'CHS',CHS),
245 self.setParameter(
'runOnData',runOnData),
246 self.setParameter(
'onMiniAOD',onMiniAOD),
247 self.setParameter(
'postfix',postfix),
248 self.setParameter(
'fixEE2017',fixEE2017),
249 self.setParameter(
'fixEE2017Params',fixEE2017Params),
250 self.setParameter(
'extractDeepMETs',extractDeepMETs),
253 if metType ==
"MVA" or metType ==
"Puppi":
254 self.setParameter(
'CHS',
False),
258 if metType ==
"Puppi":
259 self.setParameter(
'metType',
"PF")
260 self.setParameter(
'Puppi',
True)
264 self.setParameter(
'CHS',CHS)
265 self.setParameter(
'jetCorLabelUpToL3',jetCorLabelUpToL3)
266 self.setParameter(
'jetCorLabelL3Res',jetCorLabelL3Res)
267 self.setParameter(
'reclusterJets',reclusterJets)
275 if recoMetFromPFCsIsNone: self.setParameter(
'recoMetFromPFCs',
True)
276 if reclusterJetsIsNone: self.setParameter(
'reclusterJets',
False)
279 if recoMetFromPFCs
and reclusterJetsIsNone
and not fixEE2017:
280 self.setParameter(
'reclusterJets',
True)
284 if self.
_parameters[
"Puppi"].value
and not onMiniAOD:
285 self.setParameter(
'reclusterJets',
False)
292 correctionLevel = self.
_parameters[
'correctionLevel'].value
293 computeUncertainties = self.
_parameters[
'computeUncertainties'].value
294 produceIntermediateCorrections = self.
_parameters[
'produceIntermediateCorrections'].value
295 electronCollection = self.
_parameters[
'electronCollection'].value
296 photonCollection = self.
_parameters[
'photonCollection'].value
297 muonCollection = self.
_parameters[
'muonCollection'].value
298 tauCollection = self.
_parameters[
'tauCollection'].value
299 jetCollectionUnskimmed = self.
_parameters[
'jetCollectionUnskimmed'].value
300 pfCandCollection = self.
_parameters[
'pfCandCollection'].value
301 autoJetCleaning = self.
_parameters[
'autoJetCleaning'].value
303 jetCorLabelUpToL3 = self.
_parameters[
'jetCorLabelUpToL3'].value
304 jetCorLabelL3Res = self.
_parameters[
'jetCorLabelL3Res'].value
305 jecUncertaintyFile = self.
_parameters[
'jecUncertaintyFile'].value
306 jecUncertaintyTag = self.
_parameters[
'jecUncertaintyTag'].value
308 mvaMetLeptons = self.
_parameters[
'mvaMetLeptons'].value
309 addToPatDefaultSequence = self.
_parameters[
'addToPatDefaultSequence'].value
310 jetSelection = self.
_parameters[
'jetSelection'].value
311 recoMetFromPFCs = self.
_parameters[
'recoMetFromPFCs'].value
313 reclusterJets = self.
_parameters[
'reclusterJets'].value
314 computeMETSignificance = self.
_parameters[
'computeMETSignificance'].value
318 fixEE2017Params = self.
_parameters[
'fixEE2017Params'].value
319 extractDeepMETs = self.
_parameters[
'extractDeepMETs'].value
322 jetUncInfos = {
"jCorrPayload":jetFlavor,
"jCorLabelUpToL3":jetCorLabelUpToL3,
323 "jCorLabelL3Res":jetCorLabelL3Res,
"jecUncFile":jecUncertaintyFile,
324 "jecUncTag":
"Uncertainty" }
326 if (jecUncertaintyFile!=
"" and jecUncertaintyTag==
None):
327 jetUncInfos[
"jecUncTag" ] =
"" 328 elif(jecUncertaintyTag!=
None):
329 jetUncInfos[
"jecUncTag" ] = jecUncertaintyTag
331 patMetModuleSequence = cms.Sequence()
335 pfCandCollection, jetCollectionUnskimmed = self.
runFixEE2017(process,
337 jetCollectionUnskimmed,
339 [electronCollection,muonCollection,tauCollection,photonCollection],
340 patMetModuleSequence,
349 patMetModuleSequence,
353 self.
extractMET(process,
"raw", patMetModuleSequence, postfix)
359 patMetModuleSequence, postfix)
363 if not reclusterJets
and reapplyJEC:
364 jetCollectionUnskimmed = self.
updateJECs(process, jetCollectionUnskimmed, patMetModuleSequence, postfix)
370 jetCollectionUnskimmed,
373 patMetModuleSequence,
380 from PhysicsTools.PatUtils.pfeGammaToCandidate_cfi
import pfeGammaToCandidate
383 electrons = copy.copy(electronCollection),
384 photons = copy.copy(photonCollection)),
386 if hasattr(process,
"patElectrons")
and process.patElectrons.electronSource == cms.InputTag(
"reducedEgamma",
"reducedGedGsfElectrons"):
387 process.pfeGammaToCandidate.electron2pf =
"reducedEgamma:reducedGsfElectronPfCandMap" 388 if hasattr(process,
"patPhotons")
and process.patPhotons.photonSource == cms.InputTag(
"reducedEgamma",
"reducedGedPhotons"):
389 process.pfeGammaToCandidate.photon2pf =
"reducedEgamma:reducedPhotonPfCandMap" 392 self.
produceMET(process, metType,patMetModuleSequence, postfix)
401 patMetModuleSequence,
406 patMetCorrectionSequence, metModName = self.
getCorrectedMET(process, metType, correctionLevel,
407 produceIntermediateCorrections,
409 patMetModuleSequence, postfix )
414 if "T1" in metModName:
415 getattr(process,
"patPFMetT1T2Corr"+postfix).src = jetCollection
416 getattr(process,
"patPFMetT2Corr"+postfix).src = jetCollection
419 getattr(process,
"patPFMetT1T2Corr"+postfix).offsetCorrLabel = cms.InputTag(
"")
420 getattr(process,
"patPFMetT2Corr"+postfix).offsetCorrLabel = cms.InputTag(
"")
421 if "Smear" in metModName:
422 getattr(process,
"patSmearedJets"+postfix).src = jetCollection
424 getattr(process,
"patPFMetT1T2SmearCorr"+postfix).offsetCorrLabel = cms.InputTag(
"")
428 patMetUncertaintySequence = cms.Sequence()
429 tmpUncSequence =cms.Sequence()
430 if not hasattr(process,
"patMetUncertaintySequence"+postfix):
432 patMetUncertaintySequence=cms.Sequence(getattr(process,
"ak4PFPuppiL1FastL2L3CorrectorChain")+getattr(process,
"ak4PFPuppiL1FastL2L3ResidualCorrectorChain"))
434 patMetUncertaintySequence=cms.Sequence(getattr(process,
"ak4PFCHSL1FastL2L3CorrectorChain")+getattr(process,
"ak4PFCHSL1FastL2L3ResidualCorrectorChain"))
435 patShiftedModuleSequence = cms.Sequence()
436 if computeUncertainties:
437 tmpUncSequence,patShiftedModuleSequence = self.
getMETUncertainties(process, metType, metModName,
447 if not hasattr(process,
"patMetCorrectionSequence"+postfix):
448 setattr(process,
"patMetCorrectionSequence"+postfix, patMetCorrectionSequence)
449 if not hasattr(process,
"patMetUncertaintySequence"+postfix):
450 patMetUncertaintySequence += tmpUncSequence
451 setattr(process,
"patMetUncertaintySequence"+postfix, patMetUncertaintySequence)
453 if not len(configtools.listModules(tmpUncSequence))==0:
454 setattr(process, metModName+
"patMetUncertaintySequence"+postfix , tmpUncSequence)
455 tmpSeq = getattr(process,
"patMetUncertaintySequence"+postfix)
456 tmpSeq += getattr(process, metModName+
"patMetUncertaintySequence"+postfix)
458 if not hasattr(process,
"patShiftedModuleSequence"+postfix):
459 setattr(process,
"patShiftedModuleSequence"+postfix, patShiftedModuleSequence)
461 if not len(configtools.listModules(patShiftedModuleSequence))==0:
462 setattr(process, metModName+
"patShiftedModuleSequence"+postfix , patShiftedModuleSequence)
463 tmpSeq = getattr(process,
"patShiftedModuleSequence"+postfix)
464 tmpSeq += getattr(process, metModName+
"patShiftedModuleSequence"+postfix)
466 if not hasattr(process,
"patMetModuleSequence"+postfix):
467 setattr(process,
"patMetModuleSequence"+postfix, patMetModuleSequence)
470 fullPatMetSequence = cms.Sequence()
471 fullPatMetSequence += getattr(process,
"patMetModuleSequence"+postfix)
472 fullPatMetSequence += getattr(process,
"patMetCorrectionSequence"+postfix)
473 fullPatMetSequence += getattr(process,
"patMetUncertaintySequence"+postfix)
474 fullPatMetSequence += getattr(process,
"patShiftedModuleSequence"+postfix)
477 if hasattr(process,
"patCaloMet"):
478 fullPatMetSequence +=getattr(process,
"patCaloMet")
480 if hasattr(process,
"deepMETsResolutionTune"):
481 fullPatMetSequence +=getattr(process,
"deepMETsResolutionTune")
482 if hasattr(process,
"deepMETsResponseTune"):
483 fullPatMetSequence += getattr(process,
"deepMETsResponseTune")
484 if hasattr(process,
"slimmedMETs"+postfix):
485 fullPatMetSequence +=getattr(process,
"slimmedMETs"+postfix)
487 setattr(process,
"fullPatMetSequence"+postfix,fullPatMetSequence)
490 configtools.removeIfInSequence(process,
"selectedPatJetsForMetT1T2Corr",
"patPFMetT1T2CorrSequence", postfix )
496 if addToPatDefaultSequence:
497 if not hasattr(process,
"patDefaultSequence"):
498 raise ValueError(
"PAT default sequence is not defined !!")
499 process.patDefaultSequence += getattr(process,
"fullPatMetSequence"+postfix)
502 def produceMET(self, process, metType, metModuleSequence, postfix):
506 if metType ==
"PF" and not hasattr(process,
'pat'+metType+
'Met'):
507 process.load(
"PhysicsTools.PatUtils.patPFMETCorrections_cff")
508 task.add(process.producePatPFMETCorrectionsTask)
509 task.add(process.patPFMetT2SmearCorrTask)
510 task.add(process.patPFMetTxyCorrTask)
511 task.add(process.jetCorrectorsTask)
513 _myPatMet =
'pat'+metType+
'Met'+postfix
514 if postfix !=
"" and metType ==
"PF" and not hasattr(process, _myPatMet):
515 noClonesTmp = [
"particleFlowDisplacedVertex",
"pfCandidateToVertexAssociation" ]
516 configtools.cloneProcessingSnippet(process, getattr(process,
"producePatPFMETCorrections"), postfix, noClones = noClonesTmp, addToTask =
True)
518 getattr(process, _myPatMet).metSource = cms.InputTag(
"pfMet"+postfix)
519 getattr(process, _myPatMet).srcPFCands = copy.copy(self.getvalue(
"pfCandCollection"))
520 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
521 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
522 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify( getattr(process, _myPatMet), srcPFCands =
"puppiForMET" if self.getvalue(
"Puppi")
else copy.copy(self.getvalue(
"pfCandCollection")) )
524 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
525 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
526 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(getattr(process, _myPatMet), srcLeptons = \
527 cms.VInputTag( copy.copy(self.getvalue(
"electronCollection"))
if self.getvalue(
"onMiniAOD")
else cms.InputTag(
"pfeGammaToCandidate",
"electrons"),
528 copy.copy(self.getvalue(
"muonCollection")),
529 copy.copy(self.getvalue(
"photonCollection"))
if self.getvalue(
"onMiniAOD")
else cms.InputTag(
"pfeGammaToCandidate",
"photons")
532 if self.getvalue(
"runOnData"):
533 getattr(process, _myPatMet).addGenMET =
False 542 getattr(process,
'patPFMet' ).
clone(metSource = cms.InputTag(
'pfMVAMet')),
545 metModuleSequence += getattr(process, _myPatMet )
548 def getCorrectedMET(self, process, metType, correctionLevel,produceIntermediateCorrections,
549 jetCollection, metModuleSequence, postfix ):
552 patMetCorrectionSequence = cms.Sequence()
553 metModName =
"pat"+metType+
"Met"+postfix
556 return patMetCorrectionSequence, metModName
568 for cor
in correctionLevel:
569 if cor
not in corNames.keys():
571 print(
"ERROR : ",cor,
" is not a proper MET correction name! aborting the MET correction production")
572 return patMetCorrectionSequence, metModName
575 "T0":
"patPFMetT0CorrSequence"+postfix,
576 "T1":
"patPFMetT1T2CorrSequence"+postfix,
577 "T2":
"patPFMetT2CorrSequence"+postfix,
578 "Txy":
"patPFMetTxyCorrSequence"+postfix,
579 "Smear":
"patPFMetSmearCorrSequence"+postfix,
580 "T2Smear":
"patPFMetT2SmearCorrSequence"+postfix
584 noClonesTmp = [
"particleFlowDisplacedVertex",
"pfCandidateToVertexAssociation" ]
585 if not hasattr(process,
"patPFMetT0CorrSequence"+postfix):
586 configtools.cloneProcessingSnippet(process, getattr(process,
"patPFMetT0CorrSequence"), postfix, noClones = noClonesTmp, addToTask =
True)
587 if not hasattr(process,
"patPFMetT1T2CorrSequence"+postfix):
588 configtools.cloneProcessingSnippet(process, getattr(process,
"patPFMetT1T2CorrSequence"), postfix, addToTask =
True)
589 if not hasattr(process,
"patPFMetT2CorrSequence"+postfix):
590 configtools.cloneProcessingSnippet(process, getattr(process,
"patPFMetT2CorrSequence"), postfix, addToTask =
True)
591 if not hasattr(process,
"patPFMetTxyCorrSequence"+postfix):
592 configtools.cloneProcessingSnippet(process, getattr(process,
"patPFMetTxyCorrSequence"), postfix, addToTask =
True)
593 if not hasattr(process,
"patPFMetSmearCorrSequence"+postfix):
594 configtools.cloneProcessingSnippet(process, getattr(process,
"patPFMetSmearCorrSequence"), postfix, addToTask =
True)
595 if not hasattr(process,
"patPFMetT2SmearCorrSequence"+postfix):
596 configtools.cloneProcessingSnippet(process, getattr(process,
"patPFMetT2SmearCorrSequence"), postfix, addToTask =
True)
599 for mod
in corModNames.keys():
600 corModules[mod] = getattr(process, corModNames[mod] )
609 "T0":[
'patPFMetT0Corr'+postfix,
''],
610 "T1":[
'patPFMetT1T2Corr'+postfix,
'type1'],
611 "T2":[
'patPFMetT2Corr'+postfix,
'type2'],
612 "Txy": [
'patPFMetTxyCorr'+postfix,
''],
613 "Smear":[
'patPFMetT1T2SmearCorr'+postfix,
'type1'],
614 "T2Smear":[
'patPFMetT2SmearCorr'+postfix,
'type2']
619 correctionSequence = []
620 for cor
in correctionLevel:
621 corScheme += corNames[cor]
622 corrections.append(cms.InputTag(corTags[cor][0],corTags[cor][1]))
623 correctionSequence.append(corModules[cor])
626 if "T2" in correctionLevel
and "Smear" in correctionLevel:
627 corrections.append(cms.InputTag(corTags[
"T2Smear"][0],corTags[
"T2Smear"][1]))
628 correctionSequence.append(corModules[
"T2Smear"])
631 if "T1" in correctionLevel
and "Smear" in correctionLevel:
632 corrections.remove(cms.InputTag(corTags[
"T1"][0],corTags[
"T1"][1]))
635 if "Txy" in correctionLevel:
637 getattr(process,
"patPFMetTxyCorr"+postfix).srcPFlow = self.
_parameters[
"pfCandCollection"].value
638 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
639 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
640 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify( getattr(process,
"patPFMetTxyCorr"+postfix), srcPFlow =
"puppiForMET" if self.getvalue(
"Puppi")
else self.
_parameters[
"pfCandCollection"].value )
644 if "T1" in correctionLevel:
645 _myPatMet =
"pat"+metType+
"Met"+postfix
646 getattr(process, _myPatMet).computeMETSignificance = cms.bool(self.getvalue(
"computeMETSignificance"))
647 getattr(process, _myPatMet).srcPFCands = copy.copy(self.getvalue(
"pfCandCollection"))
648 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
649 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
650 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(getattr(process, _myPatMet), srcPFCands =
"puppiForMET" if self.getvalue(
"Puppi")
else copy.copy(self.getvalue(
"pfCandCollection")) )
651 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(getattr(process, _myPatMet), srcLeptons = \
652 cms.VInputTag(copy.copy(self.getvalue(
"electronCollection"))
if self.getvalue(
"onMiniAOD")
else 653 cms.InputTag(
"pfeGammaToCandidate",
"electrons"),
654 copy.copy(self.getvalue(
"muonCollection")),
655 copy.copy(self.getvalue(
"photonCollection"))
if self.getvalue(
"onMiniAOD")
else 656 cms.InputTag(
"pfeGammaToCandidate",
"photons")))
658 getattr(process, _myPatMet).computeMETSignificance = cms.bool(
False)
659 if self.getvalue(
"runOnData"):
660 from RecoMET.METProducers.METSignificanceParams_cfi
import METSignificanceParams_Data
661 getattr(process, _myPatMet).parameters = METSignificanceParams_Data
662 if self.getvalue(
"Puppi"):
663 getattr(process, _myPatMet).srcPFCands = cms.InputTag(
'puppiForMET')
664 getattr(process, _myPatMet).srcJets = cms.InputTag(
'cleanedPatJets'+postfix)
665 getattr(process, _myPatMet).srcJetSF =
'AK4PFPuppi' 666 getattr(process, _myPatMet).srcJetResPt =
'AK4PFPuppi_pt' 667 getattr(process, _myPatMet).srcJetResPhi =
'AK4PFPuppi_phi' 670 if not self.
_parameters[
"onMiniAOD"].value
and not postfix==
"NoHF":
671 _myPatMet =
"patMETs"+postfix
672 getattr(process, _myPatMet).computeMETSignificance = cms.bool(self.getvalue(
"computeMETSignificance"))
673 getattr(process, _myPatMet).srcPFCands= copy.copy(self.getvalue(
"pfCandCollection"))
674 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
675 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
676 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(getattr(process, _myPatMet), srcPFCands=
"puppiForMET" if self.getvalue(
"Puppi")
else copy.copy(self.getvalue(
"pfCandCollection")))
677 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(getattr(process, _myPatMet), srcLeptons = \
678 cms.VInputTag(copy.copy(self.getvalue(
"electronCollection"))
if self.getvalue(
"onMiniAOD")
else 679 cms.InputTag(
"pfeGammaToCandidate",
"electrons"),
680 copy.copy(self.getvalue(
"muonCollection")),
681 copy.copy(self.getvalue(
"photonCollection"))
if self.getvalue(
"onMiniAOD")
else 682 cms.InputTag(
"pfeGammaToCandidate",
"photons")))
684 if hasattr(process,
"patCaloMet"):
685 getattr(process,
"patCaloMet").computeMETSignificance = cms.bool(
False)
690 if "T1" in correctionLevel
and not self.
_parameters[
"CHS"].value:
692 getattr(process,
"corrPfMetType1"+postfix).src = cms.InputTag(
"ak4PFJets"+postfix)
693 getattr(process,
"corrPfMetType1"+postfix).jetCorrLabel = cms.InputTag(
"ak4PFL1FastL2L3Corrector")
694 getattr(process,
"corrPfMetType1"+postfix).jetCorrLabelRes = cms.InputTag(
"ak4PFL1FastL2L3ResidualCorrector")
695 getattr(process,
"corrPfMetType1"+postfix).offsetCorrLabel = cms.InputTag(
"ak4PFL1FastjetCorrector")
696 getattr(process,
"basicJetsForMet"+postfix).offsetCorrLabel = cms.InputTag(
"ak4PFL1FastjetCorrector")
698 if "T1" in correctionLevel
and self.
_parameters[
"Puppi"].value:
700 getattr(process,
"corrPfMetType1"+postfix).src = cms.InputTag(
"ak4PFJets"+postfix)
701 getattr(process,
"corrPfMetType1"+postfix).jetCorrLabel = cms.InputTag(
"ak4PFPuppiL1FastL2L3Corrector")
702 getattr(process,
"corrPfMetType1"+postfix).jetCorrLabelRes = cms.InputTag(
"ak4PFPuppiL1FastL2L3ResidualCorrector")
703 getattr(process,
"corrPfMetType1"+postfix).offsetCorrLabel = cms.InputTag(
"ak4PFPuppiL1FastjetCorrector")
704 getattr(process,
"basicJetsForMet"+postfix).offsetCorrLabel = cms.InputTag(
"L1FastJet")
707 getattr(process,
"corrPfMetType1"+postfix).src = cms.InputTag(
"ak4PFJetsCHS"+postfix)
710 metModName =
"pat"+metType+
"Met"+corScheme+postfix
715 corMetProducer = cms.EDProducer(
"CorrectedPATMETProducer",
716 src = cms.InputTag(
'pat'+metType+
'Met' + postfix),
717 srcCorrections = cms.VInputTag(corrections)
719 sequenceName=
"patMetCorrectionSequence" 730 if not hasattr(process, sequenceName+postfix):
732 for corModule
in correctionSequence:
733 patMetCorrectionSequence += corModule
735 setattr(process, sequenceName+postfix, patMetCorrectionSequence)
738 patMetCorrectionSequence = getattr(process,
"patMetCorrectionSequence"+postfix)
741 for cor
in corModNames.keys():
742 if not configtools.contains(patMetCorrectionSequence, corTags[cor][0])
and cor
in correctionLevel:
743 patMetCorrectionSequence += corModules[cor]
746 patMetCorrectionSequence += getattr(process, metModName)
750 if produceIntermediateCorrections:
751 interMets = self.
addIntermediateMETs(process, metType, correctionLevel, corScheme, corTags,corNames, postfix)
752 for met
in interMets.keys():
754 patMetCorrectionSequence += getattr(process, met)
756 return patMetCorrectionSequence, metModName
764 if len(correctionLevel) == 1:
768 nCor=len(correctionLevel)+1
770 for i
in range(nCor**nCor):
775 for j
in range(nCor):
779 if j != 0
and ids[j-1] < ids[j]:
782 if ids[k] == ids[j]
and ids[k]!=0:
785 if exists
or sum(ids[j]
for j
in range(nCor))==0:
788 for cor
in range(nCor):
789 cid = ids[nCor-cor-1]
790 cKey = correctionLevel[cid-1]
794 corName += corNames[cKey]
795 corrections.append( cms.InputTag(corTags[ cKey ][0], corTags[ cKey ][1]) )
797 if corName == corScheme:
800 corName=
'pat'+metType+
'Met' + corName + postfix
801 if configtools.contains(getattr(process,
"patMetCorrectionSequence"+postfix), corName )
and hasattr(process, corName):
804 interMets[corName] = cms.EDProducer(
"CorrectedPATMETProducer",
805 src = cms.InputTag(
'pat'+metType+
'Met' + postfix),
806 srcCorrections = cms.VInputTag(corrections)
815 photonCollection, muonCollection, tauCollection,
816 pfCandCollection, jetCollection, jetUncInfos,
821 metUncSequence = cms.Sequence()
822 shiftedModuleSequence = cms.Sequence()
830 print(
"INFO : jet collection %s does not exists, no energy resolution shifting will be performed in MET uncertainty tools" % jetCollection)
833 if "Smear" in metModName:
836 metJERUncModules = self.
getVariations(process, metModName,
"Jet",preId, jetCollection,
"Res", metUncSequence, postfix=postfix )
838 for mod
in metJERUncModules.keys():
840 shiftedModuleSequence += getattr(process, mod)
845 if not hasattr(process,
"pfCandsForUnclusteredUnc"+postfix):
848 pfCandsNoJets = cms.EDProducer(
"CandPtrProjector",
849 src = pfCandCollection,
850 veto = copy.copy(jetCollection),
851 useDeltaRforFootprint = cms.bool(
False)
853 if self.getvalue(
"Puppi"):
854 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
855 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
856 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsNoJets, src = cms.InputTag(
'puppiForMET'))
857 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsNoJets, useDeltaRforFootprint =
True)
859 metUncSequence += getattr(process,
"pfCandsNoJets"+postfix)
862 pfCandsNoJetsNoEle = cms.EDProducer(
"CandPtrProjector",
863 src = cms.InputTag(
"pfCandsNoJets"+postfix),
864 veto = copy.copy(electronCollection),
865 useDeltaRforFootprint = cms.bool(
False)
867 if not self.getvalue(
"onMiniAOD"):
868 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
869 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
870 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsNoJetsNoEle, useDeltaRforFootprint =
True)
871 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsNoJetsNoEle, veto = cms.InputTag(
"pfeGammaToCandidate",
"electrons"))
873 metUncSequence += getattr(process,
"pfCandsNoJetsNoEle"+postfix)
876 pfCandsNoJetsNoEleNoMu = cms.EDProducer(
"CandPtrProjector",
877 src = cms.InputTag(
"pfCandsNoJetsNoEle"+postfix),
878 veto = copy.copy(muonCollection),
879 useDeltaRforFootprint = cms.bool(
False)
881 if not self.getvalue(
"onMiniAOD"):
882 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
883 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
884 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsNoJetsNoEleNoMu, useDeltaRforFootprint =
True)
885 addToProcessAndTask(
"pfCandsNoJetsNoEleNoMu"+postfix, pfCandsNoJetsNoEleNoMu, process, task)
886 metUncSequence += getattr(process,
"pfCandsNoJetsNoEleNoMu"+postfix)
889 pfCandsNoJetsNoEleNoMuNoTau = cms.EDProducer(
"CandPtrProjector",
890 src = cms.InputTag(
"pfCandsNoJetsNoEleNoMu"+postfix),
891 veto = copy.copy(tauCollection),
892 useDeltaRforFootprint = cms.bool(
False)
894 if self.getvalue(
"Puppi"):
895 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
896 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
897 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsNoJetsNoEleNoMuNoTau, useDeltaRforFootprint =
True)
898 addToProcessAndTask(
"pfCandsNoJetsNoEleNoMuNoTau"+postfix, pfCandsNoJetsNoEleNoMuNoTau, process, task)
899 metUncSequence += getattr(process,
"pfCandsNoJetsNoEleNoMuNoTau"+postfix)
902 pfCandsForUnclusteredUnc = cms.EDProducer(
"CandPtrProjector",
903 src = cms.InputTag(
"pfCandsNoJetsNoEleNoMuNoTau"+postfix),
904 veto = copy.copy(photonCollection),
905 useDeltaRforFootprint = cms.bool(
False)
907 if not self.getvalue(
"onMiniAOD"):
908 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
909 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
910 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsForUnclusteredUnc, useDeltaRforFootprint =
True)
911 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(pfCandsForUnclusteredUnc, veto = cms.InputTag(
"pfeGammaToCandidate",
"photons"))
912 addToProcessAndTask(
"pfCandsForUnclusteredUnc"+postfix, pfCandsForUnclusteredUnc, process, task)
913 metUncSequence += getattr(process,
"pfCandsForUnclusteredUnc"+postfix)
924 pfElectrons = cms.EDFilter(
"CandPtrSelector",
925 src = electronCollection,
926 cut = cms.string(
"pt > 5 && isPF && gsfTrack.isAvailable() && gsfTrack.hitPattern().numberOfLostHits(\'MISSING_INNER_HITS\') < 2")
929 metUncSequence += getattr(process,
"pfElectrons"+postfix)
933 pfTaus = cms.EDFilter(
"PATTauRefSelector",
935 cut = cms.string(
'pt > 18.0 & abs(eta) < 2.6 & tauID("decayModeFinding") > 0.5 & isPFTau')
938 metUncSequence += getattr(process,
"pfTaus"+postfix)
942 pfMuons = cms.EDFilter(
"CandPtrSelector",
943 src = muonCollection,
944 cut = cms.string(
"pt > 5.0 && isPFMuon && abs(eta) < 2.4")
947 metUncSequence += getattr(process,
"pfMuons"+postfix)
952 cutforpfNoPileUp = cms.string(
"")
954 cutforpfNoPileUp = cms.string(
"fromPV > 1")
956 pfNoPileUp = cms.EDFilter(
"CandPtrSelector",
957 src = pfCandCollection,
958 cut = cutforpfNoPileUp
961 metUncSequence += getattr(process,
"pfNoPileUp"+postfix)
963 pfPhotons = cms.EDFilter(
"CandPtrSelector",
964 src = cms.InputTag(
"pfNoPileUp"+postfix),
965 cut = cms.string(
"abs(pdgId) = 22")
968 metUncSequence += getattr(process,
"pfPhotons"+postfix)
972 electronCollection = cms.InputTag(
"pfElectrons"+postfix)
973 muonCollection = cms.InputTag(
"pfMuons"+postfix)
974 tauCollection = cms.InputTag(
"pfTaus"+postfix)
975 photonCollection = cms.InputTag(
"pfPhotons"+postfix)
978 objectCollections = {
"Jet":jetCollection,
979 "Electron":electronCollection,
980 "Photon":photonCollection,
981 "Muon":muonCollection,
982 "Unclustered":cms.InputTag(
"pfCandsForUnclusteredUnc"+postfix),
986 for obj
in objectCollections.keys():
988 print(
"INFO : %s collection %s does not exists, no energy scale shifting will be performed in MET uncertainty tools" %(obj, objectCollections[obj]))
990 metObjUncModules = self.
getVariations(process, metModName, obj,
"", objectCollections[obj],
"En", metUncSequence, jetUncInfos, postfix )
993 for mod
in metObjUncModules.keys():
995 shiftedModuleSequence += getattr(process, mod)
998 return metUncSequence, shiftedModuleSequence
1002 varyByNsigmas, jetUncInfos=
None, postfix=
""):
1004 shiftedModuleUp =
None 1006 if identifier ==
"Electron":
1007 shiftedModuleUp = cms.EDProducer(
"ShiftedParticleProducer",
1008 src = objectCollection,
1009 uncertainty = cms.string(
'((abs(y)<1.479)?(0.006+0*x):(0.015+0*x))'),
1010 shiftBy = cms.double(+1.*varyByNsigmas)
1013 if identifier ==
"Photon":
1014 shiftedModuleUp = cms.EDProducer(
"ShiftedParticleProducer",
1015 src = objectCollection,
1016 uncertainty = cms.string(
'((abs(y)<1.479)?(0.01+0*x):(0.025+0*x))'),
1017 shiftBy = cms.double(+1.*varyByNsigmas)
1020 if identifier ==
"Muon":
1021 shiftedModuleUp = cms.EDProducer(
"ShiftedParticleProducer",
1022 src = objectCollection,
1023 uncertainty = cms.string(
'((x<100)?(0.002+0*y):(0.05+0*y))'),
1024 shiftBy = cms.double(+1.*varyByNsigmas)
1027 if identifier ==
"Tau":
1028 shiftedModuleUp = cms.EDProducer(
"ShiftedParticleProducer",
1029 src = objectCollection,
1030 uncertainty = cms.string(
'0.03+0*x*y'),
1031 shiftBy = cms.double(+1.*varyByNsigmas)
1034 if identifier ==
"Unclustered":
1035 shiftedModuleUp = cms.EDProducer(
"ShiftedParticleProducer",
1036 src = objectCollection,
1037 binning = cms.VPSet(
1040 binSelection = cms.string(
'charge!=0'),
1041 binUncertainty = cms.string(
'sqrt(pow(0.00009*x,2)+pow(0.0085/sqrt(sin(2*atan(exp(-y)))),2))')
1045 binSelection = cms.string(
'pdgId==130'),
1046 energyDependency = cms.bool(
True),
1047 binUncertainty = cms.string(
'((abs(y)<1.3)?(min(0.25,sqrt(0.64/x+0.0025))):(min(0.30,sqrt(1.0/x+0.0016))))')
1051 binSelection = cms.string(
'pdgId==22'),
1052 energyDependency = cms.bool(
True),
1053 binUncertainty = cms.string(
'sqrt(0.0009/x+0.000001)+0*y')
1057 binSelection = cms.string(
'pdgId==1 || pdgId==2'),
1058 energyDependency = cms.bool(
True),
1059 binUncertainty = cms.string(
'sqrt(1./x+0.0025)+0*y')
1062 shiftBy = cms.double(+1.*varyByNsigmas)
1065 if identifier ==
"Jet":
1066 moduleType=
"ShiftedPATJetProducer" 1071 if jetUncInfos[
"jecUncFile"] ==
"":
1072 shiftedModuleUp = cms.EDProducer(moduleType,
1073 src = objectCollection,
1074 jetCorrUncertaintyTag = cms.string(jetUncInfos[
"jecUncTag"] ),
1075 addResidualJES = cms.bool(
True),
1076 jetCorrLabelUpToL3 = cms.InputTag(jetUncInfos[
"jCorLabelUpToL3"] ),
1077 jetCorrLabelUpToL3Res = cms.InputTag(jetUncInfos[
"jCorLabelL3Res"] ),
1078 jetCorrPayloadName = cms.string(jetUncInfos[
"jCorrPayload"] ),
1079 shiftBy = cms.double(+1.*varyByNsigmas),
1082 shiftedModuleUp = cms.EDProducer(moduleType,
1083 src = objectCollection,
1084 jetCorrInputFileName = cms.FileInPath(jetUncInfos[
"jecUncFile"] ),
1085 jetCorrUncertaintyTag = cms.string(jetUncInfos[
"jecUncTag"] ),
1086 addResidualJES = cms.bool(
True),
1087 jetCorrLabelUpToL3 = cms.InputTag(jetUncInfos[
"jCorLabelUpToL3"] ),
1088 jetCorrLabelUpToL3Res = cms.InputTag(jetUncInfos[
"jCorLabelL3Res"] ),
1089 jetCorrPayloadName = cms.string(jetUncInfos[
"jCorrPayload"] ),
1090 shiftBy = cms.double(+1.*varyByNsigmas),
1094 return shiftedModuleUp
1107 if baseName[-len(postfix):] == postfix:
1108 baseName = baseName[0:-len(postfix)]
1110 raise Exception(
"Tried to remove postfix %s from %s, but it wasn't there" % (postfix, baseName))
1118 "Txy_50ns":metCors.patMultPhiCorrParams_Txy_50ns,
1119 "T1Txy_50ns":metCors.patMultPhiCorrParams_T1Txy_50ns,
1120 "T0pcTxy_50ns":metCors.patMultPhiCorrParams_T0pcTxy_50ns,
1121 "T0pcT1Txy_50ns":metCors.patMultPhiCorrParams_T0pcT1Txy_50ns,
1122 "T1T2Txy_50ns":metCors.patMultPhiCorrParams_T1T2Txy_50ns,
1123 "T0pcT1T2Txy_50ns":metCors.patMultPhiCorrParams_T0pcT1T2Txy_50ns,
1124 "T1SmearTxy_50ns":metCors.patMultPhiCorrParams_T1SmearTxy_50ns,
1125 "T1T2SmearTxy_50ns":metCors.patMultPhiCorrParams_T1T2SmearTxy_50ns,
1126 "T0pcT1SmearTxy_50ns":metCors.patMultPhiCorrParams_T0pcT1SmearTxy_50ns,
1127 "T0pcT1T2SmearTxy_50ns":metCors.patMultPhiCorrParams_T0pcT1T2SmearTxy_50ns,
1129 "Txy_25ns":metCors.patMultPhiCorrParams_Txy_25ns,
1130 "T1Txy_25ns":metCors.patMultPhiCorrParams_T1Txy_25ns,
1131 "T0pcTxy_25ns":metCors.patMultPhiCorrParams_T0pcTxy_25ns,
1132 "T0pcT1Txy_25ns":metCors.patMultPhiCorrParams_T0pcT1Txy_25ns,
1133 "T1T2Txy_25ns":metCors.patMultPhiCorrParams_T1T2Txy_25ns,
1134 "T0pcT1T2Txy_25ns":metCors.patMultPhiCorrParams_T0pcT1T2Txy_25ns,
1135 "T1SmearTxy_25ns":metCors.patMultPhiCorrParams_T1SmearTxy_25ns,
1136 "T1T2SmearTxy_25ns":metCors.patMultPhiCorrParams_T1T2SmearTxy_25ns,
1137 "T0pcT1SmearTxy_25ns":metCors.patMultPhiCorrParams_T0pcT1SmearTxy_25ns,
1138 "T0pcT1T2SmearTxy_25ns":metCors.patMultPhiCorrParams_T0pcT1T2SmearTxy_25ns
1141 getattr(process,
"patPFMetTxyCorr"+postfix).parameters = xyTags[corScheme+
"_25ns"]
1145 def getVariations(self, process, metModName, identifier,preId, objectCollection, varType,
1146 metUncSequence, jetUncInfos=
None, postfix=
"" ):
1155 shiftedMetProducers = {preId+identifier+varType+
'Up':
None, preId+identifier+varType+
'Down':
None}
1158 shiftedCollModules = {
'Up':
None,
'Down':
None}
1160 if identifier==
"Jet" and varType==
"Res":
1162 if "Smear" in metModName:
1174 shiftedCollModules[
'Down'] = shiftedCollModules[
'Up'].
clone( shiftBy = cms.double(-1.*varyByNsigmas) )
1176 if identifier==
"Jet" and varType==
"Res":
1178 if "Smear" in metModName:
1179 objectCollection=cms.InputTag(
"selectedPatJetsForMetT1T2SmearCorr"+postfix)
1184 if identifier==
"Jet" and varType==
"Res" and self.
_parameters[
"runOnData"].value:
1185 shiftedMetProducers = self.
copyCentralMETProducer(process, shiftedCollModules, identifier, metModName, varType, postfix)
1187 shiftedMetProducers = self.
createShiftedModules(process, shiftedCollModules, identifier, preId, objectCollection,
1188 metModName, varType, metUncSequence, postfix)
1190 return shiftedMetProducers
1197 shiftedMetProducers = {}
1199 for mod
in shiftedCollModules.keys():
1200 modName = baseName+identifier+varType+mod+postfix
1201 shiftedMETModule = getattr(process, metModName).
clone()
1202 shiftedMetProducers[ modName ] = shiftedMETModule
1204 return shiftedMetProducers
1210 smearedJetModule = self.
createSmearedJetModule(process, objectCollection, smear, varyByNsigmas, varDir, postfix)
1212 return smearedJetModule
1216 def createShiftedModules(self, process, shiftedCollModules, identifier, preId, objectCollection,
1217 metModName, varType, metUncSequence, postfix):
1219 shiftedMetProducers = {}
1227 for mod
in shiftedCollModules.keys():
1228 modName =
"shiftedPat"+preId+identifier+varType+mod+postfix
1232 if not hasattr(process, modName):
1234 metUncSequence += getattr(process, modName)
1237 modName =
"shiftedPat"+preId+identifier+varType+mod+postfix
1240 if "PF" in metModName:
1243 modMETShiftName =
"shiftedPatMETCorr"+preId+identifier+varType+mod+postfix
1244 if not hasattr(process, modMETShiftName):
1246 metUncSequence += getattr(process, modMETShiftName)
1249 modName = baseName+identifier+varType+mod+postfix
1250 shiftedMETModule = getattr(process, metModName).
clone(
1251 src = cms.InputTag( metModName ),
1252 srcCorrections = cms.VInputTag( cms.InputTag(modMETShiftName) )
1254 shiftedMetProducers[ modName ] = shiftedMETModule
1288 return shiftedMetProducers
1294 shiftedModule = cms.EDProducer(
"ShiftedParticleMETcorrInputProducer",
1295 srcOriginal = originCollection,
1296 srcShifted = cms.InputTag(shiftedCollection),
1299 return shiftedModule
1302 def createMVAMETModule(self, process, identifier="", shiftedCollection="", isShifted=False, postfix="" ):
1306 if not hasattr(process,
"pfMVAMEt"):
1307 process.load(
"RecoMET.METPUSubtraction.mvaPFMET_cff")
1310 electronCollection = self.
_parameters[
"electronCollection"].value
1311 muonCollection = self.
_parameters[
"electronCollection"].value
1312 photonCollection = self.
_parameters[
"photonCollection"].value
1313 tauCollection = self.
_parameters[
"tauCollection"].value
1314 pfCandCollection = self.
_parameters[
"pfCandCollection"].value
1315 corJetCollection = cms.InputTag(
"calibratedAK4PFJetsForPFMVAMEt"+postfix)
1316 uncorJetCollection = cms.InputTag(
"ak4PFJets")
1320 if identifier ==
"Electron":
1321 electronCollection = cms.InputTag(shiftedCollection)
1322 if identifier ==
"Muon":
1323 muonCollection = cms.InputTag(shiftedCollection)
1324 if identifier ==
"Tau":
1325 tauCollection = cms.InputTag(shiftedCollection)
1326 if identifier ==
"Photon":
1327 photonCollection = cms.InputTag(shiftedCollection)
1328 if identifier ==
"Unclustered":
1329 pfCandCollection = cms.InputTag(shiftedCollection)
1330 if identifier ==
"Jet":
1331 corJetCollection = cms.InputTag(shiftedCollection)
1332 uncorJetCollection = cms.InputTag(
"uncorrected"+shiftedCollection)
1336 mvaMetLeptons = self.
_parameters[
"mvaMetLeptons"].value
1337 leptons = cms.VInputTag([])
1338 if "Electrons" in mvaMetLeptons
and isValidInputTag(electronCollection):
1339 leptons.append = electronCollection
1341 leptons.append = muonCollection
1343 leptons.append = photonCollection
1345 leptons.append = tauCollection
1348 mvaMetProducer=getattr(process,
"pfMVAMEt").
clone(
1349 srcCorrJets = corJetCollection,
1350 srcUncorrJets = uncorJetCollection,
1351 srcPFCandidates = pfCandCollection,
1352 srcLeptons = leptons,
1355 return mvaMetProducer
1360 if not hasattr(process,
"pfCandsNotInJetsForMetCorr"):
1361 process.load(
"JetMETCorrections.Type1MET.correctionTerms.PfMetType1Type2_cff")
1365 unclCandModule = cms.EDProducer(
"ShiftedPFCandidateProducer",
1366 src = cms.InputTag(
'pfCandsNotInJetsForMetCorr'),
1367 shiftBy = cms.double(val),
1368 uncertainty = cms.double(0.10)
1370 setattr(process,
"pfCandsNotInJetsUnclusteredEn"+var+postfix, unclCandModule)
1371 metUncSequence += getattr(process,
"pfCandsNotInJetsUnclusteredEn"+var+postfix)
1376 pfCandCollection = self.
_parameters[
"pfCandCollection"].value
1379 pfCandsNotInJets = cms.EDProducer(
"CandPtrProjector",
1380 src = pfCandCollection,
1381 veto = cms.InputTag(
"ak4PFJets")
1383 setattr(process,
"pfCandsNotInJetsUnclusteredEn"+var+postfix, pfCandsNotInJets)
1384 metUncSequence += getattr(process,
"pfCandsNotInJetsUnclusteredEn"+var+postfix)
1387 setattr(process,
"pfCandidatesEn"+var+postfix, fullShiftedModule)
1388 metUncSequence += getattr(process,
"pfCandidatesEn"+var+postfix)
1391 shiftedMETModule = self.
createMVAMETModule(process,
"Unclustered",
"pfCandidatesEn"+var+postfix,
True)
1392 return shiftedMETModule
1396 fullShiftedModule = cms.EDProducer(
"ShiftedPFCandidateProducerByMatchedObject",
1397 srcPFCandidates = origCollection,
1398 srcUnshiftedObjects = origCollection,
1399 dRmatch_PFCandidate = cms.double(dr),
1400 srcShiftedObjects = shiftedCollection
1402 return fullShiftedModule
1407 smearedJetModule =
None 1410 selJetModName=
"selectedPatJetsForMetT1T2" 1412 modName +=
"SmearedJets" 1413 selJetModName +=
"SmearCorr" 1419 modName +=
"Res"+varDir
1420 selJetModName +=
"Res"+varDir
1423 selJetModName += postfix
1425 genJetsCollection=cms.InputTag(
'ak4GenJetsNoNu')
1427 genJetsCollection=cms.InputTag(
"slimmedGenJets")
1430 smearedJetModule = getattr(process,
"patSmearedJets"+postfix).
clone(
1431 src = jetCollection,
1432 enabled = cms.bool(smear),
1433 variation = cms.int32(
int(varyByNsigmas) ),
1434 genJets = genJetsCollection,
1438 smearedJetModule.algo = cms.string(
'AK4PFPuppi')
1439 smearedJetModule.algopt = cms.string(
'AK4PFPuppi_pt')
1464 return smearedJetModule
1469 result = [ m.label()[:-len(postfix)]
for m
in listModules( getattr(process,sequenceLabel+postfix))]
1470 result.extend([ m.label()[:-len(postfix)]
for m
in listSequences( getattr(process,sequenceLabel+postfix))] )
1472 result = [ m.label()
for m
in listModules( getattr(process,sequenceLabel+postfix))]
1473 result.extend([ m.label()
for m
in listSequences( getattr(process,sequenceLabel+postfix))] )
1480 elif isinstance(input, str):
1481 retVal = cms.InputTag(input)
1492 if not hasattr(process,
"pfMet"+postfix)
and self.
_parameters[
"metType"].value ==
"PF":
1497 getattr(process,
"pfMet"+postfix).calculateSignificance =
False 1498 getattr(process,
"pfMet"+postfix).src = pfCandCollection
1499 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
1500 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
1501 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify( getattr(process,
"pfMet"+postfix), src =
"puppiForMET" if self.getvalue(
"Puppi")
else pfCandCollection )
1502 patMetModuleSequence += getattr(process,
"pfMet"+postfix)
1505 process.load(
"PhysicsTools.PatAlgos.producersLayer1.metProducer_cff")
1506 task.add(process.makePatMETsTask)
1507 configtools.cloneProcessingSnippet(process, getattr(process,
"patMETCorrections"), postfix, addToTask =
True)
1512 getattr(process,
"pfMetT1"+postfix).src = cms.InputTag(
"pfMet"+postfix)
1513 patMetModuleSequence += getattr(process,
"pfMetT1"+postfix)
1514 _myPatMet =
'patMETs'+postfix
1516 getattr(process, _myPatMet).metSource = cms.InputTag(
"pfMetT1"+postfix)
1517 getattr(process, _myPatMet).computeMETSignificance = cms.bool(self.getvalue(
"computeMETSignificance"))
1518 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff
import run2_miniAOD_UL
1519 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff
import run2_nanoAOD_106Xv1
1520 (run2_miniAOD_UL|run2_nanoAOD_106Xv1).toModify(getattr(process, _myPatMet), srcLeptons = \
1521 cms.VInputTag(copy.copy(self.getvalue(
"electronCollection"))
if self.getvalue(
"onMiniAOD")
else 1522 cms.InputTag(
"pfeGammaToCandidate",
"electrons"),
1523 copy.copy(self.getvalue(
"muonCollection")),
1524 copy.copy(self.getvalue(
"photonCollection"))
if self.getvalue(
"onMiniAOD")
else 1525 cms.InputTag(
"pfeGammaToCandidate",
"photons")))
1527 getattr(process, _myPatMet).computeMETSignificance = cms.bool(
False)
1529 if self.getvalue(
"Puppi"):
1530 getattr(process, _myPatMet).srcPFCands = cms.InputTag(
'puppiForMET')
1531 getattr(process, _myPatMet).srcJets = cms.InputTag(
'cleanedPatJets'+postfix)
1532 getattr(process, _myPatMet).srcJetSF = cms.string(
'AK4PFPuppi')
1533 getattr(process, _myPatMet).srcJetResPt = cms.string(
'AK4PFPuppi_pt')
1534 getattr(process, _myPatMet).srcJetResPhi = cms.string(
'AK4PFPuppi_phi')
1537 def extractMET(self, process, correctionLevel, patMetModuleSequence, postfix):
1541 pfMet = cms.EDProducer(
"RecoMETExtractor",
1542 metSource= cms.InputTag(
"slimmedMETs" if not self.
_parameters[
"Puppi"].value
else "slimmedMETsPuppi",processName=cms.InputTag.skipCurrentProcess()),
1543 correctionLevel = cms.string(correctionLevel)
1545 if(correctionLevel==
"raw"):
1547 patMetModuleSequence += getattr(process,
"pfMet"+postfix)
1550 patMetModuleSequence += getattr(process,
"met"+correctionLevel+postfix)
1552 if not hasattr(process,
"genMetExtractor"+postfix)
and not self.
_parameters[
"runOnData"].value:
1553 genMetExtractor = cms.EDProducer(
"GenMETExtractor",
1554 metSource= cms.InputTag(
"slimmedMETs",processName=cms.InputTag.skipCurrentProcess())
1557 patMetModuleSequence += getattr(process,
"genMetExtractor"+postfix)
1560 def updateJECs(self,process,jetCollection, patMetModuleSequence, postfix):
1561 from PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cff
import updatedPatJetCorrFactors
1563 patJetCorrFactorsReapplyJEC = updatedPatJetCorrFactors.clone(
1564 src = jetCollection
if not self.
_parameters[
"Puppi"].value
else cms.InputTag(
"slimmedJetsPuppi"),
1565 levels = [
'L1FastJet',
1568 payload =
'AK4PFchs' if not self.
_parameters[
"Puppi"].value
else 'AK4PFPuppi' )
1571 patJetCorrFactorsReapplyJEC.levels.append(
"L2L3Residual")
1573 from PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cff
import updatedPatJets
1574 patJetsReapplyJEC = updatedPatJets.clone(
1575 jetSource = jetCollection
if not self.
_parameters[
"Puppi"].value
else cms.InputTag(
"slimmedJetsPuppi"),
1576 jetCorrFactorsSource = cms.VInputTag(cms.InputTag(
"patJetCorrFactorsReapplyJEC"+postfix))
1580 addToProcessAndTask(
"patJetCorrFactorsReapplyJEC"+postfix, patJetCorrFactorsReapplyJEC, process, task)
1581 addToProcessAndTask(
"patJetsReapplyJEC"+postfix, patJetsReapplyJEC.clone(), process, task)
1583 patMetModuleSequence += getattr(process,
"patJetCorrFactorsReapplyJEC"+postfix)
1584 patMetModuleSequence += getattr(process,
"patJetsReapplyJEC"+postfix)
1586 return cms.InputTag(
"patJetsReapplyJEC"+postfix)
1590 jetSelection, autoJetCleaning,patMetModuleSequence, postfix):
1594 basicJetsForMet = cms.EDProducer(
"PATJetCleanerForType1MET",
1595 src = jetCollectionUnskimmed,
1596 jetCorrEtaMax = cms.double(9.9),
1597 jetCorrLabel = cms.InputTag(
"L3Absolute"),
1598 jetCorrLabelRes = cms.InputTag(
"L2L3Residual"),
1599 offsetCorrLabel = cms.InputTag(
"L1FastJet"),
1600 skipEM = cms.bool(
True),
1601 skipEMfractionThreshold = cms.double(0.9),
1602 skipMuonSelection = cms.string(
'isGlobalMuon | isStandAloneMuon'),
1603 skipMuons = cms.bool(
True),
1604 type1JetPtThreshold = cms.double(15.0)
1607 patMetModuleSequence += getattr(process,
"basicJetsForMet"+postfix)
1610 jetSelector = selectedPatJets.clone(
1611 src = cms.InputTag(
"basicJetsForMet"+postfix),
1612 cut = cms.string(jetSelection)
1615 patMetModuleSequence += getattr(process,
"jetSelectorForMet"+postfix)
1617 jetCollection = self.
jetCleaning(process,
"jetSelectorForMet"+postfix, autoJetCleaning, patMetModuleSequence, postfix)
1619 return jetCollection
1627 jetColName=
"ak4PFJets" 1629 pfCandColl=pfCandCollection
1632 jetColName=
"ak4PFJetsCHS" 1636 pfCHS = cms.EDFilter(
"CandPtrSelector", src = pfCandCollection, cut = cms.string(
"fromPV"))
1637 pfCandColl = cms.InputTag(
"pfNoPileUpJME"+postfix)
1639 patMetModuleSequence += getattr(process,
"pfNoPileUpJME"+postfix)
1642 cms.EDProducer(
"PFCandidateFwdPtrProducer",
1643 src = pfCandCollection ),
1645 process.load(
"CommonTools.ParticleFlow.pfNoPileUpJME_cff")
1646 task.add(process.pfNoPileUpJMETask)
1647 configtools.cloneProcessingSnippet(process, getattr(process,
"pfNoPileUpJMESequence"), postfix, addToTask =
True )
1648 getattr(process,
"pfPileUpJME"+postfix).PFCandidates = cms.InputTag(
"tmpPFCandCollPtr"+postfix)
1650 getattr(process,
"pfNoPileUpJME"+postfix).
clone(
1651 bottomCollection = cms.InputTag(
"tmpPFCandCollPtr"+postfix) ),
1653 pfCandColl = cms.InputTag(
"pfNoPileUpJME"+postfix)
1654 patMetModuleSequence += getattr(process,
"tmpPFCandCollPtr"+postfix)
1655 patMetModuleSequence += getattr(process,
"pfNoPileUpJME"+postfix)
1658 if not hasattr(process, jetColName):
1664 getattr(process, jetColName).src = pfCandColl
1665 getattr(process, jetColName).doAreaFastjet =
True 1669 getattr(process, jetColName).src = cms.InputTag(
"puppi")
1671 patMetModuleSequence += getattr(process, jetColName)
1673 corLevels=[
'L1FastJet',
'L2Relative',
'L3Absolute']
1675 corLevels.append(
"L2L3Residual")
1677 switchJetCollection(process,
1678 jetSource = cms.InputTag(jetColName),
1679 jetCorrections = (
'AK4PF'+CHSname, corLevels ,
''),
1683 getattr(process,
"patJets"+postfix).addGenJetMatch =
False 1684 getattr(process,
"patJets"+postfix).addGenPartonMatch =
False 1685 getattr(process,
"patJets"+postfix).addPartonJetMatch =
False 1686 getattr(process,
"patJets"+postfix).embedGenPartonMatch =
False 1687 getattr(process,
"patJets"+postfix).embedGenJetMatch =
False 1689 del getattr(process,
"patJets"+postfix).JetFlavourInfoSource
1690 del getattr(process,
"patJets"+postfix).JetPartonMapSource
1691 del getattr(process,
"patJets"+postfix).genPartonMatch
1692 del getattr(process,
"patJets"+postfix).genJetMatch
1693 getattr(process,
"patJets"+postfix).getJetMCFlavour =
False 1695 getattr(process,
"patJetCorrFactors"+postfix).src=cms.InputTag(jetColName)
1696 getattr(process,
"patJetCorrFactors"+postfix).primaryVertices= cms.InputTag(
"offlineSlimmedPrimaryVertices")
1698 getattr(process,
"patJetCorrFactors"+postfix).payload=cms.string(
'AK4PFPuppi')
1699 patMetModuleSequence += getattr(process,
"patJetCorrFactors"+postfix)
1700 patMetModuleSequence += getattr(process,
"patJets"+postfix)
1702 return cms.InputTag(
"patJets"+postfix)
1709 self.extractMET(process,
"rawCalo",patMetModuleSequence,postfix)
1710 caloMetName=
"metrawCalo" if hasattr(process,
"metrawCalo")
else "metrawCalo"+postfix
1711 from PhysicsTools.PatAlgos.tools.metTools
import addMETCollection
1712 addMETCollection(process,
1713 labelName =
"patCaloMet",
1714 metSource = caloMetName
1716 getattr(process,
"patCaloMet").addGenMET =
False 1719 if self._parameters[
"extractDeepMETs"].value:
1720 self.extractMET(process,
"rawDeepResponseTune", patMetModuleSequence, postfix)
1721 deepMetResponseTuneName =
"metrawDeepResponseTune" if hasattr(process,
"metrawDeepResponseTune")
else "metrawDeepResponseTune"+postfix
1722 addMETCollection(process,
1723 labelName =
"deepMETsResponseTune",
1724 metSource = deepMetResponseTuneName
1726 getattr(process,
"deepMETsResponseTune").addGenMET =
False 1727 getattr(process,
"deepMETsResponseTune").computeMETSignificance = cms.bool(
False)
1729 self.extractMET(process,
"rawDeepResolutionTune", patMetModuleSequence, postfix)
1730 deepMetResolutionTuneName =
"metrawDeepResolutionTune" if hasattr(process,
"metrawDeepResolutionTune")
else "metrawDeepResolutionTune"+postfix
1731 addMETCollection(process,
1732 labelName =
"deepMETsResolutionTune",
1733 metSource = deepMetResolutionTuneName
1735 getattr(process,
"deepMETsResolutionTune").addGenMET =
False 1736 getattr(process,
"deepMETsResolutionTune").computeMETSignificance = cms.bool(
False)
1741 pfCHS = cms.EDFilter(
"CandPtrSelector", src = cms.InputTag(
"packedPFCandidates"), cut = cms.string(
"fromPV(0)>0"))
1743 pfMetCHS = cms.EDProducer(
"PFMETProducer",
1744 src = cms.InputTag(
'pfCHS'),
1745 alias = cms.string(
'pfMet'),
1746 globalThreshold = cms.double(0.0),
1747 calculateSignificance = cms.bool(
False),
1752 addMETCollection(process,
1753 labelName =
"patCHSMet",
1754 metSource =
"pfMetCHS" 1757 process.patCHSMet.computeMETSignificant = cms.bool(
False)
1758 process.patCHSMet.addGenMET = cms.bool(
False)
1760 patMetModuleSequence += getattr(process,
"pfCHS")
1761 patMetModuleSequence += getattr(process,
"pfMetCHS")
1762 patMetModuleSequence += getattr(process,
"patCHSMet")
1764 pfTrk = cms.EDFilter(
"CandPtrSelector", src = cms.InputTag(
"packedPFCandidates"), cut = cms.string(
"fromPV(0) > 0 && charge()!=0"))
1766 pfMetTrk = cms.EDProducer(
"PFMETProducer",
1767 src = cms.InputTag(
'pfTrk'),
1768 alias = cms.string(
'pfMet'),
1769 globalThreshold = cms.double(0.0),
1770 calculateSignificance = cms.bool(
False),
1775 addMETCollection(process,
1776 labelName =
"patTrkMet",
1777 metSource =
"pfMetTrk" 1780 process.patTrkMet.computeMETSignificant = cms.bool(
False)
1781 process.patTrkMet.addGenMET = cms.bool(
False)
1783 patMetModuleSequence += getattr(process,
"pfTrk")
1784 patMetModuleSequence += getattr(process,
"pfMetTrk")
1785 patMetModuleSequence += getattr(process,
"patTrkMet")
1791 if hasattr(process,
"patPFMetTxyCorr"+postfix):
1792 getattr(process,
"patPFMetTxyCorr"+postfix).vertexCollection = cms.InputTag(
"offlineSlimmedPrimaryVertices")
1795 getattr(process,
"shiftedPatJetResDown"+postfix).genJets = cms.InputTag(
"slimmedGenJets")
1796 getattr(process,
"shiftedPatJetResUp"+postfix).genJets = cms.InputTag(
"slimmedGenJets")
1800 patMetModuleSequence, postfix ):
1802 if "T1" in self.
_parameters[
'correctionLevel'].value:
1803 getattr(process,
"patPFMet"+postfix).srcJets = jetCollection
1804 getattr(process,
"patPFMet"+postfix).srcLeptons = cms.VInputTag(self.
_parameters[
"electronCollection"].value,
1808 getattr(process,
"patPFMet"+postfix).addGenMET =
False 1810 getattr(process,
"patPFMet"+postfix).addGenMET =
True 1811 getattr(process,
"patPFMet"+postfix).genMETSource = cms.InputTag(
"genMetExtractor"+postfix)
1814 if "Smear" in self.
_parameters[
'correctionLevel'].value:
1815 getattr(process,
"patSmearedJets"+postfix).genJets = cms.InputTag(
"slimmedGenJets")
1817 if not hasattr(process,
"slimmedMETs"+postfix)
and self.
_parameters[
"metType"].value ==
"PF":
1823 getattr(process,
"slimmedMETs"+postfix).src = cms.InputTag(
"patPFMetT1"+postfix)
1824 getattr(process,
"slimmedMETs"+postfix).rawVariation = cms.InputTag(
"patPFMet"+postfix)
1825 getattr(process,
"slimmedMETs"+postfix).t1Uncertainties = cms.InputTag(
"patPFMetT1%s"+postfix)
1826 getattr(process,
"slimmedMETs"+postfix).t01Variation = cms.InputTag(
"patPFMetT0pcT1"+postfix)
1827 getattr(process,
"slimmedMETs"+postfix).t1SmearedVarsAndUncs = cms.InputTag(
"patPFMetT1Smear%s"+postfix)
1829 getattr(process,
"slimmedMETs"+postfix).tXYUncForRaw = cms.InputTag(
"patPFMetTxy"+postfix)
1830 getattr(process,
"slimmedMETs"+postfix).tXYUncForT1 = cms.InputTag(
"patPFMetT1Txy"+postfix)
1831 getattr(process,
"slimmedMETs"+postfix).tXYUncForT01 = cms.InputTag(
"patPFMetT0pcT1Txy"+postfix)
1832 getattr(process,
"slimmedMETs"+postfix).tXYUncForT1Smear = cms.InputTag(
"patPFMetT1SmearTxy"+postfix)
1833 getattr(process,
"slimmedMETs"+postfix).tXYUncForT01Smear = cms.InputTag(
"patPFMetT0pcT1SmearTxy"+postfix)
1835 getattr(process,
"slimmedMETs"+postfix).runningOnMiniAOD =
True 1836 getattr(process,
"slimmedMETs"+postfix).t01Variation = cms.InputTag(
"slimmedMETs" if not self.
_parameters[
"Puppi"].value
else "slimmedMETsPuppi",processName=cms.InputTag.skipCurrentProcess())
1838 if hasattr(process,
"deepMETsResolutionTune")
and hasattr(process,
"deepMETsResponseTune"):
1841 getattr(process,
"slimmedMETs"+postfix).addDeepMETs =
True 1845 del getattr(process,
"slimmedMETs"+postfix).tXYUncForRaw
1846 del getattr(process,
"slimmedMETs"+postfix).tXYUncForT01
1847 del getattr(process,
"slimmedMETs"+postfix).tXYUncForT1Smear
1848 del getattr(process,
"slimmedMETs"+postfix).tXYUncForT01Smear
1855 jetCorr = self.
_parameters[
"jetCorrectionType"].value
1857 jetCorLabelUpToL3Name=
"ak4PF" 1858 jetCorLabelL3ResName=
"ak4PF" 1861 if "chs" in jetFlavor:
1862 self.setParameter(
"CHS",
True)
1863 jetCorLabelUpToL3Name +=
"CHS" 1864 jetCorLabelL3ResName +=
"CHS" 1865 elif "Puppi" in jetFlavor:
1866 self.setParameter(
"CHS",
False)
1867 jetCorLabelUpToL3Name +=
"Puppi" 1868 jetCorLabelL3ResName +=
"Puppi" 1871 self.setParameter(
"CHS",
False)
1874 if jetCorr ==
"L1L2L3-L1":
1875 jetCorLabelUpToL3Name +=
"L1FastL2L3Corrector" 1876 jetCorLabelL3ResName +=
"L1FastL2L3ResidualCorrector" 1877 elif jetCorr ==
"L1L2L3-RC":
1878 jetCorLabelUpToL3Name +=
"L1FastL2L3Corrector" 1879 jetCorLabelL3ResName +=
"L1FastL2L3ResidualCorrector" 1881 self.setParameter(
"jetCorLabelUpToL3",jetCorLabelUpToL3Name )
1882 self.setParameter(
"jetCorLabelL3Res",jetCorLabelL3ResName )
1885 def jetCleaning(self, process, jetCollectionName, autoJetCleaning, jetProductionSequence, postfix ):
1887 if autoJetCleaning ==
"None" or autoJetCleaning ==
"Manual" :
1888 return cms.InputTag(jetCollectionName)
1891 electronCollection = self.
_parameters[
"electronCollection"].value
1892 muonCollection = self.
_parameters[
"muonCollection"].value
1893 photonCollection = self.
_parameters[
"photonCollection"].value
1894 tauCollection = self.
_parameters[
"tauCollection"].value
1898 if autoJetCleaning ==
"Full" :
1900 process.load(
"PhysicsTools.PatAlgos.cleaningLayer1.tauCleaner_cfi")
1901 task.add(process.cleanPatTaus)
1902 cleanPatTauProducer = getattr(process,
"cleanPatTaus").
clone(
1905 cleanPatTauProducer.checkOverlaps.electrons.src = electronCollection
1906 cleanPatTauProducer.checkOverlaps.muons.src = muonCollection
1908 jetProductionSequence += getattr(process,
"cleanedPatTaus"+postfix)
1909 tauCollection = cms.InputTag(
"cleanedPatTaus"+postfix)
1912 process.load(
"PhysicsTools.PatAlgos.cleaningLayer1.photonCleaner_cfi")
1913 task.add(process.cleanPatPhotons)
1914 cleanPatPhotonProducer = getattr(process,
"cleanPatPhotons").
clone(
1915 src = photonCollection
1917 cleanPatPhotonProducer.checkOverlaps.electrons.src = electronCollection
1919 jetProductionSequence += getattr(process,
"cleanedPatPhotons"+postfix)
1920 photonCollection = cms.InputTag(
"cleanedPatPhotons"+postfix)
1923 have_cleanPatJets = hasattr(process,
"cleanPatJets")
1924 process.load(
"PhysicsTools.PatAlgos.cleaningLayer1.jetCleaner_cfi")
1925 cleanPatJetProducer = getattr(process,
"cleanPatJets").
clone(
1926 src = cms.InputTag(jetCollectionName)
1929 if not have_cleanPatJets:
1930 del process.cleanPatJets
1931 cleanPatJetProducer.checkOverlaps.muons.src = muonCollection
1932 cleanPatJetProducer.checkOverlaps.electrons.src = electronCollection
1933 if isValidInputTag(photonCollection)
and autoJetCleaning !=
"LepClean":
1934 cleanPatJetProducer.checkOverlaps.photons.src = photonCollection
1936 del cleanPatJetProducer.checkOverlaps.photons
1939 cleanPatJetProducer.checkOverlaps.taus.src = tauCollection
1941 del cleanPatJetProducer.checkOverlaps.taus
1944 del cleanPatJetProducer.checkOverlaps.tkIsoElectrons
1947 jetProductionSequence += getattr(process,
"cleanedPatJets"+postfix)
1948 return cms.InputTag(
"cleanedPatJets"+postfix)
1951 def runFixEE2017(self,process,params,jets,cands,goodcolls,patMetModuleSequence,postfix):
1955 pfCandidateJetsWithEEnoise = cms.EDProducer(
"BadPFCandidateJetsEEnoiseProducer",
1957 userawPt = cms.bool(params[
"userawPt"]),
1958 ptThreshold = cms.double(params[
"ptThreshold"]),
1959 minEtaThreshold = cms.double(params[
"minEtaThreshold"]),
1960 maxEtaThreshold = cms.double(params[
"maxEtaThreshold"]),
1962 addToProcessAndTask(
"pfCandidateJetsWithEEnoise"+postfix, pfCandidateJetsWithEEnoise, process, task)
1963 patMetModuleSequence += getattr(process,
"pfCandidateJetsWithEEnoise"+postfix)
1964 pfcandidateClustered = cms.EDProducer(
"CandViewMerger",
1965 src = cms.VInputTag(goodcolls+[jets])
1968 patMetModuleSequence += getattr(process,
"pfcandidateClustered"+postfix)
1969 pfcandidateForUnclusteredUnc = cms.EDProducer(
"CandPtrProjector",
1971 veto = cms.InputTag(
"pfcandidateClustered"+postfix),
1973 addToProcessAndTask(
"pfcandidateForUnclusteredUnc"+postfix, pfcandidateForUnclusteredUnc, process, task)
1974 patMetModuleSequence += getattr(process,
"pfcandidateForUnclusteredUnc"+postfix)
1975 badUnclustered = cms.EDFilter(
"CandPtrSelector",
1976 src = cms.InputTag(
"pfcandidateForUnclusteredUnc"+postfix),
1977 cut = cms.string(
"abs(eta) > "+
str(params[
"minEtaThreshold"])+
" && abs(eta) < "+
str(params[
"maxEtaThreshold"])),
1980 patMetModuleSequence += getattr(process,
"badUnclustered"+postfix)
1981 blobUnclustered = cms.EDProducer(
"UnclusteredBlobProducer",
1982 candsrc = cms.InputTag(
"badUnclustered"+postfix),
1985 patMetModuleSequence += getattr(process,
"blobUnclustered"+postfix)
1986 superbad = cms.EDProducer(
"CandViewMerger",
1987 src = cms.VInputTag(
1988 cms.InputTag(
"blobUnclustered"+postfix),
1989 cms.InputTag(
"pfCandidateJetsWithEEnoise"+postfix,
"bad"),
1993 patMetModuleSequence += getattr(process,
"superbad"+postfix)
1994 pfCandidatesGoodEE2017 = cms.EDProducer(
"CandPtrProjector",
1996 veto = cms.InputTag(
"superbad"+postfix),
1998 addToProcessAndTask(
"pfCandidatesGoodEE2017"+postfix, pfCandidatesGoodEE2017, process, task)
1999 patMetModuleSequence += getattr(process,
"pfCandidatesGoodEE2017"+postfix)
2001 return (cms.InputTag(
"pfCandidatesGoodEE2017"+postfix), cms.InputTag(
"pfCandidateJetsWithEEnoise"+postfix,
"good"))
2011 jetCollUnskimmed=
"patJets",
2012 photonColl=
"selectedPatPhotons",
2013 electronColl=
"selectedPatElectrons",
2014 muonColl=
"selectedPatMuons",
2015 tauColl=
"selectedPatTaus",
2016 pfCandColl =
"particleFlow",
2017 jetCleaning=
"LepClean",
2018 jetSelection=
"pt>15 && abs(eta)<9.9",
2020 jetFlavor=
"AK4PFchs",
2021 recoMetFromPFCs=
False,
2028 correctionLevel=[
"T0",
"T1",
"T2",
"Smear",
"Txy"],
2029 computeUncertainties=
False,
2030 produceIntermediateCorrections=
True,
2031 addToPatDefaultSequence=
False,
2032 jetCollectionUnskimmed=jetCollUnskimmed,
2033 photonCollection=photonColl,
2034 electronCollection=electronColl,
2035 muonCollection=muonColl,
2036 tauCollection=tauColl,
2037 pfCandCollection =pfCandColl,
2038 autoJetCleaning=jetCleaning,
2039 jecUncertaintyFile=jecUnFile,
2040 jetSelection=jetSelection,
2041 jetFlavor=jetFlavor,
2042 recoMetFromPFCs=recoMetFromPFCs,
2048 correctionLevel=[
"T1"],
2049 computeUncertainties=
True,
2050 produceIntermediateCorrections=
False,
2051 addToPatDefaultSequence=
False,
2052 jetCollectionUnskimmed=jetCollUnskimmed,
2053 photonCollection=photonColl,
2054 electronCollection=electronColl,
2055 muonCollection=muonColl,
2056 tauCollection=tauColl,
2057 pfCandCollection =pfCandColl,
2058 autoJetCleaning=jetCleaning,
2059 jecUncertaintyFile=jecUnFile,
2060 jetSelection=jetSelection,
2061 jetFlavor=jetFlavor,
2062 recoMetFromPFCs=recoMetFromPFCs,
2068 correctionLevel=[
"T1",
"Smear"],
2069 computeUncertainties=
True,
2070 produceIntermediateCorrections=
False,
2071 addToPatDefaultSequence=
False,
2072 jetCollectionUnskimmed=jetCollUnskimmed,
2073 photonCollection=photonColl,
2074 electronCollection=electronColl,
2075 muonCollection=muonColl,
2076 tauCollection=tauColl,
2077 pfCandCollection =pfCandColl,
2078 autoJetCleaning=jetCleaning,
2079 jecUncertaintyFile=jecUnFile,
2080 jetSelection=jetSelection,
2081 jetFlavor=jetFlavor,
2082 recoMetFromPFCs=recoMetFromPFCs,
2091 jetCollUnskimmed=
"slimmedJets",
2092 photonColl=
"slimmedPhotons",
2093 electronColl=
"slimmedElectrons",
2094 muonColl=
"slimmedMuons",
2095 tauColl=
"slimmedTaus",
2096 pfCandColl =
"packedPFCandidates",
2097 jetFlavor=
"AK4PFchs",
2098 jetCleaning=
"LepClean",
2100 manualJetConfig=
False,
2102 jetSelection=
"pt>15 && abs(eta)<9.9",
2103 recoMetFromPFCs=
None,
2104 jetCorLabelL3=
"ak4PFCHSL1FastL2L3Corrector",
2105 jetCorLabelRes=
"ak4PFCHSL1FastL2L3ResidualCorrector",
2110 computeMETSignificance=
True,
2112 fixEE2017Params=
None,
2113 extractDeepMETs=
False,
2120 correctionLevel=[
"T1"],
2121 computeUncertainties=
True,
2122 produceIntermediateCorrections=
False,
2123 addToPatDefaultSequence=
False,
2124 jetCollectionUnskimmed=jetCollUnskimmed,
2125 electronCollection=electronColl,
2126 muonCollection=muonColl,
2127 tauCollection=tauColl,
2128 photonCollection=photonColl,
2129 pfCandCollection =pfCandColl,
2132 reapplyJEC=reapplyJEC,
2133 reclusterJets=reclusterJets,
2134 jetSelection=jetSelection,
2135 recoMetFromPFCs=recoMetFromPFCs,
2136 autoJetCleaning=jetCleaning,
2137 manualJetConfig=manualJetConfig,
2138 jetFlavor=jetFlavor,
2139 jetCorLabelUpToL3=jetCorLabelL3,
2140 jetCorLabelL3Res=jetCorLabelRes,
2141 jecUncertaintyFile=jecUncFile,
2142 computeMETSignificance=computeMETSignificance,
2145 fixEE2017=fixEE2017,
2146 fixEE2017Params=fixEE2017Params,
2147 extractDeepMETs=extractDeepMETs,
2152 correctionLevel=[
"T1",
"Txy"],
2153 computeUncertainties=
False,
2154 produceIntermediateCorrections=
True,
2155 addToPatDefaultSequence=
False,
2156 jetCollectionUnskimmed=jetCollUnskimmed,
2157 electronCollection=electronColl,
2158 muonCollection=muonColl,
2159 tauCollection=tauColl,
2160 photonCollection=photonColl,
2161 pfCandCollection =pfCandColl,
2164 reapplyJEC=reapplyJEC,
2165 reclusterJets=reclusterJets,
2166 jetSelection=jetSelection,
2167 recoMetFromPFCs=recoMetFromPFCs,
2168 autoJetCleaning=jetCleaning,
2169 manualJetConfig=manualJetConfig,
2170 jetFlavor=jetFlavor,
2171 jetCorLabelUpToL3=jetCorLabelL3,
2172 jetCorLabelL3Res=jetCorLabelRes,
2173 jecUncertaintyFile=jecUncFile,
2174 computeMETSignificance=computeMETSignificance,
2177 fixEE2017=fixEE2017,
2178 fixEE2017Params=fixEE2017Params,
2179 extractDeepMETs=extractDeepMETs,
2183 correctionLevel=[
"T1",
"Smear"],
2184 computeUncertainties=
True,
2185 produceIntermediateCorrections=
False,
2186 addToPatDefaultSequence=
False,
2187 jetCollectionUnskimmed=jetCollUnskimmed,
2188 electronCollection=electronColl,
2189 muonCollection=muonColl,
2190 tauCollection=tauColl,
2191 photonCollection=photonColl,
2192 pfCandCollection =pfCandColl,
2195 reapplyJEC=reapplyJEC,
2196 reclusterJets=reclusterJets,
2197 jetSelection=jetSelection,
2198 recoMetFromPFCs=recoMetFromPFCs,
2199 autoJetCleaning=jetCleaning,
2200 manualJetConfig=manualJetConfig,
2201 jetFlavor=jetFlavor,
2202 jetCorLabelUpToL3=jetCorLabelL3,
2203 jetCorLabelL3Res=jetCorLabelRes,
2204 jecUncertaintyFile=jecUncFile,
2205 computeMETSignificance=computeMETSignificance,
2208 fixEE2017=fixEE2017,
2209 fixEE2017Params=fixEE2017Params,
2210 extractDeepMETs=extractDeepMETs,
def miniAODConfiguration(self, process, pfCandCollection, jetCollection, patMetModuleSequence, postfix)
def getVariations(self, process, metModName, identifier, preId, objectCollection, varType, metUncSequence, jetUncInfos=None, postfix="")
def removePostfix(self, name, postfix)
def extractMET(self, process, correctionLevel, patMetModuleSequence, postfix)
def initializeInputTag(self, input, default)
def getUnclusteredVariationsForMVAMET(self, process, var, val, metUncSequence, postfix)
def addToProcessAndTask(label, module, process, task)
def getMETUncertainties(self, process, metType, metModName, electronCollection, photonCollection, muonCollection, tauCollection, pfCandCollection, jetCollection, jetUncInfos, postfix)
def getCorrectedMET(self, process, metType, correctionLevel, produceIntermediateCorrections, jetCollection, metModuleSequence, postfix)
def runMetCorAndUncForMiniAODProduction(process, metType="PF", jetCollUnskimmed="patJets", photonColl="selectedPatPhotons", electronColl="selectedPatElectrons", muonColl="selectedPatMuons", tauColl="selectedPatTaus", pfCandColl="particleFlow", jetCleaning="LepClean", jetSelection="pt>15 && abs(eta)<9.9", jecUnFile="", jetFlavor="AK4PFchs", recoMetFromPFCs=False, postfix="")
S & print(S &os, JobReport::InputFile const &f)
def recomputeRawMetFromPfcs(self, process, pfCandCollection, onMiniAOD, patMetModuleSequence, postfix)
def createShiftedMETModule(self, process, originCollection, shiftedCollection)
def runFixEE2017(self, process, params, jets, cands, goodcolls, patMetModuleSequence, postfix)
def miniAODConfigurationPre(self, process, patMetModuleSequence, pfCandCollection, postfix)
def addIntermediateMETs(self, process, metType, correctionLevel, corScheme, corTags, corNames, postfix)
def getJetCollectionForCorsAndUncs(self, process, jetCollectionUnskimmed, jetSelection, autoJetCleaning, patMetModuleSequence, postfix)
def labelsInSequence(process, sequenceLabel, postfix="")
Utilities ====================================================================.
def tuneTxyParameters(self, process, corScheme, postfix)
def ak4JetReclustering(self, process, pfCandCollection, patMetModuleSequence, postfix)
def getDefaultParameters(self)
def createShiftedModules(self, process, shiftedCollModules, identifier, preId, objectCollection, metModName, varType, metUncSequence, postfix)
def listModules(sequence)
def isValidInputTag(input)
def miniAODConfigurationPost(self, process, postfix)
def createShiftedJetResModule(self, process, smear, objectCollection, varyByNsigmas, varDir, postfix)
def jetConfiguration(self)
def createEnergyScaleShiftedUpModule(self, process, identifier, objectCollection, varyByNsigmas, jetUncInfos=None, postfix="")
def updateJECs(self, process, jetCollection, patMetModuleSequence, postfix)
def listSequences(sequence)
def createMVAMETModule(self, process, identifier="", shiftedCollection="", isShifted=False, postfix="")
def toolCode(self, process)
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
def produceMET(self, process, metType, metModuleSequence, postfix)
def createShiftedObjectModuleForMVAMET(self, origCollection, shiftedCollection, dr=0.5)
def getPatAlgosToolsTask(process)
def __call__(self, process, metType=None, correctionLevel=None, computeUncertainties=None, produceIntermediateCorrections=None, electronCollection=None, photonCollection=None, muonCollection=None, tauCollection=None, jetCollectionUnskimmed=None, pfCandCollection=None, autoJetCleaning=None, jetFlavor=None, jetCorr=None, jetCorLabelUpToL3=None, jetCorLabelL3Res=None, jecUncertaintyFile=None, jecUncertaintyTag=None, mvaMetLeptons=None, addToPatDefaultSequence=None, manualJetConfig=None, jetSelection=None, recoMetFromPFCs=None, reapplyJEC=None, reclusterJets=None, computeMETSignificance=None, CHS=None, runOnData=None, onMiniAOD=None, fixEE2017=None, fixEE2017Params=None, extractDeepMETs=None, postfix=None)
def runMetCorAndUncFromMiniAOD(process, metType="PF", jetCollUnskimmed="slimmedJets", photonColl="slimmedPhotons", electronColl="slimmedElectrons", muonColl="slimmedMuons", tauColl="slimmedTaus", pfCandColl="packedPFCandidates", jetFlavor="AK4PFchs", jetCleaning="LepClean", isData=False, manualJetConfig=False, reclusterJets=None, jetSelection="pt>15 && abs(eta)<9.9", recoMetFromPFCs=None, jetCorLabelL3="ak4PFCHSL1FastL2L3Corrector", jetCorLabelRes="ak4PFCHSL1FastL2L3ResidualCorrector", CHS=False, reapplyJEC=True, jecUncFile="", computeMETSignificance=True, fixEE2017=False, fixEE2017Params=None, extractDeepMETs=False, postfix="")
def createSmearedJetModule(self, process, jetCollection, smear, varyByNsigmas, varDir, postfix)
def copyCentralMETProducer(self, process, shiftedCollModules, identifier, metModName, varType, postfix)
def jetCleaning(self, process, jetCollectionName, autoJetCleaning, jetProductionSequence, postfix)