Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable pt-dependent JER-SF and phi-dependent JEC application in PAT #28096

Merged
merged 2 commits into from Oct 9, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 5 additions & 3 deletions JetMETCorrections/Modules/plugins/JetResolutionDemo.cc
Expand Up @@ -186,11 +186,13 @@ void JetResolutionDemo::analyze(const edm::Event& iEvent, const edm::EventSetup&
m_res_vs_eta->Fill(jet.eta(), r);

// We do the same thing to access the scale factors
float sf = res_sf.getScaleFactor({{JME::Binning::JetEta, jet.eta()}});
float sf = res_sf.getScaleFactor({{JME::Binning::JetPt, jet.pt()}, {JME::Binning::JetEta, jet.eta()}});

// Access up and down variation of the scale factor
float sf_up = res_sf.getScaleFactor({{JME::Binning::JetEta, jet.eta()}}, Variation::UP);
float sf_down = res_sf.getScaleFactor({{JME::Binning::JetEta, jet.eta()}}, Variation::DOWN);
float sf_up =
res_sf.getScaleFactor({{JME::Binning::JetPt, jet.pt()}, {JME::Binning::JetEta, jet.eta()}}, Variation::UP);
float sf_down =
res_sf.getScaleFactor({{JME::Binning::JetPt, jet.pt()}, {JME::Binning::JetEta, jet.eta()}}, Variation::DOWN);

if (m_debug) {
std::cout << "Scale factors (Nominal / Up / Down) : " << sf << " / " << sf_up << " / " << sf_down << std::endl;
Expand Down
2 changes: 2 additions & 0 deletions PhysicsTools/PatAlgos/plugins/JetCorrFactorsProducer.cc
Expand Up @@ -163,10 +163,12 @@ float JetCorrFactorsProducer::evaluate(edm::View<reco::Jet>::const_iterator& jet
if (patjet) {
corrector->setJetEta(patjet->correctedP4(0).eta());
corrector->setJetPt(patjet->correctedP4(0).pt());
corrector->setJetPhi(patjet->correctedP4(0).phi());
corrector->setJetE(patjet->correctedP4(0).energy());
} else {
corrector->setJetEta(jet->eta());
corrector->setJetPt(jet->pt());
corrector->setJetPhi(jet->phi());
corrector->setJetE(jet->energy());
}
if (emf_ && dynamic_cast<const reco::CaloJet*>(&*jet)) {
Expand Down
3 changes: 2 additions & 1 deletion PhysicsTools/PatUtils/interface/SmearedJetProducerT.h
Expand Up @@ -225,7 +225,8 @@ class SmearedJetProducerT : public edm::stream::EDProducer<> {

double jet_resolution = resolution.getResolution(
{{JME::Binning::JetPt, jet.pt()}, {JME::Binning::JetEta, jet.eta()}, {JME::Binning::Rho, *rho}});
double jer_sf = resolution_sf.getScaleFactor({{JME::Binning::JetEta, jet.eta()}}, m_systematic_variation);
double jer_sf = resolution_sf.getScaleFactor({{JME::Binning::JetPt, jet.pt()}, {JME::Binning::JetEta, jet.eta()}},
m_systematic_variation);

if (m_debug) {
std::cout << "jet: pt: " << jet.pt() << " eta: " << jet.eta() << " phi: " << jet.phi()
Expand Down
132 changes: 132 additions & 0 deletions PhysicsTools/PatUtils/test/runJERsmearingOnMiniAOD.py
@@ -0,0 +1,132 @@
# Auto generated configuration file
# using:
# Revision: 1.19
# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v
# with command line options: miniAOD-prod -s PAT --eventcontent MINIAODSIM --runUnscheduled --mc --conditions 80X_mcRun2_asymptotic_2016_TrancheIV_v4_Tr4GT_v4 --era Run2_2016 --no_exec --filein /store/relval/CMSSW_8_0_20/RelValTTbar_13/MINIAODSIM/PU25ns_80X_mcRun2_asymptotic_2016_TrancheIV_v4_Tr4GT_v4-v1/00000/A8C282AE-D37A-E611-8603-0CC47A4C8ECE.root
import FWCore.ParameterSet.Config as cms

from Configuration.StandardSequences.Eras import eras

process = cms.Process('PAT2',eras.Run2_2016)

### Example how to check timing
#process.Timing = cms.Service("Timing",
# summaryOnly = cms.untracked.bool(False),
# useJobReport = cms.untracked.bool(True)
#)

### Example how to check memory
#process.SimpleMemoryCheck = cms.Service("SimpleMemoryCheck",ignoreTotal = cms.untracked.int32(1) )

# import of standard configurations
process.load('Configuration.StandardSequences.Services_cff')
process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
process.load('FWCore.MessageService.MessageLogger_cfi')
process.load('Configuration.EventContent.EventContent_cff')
process.load('SimGeneral.MixingModule.mixNoPU_cfi')
process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
process.load('Configuration.StandardSequences.MagneticField_cff')
#process.load('PhysicsTools.PatAlgos.slimming.metFilterPaths_cff')
process.load('Configuration.StandardSequences.EndOfProcess_cff')
process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')

process.maxEvents = cms.untracked.PSet(
input = cms.untracked.int32(1000)
)

# Input source
process.source = cms.Source("PoolSource",
fileNames = cms.untracked.vstring(
'/store/relval/CMSSW_11_0_0_pre6/RelValTTbar_13/MINIAODSIM/PU25ns_110X_upgrade2018_realistic_v3-v1/20000/F38B9A9F-4B4B-3D4B-8C9D-9A9B945194EF.root',
),
secondaryFileNames = cms.untracked.vstring(),
skipEvents = cms.untracked.uint32(145)
)

process.options = cms.untracked.PSet(
allowUnscheduled = cms.untracked.bool(True)
)

# Production Info
process.configurationMetadata = cms.untracked.PSet(
annotation = cms.untracked.string('miniAOD-prod nevts:1'),
name = cms.untracked.string('Applications'),
version = cms.untracked.string('$Revision: 1.19 $')
)

# Output definition

process.MINIAODSIMoutput = cms.OutputModule("PoolOutputModule",
compressionAlgorithm = cms.untracked.string('LZMA'),
compressionLevel = cms.untracked.int32(4),
dataset = cms.untracked.PSet(
dataTier = cms.untracked.string(''),
filterName = cms.untracked.string('')
),
dropMetaData = cms.untracked.string('ALL'),
eventAutoFlushCompressedSize = cms.untracked.int32(15728640),
fastCloning = cms.untracked.bool(False),
fileName = cms.untracked.string('NewMiniAOD.root'),
outputCommands = cms.untracked.vstring('keep *'),
overrideInputFileSplitLevels = cms.untracked.bool(True)
)

# Additional output definition

# Other statements
from Configuration.AlCa.GlobalTag import GlobalTag
### Pick a global tag that includes the desired JER-SFs
process.GlobalTag = GlobalTag(process.GlobalTag, '102X_mcRun2_asymptotic_v7', '')

# Path and EndPath definitions
process.MINIAODSIMoutput_step = cms.EndPath(process.MINIAODSIMoutput)

process.load('Configuration.StandardSequences.Services_cff')
process.load("JetMETCorrections.Modules.JetResolutionESProducer_cfi")

### Example how to read the JER-SF from a db file
#from CondCore.DBCommon.CondDBSetup_cfi import *
#process.jer = cms.ESSource("PoolDBESSource",
# CondDBSetup,
# toGet = cms.VPSet(
# # Resolution
# cms.PSet(
# record = cms.string('JetResolutionRcd'),
# tag = cms.string('JR_Autumn18_V7_MC_PtResolution_AK4PFchs'),
# label = cms.untracked.string('AK4PFchs_pt')
# ),
#
# # Scale factors
# cms.PSet(
# record = cms.string('JetResolutionScaleFactorRcd'),
# tag = cms.string('JR_Autumn18_V7_MC_SF_AK4PFchs'),
# label = cms.untracked.string('AK4PFchs')
# ),
# ),
# connect = cms.string('sqlite:Autumn18_V7_MC.db')
# )
#
#process.es_prefer_jer = cms.ESPrefer('PoolDBESSource', 'jer')

process.slimmedJetsSmeared = cms.EDProducer('SmearedPATJetProducer',
src = cms.InputTag('slimmedJets'),
enabled = cms.bool(True),
rho = cms.InputTag("fixedGridRhoFastjetAll"),
algo = cms.string('AK4PFchs'),
algopt = cms.string('AK4PFchs_pt'),

genJets = cms.InputTag('slimmedGenJets'),
dRMax = cms.double(0.2),
dPtMaxFactor = cms.double(3),

debug = cms.untracked.bool(False),
# Systematic variation
# 0: Nominal
# -1: -1 sigma (down variation)
# 1: +1 sigma (up variation)
variation = cms.int32(0), # If not specified, default to 0
)

process.p=cms.Path(process.slimmedJetsSmeared)

process.schedule=cms.Schedule(process.p,process.MINIAODSIMoutput_step)