CMS 3D CMS Logo

patPFMETCorrections_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
3 # load modules for producing Type 1 / Type 1 + 2 corrections for reco::PFMET objects
5 
6 #from PhysicsTools.PatAlgos.producerLayer1.jetProducer_cfi import patJets
7 
8 
9 #--------------------------------------------------------------------------------
10 # produce "raw" (uncorrected) pat::MET of PF-type
12 patPFMet = patMETs.clone(
13  metSource = cms.InputTag('pfMet'),
14  addMuonCorrections = cms.bool(False),
15  genMETSource = cms.InputTag('genMetTrue')
16 )
17 #--------------------------------------------------------------------------------
18 
19 #--------------------------------------------------------------------------------
20 # select collection of pat::Jets entering Type 1 + 2 MET corrections
21 #
22 
23 selectedPatJetsForMetT1T2Corr = cms.EDFilter("PATJetSelector",
24  src = cms.InputTag('patJets'),
25  cut = cms.string('abs(eta) < 9.9'),
26  filter = cms.bool(False)
27 )
28 
29 selectedPatJetsForMetT2Corr = cms.EDFilter("PATJetSelector",
30  src = cms.InputTag('patJets'),
31  cut = cms.string('abs(eta) > 9.9'),
32  filter = cms.bool(False)
33 )
34 #--------------------------------------------------------------------------------
35 
36 #--------------------------------------------------------------------------------
37 # produce Type 1 + 2 MET corrections for pat::Jets of PF-type
38 patPFMetT1T2Corr = cms.EDProducer("PATPFJetMETcorrInputProducer",
39  src = cms.InputTag('selectedPatJetsForMetT1T2Corr'),
40  offsetCorrLabel = cms.InputTag("L1FastJet"),
41  jetCorrLabel = cms.InputTag("L3Absolute"), # for MC
42  jetCorrLabelRes = cms.InputTag("L2L3Residual"), # for Data automatic switch
43  type1JetPtThreshold = cms.double(15.0),
44  skipEM = cms.bool(True),
45  skipEMfractionThreshold = cms.double(0.90),
46  skipMuons = cms.bool(True),
47  skipMuonSelection = cms.string("isGlobalMuon | isStandAloneMuon")
48 )
49 patPFMetT1T2CorrTask = cms.Task(selectedPatJetsForMetT1T2Corr,
50  patPFMetT1T2Corr)
51 patPFMetT1T2CorrSequence = cms.Sequence(patPFMetT1T2CorrTask)
52 
53 patPFMetT2Corr = patPFMetT1T2Corr.clone(
54  src = cms.InputTag('selectedPatJetsForMetT2Corr')
55 )
56 patPFMetT2CorrTask = cms.Task(patPFMetT2Corr)
57 patPFMetT2CorrSequence = cms.Sequence(patPFMetT2CorrTask)
58 
59 #--------------------------------------------------------------------------------
60 
61 #--------------------------------------------------------------------------------
62 # produce Type 0 MET corrections
64 patPFMetT0Corr = pfMETcorrType0.clone()
65 patPFMetT0CorrTask = cms.Task(type0PFMEtCorrectionPFCandToVertexAssociationTask, patPFMetT0Corr)
66 patPFMetT0CorrSequence = cms.Sequence(patPFMetT0CorrTask)
67 #--------------------------------------------------------------------------------
68 
69 #--------------------------------------------------------------------------------
70 # produce Type xy MET corrections
72 #dummy module
73 
74 patPFMetTxyCorr = _shiftMod.pfMEtMultShiftCorr.clone()
75 
76 patMultPhiCorrParams_Txy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_Txy_50ns])
77 patMultPhiCorrParams_T0pcTxy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcTxy_50ns])
78 patMultPhiCorrParams_T0pcT1Txy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1Txy_50ns])
79 patMultPhiCorrParams_T0pcT1T2Txy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1T2Txy_50ns])
80 patMultPhiCorrParams_T1Txy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1Txy_50ns])
81 patMultPhiCorrParams_T1T2Txy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1T2Txy_50ns])
82 patMultPhiCorrParams_T1SmearTxy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1Txy_50ns])
83 patMultPhiCorrParams_T1T2SmearTxy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1T2Txy_50ns])
84 patMultPhiCorrParams_T0pcT1SmearTxy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1Txy_50ns])
85 patMultPhiCorrParams_T0pcT1T2SmearTxy_50ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1T2Txy_50ns])
86 
87 patMultPhiCorrParams_Txy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_Txy_25ns])
88 patMultPhiCorrParams_T0pcTxy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcTxy_25ns])
89 patMultPhiCorrParams_T0pcT1Txy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1Txy_25ns])
90 patMultPhiCorrParams_T0pcT1T2Txy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1T2Txy_25ns])
91 patMultPhiCorrParams_T1Txy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1Txy_25ns])
92 patMultPhiCorrParams_T1T2Txy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1T2Txy_25ns])
93 patMultPhiCorrParams_T1SmearTxy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1Txy_25ns])
94 patMultPhiCorrParams_T1T2SmearTxy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T1T2Txy_25ns])
95 patMultPhiCorrParams_T0pcT1SmearTxy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1Txy_25ns])
96 patMultPhiCorrParams_T0pcT1T2SmearTxy_25ns = cms.VPSet( [pset for pset in _shiftMod.multPhiCorrParams_T0pcT1T2Txy_25ns])
97 
98 patPFMetTxyCorrTask = cms.Task(patPFMetTxyCorr)
99 patPFMetTxyCorrSequence = cms.Sequence(patPFMetTxyCorrTask)
100 
101 #--------------------------------------------------------------------------------
103 patSmearedJets = cms.EDProducer("SmearedPATJetProducer",
104  src = cms.InputTag("patJets"),
105 
106  enabled = cms.bool(True), # If False, no smearing is performed
107 
108  rho = cms.InputTag("fixedGridRhoFastjetAll"),
109 
110  skipGenMatching = cms.bool(False), # If True, always skip gen jet matching and smear jet with a random gaussian
111 
112  # Resolution and scale factors source.
113  # Can be either from GT or text files
114  # For GT: only 'algo' must be set
115  # For text files: both 'resolutionFile' and 'scaleFactorFile' must point to valid files
116 
117  # Read from GT
118  algopt = cms.string('AK4PFchs_pt'),
119  algo = cms.string('AK4PFchs'),
120 
121  # Or from text files
122  #resolutionFile = cms.FileInPath('path/to/resolution_file.txt'),
123  #scaleFactorFile = cms.FileInPath('path/to/scale_factor_file.txt'),
124 
125  # Gen jet matching
126  genJets = cms.InputTag("ak4GenJetsNoNu"),
127  dRMax = cms.double(0.2), # = cone size (0.4) / 2
128  dPtMaxFactor = cms.double(3), # dPt < 3 * resolution
129 
130  # Systematic variation
131  # 0: Nominal
132  # -1: -1 sigma (down variation)
133  # 1: +1 sigma (up variation)
134  variation = cms.int32(0), # If not specified, default to 0
135 
136  seed = cms.uint32(37428479), # If not specified, default to 37428479
137  useDeterministicSeed = cms.bool(True),
138 
139  debug = cms.untracked.bool(False)
140 )
141 
142 selectedPatJetsForMetT1T2SmearCorr = cms.EDFilter("PATJetSelector",
143  src = cms.InputTag('patSmearedJets'),
144  cut = cms.string('abs(eta) < 9.9'),
145  filter = cms.bool(False)
146 )
147 
148 selectedPatJetsForMetT2SmearCorr = cms.EDFilter("PATJetSelector",
149  src = cms.InputTag('patSmearedJets'),
150  cut = cms.string('abs(eta) > 9.9'),
151  filter = cms.bool(False)
152 )
153 
154 patPFMetT1T2SmearCorr = patPFMetT1T2Corr.clone(
155  src = cms.InputTag('selectedPatJetsForMetT1T2SmearCorr')
156 )
157 
158 patPFMetT2SmearCorr = patPFMetT2Corr.clone(
159  src = cms.InputTag('selectedPatJetsForMetT2SmearCorr')
160 )
161 
162 patPFMetSmearCorrTask = cms.Task(patSmearedJets,
163  selectedPatJetsForMetT1T2SmearCorr,
164  patPFMetT1T2SmearCorr)
165 patPFMetSmearCorrSequence = cms.Sequence(patPFMetSmearCorrTask)
166 
167 #specific sequence for handling type2 correction with smeared jets
168 patPFMetT2SmearCorrTask = cms.Task(patSmearedJets,
169  selectedPatJetsForMetT1T2SmearCorr,
170  selectedPatJetsForMetT2SmearCorr,
171  patPFMetT1T2SmearCorr,
172  patPFMetT2SmearCorr)
173 patPFMetT2SmearCorrSequence = cms.Sequence(patPFMetT2SmearCorrTask)
174 
175 #--------------------------------------------------------------------------------
176 # use MET corrections to produce Type 1 / Type 1 + 2 corrected PFMET objects
177 patPFMetT1 = cms.EDProducer("CorrectedPATMETProducer",
178  src = cms.InputTag('patPFMet'),
179  srcCorrections = cms.VInputTag(
180  cms.InputTag('patPFMetT1T2Corr', 'type1'),
181  ),
182 )
183 
184 patPFMetT1T2 = patPFMetT1.clone()
185 patPFMetT1T2.srcCorrections.append( cms.InputTag('patPFMetT2Corr', 'type2') )
186 #--------------------------------------------------------------------------------
187 #extra modules for naming scheme
188 patPFMetT1Txy = patPFMetT1.clone()
189 patPFMetT1Txy.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
190 
191 patPFMetT0pcT1 = patPFMetT1.clone()
192 patPFMetT0pcT1.srcCorrections.append( cms.InputTag('patPFMetT0Corr') )
193 
194 patPFMetT0pcT1Txy = patPFMetT0pcT1.clone()
195 patPFMetT0pcT1Txy.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
196 
197 patPFMetT1T2Txy = patPFMetT1T2.clone()
198 patPFMetT1T2Txy.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
199 
200 patPFMetT0pcT1T2 = patPFMetT1T2.clone()
201 patPFMetT0pcT1T2.srcCorrections.append( cms.InputTag('patPFMetT0Corr') )
202 
203 patPFMetT0pcT1T2Txy = patPFMetT0pcT1T2.clone()
204 patPFMetT0pcT1T2Txy.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
205 
206 
207 ## smeared METs
208 patPFMetT1Smear = patPFMetT1.clone( srcCorrections = cms.VInputTag(
209  cms.InputTag('patPFMetT1T2SmearCorr', 'type1') )
210 )
211 
212 patPFMetT1T2Smear = patPFMetT1Smear.clone()
213 patPFMetT1T2Smear.srcCorrections.append( cms.InputTag('patPFMetT2SmearCorr', 'type2') )
214 
215 patPFMetT1TxySmear = patPFMetT1Smear.clone()
216 patPFMetT1TxySmear.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
217 
218 patPFMetT0pcT1Smear = patPFMetT1Smear.clone()
219 patPFMetT0pcT1Smear.srcCorrections.append( cms.InputTag('patPFMetT0Corr') )
220 
221 patPFMetT0pcT1TxySmear = patPFMetT0pcT1Smear.clone()
222 patPFMetT0pcT1TxySmear.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
223 
224 patPFMetT1T2TxySmear = patPFMetT1T2Smear.clone()
225 patPFMetT1T2TxySmear.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
226 
227 patPFMetT0pcT1T2Smear = patPFMetT1T2Smear.clone()
228 patPFMetT0pcT1T2Smear.srcCorrections.append( cms.InputTag('patPFMetT0Corr') )
229 
230 patPFMetT0pcT1T2TxySmear = patPFMetT0pcT1T2Smear.clone()
231 patPFMetT0pcT1T2TxySmear.srcCorrections.append( cms.InputTag('patPFMetTxyCorr') )
232 
233 #--------------------------------------------------------------------------------
234 # define sequence to run all modules
235 producePatPFMETCorrectionsTask = cms.Task(
236  patPFMet,
237  pfCandsNotInJetsForMetCorr,
238  selectedPatJetsForMetT1T2Corr,
239  selectedPatJetsForMetT2Corr,
240  patPFMetT1T2Corr,
241  patPFMetT2Corr,
242  type0PFMEtCorrectionPFCandToVertexAssociationTask,
243  patPFMetT0Corr,
244  pfCandMETcorr,
245  patPFMetT1,
246  patPFMetT1T2,
247  patPFMetT0pcT1,
248  patPFMetT0pcT1T2
249 )
250 producePatPFMETCorrections = cms.Sequence(producePatPFMETCorrectionsTask)
251 #--------------------------------------------------------------------------------
252 
253 #
254 # define special sequence for PAT runType1uncertainty tool
255 # only preliminary modules processed
256 # pat met producer modules cloned accordingly to what is needed
257 producePatPFMETCorrectionsUncTask = cms.Task(
258  patPFMet,
259  pfCandsNotInJetsForMetCorr,
260  selectedPatJetsForMetT1T2Corr,
261  selectedPatJetsForMetT2Corr,
262  patPFMetT1T2Corr,
263  patPFMetT2Corr,
264  type0PFMEtCorrectionPFCandToVertexAssociationTask,
265  patPFMetT0Corr,
266  pfCandMETcorr
267 )
268 producePatPFMETCorrectionsUnc = cms.Sequence(producePatPFMETCorrectionsUncTask)
____________________________________________________________________________||