Inherits FWCore::GuiBrowsers::ConfigToolBase::ConfigToolBase.
Public Member Functions | |
def | __call__ |
def | __init__ |
def | getDefaultParameters |
def | toolCode |
Private Member Functions | |
def | _addCorrPFMEt |
def | _addModuleToSequence |
def | _addNoPileUpPFMEt |
def | _addPATMEtProducer |
def | _addPFCandidatesForPFMEtInput |
def | _addPFMEtByMVA |
def | _addShiftedParticleCollections |
def | _addSmearedJets |
def | _getLeptonsForPFMEtInput |
def | _initializeInputTag |
def | _isValidInputTag |
def | _propagateMEtUncertainties |
Private Attributes | |
_comment | |
_parameters | |
Static Private Attributes | |
tuple | _defaultParameters = dicttypes.SortedKeysDict() |
string | _label = 'runMEtUncertainties' |
Shift energy of electrons, photons, muons, tau-jets and other jets reconstructed in the event up/down, in order to estimate effect of energy scale uncertainties on MET
Definition at line 12 of file metUncertaintyTools.py.
def metUncertaintyTools::RunMEtUncertainties::__init__ | ( | self | ) |
Definition at line 20 of file metUncertaintyTools.py.
00021 : 00022 ConfigToolBase.__init__(self) 00023 self.addParameter(self._defaultParameters, 'electronCollection', cms.InputTag('cleanPatElectrons'), 00024 "Input electron collection", Type=cms.InputTag, acceptNoneValue=True) 00025 self.addParameter(self._defaultParameters, 'photonCollection', None, # CV: set to empty InputTag to avoid double-counting wrt. cleanPatElectrons collection 00026 "Input photon collection", Type=cms.InputTag, acceptNoneValue=True) 00027 self.addParameter(self._defaultParameters, 'muonCollection', cms.InputTag('cleanPatMuons'), 00028 "Input muon collection", Type=cms.InputTag, acceptNoneValue=True) 00029 self.addParameter(self._defaultParameters, 'tauCollection', cms.InputTag('cleanPatTaus'), 00030 "Input tau collection", Type=cms.InputTag, acceptNoneValue=True) 00031 self.addParameter(self._defaultParameters, 'jetCollection', cms.InputTag('cleanPatJets'), 00032 "Input jet collection", Type=cms.InputTag) 00033 self.addParameter(self._defaultParameters, 'dRjetCleaning', 0.5, 00034 "Eta-phi distance for extra jet cleaning", Type=float) 00035 self.addParameter(self._defaultParameters, 'jetCorrLabel', "L3Absolute", 00036 "NOTE: use 'L3Absolute' for MC/'L2L3Residual' for Data", Type=str) 00037 self.addParameter(self._defaultParameters, 'doSmearJets', True, 00038 "Flag to enable/disable jet smearing to better match MC to Data", Type=bool) 00039 self.addParameter(self._defaultParameters, 'makeType1corrPFMEt', True, 00040 "Flag to enable/disable sequence for Type 1 corrected PFMEt", Type=bool) 00041 self.addParameter(self._defaultParameters, 'makeType1p2corrPFMEt', True, 00042 "Flag to enable/disable sequence for Type 1 + 2 corrected PFMEt", Type=bool) 00043 self.addParameter(self._defaultParameters, 'makePFMEtByMVA', False, 00044 "Flag to enable/disable sequence for MVA-based PFMEt", Type=bool) 00045 self.addParameter(self._defaultParameters, 'makeNoPileUpPFMEt', False, 00046 "Flag to enable/disable sequence for no-PU PFMEt", Type=bool) 00047 self.addParameter(self._defaultParameters, 'doApplyType0corr', False, 00048 "Flag to enable/disable usage of Type-0 MET corrections", Type=bool) 00049 self.addParameter(self._defaultParameters, 'sysShiftCorrParameter', None, 00050 "MET sys. shift correction parameters", Type=cms.PSet) 00051 self.addParameter(self._defaultParameters, 'doApplySysShiftCorr', False, 00052 "Flag to enable/disable usage of MET sys. shift corrections", Type=bool) 00053 self.addParameter(self._defaultParameters, 'jetSmearFileName', 'PhysicsTools/PatUtils/data/pfJetResolutionMCtoDataCorrLUT.root', 00054 "Name of ROOT file containing histogram with jet smearing factors", Type=str) 00055 self.addParameter(self._defaultParameters, 'jetSmearHistogram', 'pfJetResolutionMCtoDataCorrLUT', 00056 "Name of histogram with jet smearing factors", Type=str) 00057 self.addParameter(self._defaultParameters, 'pfCandCollection', cms.InputTag('particleFlow'), 00058 "Input PFCandidate collection", Type=cms.InputTag) 00059 self.addParameter(self._defaultParameters, 'jetCorrPayloadName', 'AK5PF', 00060 "Use AK5PF for PFJets, AK5Calo for CaloJets", Type=str) 00061 self.addParameter(self._defaultParameters, 'varyByNsigmas', 1.0, 00062 "Number of standard deviations by which energies are varied", Type=float) 00063 self.addParameter(self._defaultParameters, 'addToPatDefaultSequence', True, 00064 "Flag to enable/disable that metUncertaintySequence is inserted into patDefaultSequence", Type=bool) 00065 self.addParameter(self._defaultParameters, 'outputModule', 'out', 00066 "Module label of PoolOutputModule (empty label indicates no PoolOutputModule is to be configured)", Type=str) 00067 self._parameters=copy.deepcopy(self._defaultParameters) 00068 self._comment = ""
def metUncertaintyTools::RunMEtUncertainties::__call__ | ( | self, | |
process, | |||
electronCollection = None , |
|||
photonCollection = None , |
|||
muonCollection = None , |
|||
tauCollection = None , |
|||
jetCollection = None , |
|||
dRjetCleaning = None , |
|||
jetCorrLabel = None , |
|||
doSmearJets = None , |
|||
makeType1corrPFMEt = None , |
|||
makeType1p2corrPFMEt = None , |
|||
makePFMEtByMVA = None , |
|||
makeNoPileUpPFMEt = None , |
|||
doApplyType0corr = None , |
|||
sysShiftCorrParameter = None , |
|||
doApplySysShiftCorr = None , |
|||
jetSmearFileName = None , |
|||
jetSmearHistogram = None , |
|||
pfCandCollection = None , |
|||
jetCorrPayloadName = None , |
|||
varyByNsigmas = None , |
|||
addToPatDefaultSequence = None , |
|||
outputModule = None |
|||
) |
Definition at line 1324 of file metUncertaintyTools.py.
01347 : 01348 electronCollection = self._initializeInputTag(electronCollection, 'electronCollection') 01349 photonCollection = self._initializeInputTag(photonCollection, 'photonCollection') 01350 muonCollection = self._initializeInputTag(muonCollection, 'muonCollection') 01351 tauCollection = self._initializeInputTag(tauCollection, 'tauCollection') 01352 jetCollection = self._initializeInputTag(jetCollection, 'jetCollection') 01353 if jetCorrLabel is None: 01354 jetCorrLabel = self._defaultParameters['jetCorrLabel'].value 01355 if dRjetCleaning is None: 01356 dRjetCleaning = self._defaultParameters['dRjetCleaning'].value 01357 if doSmearJets is None: 01358 doSmearJets = self._defaultParameters['doSmearJets'].value 01359 if makeType1corrPFMEt is None: 01360 makeType1corrPFMEt = self._defaultParameters['makeType1corrPFMEt'].value 01361 if makeType1p2corrPFMEt is None: 01362 makeType1p2corrPFMEt = self._defaultParameters['makeType1p2corrPFMEt'].value 01363 if makePFMEtByMVA is None: 01364 makePFMEtByMVA = self._defaultParameters['makePFMEtByMVA'].value 01365 if makeNoPileUpPFMEt is None: 01366 makeNoPileUpPFMEt = self._defaultParameters['makeNoPileUpPFMEt'].value 01367 if doApplyType0corr is None: 01368 doApplyType0corr = self._defaultParameters['doApplyType0corr'].value 01369 if sysShiftCorrParameter is None: 01370 sysShiftCorrParameter = self._defaultParameters['sysShiftCorrParameter'].value 01371 if doApplySysShiftCorr is None: 01372 doApplySysShiftCorr = self._defaultParameters['doApplySysShiftCorr'].value 01373 if sysShiftCorrParameter is None: 01374 if doApplySysShiftCorr: 01375 raise ValueError("MET sys. shift correction parameters must be specified explicitely !!") 01376 sysShiftCorrParameter = cms.PSet() 01377 if jetSmearFileName is None: 01378 jetSmearFileName = self._defaultParameters['jetSmearFileName'].value 01379 if jetSmearHistogram is None: 01380 jetSmearHistogram = self._defaultParameters['jetSmearHistogram'].value 01381 pfCandCollection = self._initializeInputTag(pfCandCollection, 'pfCandCollection') 01382 if jetCorrPayloadName is None: 01383 jetCorrPayloadName = self._defaultParameters['jetCorrPayloadName'].value 01384 if varyByNsigmas is None: 01385 varyByNsigmas = self._defaultParameters['varyByNsigmas'].value 01386 if addToPatDefaultSequence is None: 01387 addToPatDefaultSequence = self._defaultParameters['addToPatDefaultSequence'].value 01388 if outputModule is None: 01389 outputModule = self._defaultParameters['outputModule'].value 01390 01391 self.setParameter('electronCollection', electronCollection) 01392 self.setParameter('photonCollection', photonCollection) 01393 self.setParameter('muonCollection', muonCollection) 01394 self.setParameter('tauCollection', tauCollection) 01395 self.setParameter('jetCollection', jetCollection) 01396 self.setParameter('jetCorrLabel', jetCorrLabel) 01397 self.setParameter('dRjetCleaning', dRjetCleaning) 01398 self.setParameter('doSmearJets', doSmearJets) 01399 self.setParameter('makeType1corrPFMEt', makeType1corrPFMEt) 01400 self.setParameter('makeType1p2corrPFMEt', makeType1p2corrPFMEt) 01401 self.setParameter('makePFMEtByMVA', makePFMEtByMVA) 01402 self.setParameter('makeNoPileUpPFMEt', makeNoPileUpPFMEt) 01403 self.setParameter('doApplyType0corr', doApplyType0corr) 01404 self.setParameter('doApplySysShiftCorr', doApplySysShiftCorr) 01405 self.setParameter('sysShiftCorrParameter', sysShiftCorrParameter) 01406 self.setParameter('jetSmearFileName', jetSmearFileName) 01407 self.setParameter('jetSmearHistogram', jetSmearHistogram) 01408 self.setParameter('pfCandCollection', pfCandCollection) 01409 self.setParameter('jetCorrPayloadName', jetCorrPayloadName) 01410 self.setParameter('varyByNsigmas', varyByNsigmas) 01411 self.setParameter('addToPatDefaultSequence', addToPatDefaultSequence) 01412 self.setParameter('outputModule', outputModule) 01413 01414 self.apply(process)
def metUncertaintyTools::RunMEtUncertainties::_addCorrPFMEt | ( | self, | |
process, | |||
metUncertaintySequence, | |||
shiftedParticleCollections, | |||
pfCandCollection, | |||
collectionsToKeep, | |||
doSmearJets, | |||
makeType1corrPFMEt, | |||
makeType1p2corrPFMEt, | |||
doApplyType0corr, | |||
sysShiftCorrParameter, | |||
doApplySysShiftCorr, | |||
jetCorrLabel, | |||
varyByNsigmas | |||
) | [private] |
Definition at line 414 of file metUncertaintyTools.py.
00425 : 00426 00427 if not (makeType1corrPFMEt or makeType1p2corrPFMEt): 00428 return 00429 00430 if not hasattr(process, 'producePatPFMETCorrections'): 00431 process.load("PhysicsTools.PatUtils.patPFMETCorrections_cff") 00432 00433 # add "nominal" (unshifted) pat::MET collections 00434 process.pfCandsNotInJet.bottomCollection = pfCandCollection 00435 process.selectedPatJetsForMETtype1p2Corr.src = shiftedParticleCollections['lastJetCollection'] 00436 process.selectedPatJetsForMETtype2Corr.src = shiftedParticleCollections['lastJetCollection'] 00437 00438 if doApplySysShiftCorr: 00439 if not hasattr(process, 'pfMEtSysShiftCorrSequence'): 00440 process.load("JetMETCorrections.Type1MET.pfMETsysShiftCorrections_cfi") 00441 process.pfMEtSysShiftCorr.parameter = sysShiftCorrParameter 00442 metUncertaintySequence += process.pfMEtSysShiftCorrSequence 00443 00444 metUncertaintySequence += process.producePatPFMETCorrections 00445 00446 patType1correctionsCentralValue = [ cms.InputTag('patPFJetMETtype1p2Corr', 'type1') ] 00447 if doApplyType0corr: 00448 patType1correctionsCentralValue.extend([ cms.InputTag('patPFMETtype0Corr') ]) 00449 if doApplySysShiftCorr: 00450 patType1correctionsCentralValue.extend([ cms.InputTag('pfMEtSysShiftCorr') ]) 00451 process.patType1CorrectedPFMet.srcType1Corrections = cms.VInputTag(patType1correctionsCentralValue) 00452 process.patType1p2CorrectedPFMet.srcType1Corrections = cms.VInputTag(patType1correctionsCentralValue) 00453 00454 collectionsToKeep.extend([ 00455 'patPFMet', 00456 'patType1CorrectedPFMet', 00457 'patType1p2CorrectedPFMet']) 00458 00459 process.selectedPatJetsForMETtype1p2CorrEnUp = \ 00460 getattr(process, shiftedParticleCollections['jetCollectionEnUpForCorrMEt']).clone( 00461 src = cms.InputTag('selectedPatJetsForMETtype1p2Corr') 00462 ) 00463 metUncertaintySequence += process.selectedPatJetsForMETtype1p2CorrEnUp 00464 process.selectedPatJetsForMETtype1p2CorrEnDown = \ 00465 getattr(process, shiftedParticleCollections['jetCollectionEnDownForCorrMEt']).clone( 00466 src = cms.InputTag('selectedPatJetsForMETtype1p2Corr') 00467 ) 00468 metUncertaintySequence += process.selectedPatJetsForMETtype1p2CorrEnDown 00469 if makeType1p2corrPFMEt: 00470 process.selectedPatJetsForMETtype2CorrEnUp = \ 00471 getattr(process, shiftedParticleCollections['jetCollectionEnUpForCorrMEt']).clone( 00472 src = cms.InputTag('selectedPatJetsForMETtype2Corr') 00473 ) 00474 metUncertaintySequence += process.selectedPatJetsForMETtype2CorrEnUp 00475 process.selectedPatJetsForMETtype2CorrEnDown = \ 00476 getattr(process, shiftedParticleCollections['jetCollectionEnDownForCorrMEt']).clone( 00477 src = cms.InputTag('selectedPatJetsForMETtype2Corr') 00478 ) 00479 metUncertaintySequence += process.selectedPatJetsForMETtype2CorrEnDown 00480 00481 if doSmearJets: 00482 process.selectedPatJetsForMETtype1p2CorrResUp = \ 00483 getattr(process, shiftedParticleCollections['jetCollectionResUp']).clone( 00484 src = cms.InputTag('selectedPatJetsForMETtype1p2Corr') 00485 ) 00486 metUncertaintySequence += process.selectedPatJetsForMETtype1p2CorrResUp 00487 process.selectedPatJetsForMETtype1p2CorrResDown = \ 00488 getattr(process, shiftedParticleCollections['jetCollectionResDown']).clone( 00489 src = cms.InputTag('selectedPatJetsForMETtype1p2Corr') 00490 ) 00491 metUncertaintySequence += process.selectedPatJetsForMETtype1p2CorrResDown 00492 if makeType1p2corrPFMEt: 00493 process.selectedPatJetsForMETtype2CorrResUp = \ 00494 getattr(process, shiftedParticleCollections['jetCollectionResUp']).clone( 00495 src = cms.InputTag('selectedPatJetsForMETtype2Corr') 00496 ) 00497 metUncertaintySequence += process.selectedPatJetsForMETtype2CorrResUp 00498 process.selectedPatJetsForMETtype2CorrResDown = \ 00499 getattr(process, shiftedParticleCollections['jetCollectionResDown']).clone( 00500 src = cms.InputTag('selectedPatJetsForMETtype2Corr') 00501 ) 00502 metUncertaintySequence += process.selectedPatJetsForMETtype2CorrResDown 00503 00504 if doSmearJets: 00505 # apply MET smearing to "raw" (uncorrected) MET 00506 process.smearedPatPFMetSequence = cms.Sequence() 00507 process.patPFMetForMEtUncertainty = process.patPFMet.clone() 00508 process.smearedPatPFMetSequence += process.patPFMetForMEtUncertainty 00509 process.patPFMETcorrJetSmearing = cms.EDProducer("ShiftedParticleMETcorrInputProducer", 00510 srcOriginal = cms.InputTag(shiftedParticleCollections['cleanedJetCollection']), 00511 srcShifted = cms.InputTag(shiftedParticleCollections['lastJetCollection']) 00512 ) 00513 process.smearedPatPFMetSequence += process.patPFMETcorrJetSmearing 00514 process.producePatPFMETCorrections.replace(process.patPFMet, process.smearedPatPFMetSequence) 00515 process.patPFMet = process.patType1CorrectedPFMet.clone( 00516 src = cms.InputTag('patPFMetForMEtUncertainty'), 00517 srcType1Corrections = cms.VInputTag( 00518 cms.InputTag('patPFMETcorrJetSmearing') 00519 ) 00520 ) 00521 process.smearedPatPFMetSequence += process.patPFMet 00522 metUncertaintySequence += process.smearedPatPFMetSequence 00523 00524 # propagate shifts in jet energy to "raw" (uncorrected) and Type 1 corrected MET 00525 metCollectionsUp_DownForRawMEt = \ 00526 self._propagateMEtUncertainties( 00527 process, shiftedParticleCollections['lastJetCollection'], "Jet", "En", 00528 shiftedParticleCollections['jetCollectionEnUpForRawMEt'], shiftedParticleCollections['jetCollectionEnDownForRawMEt'], 00529 process.patPFMet, metUncertaintySequence) 00530 collectionsToKeep.extend(metCollectionsUp_DownForRawMEt) 00531 00532 metCollectionsUp_DownForCorrMEt = \ 00533 self._propagateMEtUncertainties( 00534 process, shiftedParticleCollections['lastJetCollection'], "Jet", "En", 00535 shiftedParticleCollections['jetCollectionEnUpForCorrMEt'], shiftedParticleCollections['jetCollectionEnDownForCorrMEt'], 00536 process.patType1CorrectedPFMet, metUncertaintySequence) 00537 collectionsToKeep.extend(metCollectionsUp_DownForCorrMEt) 00538 00539 # propagate shifts in jet energy to Type 1 + 2 corrected MET 00540 if makeType1p2corrPFMEt: 00541 process.patPFJetMETtype1p2CorrEnUp = process.patPFJetMETtype1p2Corr.clone( 00542 src = cms.InputTag(process.selectedPatJetsForMETtype1p2CorrEnUp.label()), 00543 jetCorrLabel = cms.string(jetCorrLabel) 00544 ) 00545 metUncertaintySequence += process.patPFJetMETtype1p2CorrEnUp 00546 process.patPFJetMETtype1p2CorrEnDown = process.patPFJetMETtype1p2CorrEnUp.clone( 00547 src = cms.InputTag(process.selectedPatJetsForMETtype1p2CorrEnDown.label()) 00548 ) 00549 metUncertaintySequence += process.patPFJetMETtype1p2CorrEnDown 00550 process.patPFJetMETtype2CorrEnUp = process.patPFJetMETtype2Corr.clone( 00551 src = cms.InputTag('selectedPatJetsForMETtype2CorrEnUp') 00552 ) 00553 process.metUncertaintySequence += process.patPFJetMETtype2CorrEnUp 00554 process.patPFJetMETtype2CorrEnDown = process.patPFJetMETtype2Corr.clone( 00555 src = cms.InputTag('selectedPatJetsForMETtype2CorrEnDown') 00556 ) 00557 process.metUncertaintySequence += process.patPFJetMETtype2CorrEnDown 00558 00559 patType1correctionsJetEnUp = [ cms.InputTag('patPFJetMETtype1p2CorrEnUp', 'type1') ] 00560 if doApplyType0corr: 00561 patType1correctionsJetEnUp.extend([ cms.InputTag('patPFMETtype0Corr') ]) 00562 if doApplySysShiftCorr: 00563 patType1correctionsJetEnUp.extend([ cms.InputTag('pfMEtSysShiftCorr') ]) 00564 process.patType1p2CorrectedPFMetJetEnUp = process.patType1p2CorrectedPFMet.clone( 00565 srcType1Corrections = cms.VInputTag(patType1correctionsJetEnUp), 00566 srcUnclEnergySums = cms.VInputTag( 00567 cms.InputTag('patPFJetMETtype1p2CorrEnUp', 'type2' ), 00568 cms.InputTag('patPFJetMETtype2CorrEnUp', 'type2' ), 00569 cms.InputTag('patPFJetMETtype1p2CorrEnUp', 'offset'), 00570 cms.InputTag('pfCandMETcorr') 00571 ) 00572 ) 00573 metUncertaintySequence += process.patType1p2CorrectedPFMetJetEnUp 00574 collectionsToKeep.append('patType1p2CorrectedPFMetJetEnUp') 00575 patType1correctionsJetEnDown = [ cms.InputTag('patPFJetMETtype1p2CorrEnDown', 'type1') ] 00576 if doApplyType0corr: 00577 patType1correctionsJetEnDown.extend([ cms.InputTag('patPFMETtype0Corr') ]) 00578 if doApplySysShiftCorr: 00579 patType1correctionsJetEnDown.extend([ cms.InputTag('pfMEtSysShiftCorr') ]) 00580 process.patType1p2CorrectedPFMetJetEnDown = process.patType1p2CorrectedPFMetJetEnUp.clone( 00581 srcType1Corrections = cms.VInputTag(patType1correctionsJetEnDown), 00582 srcUnclEnergySums = cms.VInputTag( 00583 cms.InputTag('patPFJetMETtype1p2CorrEnDown', 'type2' ), 00584 cms.InputTag('patPFJetMETtype2CorrEnDown', 'type2' ), 00585 cms.InputTag('patPFJetMETtype1p2CorrEnDown', 'offset'), 00586 cms.InputTag('pfCandMETcorr') 00587 ) 00588 ) 00589 metUncertaintySequence += process.patType1p2CorrectedPFMetJetEnDown 00590 collectionsToKeep.append('patType1p2CorrectedPFMetJetEnDown') 00591 00592 if doSmearJets: 00593 # propagate shifts in jet resolution to "raw" (uncorrected) MET and Type 1 corrected MET 00594 for metProducer in [ process.patPFMet, 00595 process.patType1CorrectedPFMet ]: 00596 00597 metCollectionsUp_Down = \ 00598 self._propagateMEtUncertainties( 00599 process, shiftedParticleCollections['lastJetCollection'], "Jet", "Res", 00600 shiftedParticleCollections['jetCollectionResUp'], shiftedParticleCollections['jetCollectionResDown'], 00601 metProducer, process.metUncertaintySequence) 00602 collectionsToKeep.extend(metCollectionsUp_Down) 00603 00604 # propagate shifts in jet resolution to Type 1 + 2 corrected MET 00605 if makeType1p2corrPFMEt: 00606 process.patPFJetMETtype1p2CorrResUp = process.patPFJetMETtype1p2Corr.clone( 00607 src = cms.InputTag(process.selectedPatJetsForMETtype1p2CorrResUp.label()), 00608 jetCorrLabel = cms.string(jetCorrLabel) 00609 ) 00610 metUncertaintySequence += process.patPFJetMETtype1p2CorrResUp 00611 process.patPFJetMETtype1p2CorrResDown = process.patPFJetMETtype1p2CorrResUp.clone( 00612 src = cms.InputTag(process.selectedPatJetsForMETtype1p2CorrResDown.label()) 00613 ) 00614 metUncertaintySequence += process.patPFJetMETtype1p2CorrResDown 00615 process.patPFJetMETtype2CorrResUp = process.patPFJetMETtype2Corr.clone( 00616 src = cms.InputTag('selectedPatJetsForMETtype2CorrResUp') 00617 ) 00618 process.metUncertaintySequence += process.patPFJetMETtype2CorrResUp 00619 process.patPFJetMETtype2CorrResDown = process.patPFJetMETtype2Corr.clone( 00620 src = cms.InputTag('selectedPatJetsForMETtype2CorrResDown') 00621 ) 00622 metUncertaintySequence += process.patPFJetMETtype2CorrResDown 00623 00624 patType1correctionsJetResUp = [ cms.InputTag('patPFJetMETtype1p2CorrResUp', 'type1') ] 00625 if doApplyType0corr: 00626 patType1correctionsJetResUp.extend([ cms.InputTag('patPFMETtype0Corr') ]) 00627 if doApplySysShiftCorr: 00628 patType1correctionsJetResUp.extend([ cms.InputTag('pfMEtSysShiftCorr') ]) 00629 process.patType1p2CorrectedPFMetJetResUp = process.patType1p2CorrectedPFMet.clone( 00630 srcType1Corrections = cms.VInputTag(patType1correctionsJetResUp), 00631 srcUnclEnergySums = cms.VInputTag( 00632 cms.InputTag('patPFJetMETtype1p2CorrResUp', 'type2' ), 00633 cms.InputTag('patPFJetMETtype2CorrResUp', 'type2' ), 00634 cms.InputTag('patPFJetMETtype1p2CorrResUp', 'offset'), 00635 cms.InputTag('pfCandMETcorr') 00636 ) 00637 ) 00638 metUncertaintySequence += process.patType1p2CorrectedPFMetJetResUp 00639 collectionsToKeep.append('patType1p2CorrectedPFMetJetResUp') 00640 patType1correctionsJetResDown = [ cms.InputTag('patPFJetMETtype1p2CorrResDown', 'type1') ] 00641 if doApplyType0corr: 00642 patType1correctionsJetResDown.extend([ cms.InputTag('patPFMETtype0Corr') ]) 00643 if doApplySysShiftCorr: 00644 patType1correctionsJetResDown.extend([ cms.InputTag('pfMEtSysShiftCorr') ]) 00645 process.patType1p2CorrectedPFMetJetResDown = process.patType1p2CorrectedPFMetJetResUp.clone( 00646 srcType1Corrections = cms.VInputTag(patType1correctionsJetResDown), 00647 srcUnclEnergySums = cms.VInputTag( 00648 cms.InputTag('patPFJetMETtype1p2CorrResDown', 'type2' ), 00649 cms.InputTag('patPFJetMETtype2CorrResDown', 'type2' ), 00650 cms.InputTag('patPFJetMETtype1p2CorrResDown', 'offset'), 00651 cms.InputTag('pfCandMETcorr') 00652 ) 00653 ) 00654 metUncertaintySequence += process.patType1p2CorrectedPFMetJetResDown 00655 collectionsToKeep.append('patType1p2CorrectedPFMetJetResDown') 00656 00657 #-------------------------------------------------------------------------------------------- 00658 # shift "unclustered energy" (PFJets of Pt < 10 GeV plus PFCandidates not within jets) 00659 # and propagate effect of shift to (Type 1 as well as Type 1 + 2 corrected) MET 00660 #-------------------------------------------------------------------------------------------- 00661 00662 unclEnMETcorrections = [ 00663 [ 'pfCandMETcorr', [ '' ] ], 00664 [ 'patPFJetMETtype1p2Corr', [ 'type2', 'offset' ] ], 00665 [ 'patPFJetMETtype2Corr', [ 'type2' ] ], 00666 ] 00667 unclEnMETcorrectionsUp = [] 00668 unclEnMETcorrectionsDown = [] 00669 for srcUnclEnMETcorr in unclEnMETcorrections: 00670 moduleUnclEnMETcorrUp = cms.EDProducer("ShiftedMETcorrInputProducer", 00671 src = cms.VInputTag( 00672 [ cms.InputTag(srcUnclEnMETcorr[0], instanceLabel) for instanceLabel in srcUnclEnMETcorr[1] ] 00673 ), 00674 uncertainty = cms.double(0.10), 00675 shiftBy = cms.double(+1.*varyByNsigmas) 00676 ) 00677 moduleUnclEnMETcorrUpName = "%sUnclusteredEnUp" % srcUnclEnMETcorr[0] 00678 setattr(process, moduleUnclEnMETcorrUpName, moduleUnclEnMETcorrUp) 00679 process.metUncertaintySequence += moduleUnclEnMETcorrUp 00680 unclEnMETcorrectionsUp.extend([ cms.InputTag(moduleUnclEnMETcorrUpName, instanceLabel) 00681 for instanceLabel in srcUnclEnMETcorr[1] ] ) 00682 moduleUnclEnMETcorrDown = moduleUnclEnMETcorrUp.clone( 00683 shiftBy = cms.double(-1.*varyByNsigmas) 00684 ) 00685 moduleUnclEnMETcorrDownName = "%sUnclusteredEnDown" % srcUnclEnMETcorr[0] 00686 setattr(process, moduleUnclEnMETcorrDownName, moduleUnclEnMETcorrDown) 00687 process.metUncertaintySequence += moduleUnclEnMETcorrDown 00688 unclEnMETcorrectionsDown.extend([ cms.InputTag(moduleUnclEnMETcorrDownName, instanceLabel) 00689 for instanceLabel in srcUnclEnMETcorr[1] ] ) 00690 00691 # propagate shifts in jet energy/resolution to "raw" (uncorrected) MET 00692 process.patPFMetUnclusteredEnUp = process.patType1CorrectedPFMet.clone( 00693 src = cms.InputTag('patPFMet'), 00694 srcType1Corrections = cms.VInputTag(unclEnMETcorrectionsUp) 00695 ) 00696 process.metUncertaintySequence += process.patPFMetUnclusteredEnUp 00697 collectionsToKeep.append('patPFMetUnclusteredEnUp') 00698 process.patPFMetUnclusteredEnDown = process.patPFMetUnclusteredEnUp.clone( 00699 srcType1Corrections = cms.VInputTag(unclEnMETcorrectionsDown) 00700 ) 00701 process.metUncertaintySequence += process.patPFMetUnclusteredEnDown 00702 collectionsToKeep.append('patPFMetUnclusteredEnDown') 00703 00704 # propagate shifts in jet energy/resolution to Type 1 corrected MET 00705 process.patType1CorrectedPFMetUnclusteredEnUp = process.patType1CorrectedPFMet.clone( 00706 src = cms.InputTag('patType1CorrectedPFMet'), 00707 srcType1Corrections = cms.VInputTag(unclEnMETcorrectionsUp) 00708 ) 00709 process.metUncertaintySequence += process.patType1CorrectedPFMetUnclusteredEnUp 00710 collectionsToKeep.append('patType1CorrectedPFMetUnclusteredEnUp') 00711 process.patType1CorrectedPFMetUnclusteredEnDown = process.patType1CorrectedPFMetUnclusteredEnUp.clone( 00712 srcType1Corrections = cms.VInputTag(unclEnMETcorrectionsDown) 00713 ) 00714 process.metUncertaintySequence += process.patType1CorrectedPFMetUnclusteredEnDown 00715 collectionsToKeep.append('patType1CorrectedPFMetUnclusteredEnDown') 00716 00717 # propagate shifts in jet energy/resolution to Type 1 + 2 corrected MET 00718 if makeType1p2corrPFMEt: 00719 process.patType1p2CorrectedPFMetUnclusteredEnUp = process.patType1p2CorrectedPFMet.clone( 00720 srcUnclEnergySums = cms.VInputTag( 00721 cms.InputTag('patPFJetMETtype1p2Corr', 'type2' ), 00722 cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnUp', 'type2' ), 00723 cms.InputTag('patPFJetMETtype2Corr', 'type2' ), 00724 cms.InputTag('patPFJetMETtype2CorrUnclusteredEnUp', 'type2' ), 00725 cms.InputTag('patPFJetMETtype1p2Corr', 'offset'), 00726 cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnUp', 'offset'), 00727 cms.InputTag('pfCandMETcorr'), 00728 cms.InputTag('pfCandMETcorrUnclusteredEnUp') 00729 ) 00730 ) 00731 metUncertaintySequence += process.patType1p2CorrectedPFMetUnclusteredEnUp 00732 collectionsToKeep.append('patType1p2CorrectedPFMetUnclusteredEnUp') 00733 process.patType1p2CorrectedPFMetUnclusteredEnDown = process.patType1p2CorrectedPFMetUnclusteredEnUp.clone( 00734 srcUnclEnergySums = cms.VInputTag( 00735 cms.InputTag('patPFJetMETtype1p2Corr', 'type2' ), 00736 cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnDown', 'type2' ), 00737 cms.InputTag('patPFJetMETtype2Corr', 'type2' ), 00738 cms.InputTag('patPFJetMETtype2CorrUnclusteredEnDown', 'type2' ), 00739 cms.InputTag('patPFJetMETtype1p2Corr', 'offset'), 00740 cms.InputTag('patPFJetMETtype1p2CorrUnclusteredEnDown', 'offset'), 00741 cms.InputTag('pfCandMETcorr'), 00742 cms.InputTag('pfCandMETcorrUnclusteredEnDown') 00743 ) 00744 ) 00745 metUncertaintySequence += process.patType1p2CorrectedPFMetUnclusteredEnDown 00746 collectionsToKeep.append('patType1p2CorrectedPFMetUnclusteredEnDown') 00747 00748 #-------------------------------------------------------------------------------------------- 00749 # propagate shifted electron/photon, muon and tau-jet energies to MET 00750 #-------------------------------------------------------------------------------------------- 00751 00752 metProducers = [ process.patPFMet, 00753 process.patType1CorrectedPFMet ] 00754 if makeType1p2corrPFMEt: 00755 metProducers.append(process.patType1p2CorrectedPFMet) 00756 for metProducer in metProducers: 00757 00758 if self._isValidInputTag(shiftedParticleCollections['electronCollection']): 00759 metCollectionsUp_Down = \ 00760 self._propagateMEtUncertainties( 00761 process, shiftedParticleCollections['electronCollection'].value(), "Electron", "En", 00762 shiftedParticleCollections['electronCollectionEnUp'], shiftedParticleCollections['electronCollectionEnDown'], 00763 metProducer, metUncertaintySequence) 00764 collectionsToKeep.extend(metCollectionsUp_Down) 00765 00766 if self._isValidInputTag(shiftedParticleCollections['photonCollection']): 00767 metCollectionsUp_Down = \ 00768 self._propagateMEtUncertainties( 00769 process, shiftedParticleCollections['photonCollection'].value(), "Photon", "En", 00770 shiftedParticleCollections['photonCollectionEnUp'], shiftedParticleCollections['photonCollectionEnDown'], 00771 metProducer, metUncertaintySequence) 00772 collectionsToKeep.extend(metCollectionsUp_Down) 00773 00774 if self._isValidInputTag(shiftedParticleCollections['muonCollection']): 00775 metCollectionsUp_Down = \ 00776 self._propagateMEtUncertainties( 00777 process, shiftedParticleCollections['muonCollection'].value(), "Muon", "En", 00778 shiftedParticleCollections['muonCollectionEnUp'], shiftedParticleCollections['muonCollectionEnDown'], 00779 metProducer, metUncertaintySequence) 00780 collectionsToKeep.extend(metCollectionsUp_Down) 00781 00782 if self._isValidInputTag(shiftedParticleCollections['tauCollection']): 00783 metCollectionsUp_Down = \ 00784 self._propagateMEtUncertainties( 00785 process, shiftedParticleCollections['tauCollection'].value(), "Tau", "En", 00786 shiftedParticleCollections['tauCollectionEnUp'], shiftedParticleCollections['tauCollectionEnDown'], 00787 metProducer, metUncertaintySequence) 00788 collectionsToKeep.extend(metCollectionsUp_Down)
def metUncertaintyTools::RunMEtUncertainties::_addModuleToSequence | ( | self, | |
process, | |||
module, | |||
moduleName_parts, | |||
sequence | |||
) | [private] |
Definition at line 72 of file metUncertaintyTools.py.
00073 : 00074 00075 if not len(moduleName_parts) > 0: 00076 raise ValueError("Empty list !!") 00077 00078 moduleName = "" 00079 00080 lastPart = None 00081 for part in moduleName_parts: 00082 if part is None or part == "": 00083 continue 00084 00085 part = part.replace("selected", "") 00086 part = part.replace("clean", "") 00087 00088 if lastPart is None: 00089 moduleName += part[0].lower() + part[1:] 00090 lastPart = part 00091 else: 00092 if lastPart[-1].islower() or lastPart[-1].isdigit(): 00093 moduleName += part[0].capitalize() + part[1:] 00094 else: 00095 moduleName += part[0].lower() + part[1:] 00096 lastPart = part 00097 00098 setattr(process, moduleName, module) 00099 00100 sequence += module 00101 00102 return moduleName
def metUncertaintyTools::RunMEtUncertainties::_addNoPileUpPFMEt | ( | self, | |
process, | |||
metUncertaintySequence, | |||
shiftedParticleCollections, | |||
pfCandCollection, | |||
collectionsToKeep, | |||
doSmearJets, | |||
makeNoPileUpPFMEt, | |||
varyByNsigmas | |||
) | [private] |
Definition at line 1053 of file metUncertaintyTools.py.
01059 : 01060 01061 if not makeNoPileUpPFMEt: 01062 return 01063 01064 if not hasattr(process, "noPileUpPFMEt"): 01065 process.load("JetMETCorrections.METPUSubtraction.noPileUpPFMET_cff") 01066 01067 lastUncorrectedJetCollectionForNoPileUpPFMEt = 'ak5PFJets' 01068 lastCorrectedJetCollectionForNoPileUpPFMEt = 'calibratedAK5PFJetsForNoPileUpMEt' 01069 01070 if doSmearJets: 01071 process.load("RecoJets.Configuration.GenJetParticles_cff") 01072 metUncertaintySequence += process.genParticlesForJetsNoNu 01073 process.load("RecoJets.Configuration.RecoGenJets_cff") 01074 metUncertaintySequence += process.ak5GenJetsNoNu 01075 process.smearedUncorrectedJetsForNoPileUpPFMEt = cms.EDProducer("SmearedPFJetProducer", 01076 src = cms.InputTag('ak5PFJets'), 01077 jetCorrLabel = cms.string("ak5PFL1FastL2L3"), 01078 dRmaxGenJetMatch = cms.string('TMath::Min(0.5, 0.1 + 0.3*TMath::Exp(-0.05*(genJetPt - 10.)))'), 01079 sigmaMaxGenJetMatch = cms.double(5.), 01080 inputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/pfJetResolutionMCtoDataCorrLUT.root'), 01081 lutName = cms.string('pfJetResolutionMCtoDataCorrLUT'), 01082 jetResolutions = jetResolutions.METSignificance_params, 01083 skipRawJetPtThreshold = cms.double(10.), # GeV 01084 skipCorrJetPtThreshold = cms.double(1.e-2), 01085 srcGenJets = cms.InputTag('ak5GenJetsNoNu'), 01086 ##verbosity = cms.int32(1) 01087 ) 01088 metUncertaintySequence += process.smearedUncorrectedJetsForNoPileUpPFMEt 01089 process.calibratedAK5PFJetsForNoPileUpMEt.src = cms.InputTag('smearedUncorrectedJetsForNoPileUpPFMEt') 01090 metUncertaintySequence += process.noPileUpPFMEtSequence 01091 self._addPATMEtProducer(process, metUncertaintySequence, 01092 'noPileUpPFMEt', 'patPFMetNoPileUp', collectionsToKeep) 01093 01094 for leptonCollection in [ [ 'Electron', 'En', 'electronCollection', 0.3 ], 01095 [ 'Photon', 'En', 'photonCollection', 0.3 ], 01096 [ 'Muon', 'En', 'muonCollection', 0.3 ], 01097 [ 'Tau', 'En', 'tauCollection', 0.3 ] ]: 01098 if self._isValidInputTag(shiftedParticleCollections[leptonCollection[2]]): 01099 pfCandCollectionLeptonShiftUp, pfCandCollectionLeptonShiftDown = \ 01100 self._addPFCandidatesForPFMEtInput( 01101 process, metUncertaintySequence, 01102 shiftedParticleCollections['%s' % leptonCollection[2]], leptonCollection[0], leptonCollection[1], 01103 shiftedParticleCollections['%s%sUp' % (leptonCollection[2], leptonCollection[1])], shiftedParticleCollections['%s%sDown' % (leptonCollection[2], leptonCollection[1])], 01104 leptonCollection[3], 01105 pfCandCollection) 01106 modulePFCandidateToVertexAssociationShiftUp = process.pfCandidateToVertexAssociation.clone( 01107 PFCandidateCollection = cms.InputTag(pfCandCollectionLeptonShiftUp) 01108 ) 01109 modulePFCandidateToVertexAssociationShiftUpName = "pfCandidateToVertexAssociation%s%sUp" % (leptonCollection[0], leptonCollection[1]) 01110 setattr(process, modulePFCandidateToVertexAssociationShiftUpName, modulePFCandidateToVertexAssociationShiftUp) 01111 metUncertaintySequence += modulePFCandidateToVertexAssociationShiftUp 01112 modulePFMEtDataLeptonShiftUp = process.noPileUpPFMEtData.clone( 01113 srcPFCandidates = cms.InputTag(pfCandCollectionLeptonShiftUp), 01114 srcPFCandToVertexAssociations = cms.InputTag(modulePFCandidateToVertexAssociationShiftUpName) 01115 ) 01116 modulePFMEtDataLeptonShiftUpName = "noPileUpPFMEtData%s%sUp" % (leptonCollection[0], leptonCollection[1]) 01117 setattr(process, modulePFMEtDataLeptonShiftUpName, modulePFMEtDataLeptonShiftUp) 01118 metUncertaintySequence += modulePFMEtDataLeptonShiftUp 01119 modulePFMEtLeptonShiftUp = process.noPileUpPFMEt.clone( 01120 srcMVAMEtData = cms.InputTag(modulePFMEtDataLeptonShiftUpName), 01121 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput( 01122 shiftedParticleCollections, leptonCollection[2], '%s%sUp' % (leptonCollection[2], leptonCollection[1]))) 01123 ) 01124 modulePFMEtLeptonShiftUpName = "noPileUpPFMEt%s%sUp" % (leptonCollection[0], leptonCollection[1]) 01125 setattr(process, modulePFMEtLeptonShiftUpName, modulePFMEtLeptonShiftUp) 01126 metUncertaintySequence += modulePFMEtLeptonShiftUp 01127 self._addPATMEtProducer(process, metUncertaintySequence, 01128 modulePFMEtLeptonShiftUpName, 'patPFMetNoPileUp%s%sUp' % (leptonCollection[0], leptonCollection[1]), collectionsToKeep) 01129 modulePFCandidateToVertexAssociationShiftDown = modulePFCandidateToVertexAssociationShiftUp.clone( 01130 PFCandidateCollection = cms.InputTag(pfCandCollectionLeptonShiftDown) 01131 ) 01132 modulePFCandidateToVertexAssociationShiftDownName = "pfCandidateToVertexAssociation%s%sDown" % (leptonCollection[0], leptonCollection[1]) 01133 setattr(process, modulePFCandidateToVertexAssociationShiftDownName, modulePFCandidateToVertexAssociationShiftDown) 01134 metUncertaintySequence += modulePFCandidateToVertexAssociationShiftDown 01135 modulePFMEtDataLeptonShiftDown = process.noPileUpPFMEtData.clone( 01136 srcPFCandidates = cms.InputTag(pfCandCollectionLeptonShiftDown), 01137 srcPFCandToVertexAssociations = cms.InputTag(modulePFCandidateToVertexAssociationShiftDownName) 01138 ) 01139 modulePFMEtDataLeptonShiftDownName = "noPileUpPFMEtData%s%sDown" % (leptonCollection[0], leptonCollection[1]) 01140 setattr(process, modulePFMEtDataLeptonShiftDownName, modulePFMEtDataLeptonShiftDown) 01141 metUncertaintySequence += modulePFMEtDataLeptonShiftDown 01142 modulePFMEtLeptonShiftDown = process.noPileUpPFMEt.clone( 01143 srcMVAMEtData = cms.InputTag(modulePFMEtDataLeptonShiftDownName), 01144 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput( 01145 shiftedParticleCollections, leptonCollection[2], '%s%sDown' % (leptonCollection[2], leptonCollection[1]))) 01146 ) 01147 modulePFMEtLeptonShiftDownName = "noPileUpPFMEt%s%sDown" % (leptonCollection[0], leptonCollection[1]) 01148 setattr(process, modulePFMEtLeptonShiftDownName, modulePFMEtLeptonShiftDown) 01149 metUncertaintySequence += modulePFMEtLeptonShiftDown 01150 self._addPATMEtProducer(process, metUncertaintySequence, 01151 modulePFMEtLeptonShiftDownName, 'patPFMetNoPileUp%s%sDown' % (leptonCollection[0], leptonCollection[1]), collectionsToKeep) 01152 01153 if self._isValidInputTag(shiftedParticleCollections['jetCollection']): 01154 process.uncorrectedJetsEnUpForNoPileUpPFMEt = cms.EDProducer("ShiftedPFJetProducer", 01155 src = cms.InputTag(lastUncorrectedJetCollectionForNoPileUpPFMEt), 01156 jetCorrInputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/Summer12_V2_DATA_AK5PF_UncertaintySources.txt'), 01157 jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), 01158 addResidualJES = cms.bool(False), 01159 jetCorrLabelUpToL3 = cms.string("ak5PFL1FastL2L3"), 01160 jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), 01161 shiftBy = cms.double(+1.*varyByNsigmas), 01162 ##verbosity = cms.int32(1) 01163 ) 01164 metUncertaintySequence += process.uncorrectedJetsEnUpForNoPileUpPFMEt 01165 process.correctedJetsEnUpForNoPileUpPFMEt = process.uncorrectedJetsEnUpForNoPileUpPFMEt.clone( 01166 src = cms.InputTag(lastCorrectedJetCollectionForNoPileUpPFMEt), 01167 addResidualJES = cms.bool(False), 01168 shiftBy = cms.double(+1.*varyByNsigmas) 01169 ) 01170 metUncertaintySequence += process.correctedJetsEnUpForNoPileUpPFMEt 01171 process.puJetIdDataForNoPileUpMEtJetEnUp = process.puJetIdDataForNoPileUpMEt.clone( 01172 jets = cms.InputTag('correctedJetsEnUpForNoPileUpPFMEt') 01173 ) 01174 metUncertaintySequence += process.puJetIdDataForNoPileUpMEtJetEnUp 01175 process.puJetIdForNoPileUpMEtJetEnUp = process.puJetIdForNoPileUpMEt.clone( 01176 jetids = cms.InputTag('puJetIdDataForNoPileUpMEtJetEnUp'), 01177 jets = cms.InputTag('correctedJetsEnUpForNoPileUpPFMEt') 01178 ) 01179 metUncertaintySequence += process.puJetIdForNoPileUpMEtJetEnUp 01180 process.noPileUpPFMEtDataJetEnUp = process.noPileUpPFMEtData.clone( 01181 srcJets = cms.InputTag('correctedJetsEnUpForNoPileUpPFMEt'), 01182 srcJetIds = cms.InputTag('puJetIdForNoPileUpMEtJetEnUp', 'fullId') 01183 ) 01184 metUncertaintySequence += process.noPileUpPFMEtDataJetEnUp 01185 process.noPileUpPFMEtJetEnUp = process.noPileUpPFMEt.clone( 01186 srcMVAMEtData = cms.InputTag('noPileUpPFMEtDataJetEnUp'), 01187 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01188 ) 01189 metUncertaintySequence += process.noPileUpPFMEtJetEnUp 01190 self._addPATMEtProducer(process, metUncertaintySequence, 01191 'noPileUpPFMEtJetEnUp', 'patPFMetNoPileUpJetEnUp', collectionsToKeep) 01192 process.uncorrectedJetsEnDownForNoPileUpPFMEt = process.uncorrectedJetsEnUpForNoPileUpPFMEt.clone( 01193 shiftBy = cms.double(-1.*varyByNsigmas) 01194 ) 01195 metUncertaintySequence += process.uncorrectedJetsEnDownForNoPileUpPFMEt 01196 process.correctedJetsEnDownForNoPileUpPFMEt = process.correctedJetsEnUpForNoPileUpPFMEt.clone( 01197 shiftBy = cms.double(-1.*varyByNsigmas) 01198 ) 01199 metUncertaintySequence += process.correctedJetsEnDownForNoPileUpPFMEt 01200 process.puJetIdDataForNoPileUpMEtJetEnDown = process.puJetIdDataForNoPileUpMEt.clone( 01201 jets = cms.InputTag('correctedJetsEnDownForNoPileUpPFMEt') 01202 ) 01203 metUncertaintySequence += process.puJetIdDataForNoPileUpMEtJetEnDown 01204 process.puJetIdForNoPileUpMEtJetEnDown = process.puJetIdForNoPileUpMEt.clone( 01205 jetids = cms.InputTag('puJetIdDataForNoPileUpMEtJetEnDown'), 01206 jets = cms.InputTag('correctedJetsEnDownForNoPileUpPFMEt') 01207 ) 01208 metUncertaintySequence += process.puJetIdForNoPileUpMEtJetEnDown 01209 process.noPileUpPFMEtDataJetEnDown = process.noPileUpPFMEtData.clone( 01210 srcJets = cms.InputTag('correctedJetsEnDownForNoPileUpPFMEt'), 01211 srcJetIds = cms.InputTag('puJetIdForNoPileUpMEtJetEnDown', 'fullId') 01212 ) 01213 metUncertaintySequence += process.noPileUpPFMEtDataJetEnDown 01214 process.noPileUpPFMEtJetEnDown = process.noPileUpPFMEt.clone( 01215 srcMVAMEtData = cms.InputTag('noPileUpPFMEtDataJetEnDown'), 01216 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01217 ) 01218 metUncertaintySequence += process.noPileUpPFMEtJetEnDown 01219 self._addPATMEtProducer(process, metUncertaintySequence, 01220 'noPileUpPFMEtJetEnDown', 'patPFMetNoPileUpJetEnDown', collectionsToKeep) 01221 01222 if hasattr(process, "smearedUncorrectedJetsForNoPileUpPFMEt"): 01223 process.smearedCorrectedJetsForNoPileUpPFMEt = process.smearedUncorrectedJetsForNoPileUpPFMEt.clone( 01224 src = cms.InputTag('calibratedAK5PFJetsForNoPileUpMEt'), 01225 jetCorrLabel = cms.string("") 01226 ) 01227 process.correctedJetsResUpForNoPileUpPFMEt = process.smearedCorrectedJetsForNoPileUpPFMEt.clone( 01228 shiftBy = cms.double(-1.*varyByNsigmas) 01229 ) 01230 metUncertaintySequence += process.correctedJetsResUpForNoPileUpPFMEt 01231 process.correctedJetsResDownForNoPileUpPFMEt = process.smearedCorrectedJetsForNoPileUpPFMEt.clone( 01232 shiftBy = cms.double(+1.*varyByNsigmas) 01233 ) 01234 metUncertaintySequence += process.correctedJetsResDownForNoPileUpPFMEt 01235 process.puJetIdDataForNoPileUpMEtJetResUp = process.puJetIdDataForNoPileUpMEt.clone( 01236 jets = cms.InputTag('correctedJetsResUpForNoPileUpPFMEt') 01237 ) 01238 metUncertaintySequence += process.puJetIdDataForNoPileUpMEtJetResUp 01239 process.puJetIdForNoPileUpMEtJetResUp = process.puJetIdForNoPileUpMEt.clone( 01240 jetids = cms.InputTag('puJetIdDataForNoPileUpMEtJetResUp'), 01241 jets = cms.InputTag('correctedJetsResUpForNoPileUpPFMEt') 01242 ) 01243 metUncertaintySequence += process.puJetIdForNoPileUpMEtJetResUp 01244 process.noPileUpPFMEtDataJetResUp = process.noPileUpPFMEtData.clone( 01245 srcJets = cms.InputTag('correctedJetsResUpForNoPileUpPFMEt'), 01246 srcJetIds = cms.InputTag('puJetIdForNoPileUpMEtJetResUp', 'fullId') 01247 ) 01248 metUncertaintySequence += process.noPileUpPFMEtDataJetResUp 01249 process.noPileUpPFMEtJetResUp = process.noPileUpPFMEt.clone( 01250 srcMVAMEtData = cms.InputTag('noPileUpPFMEtDataJetResUp'), 01251 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01252 ) 01253 metUncertaintySequence += process.noPileUpPFMEtJetResUp 01254 self._addPATMEtProducer(process, metUncertaintySequence, 01255 'noPileUpPFMEtJetResUp', 'patPFMetNoPileUpJetResUp', collectionsToKeep) 01256 process.puJetIdDataForNoPileUpMEtJetResDown = process.puJetIdDataForNoPileUpMEt.clone( 01257 jets = cms.InputTag('correctedJetsResDownForNoPileUpPFMEt') 01258 ) 01259 metUncertaintySequence += process.puJetIdDataForNoPileUpMEtJetResDown 01260 process.puJetIdForNoPileUpMEtJetResDown = process.puJetIdForNoPileUpMEt.clone( 01261 jetids = cms.InputTag('puJetIdDataForNoPileUpMEtJetResDown'), 01262 jets = cms.InputTag('correctedJetsResDownForNoPileUpPFMEt') 01263 ) 01264 metUncertaintySequence += process.puJetIdForNoPileUpMEtJetResDown 01265 process.noPileUpPFMEtDataJetResDown = process.noPileUpPFMEtData.clone( 01266 srcJets = cms.InputTag('correctedJetsResDownForNoPileUpPFMEt'), 01267 srcJetIds = cms.InputTag('puJetIdForNoPileUpMEtJetResDown', 'fullId') 01268 ) 01269 metUncertaintySequence += process.noPileUpPFMEtDataJetResDown 01270 process.noPileUpPFMEtJetResDown = process.noPileUpPFMEt.clone( 01271 srcMVAMEtData = cms.InputTag('noPileUpPFMEtDataJetResDown'), 01272 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01273 ) 01274 metUncertaintySequence += process.noPileUpPFMEtJetResDown 01275 self._addPATMEtProducer(process, metUncertaintySequence, 01276 'noPileUpPFMEtJetResDown', 'patPFMetNoPileUpJetResDown', collectionsToKeep) 01277 01278 process.pfCandsUnclusteredEnUpForNoPileUpPFMEt = cms.EDProducer("ShiftedPFCandidateProducerForNoPileUpPFMEt", 01279 srcPFCandidates = cms.InputTag('particleFlow'), 01280 srcJets = cms.InputTag('calibratedAK5PFJetsForNoPileUpMEt'), 01281 jetCorrInputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/Summer12_V2_DATA_AK5PF_UncertaintySources.txt'), 01282 jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), 01283 minJetPt = cms.double(10.0), 01284 shiftBy = cms.double(+1.*varyByNsigmas), 01285 unclEnUncertainty = cms.double(0.10) 01286 ) 01287 metUncertaintySequence += process.pfCandsUnclusteredEnUpForNoPileUpPFMEt 01288 process.pfCandidateToVertexAssociationUnclusteredEnUpForNoPileUpPFMEt = process.pfCandidateToVertexAssociation.clone( 01289 PFCandidateCollection = cms.InputTag('pfCandsUnclusteredEnUpForNoPileUpPFMEt') 01290 ) 01291 metUncertaintySequence += process.pfCandidateToVertexAssociationUnclusteredEnUpForNoPileUpPFMEt 01292 process.noPileUpPFMEtDataUnclusteredEnUp = process.noPileUpPFMEtData.clone( 01293 srcPFCandidates = cms.InputTag('pfCandsUnclusteredEnUpForNoPileUpPFMEt'), 01294 srcPFCandToVertexAssociations = cms.InputTag('pfCandidateToVertexAssociationUnclusteredEnUpForNoPileUpPFMEt'), 01295 ) 01296 metUncertaintySequence += process.noPileUpPFMEtDataUnclusteredEnUp 01297 process.noPileUpPFMEtUnclusteredEnUp = process.noPileUpPFMEt.clone( 01298 srcMVAMEtData = cms.InputTag('noPileUpPFMEtDataUnclusteredEnUp'), 01299 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01300 ) 01301 metUncertaintySequence += process.noPileUpPFMEtUnclusteredEnUp 01302 self._addPATMEtProducer(process, metUncertaintySequence, 01303 'noPileUpPFMEtUnclusteredEnUp', 'patPFMetNoPileUpUnclusteredEnUp', collectionsToKeep) 01304 process.pfCandsUnclusteredEnDownForNoPileUpPFMEt = process.pfCandsUnclusteredEnUpForNoPileUpPFMEt.clone( 01305 shiftBy = cms.double(-1.*varyByNsigmas), 01306 ) 01307 metUncertaintySequence += process.pfCandsUnclusteredEnDownForNoPileUpPFMEt 01308 process.pfCandidateToVertexAssociationUnclusteredEnDownForNoPileUpPFMEt = process.pfCandidateToVertexAssociation.clone( 01309 PFCandidateCollection = cms.InputTag('pfCandsUnclusteredEnDownForNoPileUpPFMEt') 01310 ) 01311 metUncertaintySequence += process.pfCandidateToVertexAssociationUnclusteredEnDownForNoPileUpPFMEt 01312 process.noPileUpPFMEtDataUnclusteredEnDown = process.noPileUpPFMEtData.clone( 01313 srcPFCandidates = cms.InputTag('pfCandsUnclusteredEnDownForNoPileUpPFMEt'), 01314 srcPFCandToVertexAssociations = cms.InputTag('pfCandidateToVertexAssociationUnclusteredEnDownForNoPileUpPFMEt'), 01315 ) 01316 metUncertaintySequence += process.noPileUpPFMEtDataUnclusteredEnDown 01317 process.noPileUpPFMEtUnclusteredEnDown = process.noPileUpPFMEt.clone( 01318 srcMVAMEtData = cms.InputTag('noPileUpPFMEtDataUnclusteredEnDown'), 01319 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01320 ) 01321 metUncertaintySequence += process.noPileUpPFMEtUnclusteredEnDown 01322 self._addPATMEtProducer(process, metUncertaintySequence, 01323 'noPileUpPFMEtUnclusteredEnDown', 'patPFMetNoPileUpUnclusteredEnDown', collectionsToKeep)
def metUncertaintyTools::RunMEtUncertainties::_addPATMEtProducer | ( | self, | |
process, | |||
metUncertaintySequence, | |||
pfMEtCollection, | |||
patMEtCollection, | |||
collectionsToKeep | |||
) | [private] |
Definition at line 831 of file metUncertaintyTools.py.
00834 : 00835 00836 module = patMETs.clone( 00837 metSource = cms.InputTag(pfMEtCollection), 00838 addMuonCorrections = cms.bool(False), 00839 genMETSource = cms.InputTag('genMetTrue') 00840 ) 00841 setattr(process, patMEtCollection, module) 00842 metUncertaintySequence += module 00843 collectionsToKeep.append(patMEtCollection)
def metUncertaintyTools::RunMEtUncertainties::_addPFCandidatesForPFMEtInput | ( | self, | |
process, | |||
metUncertaintySequence, | |||
particleCollection, | |||
particleType, | |||
shiftType, | |||
particleCollectionShiftUp, | |||
particleCollectionShiftDown, | |||
dRmatch, | |||
pfCandCollection | |||
) | [private] |
Definition at line 789 of file metUncertaintyTools.py.
00793 : 00794 00795 srcUnshiftedObjects = particleCollection 00796 if isinstance(srcUnshiftedObjects, cms.InputTag): 00797 srcUnshiftedObjects = srcUnshiftedObjects.value() 00798 moduleShiftUp = cms.EDProducer("ShiftedPFCandidateProducerForPFMEtMVA", 00799 srcPFCandidates = pfCandCollection, 00800 srcUnshiftedObjects = cms.InputTag(srcUnshiftedObjects), 00801 srcShiftedObjects = cms.InputTag(particleCollectionShiftUp), 00802 dRmatch_PFCandidate = cms.double(dRmatch) 00803 ) 00804 moduleNameShiftUp = "pfCandidates%s%sUpForMEtUncertainties" % (particleType, shiftType) 00805 setattr(process, moduleNameShiftUp, moduleShiftUp) 00806 metUncertaintySequence += moduleShiftUp 00807 00808 moduleShiftDown = moduleShiftUp.clone( 00809 srcShiftedObjects = cms.InputTag(particleCollectionShiftDown) 00810 ) 00811 moduleNameShiftDown = "pfCandidates%s%sDownForMEtUncertainties" % (particleType, shiftType) 00812 setattr(process, moduleNameShiftDown, moduleShiftDown) 00813 metUncertaintySequence += moduleShiftDown 00814 00815 return ( moduleNameShiftUp, moduleNameShiftDown )
def metUncertaintyTools::RunMEtUncertainties::_addPFMEtByMVA | ( | self, | |
process, | |||
metUncertaintySequence, | |||
shiftedParticleCollections, | |||
pfCandCollection, | |||
collectionsToKeep, | |||
doSmearJets, | |||
makePFMEtByMVA, | |||
varyByNsigmas | |||
) | [private] |
Definition at line 844 of file metUncertaintyTools.py.
00850 : 00851 00852 if not makePFMEtByMVA: 00853 return 00854 00855 if not hasattr(process, "pfMEtMVA"): 00856 process.load("RecoMET.METProducers.mvaPFMET_cff") 00857 00858 lastUncorrectedJetCollectionForPFMEtByMVA = 'ak5PFJets' 00859 lastCorrectedJetCollectionForPFMEtByMVA = 'calibratedAK5PFJetsForPFMEtMVA' 00860 00861 if doSmearJets: 00862 process.load("RecoJets.Configuration.GenJetParticles_cff") 00863 metUncertaintySequence += process.genParticlesForJetsNoNu 00864 process.load("RecoJets.Configuration.RecoGenJets_cff") 00865 metUncertaintySequence += process.ak5GenJetsNoNu 00866 process.smearedUncorrectedJetsForPFMEtByMVA = cms.EDProducer("SmearedPFJetProducer", 00867 src = cms.InputTag('ak5PFJets'), 00868 jetCorrLabel = cms.string("ak5PFL1FastL2L3"), 00869 dRmaxGenJetMatch = cms.string('TMath::Min(0.5, 0.1 + 0.3*TMath::Exp(-0.05*(genJetPt - 10.)))'), 00870 sigmaMaxGenJetMatch = cms.double(5.), 00871 inputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/pfJetResolutionMCtoDataCorrLUT.root'), 00872 lutName = cms.string('pfJetResolutionMCtoDataCorrLUT'), 00873 jetResolutions = jetResolutions.METSignificance_params, 00874 skipRawJetPtThreshold = cms.double(10.), # GeV 00875 skipCorrJetPtThreshold = cms.double(1.e-2), 00876 srcGenJets = cms.InputTag('ak5GenJetsNoNu') 00877 ) 00878 metUncertaintySequence += process.smearedUncorrectedJetsForPFMEtByMVA 00879 process.calibratedAK5PFJetsForPFMEtMVA.src = cms.InputTag('smearedUncorrectedJetsForPFMEtByMVA') 00880 process.pfMEtMVA.srcUncorrJets = cms.InputTag('smearedUncorrectedJetsForPFMEtByMVA') 00881 metUncertaintySequence += process.calibratedAK5PFJetsForPFMEtMVA 00882 process.smearedCorrectedJetsForPFMEtByMVA = process.smearedUncorrectedJetsForPFMEtByMVA.clone( 00883 src = cms.InputTag('calibratedAK5PFJetsForPFMEtMVA'), 00884 jetCorrLabel = cms.string("") 00885 ) 00886 metUncertaintySequence += process.smearedCorrectedJetsForPFMEtByMVA 00887 process.pfMEtMVA.srcCorrJets = cms.InputTag('smearedCorrectedJetsForPFMEtByMVA') 00888 metUncertaintySequence += process.pfMEtMVA 00889 else: 00890 metUncertaintySequence += process.pfMEtMVAsequence 00891 self._addPATMEtProducer(process, metUncertaintySequence, 00892 'pfMEtMVA', 'patPFMetMVA', collectionsToKeep) 00893 00894 for leptonCollection in [ [ 'Electron', 'En', 'electronCollection', 0.3 ], 00895 [ 'Photon', 'En', 'photonCollection', 0.3 ], 00896 [ 'Muon', 'En', 'muonCollection', 0.3 ], 00897 [ 'Tau', 'En', 'tauCollection', 0.3 ] ]: 00898 if self._isValidInputTag(shiftedParticleCollections[leptonCollection[2]]): 00899 pfCandCollectionLeptonShiftUp, pfCandCollectionLeptonShiftDown = \ 00900 self._addPFCandidatesForPFMEtInput( 00901 process, metUncertaintySequence, 00902 shiftedParticleCollections['%s' % leptonCollection[2]], leptonCollection[0], leptonCollection[1], 00903 shiftedParticleCollections['%s%sUp' % (leptonCollection[2], leptonCollection[1])], 00904 shiftedParticleCollections['%s%sDown' % (leptonCollection[2], leptonCollection[1])], 00905 leptonCollection[3], 00906 pfCandCollection) 00907 modulePFMEtLeptonShiftUp = process.pfMEtMVA.clone( 00908 srcPFCandidates = cms.InputTag(pfCandCollectionLeptonShiftUp), 00909 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput( 00910 shiftedParticleCollections, leptonCollection[2], '%s%sUp' % (leptonCollection[2], leptonCollection[1]))) 00911 ) 00912 modulePFMEtLeptonShiftUpName = "pfMEtMVA%s%sUp" % (leptonCollection[0], leptonCollection[1]) 00913 setattr(process, modulePFMEtLeptonShiftUpName, modulePFMEtLeptonShiftUp) 00914 metUncertaintySequence += modulePFMEtLeptonShiftUp 00915 self._addPATMEtProducer(process, metUncertaintySequence, 00916 modulePFMEtLeptonShiftUpName, 'patPFMetMVA%s%sUp' % (leptonCollection[0], leptonCollection[1]), collectionsToKeep) 00917 modulePFMEtLeptonShiftDown = process.pfMEtMVA.clone( 00918 srcPFCandidates = cms.InputTag(pfCandCollectionLeptonShiftDown), 00919 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput( 00920 shiftedParticleCollections, leptonCollection[2], '%s%sDown' % (leptonCollection[2], leptonCollection[1]))) 00921 ) 00922 modulePFMEtLeptonShiftDownName = "pfMEtMVA%s%sDown" % (leptonCollection[0], leptonCollection[1]) 00923 setattr(process, modulePFMEtLeptonShiftDownName, modulePFMEtLeptonShiftDown) 00924 metUncertaintySequence += modulePFMEtLeptonShiftDown 00925 self._addPATMEtProducer(process, metUncertaintySequence, 00926 modulePFMEtLeptonShiftDownName, 'patPFMetMVA%s%sDown' % (leptonCollection[0], leptonCollection[1]), collectionsToKeep) 00927 00928 if self._isValidInputTag(shiftedParticleCollections['jetCollection']): 00929 process.uncorrectedJetsEnUpForPFMEtByMVA = cms.EDProducer("ShiftedPFJetProducer", 00930 src = cms.InputTag(lastUncorrectedJetCollectionForPFMEtByMVA), 00931 jetCorrInputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/Summer12_V2_DATA_AK5PF_UncertaintySources.txt'), 00932 jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), 00933 addResidualJES = cms.bool(True), 00934 jetCorrLabelUpToL3 = cms.string("ak5PFL1FastL2L3"), 00935 jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), 00936 shiftBy = cms.double(+1.*varyByNsigmas) 00937 ) 00938 metUncertaintySequence += process.uncorrectedJetsEnUpForPFMEtByMVA 00939 process.uncorrectedJetsEnDownForPFMEtByMVA = process.uncorrectedJetsEnUpForPFMEtByMVA.clone( 00940 shiftBy = cms.double(-1.*varyByNsigmas) 00941 ) 00942 metUncertaintySequence += process.uncorrectedJetsEnDownForPFMEtByMVA 00943 process.correctedJetsEnUpForPFMEtByMVA = process.uncorrectedJetsEnUpForPFMEtByMVA.clone( 00944 src = cms.InputTag(lastCorrectedJetCollectionForPFMEtByMVA), 00945 addResidualJES = cms.bool(False), 00946 shiftBy = cms.double(+1.*varyByNsigmas) 00947 ) 00948 metUncertaintySequence += process.correctedJetsEnUpForPFMEtByMVA 00949 process.correctedJetsEnDownForPFMEtByMVA = process.correctedJetsEnUpForPFMEtByMVA.clone( 00950 shiftBy = cms.double(-1.*varyByNsigmas) 00951 ) 00952 metUncertaintySequence += process.correctedJetsEnDownForPFMEtByMVA 00953 pfCandCollectionJetEnUp, pfCandCollectionJetEnDown = \ 00954 self._addPFCandidatesForPFMEtInput( 00955 process, metUncertaintySequence, 00956 shiftedParticleCollections['lastJetCollection'], "Jet", "En", 00957 shiftedParticleCollections['jetCollectionEnUpForCorrMEt'], shiftedParticleCollections['jetCollectionEnDownForCorrMEt'], 00958 0.5, 00959 pfCandCollection) 00960 process.pfMEtMVAJetEnUp = process.pfMEtMVA.clone( 00961 srcCorrJets = cms.InputTag('correctedJetsEnUpForPFMEtByMVA'), 00962 srcUncorrJets = cms.InputTag('uncorrectedJetsEnUpForPFMEtByMVA'), 00963 srcPFCandidates = cms.InputTag(pfCandCollectionJetEnUp), 00964 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 00965 ) 00966 metUncertaintySequence += process.pfMEtMVAJetEnUp 00967 self._addPATMEtProducer(process, metUncertaintySequence, 00968 'pfMEtMVAJetEnUp', 'patPFMetMVAJetEnUp', collectionsToKeep) 00969 process.pfMEtMVAJetEnDown = process.pfMEtMVA.clone( 00970 srcCorrJets = cms.InputTag('correctedJetsEnDownForPFMEtByMVA'), 00971 srcUncorrJets = cms.InputTag('uncorrectedJetsEnDownForPFMEtByMVA'), 00972 srcPFCandidates = cms.InputTag(pfCandCollectionJetEnDown), 00973 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 00974 ) 00975 metUncertaintySequence += process.pfMEtMVAJetEnDown 00976 self._addPATMEtProducer(process, metUncertaintySequence, 00977 'pfMEtMVAJetEnDown', 'patPFMetMVAJetEnDown', collectionsToKeep) 00978 00979 if hasattr(process, "smearedUncorrectedJetsForPFMEtByMVA"): 00980 process.uncorrectedJetsResUpForPFMEtByMVA = process.smearedUncorrectedJetsForPFMEtByMVA.clone( 00981 shiftBy = cms.double(-1.*varyByNsigmas) 00982 ) 00983 metUncertaintySequence += process.uncorrectedJetsResUpForPFMEtByMVA 00984 process.uncorrectedJetsResDownForPFMEtByMVA = process.smearedUncorrectedJetsForPFMEtByMVA.clone( 00985 shiftBy = cms.double(+1.*varyByNsigmas) 00986 ) 00987 metUncertaintySequence += process.uncorrectedJetsResDownForPFMEtByMVA 00988 process.correctedJetsResUpForPFMEtByMVA = process.smearedCorrectedJetsForPFMEtByMVA.clone( 00989 shiftBy = cms.double(-1.*varyByNsigmas) 00990 ) 00991 metUncertaintySequence += process.correctedJetsResUpForPFMEtByMVA 00992 process.correctedJetsResDownForPFMEtByMVA = process.smearedCorrectedJetsForPFMEtByMVA.clone( 00993 shiftBy = cms.double(+1.*varyByNsigmas) 00994 ) 00995 metUncertaintySequence += process.correctedJetsResDownForPFMEtByMVA 00996 pfCandCollectionJetResUp, pfCandCollectionJetResDown = \ 00997 self._addPFCandidatesForPFMEtInput( 00998 process, metUncertaintySequence, 00999 shiftedParticleCollections['jetCollection'], "Jet", "Res", 01000 shiftedParticleCollections['jetCollectionResUp'], shiftedParticleCollections['jetCollectionResDown'], 01001 0.5, 01002 pfCandCollection) 01003 process.pfMEtMVAJetResUp = process.pfMEtMVA.clone( 01004 srcCorrJets = cms.InputTag('correctedJetsResUpForPFMEtByMVA'), 01005 srcUncorrJets = cms.InputTag('uncorrectedJetsResUpForPFMEtByMVA'), 01006 srcPFCandidates = cms.InputTag(pfCandCollectionJetResUp), 01007 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01008 ) 01009 metUncertaintySequence += process.pfMEtMVAJetResUp 01010 self._addPATMEtProducer(process, metUncertaintySequence, 01011 'pfMEtMVAJetResUp', 'patPFMetMVAJetResUp', collectionsToKeep) 01012 process.pfMEtMVAJetResDown = process.pfMEtMVA.clone( 01013 srcCorrJets = cms.InputTag('correctedJetsResDownForPFMEtByMVA'), 01014 srcUncorrJets = cms.InputTag('uncorrectedJetsResDownForPFMEtByMVA'), 01015 srcPFCandidates = cms.InputTag(pfCandCollectionJetResDown), 01016 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01017 ) 01018 metUncertaintySequence += process.pfMEtMVAJetResDown 01019 self._addPATMEtProducer(process, metUncertaintySequence, 01020 'pfMEtMVAJetResDown', 'patPFMetMVAJetResDown', collectionsToKeep) 01021 01022 process.pfCandsNotInJetUnclusteredEnUpForPFMEtByMVA = cms.EDProducer("ShiftedPFCandidateProducer", 01023 src = cms.InputTag('pfCandsNotInJet'), 01024 shiftBy = cms.double(+1.*varyByNsigmas), 01025 uncertainty = cms.double(0.10) 01026 ) 01027 metUncertaintySequence += process.pfCandsNotInJetUnclusteredEnUpForPFMEtByMVA 01028 process.pfCandsNotInJetUnclusteredEnDownForPFMEtByMVA = process.pfCandsNotInJetUnclusteredEnUpForPFMEtByMVA.clone( 01029 shiftBy = cms.double(-1.*varyByNsigmas) 01030 ) 01031 metUncertaintySequence += process.pfCandsNotInJetUnclusteredEnDownForPFMEtByMVA 01032 pfCandCollectionUnclusteredEnUp, pfCandCollectionUnclusteredEnDown = \ 01033 self._addPFCandidatesForPFMEtInput( 01034 process, metUncertaintySequence, 01035 pfCandCollection, "Unclustered", "En", 01036 'pfCandsNotInJetUnclusteredEnUpForPFMEtByMVA', 'pfCandsNotInJetUnclusteredEnDownForPFMEtByMVA', 01037 0.01, 01038 pfCandCollection) 01039 process.pfMEtMVAUnclusteredEnUp = process.pfMEtMVA.clone( 01040 srcPFCandidates = cms.InputTag(pfCandCollectionUnclusteredEnUp), 01041 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01042 ) 01043 metUncertaintySequence += process.pfMEtMVAUnclusteredEnUp 01044 self._addPATMEtProducer(process, metUncertaintySequence, 01045 'pfMEtMVAUnclusteredEnUp', 'patPFMetMVAUnclusteredEnUp', collectionsToKeep) 01046 process.pfMEtMVAUnclusteredEnDown = process.pfMEtMVA.clone( 01047 srcPFCandidates = cms.InputTag(pfCandCollectionUnclusteredEnDown), 01048 srcLeptons = cms.VInputTag(self._getLeptonsForPFMEtInput(shiftedParticleCollections)) 01049 ) 01050 metUncertaintySequence += process.pfMEtMVAUnclusteredEnDown 01051 self._addPATMEtProducer(process, metUncertaintySequence, 01052 'pfMEtMVAUnclusteredEnDown', 'patPFMetMVAUnclusteredEnDown', collectionsToKeep)
def metUncertaintyTools::RunMEtUncertainties::_addShiftedParticleCollections | ( | self, | |
process, | |||
electronCollection, | |||
photonCollection, | |||
muonCollection, | |||
tauCollection, | |||
jetCollection, | |||
cleanedJetCollection, | |||
lastJetCollection, | |||
jetCollectionResUp, | |||
jetCollectionResDown, | |||
varyByNsigmas | |||
) | [private] |
Definition at line 206 of file metUncertaintyTools.py.
00214 : 00215 00216 process.shiftedParticlesForMEtUncertainties = cms.Sequence() 00217 00218 shiftedParticleCollections = {} 00219 shiftedParticleCollections['electronCollection'] = electronCollection 00220 shiftedParticleCollections['photonCollection'] = photonCollection 00221 shiftedParticleCollections['muonCollection'] = muonCollection 00222 shiftedParticleCollections['tauCollection'] = tauCollection 00223 shiftedParticleCollections['jetCollection'] = jetCollection 00224 shiftedParticleCollections['cleanedJetCollection'] = cleanedJetCollection 00225 shiftedParticleCollections['lastJetCollection'] = lastJetCollection 00226 shiftedParticleCollections['jetCollectionResUp'] = jetCollectionResUp 00227 shiftedParticleCollections['jetCollectionResDown'] = jetCollectionResDown 00228 collectionsToKeep = [] 00229 00230 #-------------------------------------------------------------------------------------------- 00231 # produce collection of jets shifted up/down in energy 00232 #-------------------------------------------------------------------------------------------- 00233 00234 # in case of "raw" (uncorrected) MET, 00235 # add residual jet energy corrections in quadrature to jet energy uncertainties: 00236 # cf. https://twiki.cern.ch/twiki/bin/view/CMS/MissingETUncertaintyPrescription 00237 jetsEnUpForRawMEt = cms.EDProducer("ShiftedPATJetProducer", 00238 src = cms.InputTag(lastJetCollection), 00239 #jetCorrPayloadName = cms.string(jetCorrPayloadName), 00240 #jetCorrUncertaintyTag = cms.string('Uncertainty'), 00241 jetCorrInputFileName = cms.FileInPath('PhysicsTools/PatUtils/data/Summer12_V2_DATA_AK5PF_UncertaintySources.txt'), 00242 jetCorrUncertaintyTag = cms.string("SubTotalDataMC"), 00243 addResidualJES = cms.bool(True), 00244 jetCorrLabelUpToL3 = cms.string("ak5PFL1FastL2L3"), 00245 jetCorrLabelUpToL3Res = cms.string("ak5PFL1FastL2L3Residual"), 00246 shiftBy = cms.double(+1.*varyByNsigmas) 00247 ) 00248 jetCollectionEnUpForRawMEt = \ 00249 self._addModuleToSequence(process, jetsEnUpForRawMEt, 00250 [ "shifted", jetCollection.value(), "EnUpForRawMEt" ], 00251 process.shiftedParticlesForMEtUncertainties) 00252 shiftedParticleCollections['jetCollectionEnUpForRawMEt'] = jetCollectionEnUpForRawMEt 00253 collectionsToKeep.append(jetCollectionEnUpForRawMEt) 00254 jetsEnDownForRawMEt = jetsEnUpForRawMEt.clone( 00255 shiftBy = cms.double(-1.*varyByNsigmas) 00256 ) 00257 jetCollectionEnDownForRawMEt = \ 00258 self._addModuleToSequence(process, jetsEnDownForRawMEt, 00259 [ "shifted", jetCollection.value(), "EnDownForRawMEt" ], 00260 process.shiftedParticlesForMEtUncertainties) 00261 shiftedParticleCollections['jetCollectionEnDownForRawMEt'] = jetCollectionEnDownForRawMEt 00262 collectionsToKeep.append(jetCollectionEnDownForRawMEt) 00263 00264 jetsEnUpForCorrMEt = jetsEnUpForRawMEt.clone( 00265 addResidualJES = cms.bool(False) 00266 ) 00267 jetCollectionEnUpForCorrMEt = \ 00268 self._addModuleToSequence(process, jetsEnUpForCorrMEt, 00269 [ "shifted", jetCollection.value(), "EnUpForCorrMEt" ], 00270 process.shiftedParticlesForMEtUncertainties) 00271 shiftedParticleCollections['jetCollectionEnUpForCorrMEt'] = jetCollectionEnUpForCorrMEt 00272 collectionsToKeep.append(jetCollectionEnUpForCorrMEt) 00273 jetsEnDownForCorrMEt = jetsEnUpForCorrMEt.clone( 00274 shiftBy = cms.double(-1.*varyByNsigmas) 00275 ) 00276 jetCollectionEnDownForCorrMEt = \ 00277 self._addModuleToSequence(process, jetsEnDownForCorrMEt, 00278 [ "shifted", jetCollection.value(), "EnDownForCorrMEt" ], 00279 process.shiftedParticlesForMEtUncertainties) 00280 shiftedParticleCollections['jetCollectionEnDownForCorrMEt'] = jetCollectionEnDownForCorrMEt 00281 collectionsToKeep.append(jetCollectionEnDownForCorrMEt) 00282 00283 #-------------------------------------------------------------------------------------------- 00284 # produce collection of electrons shifted up/down in energy 00285 #-------------------------------------------------------------------------------------------- 00286 00287 electronCollectionEnUp = None 00288 electronCollectionEnDown = None 00289 if self._isValidInputTag(electronCollection): 00290 electronsEnUp = cms.EDProducer("ShiftedPATElectronProducer", 00291 src = electronCollection, 00292 binning = cms.VPSet( 00293 cms.PSet( 00294 binSelection = cms.string('isEB'), 00295 binUncertainty = cms.double(0.006) 00296 ), 00297 cms.PSet( 00298 binSelection = cms.string('!isEB'), 00299 binUncertainty = cms.double(0.015) 00300 ), 00301 ), 00302 shiftBy = cms.double(+1.*varyByNsigmas) 00303 ) 00304 electronCollectionEnUp = \ 00305 self._addModuleToSequence(process, electronsEnUp, 00306 [ "shifted", electronCollection.value(), "EnUp" ], 00307 process.shiftedParticlesForMEtUncertainties) 00308 shiftedParticleCollections['electronCollectionEnUp'] = electronCollectionEnUp 00309 collectionsToKeep.append(electronCollectionEnUp) 00310 electronsEnDown = electronsEnUp.clone( 00311 shiftBy = cms.double(-1.*varyByNsigmas) 00312 ) 00313 electronCollectionEnDown = \ 00314 self._addModuleToSequence(process, electronsEnDown, 00315 [ "shifted", electronCollection.value(), "EnDown" ], 00316 process.shiftedParticlesForMEtUncertainties) 00317 shiftedParticleCollections['electronCollectionEnDown'] = electronCollectionEnDown 00318 collectionsToKeep.append(electronCollectionEnDown) 00319 00320 #-------------------------------------------------------------------------------------------- 00321 # produce collection of (high Pt) photon candidates shifted up/down in energy 00322 #-------------------------------------------------------------------------------------------- 00323 00324 photonCollectionEnUp = None 00325 photonCollectionEnDown = None 00326 if self._isValidInputTag(photonCollection): 00327 photonsEnUp = cms.EDProducer("ShiftedPATPhotonProducer", 00328 src = photonCollection, 00329 binning = cms.VPSet( 00330 cms.PSet( 00331 binSelection = cms.string('isEB = true'), 00332 binUncertainty = cms.double(0.01) 00333 ), 00334 cms.PSet( 00335 binSelection = cms.string('isEB = false'), 00336 binUncertainty = cms.double(0.025) 00337 ), 00338 ), 00339 shiftBy = cms.double(+1.*varyByNsigmas) 00340 ) 00341 photonCollectionEnUp = \ 00342 self._addModuleToSequence(process, photonsEnUp, 00343 [ "shifted", photonCollection.value(), "EnUp" ], 00344 process.shiftedParticlesForMEtUncertainties) 00345 shiftedParticleCollections['photonCollectionEnUp'] = photonCollectionEnUp 00346 collectionsToKeep.append(photonCollectionEnUp) 00347 photonsEnDown = photonsEnUp.clone( 00348 shiftBy = cms.double(-1.*varyByNsigmas) 00349 ) 00350 photonCollectionEnDown = \ 00351 self._addModuleToSequence(process, photonsEnDown, 00352 [ "shifted", photonCollection.value(), "EnDown" ], 00353 process.shiftedParticlesForMEtUncertainties) 00354 shiftedParticleCollections['photonCollectionEnDown'] = photonCollectionEnDown 00355 collectionsToKeep.append(photonCollectionEnDown) 00356 00357 #-------------------------------------------------------------------------------------------- 00358 # produce collection of muons shifted up/down in energy/momentum 00359 #-------------------------------------------------------------------------------------------- 00360 00361 muonCollectionEnUp = None 00362 muonCollectionEnDown = None 00363 if self._isValidInputTag(muonCollection): 00364 muonsEnUp = cms.EDProducer("ShiftedPATMuonProducer", 00365 src = muonCollection, 00366 uncertainty = cms.double(0.002), 00367 shiftBy = cms.double(+1.*varyByNsigmas) 00368 ) 00369 muonCollectionEnUp = \ 00370 self._addModuleToSequence(process, muonsEnUp, 00371 [ "shifted", muonCollection.value(), "EnUp" ], 00372 process.shiftedParticlesForMEtUncertainties) 00373 shiftedParticleCollections['muonCollectionEnUp'] = muonCollectionEnUp 00374 collectionsToKeep.append(muonCollectionEnUp) 00375 muonsEnDown = muonsEnUp.clone( 00376 shiftBy = cms.double(-1.*varyByNsigmas) 00377 ) 00378 muonCollectionEnDown = \ 00379 self._addModuleToSequence(process, muonsEnDown, 00380 [ "shifted", muonCollection.value(), "EnDown" ], 00381 process.shiftedParticlesForMEtUncertainties) 00382 shiftedParticleCollections['muonCollectionEnDown'] = muonCollectionEnDown 00383 collectionsToKeep.append(muonCollectionEnDown) 00384 00385 #-------------------------------------------------------------------------------------------- 00386 # produce collection of tau-jets shifted up/down in energy 00387 #-------------------------------------------------------------------------------------------- 00388 00389 tauCollectionEnUp = None 00390 tauCollectionEnDown = None 00391 if self._isValidInputTag(tauCollection): 00392 tausEnUp = cms.EDProducer("ShiftedPATTauProducer", 00393 src = tauCollection, 00394 uncertainty = cms.double(0.03), 00395 shiftBy = cms.double(+1.*varyByNsigmas) 00396 ) 00397 tauCollectionEnUp = \ 00398 self._addModuleToSequence(process, tausEnUp, 00399 [ "shifted", tauCollection.value(), "EnUp" ], 00400 process.shiftedParticlesForMEtUncertainties) 00401 shiftedParticleCollections['tauCollectionEnUp'] = tauCollectionEnUp 00402 collectionsToKeep.append(tauCollectionEnUp) 00403 tausEnDown = tausEnUp.clone( 00404 shiftBy = cms.double(-1.*varyByNsigmas) 00405 ) 00406 tauCollectionEnDown = \ 00407 self._addModuleToSequence(process, tausEnDown, 00408 [ "shifted", tauCollection.value(), "EnDown" ], 00409 process.shiftedParticlesForMEtUncertainties) 00410 shiftedParticleCollections['tauCollectionEnDown'] = tauCollectionEnDown 00411 collectionsToKeep.append(tauCollectionEnDown) 00412 00413 return ( shiftedParticleCollections, collectionsToKeep )
def metUncertaintyTools::RunMEtUncertainties::_addSmearedJets | ( | self, | |
process, | |||
jetCollection, | |||
smearedJetCollectionName_parts, | |||
jetSmearFileName, | |||
jetSmearHistogram, | |||
varyByNsigmas, | |||
shiftBy = None |
|||
) | [private] |
Definition at line 103 of file metUncertaintyTools.py.
00106 : 00107 00108 smearedJets = cms.EDProducer("SmearedPATJetProducer", 00109 src = cms.InputTag(jetCollection), 00110 dRmaxGenJetMatch = cms.string('TMath::Min(0.5, 0.1 + 0.3*TMath::Exp(-0.05*(genJetPt - 10.)))'), 00111 sigmaMaxGenJetMatch = cms.double(5.), 00112 inputFileName = cms.FileInPath(jetSmearFileName), 00113 lutName = cms.string(jetSmearHistogram), 00114 jetResolutions = jetResolutions.METSignificance_params, 00115 # CV: skip jet smearing for pat::Jets for which the jet-energy correction (JEC) factors are either very large or negative 00116 # since both cases produce unphysically large tails in the Type 1 corrected MET distribution after the smearing, 00117 # 00118 # e.g. raw jet: energy = 50 GeV, eta = 2.86, pt = 1 GeV 00119 # corr. jet: energy = -3 GeV , pt = -0.1 GeV (JEC factor L1fastjet*L2*L3 = -17) 00120 # energy = 10 GeV for corrected jet after smearing 00121 # --> smeared raw jet energy = -170 GeV !! 00122 # 00123 # --> (corr. - raw) jet contribution to MET = -1 (-10) GeV before (after) smearing, 00124 # even though jet energy got smeared by merely 1 GeV 00125 # 00126 skipJetSelection = cms.string( 00127 'jecSetsAvailable & abs(energy - correctedP4("Uncorrected").energy) > (5.*min(energy, correctedP4("Uncorrected").energy))' 00128 ), 00129 skipRawJetPtThreshold = cms.double(10.), # GeV 00130 skipCorrJetPtThreshold = cms.double(1.e-2) 00131 ) 00132 if shiftBy is not None: 00133 setattr(smearedJets, "shiftBy", cms.double(shiftBy*varyByNsigmas)) 00134 smearedJetCollection = \ 00135 self._addModuleToSequence(process, smearedJets, 00136 smearedJetCollectionName_parts, 00137 process.metUncertaintySequence) 00138 00139 return smearedJetCollection
def metUncertaintyTools::RunMEtUncertainties::_getLeptonsForPFMEtInput | ( | self, | |
shiftedParticleCollections, | |||
substituteKeyUnshifted = None , |
|||
substituteKeyShifted = None |
|||
) | [private] |
Definition at line 816 of file metUncertaintyTools.py.
00817 : 00818 retVal = [] 00819 for collectionName in [ 'electronCollection', 00820 'photonCollection', 00821 'muonCollection', 00822 'tauCollection' ]: 00823 if self._isValidInputTag(shiftedParticleCollections[collectionName]): 00824 if substituteKeyUnshifted is not None and substituteKeyUnshifted in shiftedParticleCollections.keys() and \ 00825 substituteKeyShifted is not None and substituteKeyShifted in shiftedParticleCollections.keys() and \ 00826 shiftedParticleCollections[collectionName] == shiftedParticleCollections[substituteKeyUnshifted]: 00827 retVal.append(cms.InputTag(shiftedParticleCollections[substituteKeyShifted])) 00828 else: 00829 retVal.append(shiftedParticleCollections[collectionName]) 00830 return retVal
def metUncertaintyTools::RunMEtUncertainties::_initializeInputTag | ( | self, | |
input, | |||
default | |||
) | [private] |
Definition at line 186 of file metUncertaintyTools.py.
def metUncertaintyTools::RunMEtUncertainties::_isValidInputTag | ( | input | ) | [private] |
Definition at line 197 of file metUncertaintyTools.py.
def metUncertaintyTools::RunMEtUncertainties::_propagateMEtUncertainties | ( | self, | |
process, | |||
particleCollection, | |||
particleType, | |||
shiftType, | |||
particleCollectionShiftUp, | |||
particleCollectionShiftDown, | |||
metProducer, | |||
sequence | |||
) | [private] |
Definition at line 140 of file metUncertaintyTools.py.
00143 : 00144 00145 # produce MET correction objects 00146 # (sum of differences in four-momentum between original and up/down shifted particle collection) 00147 moduleMETcorrShiftUp = cms.EDProducer("ShiftedParticleMETcorrInputProducer", 00148 srcOriginal = cms.InputTag(particleCollection), 00149 srcShifted = cms.InputTag(particleCollectionShiftUp) 00150 ) 00151 moduleMETcorrShiftUpName = "patPFMETcorr%s%sUp" % (particleType, shiftType) 00152 setattr(process, moduleMETcorrShiftUpName, moduleMETcorrShiftUp) 00153 sequence += moduleMETcorrShiftUp 00154 moduleMETcorrShiftDown = moduleMETcorrShiftUp.clone( 00155 srcShifted = cms.InputTag(particleCollectionShiftDown) 00156 ) 00157 moduleMETcorrShiftDownName = "patPFMETcorr%s%sDown" % (particleType, shiftType) 00158 setattr(process, moduleMETcorrShiftDownName, moduleMETcorrShiftDown) 00159 sequence += moduleMETcorrShiftDown 00160 00161 # propagate effects of up/down shifts to MET 00162 moduleMETshiftUp = metProducer.clone( 00163 src = cms.InputTag(metProducer.label()), 00164 srcType1Corrections = cms.VInputTag( 00165 cms.InputTag(moduleMETcorrShiftUpName) 00166 ) 00167 ) 00168 moduleMETshiftUpName = "%s%s%sUp" % (metProducer.label(), particleType, shiftType) 00169 setattr(process, moduleMETshiftUpName, moduleMETshiftUp) 00170 sequence += moduleMETshiftUp 00171 moduleMETshiftDown = moduleMETshiftUp.clone( 00172 srcType1Corrections = cms.VInputTag( 00173 cms.InputTag(moduleMETcorrShiftDownName) 00174 ) 00175 ) 00176 moduleMETshiftDownName = "%s%s%sDown" % (metProducer.label(), particleType, shiftType) 00177 setattr(process, moduleMETshiftDownName, moduleMETshiftDown) 00178 sequence += moduleMETshiftDown 00179 00180 metCollectionsUp_Down = [ 00181 moduleMETshiftUpName, 00182 moduleMETshiftDownName 00183 ] 00184 00185 return metCollectionsUp_Down
def metUncertaintyTools::RunMEtUncertainties::getDefaultParameters | ( | self | ) |
Definition at line 69 of file metUncertaintyTools.py.
def metUncertaintyTools::RunMEtUncertainties::toolCode | ( | self, | |
process | |||
) |
Definition at line 1415 of file metUncertaintyTools.py.
01415 : 01416 electronCollection = self._parameters['electronCollection'].value 01417 photonCollection = self._parameters['photonCollection'].value 01418 muonCollection = self._parameters['muonCollection'].value 01419 tauCollection = self._parameters['tauCollection'].value 01420 jetCollection = self._parameters['jetCollection'].value 01421 jetCorrLabel = self._parameters['jetCorrLabel'].value 01422 dRjetCleaning = self._parameters['dRjetCleaning'].value 01423 doSmearJets = self._parameters['doSmearJets'].value 01424 makeType1corrPFMEt = self._parameters['makeType1corrPFMEt'].value 01425 makeType1p2corrPFMEt = self._parameters['makeType1p2corrPFMEt'].value 01426 makePFMEtByMVA = self._parameters['makePFMEtByMVA'].value 01427 makeNoPileUpPFMEt = self._parameters['makeNoPileUpPFMEt'].value 01428 doApplyType0corr = self._parameters['doApplyType0corr'].value 01429 sysShiftCorrParameter = self._parameters['sysShiftCorrParameter'].value 01430 doApplySysShiftCorr = self._parameters['doApplySysShiftCorr'].value 01431 jetSmearFileName = self._parameters['jetSmearFileName'].value 01432 jetSmearHistogram = self._parameters['jetSmearHistogram'].value 01433 pfCandCollection = self._parameters['pfCandCollection'].value 01434 jetCorrPayloadName = self._parameters['jetCorrPayloadName'].value 01435 varyByNsigmas = self._parameters['varyByNsigmas'].value 01436 addToPatDefaultSequence = self._parameters['addToPatDefaultSequence'].value 01437 outputModule = self._parameters['outputModule'].value 01438 01439 process.metUncertaintySequence = cms.Sequence() 01440 01441 collectionsToKeep = [] 01442 01443 # produce collection of jets not overlapping with reconstructed 01444 # electrons/photons, muons and tau-jet candidates 01445 jetsNotOverlappingWithLeptonsForMEtUncertainty = cms.EDProducer("PATJetCleaner", 01446 src = jetCollection, 01447 preselection = cms.string(''), 01448 checkOverlaps = cms.PSet(), 01449 finalCut = cms.string('') 01450 ) 01451 numOverlapCollections = 0 01452 for collection in [ 01453 [ 'electrons', electronCollection ], 01454 [ 'photons', photonCollection ], 01455 [ 'muons', muonCollection ], 01456 [ 'taus', tauCollection ] ]: 01457 if self._isValidInputTag(collection[1]): 01458 setattr(jetsNotOverlappingWithLeptonsForMEtUncertainty.checkOverlaps, collection[0], cms.PSet( 01459 src = collection[1], 01460 algorithm = cms.string("byDeltaR"), 01461 preselection = cms.string(""), 01462 deltaR = cms.double(0.5), 01463 checkRecoComponents = cms.bool(False), 01464 pairCut = cms.string(""), 01465 requireNoOverlaps = cms.bool(True), 01466 )) 01467 numOverlapCollections = numOverlapCollections + 1 01468 lastJetCollection = jetCollection.value() 01469 if numOverlapCollections >= 1: 01470 lastJetCollection = \ 01471 self._addModuleToSequence(process, jetsNotOverlappingWithLeptonsForMEtUncertainty, 01472 [ jetCollection.value(), "NotOverlappingWithLeptonsForMEtUncertainty" ], 01473 process.metUncertaintySequence) 01474 cleanedJetCollection = lastJetCollection 01475 01476 # smear jet energies to account for difference in jet resolutions between MC and Data 01477 # (cf. JME-10-014 PAS) 01478 jetCollectionResUp = None 01479 jetCollectionResDown = None 01480 if doSmearJets: 01481 lastJetCollection = \ 01482 self._addSmearedJets(process, cleanedJetCollection, [ "smeared", jetCollection.value() ], 01483 jetSmearFileName, jetSmearHistogram, varyByNsigmas) 01484 01485 jetCollectionResUp = \ 01486 self._addSmearedJets(process, cleanedJetCollection, [ "smeared", jetCollection.value(), "ResUp" ], 01487 jetSmearFileName, jetSmearHistogram, varyByNsigmas, 01488 -1.) 01489 collectionsToKeep.append(jetCollectionResUp) 01490 jetCollectionResDown = \ 01491 self._addSmearedJets(process, cleanedJetCollection, [ "smeared", jetCollection.value(), "ResDown" ], 01492 jetSmearFileName, jetSmearHistogram, varyByNsigmas, 01493 +1.) 01494 collectionsToKeep.append(jetCollectionResDown) 01495 01496 collectionsToKeep.append(lastJetCollection) 01497 01498 #-------------------------------------------------------------------------------------------- 01499 # produce collection of electrons/photons, muons, tau-jet candidates and jets 01500 # shifted up/down in energy by their respective energy uncertainties 01501 #-------------------------------------------------------------------------------------------- 01502 01503 shiftedParticleCollections, addCollectionsToKeep = \ 01504 self._addShiftedParticleCollections(process, 01505 electronCollection, 01506 photonCollection, 01507 muonCollection, 01508 tauCollection, 01509 jetCollection, cleanedJetCollection, lastJetCollection, 01510 jetCollectionResUp, jetCollectionResDown, 01511 varyByNsigmas) 01512 process.metUncertaintySequence += process.shiftedParticlesForMEtUncertainties 01513 collectionsToKeep.extend(addCollectionsToKeep) 01514 01515 #-------------------------------------------------------------------------------------------- 01516 # propagate shifted particle energies to Type 1 and Type 1 + 2 corrected PFMET 01517 #-------------------------------------------------------------------------------------------- 01518 01519 self._addCorrPFMEt(process, process.metUncertaintySequence, 01520 shiftedParticleCollections, pfCandCollection, 01521 collectionsToKeep, 01522 doSmearJets, 01523 makeType1corrPFMEt, 01524 makeType1p2corrPFMEt, 01525 doApplyType0corr, 01526 sysShiftCorrParameter, 01527 doApplySysShiftCorr, 01528 jetCorrLabel, 01529 varyByNsigmas) 01530 01531 #-------------------------------------------------------------------------------------------- 01532 # propagate shifted particle energies to MVA-based PFMET 01533 #-------------------------------------------------------------------------------------------- 01534 01535 self._addPFMEtByMVA(process, process.metUncertaintySequence, 01536 shiftedParticleCollections, pfCandCollection, 01537 collectionsToKeep, 01538 doSmearJets, 01539 makePFMEtByMVA, 01540 varyByNsigmas) 01541 01542 #-------------------------------------------------------------------------------------------- 01543 # propagate shifted particle energies to no-PU PFMET 01544 #-------------------------------------------------------------------------------------------- 01545 01546 self._addNoPileUpPFMEt(process, process.metUncertaintySequence, 01547 shiftedParticleCollections, pfCandCollection, 01548 collectionsToKeep, 01549 doSmearJets, 01550 makeNoPileUpPFMEt, 01551 varyByNsigmas) 01552 01553 # insert metUncertaintySequence into patDefaultSequence 01554 if addToPatDefaultSequence: 01555 if not hasattr(process, "patDefaultSequence"): 01556 raise ValueError("PAT default sequence is not defined !!") 01557 process.patDefaultSequence += process.metUncertaintySequence 01558 01559 # add shifted + unshifted collections pf pat::Electrons/Photons, 01560 # Muons, Taus, Jets and MET to PAT-tuple event content 01561 if outputModule is not None and hasattr(process, outputModule): 01562 getattr(process, outputModule).outputCommands = _addEventContent( 01563 getattr(process, outputModule).outputCommands, 01564 [ 'keep *_%s_*_%s' % (collectionToKeep, process.name_()) for collectionToKeep in collectionsToKeep ]) 01565 01566 runMEtUncertainties=RunMEtUncertainties() 01567
Definition at line 20 of file metUncertaintyTools.py.
tuple metUncertaintyTools::RunMEtUncertainties::_defaultParameters = dicttypes.SortedKeysDict() [static, private] |
Definition at line 19 of file metUncertaintyTools.py.
string metUncertaintyTools::RunMEtUncertainties::_label = 'runMEtUncertainties' [static, private] |
Definition at line 18 of file metUncertaintyTools.py.
Definition at line 20 of file metUncertaintyTools.py.