CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes

metUncertaintyTools::RunMEtUncertainties Class Reference

Inherits FWCore::GuiBrowsers::ConfigToolBase::ConfigToolBase.

List of all members.

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'

Detailed Description

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.


Constructor & Destructor Documentation

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

Member Function Documentation

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.

00187                                                  :
00188         retVal = None
00189         if input is None:
00190             retVal = self._defaultParameters[default].value
00191         elif type(input) == str:
00192             retVal = cms.InputTag(input)
00193         else:
00194             retVal = input
00195         return retVal

def metUncertaintyTools::RunMEtUncertainties::_isValidInputTag (   input) [private]

Definition at line 197 of file metUncertaintyTools.py.

00198                                :
00199         input_str = input
00200         if isinstance(input, cms.InputTag):
00201             input_str = input.value()
00202         if input is None or input_str == '""':
00203             return False
00204         else:
00205             return True

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.

00070                                   :
00071         return self._defaultParameters

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 

Member Data Documentation

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.