Exemple #1
0
    def applyElectronSmearing(self, tag):
        """
        Apply electron smearing from
            https://twiki.cern.ch/twiki/bin/view/CMS/EGMSmearer

        Parameters:
            tag: correction file to use (from EgammaAnalysis.ElectronTools.calibrationTablesRun2.files)
        """

        if self.verbose:
            print("")
            print("Applying electron smearing...")

        from EgammaAnalysis.ElectronTools.calibratedPatElectronsRun2_cfi import calibratedPatElectrons
        from EgammaAnalysis.ElectronTools.calibrationTablesRun2 import files

        # FIXME: Add a preselection on electron to prevent a crash in the producer
        # Remove when it's no longer needed (see twiki)
        self.process.selectedElectrons = cms.EDFilter(
            "PATElectronSelector",
            src=cms.InputTag(self.__miniaod_electron_collection),
            cut=cms.string("pt > 5 && abs(superCluster.eta) < 2.5"))

        self.process.slimmedElectronsSmeared = calibratedPatElectrons.clone(
            electrons="selectedElectrons",
            isMC=not self.isData,
            correctionFile=files[tag])

        self.process.load('Configuration.StandardSequences.Services_cff')
        self.process.RandomNumberGeneratorService = cms.Service(
            "RandomNumberGeneratorService",
            slimmedElectronsSmeared=cms.PSet(
                initialSeed=cms.untracked.uint32(42),
                engineName=cms.untracked.string('TRandom3')))

        self.path.associate(
            cms.Task(self.process.selectedElectrons,
                     self.process.slimmedElectronsSmeared,
                     self.process.RandomNumberGeneratorService))

        # Look for producers using the default electron input
        for producer in self.producers:
            p = getattr(self.process.framework.producers, producer)
            change_input_tags_and_strings(p,
                                          self.__miniaod_electron_collection,
                                          'slimmedElectronsSmeared',
                                          'producers.' + producer, '    ')

        self.__miniaod_electron_collection = 'slimmedElectronsSmeared'

        if self.verbose:
            print("New electrons collection: %r" %
                  (self.__miniaod_electron_collection))
Exemple #2
0
### EGAMMA CORRECTIONS
# https://twiki.cern.ch/twiki/bin/view/CMS/EGMSmearer

process.selectedElectrons = cms.EDFilter(
    'PATElectronSelector',
    src=cms.InputTag('slimmedElectrons'),
    cut=cms.string('pt > 5 && abs(eta) < 2.5'))

from EgammaAnalysis.ElectronTools.calibratedPatElectronsRun2_cfi import calibratedPatElectrons
from EgammaAnalysis.ElectronTools.calibratedPatPhotonsRun2_cfi import calibratedPatPhotons
import EgammaAnalysis.ElectronTools.calibrationTablesRun2
egmSmearingSource = EgammaAnalysis.ElectronTools.calibrationTablesRun2.files
egmSmearingType = 'Run2017_17Nov2017_v1'

process.smearedElectrons = calibratedPatElectrons.clone(
    electrons='selectedElectrons',
    isMC=(not options.isData),
    correctionFile=egmSmearingSource[egmSmearingType])
process.smearedPhotons = calibratedPatPhotons.clone(
    photons='slimmedPhotons',
    isMC=(not options.isData),
    correctionFile=egmSmearingSource[egmSmearingType])

egmCorrectionSequence = cms.Sequence(process.selectedElectrons +
                                     process.smearedElectrons +
                                     process.smearedPhotons)

### Vanilla MET
# this is the most basic MET one can find
# even if we override with various types of MET later on, create this so we have a consistent calo MET
# https://twiki.cern.ch/twiki/bin/view/CMS/MissingETUncertaintyPrescription