test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
cutBasedPhotonID_tools.py
Go to the documentation of this file.
1 
2 import FWCore.ParameterSet.Config as cms
3 
4 # Barrel/endcap division in eta
5 ebCutOff = 1.479
6 
7 # ===============================================
8 # Define containers used by cut definitions
9 # ===============================================
10 
12  """
13  This is a container class to hold numerical cut values for either
14  the barrel or endcap set of cuts
15  """
16  def __init__(self,
17  idName,
18  hOverECut,
19  full5x5_sigmaIEtaIEtaCut,
20  # Isolation cuts are generally pt-dependent: cut = C1 + pt * C2
21  absPFChaHadIsoWithEACut_C1,
22  absPFChaHadIsoWithEACut_C2,
23  absPFNeuHadIsoWithEACut_C1,
24  absPFNeuHadIsoWithEACut_C2,
25  absPFPhoIsoWithEACut_C1,
26  absPFPhoIsoWithEACut_C2
27  ):
28  self.idName = idName
29  self.hOverECut = hOverECut
30  self.full5x5_sigmaIEtaIEtaCut = full5x5_sigmaIEtaIEtaCut
31  self.absPFChaHadIsoWithEACut_C1 = absPFChaHadIsoWithEACut_C1 # charged hadron isolation C1
32  self.absPFChaHadIsoWithEACut_C2 = absPFChaHadIsoWithEACut_C2 # ........ C2
33  self.absPFNeuHadIsoWithEACut_C1 = absPFNeuHadIsoWithEACut_C1 # neutral hadron isolation C1
34  self.absPFNeuHadIsoWithEACut_C2 = absPFNeuHadIsoWithEACut_C2 # ........ C2
35  self.absPFPhoIsoWithEACut_C1 = absPFPhoIsoWithEACut_C1 # photon isolation C1
36  self.absPFPhoIsoWithEACut_C2 = absPFPhoIsoWithEACut_C2 # ........ C2
37 
39  """
40  This is a container class to hold numerical cut values for either
41  the barrel or endcap set of cuts
42  This version of the container is different from the previous one
43  by the fact that it contains three constants instead of two for
44  the neutral hadron isolation cut, for exponantial parameterization
45  """
46  def __init__(self,
47  idName,
48  hOverECut,
49  full5x5_sigmaIEtaIEtaCut,
50  # Isolation cuts are generally pt-dependent: cut = C1 + pt * C2
51  # except for the neutral hadron isolation where it is cut = C1+exp(pt*C2+C3)
52  absPFChaHadIsoWithEACut_C1,
53  absPFChaHadIsoWithEACut_C2,
54  absPFNeuHadIsoWithEACut_C1,
55  absPFNeuHadIsoWithEACut_C2,
56  absPFNeuHadIsoWithEACut_C3,
57  absPFPhoIsoWithEACut_C1,
58  absPFPhoIsoWithEACut_C2
59  ):
60  self.idName = idName
61  self.hOverECut = hOverECut
62  self.full5x5_sigmaIEtaIEtaCut = full5x5_sigmaIEtaIEtaCut
63  self.absPFChaHadIsoWithEACut_C1 = absPFChaHadIsoWithEACut_C1 # charged hadron isolation C1
64  self.absPFChaHadIsoWithEACut_C2 = absPFChaHadIsoWithEACut_C2 # ........ C2
65  self.absPFNeuHadIsoWithEACut_C1 = absPFNeuHadIsoWithEACut_C1 # neutral hadron isolation C1
66  self.absPFNeuHadIsoWithEACut_C2 = absPFNeuHadIsoWithEACut_C2 # ........ C2
67  self.absPFNeuHadIsoWithEACut_C3 = absPFNeuHadIsoWithEACut_C3 # ........ C3
68  self.absPFPhoIsoWithEACut_C1 = absPFPhoIsoWithEACut_C1 # photon isolation C1
69  self.absPFPhoIsoWithEACut_C2 = absPFPhoIsoWithEACut_C2 # ........ C2
70 
72  """
73  A container class that holds the names of the isolation maps in the event record
74  and the names of the files with the effective area constants for pile-up corrections
75  """
76  def __init__(self,
77  chHadIsolationMapName,
78  chHadIsolationEffAreas,
79  neuHadIsolationMapName,
80  neuHadIsolationEffAreas,
81  phoIsolationMapName,
82  phoIsolationEffAreas
83  ):
84  self.chHadIsolationMapName = chHadIsolationMapName
85  self.chHadIsolationEffAreas = chHadIsolationEffAreas
86  self.neuHadIsolationMapName = neuHadIsolationMapName
87  self.neuHadIsolationEffAreas = neuHadIsolationEffAreas
88  self.phoIsolationMapName = phoIsolationMapName
89  self.phoIsolationEffAreas = phoIsolationEffAreas
90 
91 # ==============================================================
92 # Define individual cut configurations used by complete cut sets
93 # ==============================================================
94 
95 # The mininum pt cut is set to 5 GeV
97  return cms.PSet(
98  cutName = cms.string("MinPtCut"),
99  minPt = cms.double(5.0),
100  needsAdditionalProducts = cms.bool(False),
101  isIgnored = cms.bool(False)
102  )
103 
104 # Take all particles in the eta ranges 0-ebCutOff and ebCutOff-2.5
106  return cms.PSet(
107  cutName = cms.string("PhoSCEtaMultiRangeCut"),
108  useAbsEta = cms.bool(True),
109  allowedEtaRanges = cms.VPSet(
110  cms.PSet( minEta = cms.double(0.0),
111  maxEta = cms.double(ebCutOff) ),
112  cms.PSet( minEta = cms.double(ebCutOff),
113  maxEta = cms.double(2.5) )
114  ),
115  needsAdditionalProducts = cms.bool(False),
116  isIgnored = cms.bool(False)
117  )
118 
119 # Configure the cut on the single tower H/E
121  """
122  Arguments: two containers of working point cut values of the type WorkingPoint_*
123  """
124  return cms.PSet(
125  cutName = cms.string('PhoSingleTowerHadOverEmCut'),
126  hadronicOverEMCutValueEB = cms.double( wpEB.hOverECut ),
127  hadronicOverEMCutValueEE = cms.double( wpEE.hOverECut ),
128  barrelCutOff = cms.double(ebCutOff),
129  needsAdditionalProducts = cms.bool(False),
130  isIgnored = cms.bool(False)
131  )
132 
133 # Configure the cut on full5x5 sigmaIEtaIEta that uses a ValueMap,
134 # relying on an upstream producer that creates it. This was necessary
135 # for photons up to 7.2.0.
137  """
138  Arguments: two containers of working point cut values of the type WorkingPoint_*
139  """
140  return cms.PSet(
141  cutName = cms.string('PhoFull5x5SigmaIEtaIEtaValueMapCut'),
142  cutValueEB = cms.double( wpEB.full5x5_sigmaIEtaIEtaCut ),
143  cutValueEE = cms.double( wpEE.full5x5_sigmaIEtaIEtaCut ),
144  full5x5SigmaIEtaIEtaMap = cms.InputTag('photonIDValueMapProducer:phoFull5x5SigmaIEtaIEta'),
145  barrelCutOff = cms.double(ebCutOff),
146  needsAdditionalProducts = cms.bool(True),
147  isIgnored = cms.bool(False)
148  )
149 
150 # Configure the cut on full5x5 sigmaIEtaIEta that uses the native Photon field
151 # with this variable (works for releases past 7.2.0).
153  """
154  Arguments: two containers of working point cut values of the type WorkingPoint_*
155  """
156  return cms.PSet(
157  cutName = cms.string('PhoFull5x5SigmaIEtaIEtaCut'),
158  cutValueEB = cms.double( wpEB.full5x5_sigmaIEtaIEtaCut ),
159  cutValueEE = cms.double( wpEE.full5x5_sigmaIEtaIEtaCut ),
160  full5x5SigmaIEtaIEtaMap = cms.InputTag('photonIDValueMapProducer:phoFull5x5SigmaIEtaIEta'),
161  barrelCutOff = cms.double(ebCutOff),
162  needsAdditionalProducts = cms.bool(False),
163  isIgnored = cms.bool(False)
164  )
165 
166 # Configure the cut on the charged hadron isolation that uses
167 # the linear pt scaling for barrel and endcap
168 def psetChHadIsoWithEALinScalingCut(wpEB, wpEE, isoInputs):
169  """
170  Arguments: two containers of working point cut values of the type WorkingPoint_*
171  The third argument contains data for isolation calculation.
172  """
173  return cms.PSet(
174  cutName = cms.string('PhoAnyPFIsoWithEACut'),
175  # Both barrel and endcap: cut = c1 + pt*c2
176  C1_EB = cms.double( wpEB.absPFChaHadIsoWithEACut_C1 ),
177  C2_EB = cms.double( wpEB.absPFChaHadIsoWithEACut_C2 ),
178  C1_EE = cms.double( wpEE.absPFChaHadIsoWithEACut_C1 ),
179  C2_EE = cms.double( wpEE.absPFChaHadIsoWithEACut_C2 ),
180  anyPFIsoMap = cms.InputTag( isoInputs.chHadIsolationMapName ),
181  barrelCutOff = cms.double(ebCutOff),
182  useRelativeIso = cms.bool(False),
183  needsAdditionalProducts = cms.bool(True),
184  isIgnored = cms.bool(False),
185  rho = cms.InputTag("fixedGridRhoFastjetAll"),
186  effAreasConfigFile = cms.FileInPath( isoInputs.chHadIsolationEffAreas )
187  )
188 
189 # Configure the cut on the neutral hadron isolation that uses
190 # the linear pt scaling for barrel and endcap
191 def psetNeuHadIsoWithEALinScalingCut( wpEB, wpEE, isoInputs):
192  """
193  Arguments: two containers of working point cut values of the type WorkingPoint_*
194  The third argument contains data for isolation calculation.
195  """
196  return cms.PSet(
197  cutName = cms.string('PhoAnyPFIsoWithEACut'), # Neutral hadrons isolation block
198  # Both barrel and endcap: cut = c1 + pt*c2
199  C1_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C1 ),
200  C2_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C2 ),
201  C1_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C1 ),
202  C2_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C2 ),
203  anyPFIsoMap = cms.InputTag( isoInputs.neuHadIsolationMapName ),
204  barrelCutOff = cms.double(ebCutOff),
205  useRelativeIso = cms.bool(False),
206  needsAdditionalProducts = cms.bool(True),
207  isIgnored = cms.bool(False),
208  rho = cms.InputTag("fixedGridRhoFastjetAll"),
209  effAreasConfigFile = cms.FileInPath( isoInputs.neuHadIsolationEffAreas )
210  )
211 
212 # Configure the cut on the neutral hadron isolation that uses
213 # the exponential pt scaling for barrel and the linear pt scaling for endcap
214 def psetNeuHadIsoWithEAExpoScalingEBCut(wpEB, wpEE, isoInputs):
215  """
216  Arguments: two containers of working point cut values of the type WorkingPoint_*
217  The third argument contains data for isolation calculation.
218  """
219  return cms.PSet(
220  cutName = cms.string('PhoAnyPFIsoWithEAAndExpoScalingEBCut'), # Neutral hadrons isolation block
221  # Barrel: cut = c1 + expo(pt*c2+c3)
222  C1_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C1 ),
223  C2_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C2 ),
224  C3_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C3 ),
225  # Endcap: cut = c1 + pt*c2
226  C1_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C1 ),
227  C2_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C2 ),
228  anyPFIsoMap = cms.InputTag( isoInputs.neuHadIsolationMapName ),
229  barrelCutOff = cms.double(ebCutOff),
230  useRelativeIso = cms.bool(False),
231  needsAdditionalProducts = cms.bool(True),
232  isIgnored = cms.bool(False),
233  rho = cms.InputTag("fixedGridRhoFastjetAll"),
234  effAreasConfigFile = cms.FileInPath( isoInputs.neuHadIsolationEffAreas )
235  )
236 
237 # Configure the cut on the neutral hadron isolation that uses
238 # the exponential pt scaling for both barrel and endcap
239 def psetNeuHadIsoWithEAExpoScalingCut(wpEB, wpEE, isoInputs):
240  """
241  Arguments: two containers of working point cut values of the type WorkingPoint_*
242  The third argument contains data for isolation calculation.
243  """
244  return cms.PSet(
245  cutName = cms.string('PhoAnyPFIsoWithEAAndExpoScalingCut'), # Neutral hadrons isolation block
246  # Barrel: cut = c1 + expo(pt*c2+c3)
247  C1_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C1 ),
248  C2_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C2 ),
249  C3_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C3 ),
250  # Endcap: cut = cut = c1 + expo(pt*c2+c3)
251  C1_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C1 ),
252  C2_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C2 ),
253  C3_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C3 ),
254  anyPFIsoMap = cms.InputTag( isoInputs.neuHadIsolationMapName ),
255  barrelCutOff = cms.double(ebCutOff),
256  useRelativeIso = cms.bool(False),
257  needsAdditionalProducts = cms.bool(True),
258  isIgnored = cms.bool(False),
259  rho = cms.InputTag("fixedGridRhoFastjetAll"),
260  effAreasConfigFile = cms.FileInPath( isoInputs.neuHadIsolationEffAreas )
261  )
262 
263 # Configure the cut on the neutral hadron isolation that uses
264 # the quadratic polynomial pt scaling for both barrel and endcap
265 def psetNeuHadIsoWithEAQuadScalingCut(wpEB, wpEE, isoInputs):
266  """
267  Arguments: two containers of working point cut values of the type WorkingPoint_*
268  The third argument contains data for isolation calculation.
269  """
270  return cms.PSet(
271  cutName = cms.string('PhoAnyPFIsoWithEAAndQuadScalingCut'), # Neutral hadrons isolation block
272  # Barrel: cut = c1 + pt*c2 + pt*pt*c3
273  C1_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C1 ),
274  C2_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C2 ),
275  C3_EB = cms.double( wpEB.absPFNeuHadIsoWithEACut_C3 ),
276  # Endcap: cut = cut = c1 + pt*c2 + pt*pt*c3
277  C1_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C1 ),
278  C2_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C2 ),
279  C3_EE = cms.double( wpEE.absPFNeuHadIsoWithEACut_C3 ),
280  anyPFIsoMap = cms.InputTag( isoInputs.neuHadIsolationMapName ),
281  barrelCutOff = cms.double(ebCutOff),
282  useRelativeIso = cms.bool(False),
283  needsAdditionalProducts = cms.bool(True),
284  isIgnored = cms.bool(False),
285  rho = cms.InputTag("fixedGridRhoFastjetAll"),
286  effAreasConfigFile = cms.FileInPath( isoInputs.neuHadIsolationEffAreas )
287  )
288 
289 # Configure the cut on the photon isolation that uses
290 # the linear pt scaling for barrel and endcap
291 def psetPhoIsoWithEALinScalingCut(wpEB, wpEE, isoInputs):
292  """
293  Arguments: two containers of working point cut values of the type WorkingPoint_*
294  The third argument contains data for isolation calculation.
295  """
296  return cms.PSet(
297  cutName = cms.string('PhoAnyPFIsoWithEACut'), # Photons isolation block
298  # Both barrel and endcap: cut = c1 + pt*c2
299  C1_EB = cms.double( wpEB.absPFPhoIsoWithEACut_C1 ),
300  C2_EB = cms.double( wpEB.absPFPhoIsoWithEACut_C2 ),
301  C1_EE = cms.double( wpEE.absPFPhoIsoWithEACut_C1 ),
302  C2_EE = cms.double( wpEE.absPFPhoIsoWithEACut_C2 ),
303  anyPFIsoMap = cms.InputTag( isoInputs.phoIsolationMapName ),
304  barrelCutOff = cms.double(ebCutOff),
305  useRelativeIso = cms.bool(False),
306  needsAdditionalProducts = cms.bool(True),
307  isIgnored = cms.bool(False),
308  rho = cms.InputTag("fixedGridRhoFastjetAll"),
309  effAreasConfigFile = cms.FileInPath( isoInputs.phoIsolationEffAreas )
310  )
311 
312 # ==============================================================
313 # Define the complete cut sets
314 # ==============================================================
315 
316 
317 def configureVIDCutBasedPhoID_V1( wpEB, wpEE, isoInputs ):
318  """
319  This function configures the full cms.PSet for a VID ID and returns it.
320  The inputs: two objects of the type WorkingPoint_V1, one
321  containing the cuts for the Barrel (EB) and the other one for the Endcap (EE).
322  The third argument contains data for isolation calculation.
323  """
324  # print "VID: Configuring cut set %s" % wpEB.idName
325  parameterSet = cms.PSet(
326  #
327  idName = cms.string( wpEB.idName ), # same name stored in the _EB and _EE objects
328  cutFlow = cms.VPSet(
329  psetMinPtCut(), # pt cut
330  psetPhoSCEtaMultiRangeCut(), # eta cut
331  psetPhoSingleTowerHadOverEmCut(wpEB,wpEE), # H/E cut
332  psetPhoFull5x5SigmaIEtaIEtaValueMapCut(wpEB,wpEE), # full 5x5 sigmaIEtaIEta cut
333  psetChHadIsoWithEALinScalingCut(wpEB,wpEE,isoInputs), # charged hadron isolation cut
334  psetNeuHadIsoWithEALinScalingCut(wpEB,wpEE,isoInputs), # neutral hadron isolation cut
335  psetPhoIsoWithEALinScalingCut(wpEB,wpEE,isoInputs) # photon isolation cut
336  )
337  )
338  #
339  return parameterSet
340 
341 def configureVIDCutBasedPhoID_V2( wpEB, wpEE, isoInputs ):
342  """
343  This function configures the full cms.PSet for a VID ID and returns it.
344  The inputs: first object is of the type WorkingPoint_V2, second object
345  is of the type WorkingPoint_V1, containing the cuts for the Barrel (EB)
346  and the other one for the Endcap (EE).
347  The third argument contains data for isolation calculation.
348 
349  The V2 with respect to V1 has one change: the neutral hadron isolation
350  cut has an exponential pt scaling for the barrel.
351  """
352  # print "VID: Configuring cut set %s" % wpEB.idName
353  parameterSet = cms.PSet(
354  #
355  idName = cms.string( wpEB.idName ), # same name stored in the _EB and _EE objects
356  cutFlow = cms.VPSet(
357  psetMinPtCut(), # pt cut
358  psetPhoSCEtaMultiRangeCut(), # eta cut
359  psetPhoSingleTowerHadOverEmCut(wpEB,wpEE), # H/E cut
360  psetPhoFull5x5SigmaIEtaIEtaValueMapCut(wpEB,wpEE), # full 5x5 sigmaIEtaIEta cut
361  psetChHadIsoWithEALinScalingCut(wpEB,wpEE,isoInputs), # charged hadron isolation cut
362  psetNeuHadIsoWithEAExpoScalingEBCut(wpEB,wpEE,isoInputs), # neutral hadron isolation cut
363  psetPhoIsoWithEALinScalingCut(wpEB,wpEE,isoInputs) # photon isolation cut
364  )
365  )
366  #
367  return parameterSet
368 
369 def configureVIDCutBasedPhoID_V3( wpEB, wpEE, isoInputs ):
370  """
371  This function configures the full cms.PSet for a VID ID and returns it.
372  The inputs: first object is of the type WorkingPoint_V2, second object
373  is of the type WorkingPoint_V1, containing the cuts for the Barrel (EB)
374  and the other one for the Endcap (EE).
375  The third argument contains data for isolation calculation.
376 
377  The V3 with respect to V2 has one change: the full5x5 sigmaIEtaIEta
378  is taken from the native reco::Photon method and not from a ValueMap
379  produced upstream by some producer module.
380  """
381  # print "VID: Configuring cut set %s" % wpEB.idName
382  parameterSet = cms.PSet(
383  #
384  idName = cms.string( wpEB.idName ), # same name stored in the _EB and _EE objects
385  cutFlow = cms.VPSet(
386  psetMinPtCut(), # pt cut
387  psetPhoSCEtaMultiRangeCut(), # eta cut
388  psetPhoSingleTowerHadOverEmCut(wpEB,wpEE), # H/E cut
389  psetPhoFull5x5SigmaIEtaIEtaCut(wpEB,wpEE), # full 5x5 sigmaIEtaIEta cut
390  psetChHadIsoWithEALinScalingCut(wpEB,wpEE,isoInputs), # charged hadron isolation cut
391  psetNeuHadIsoWithEAExpoScalingEBCut(wpEB,wpEE,isoInputs), # neutral hadron isolation cut
392  psetPhoIsoWithEALinScalingCut(wpEB,wpEE,isoInputs) # photon isolation cut
393  )
394  )
395  #
396  return parameterSet
397 
398 def configureVIDCutBasedPhoID_V4( wpEB, wpEE, isoInputs ):
399  """
400  This function configures the full cms.PSet for a VID ID and returns it.
401  The inputs: first object is of the type WorkingPoint_V2, second object
402  is of the type WorkingPoint_V2 as well, first containing the cuts for the
403  Barrel (EB) and the other one for the Endcap (EE).
404  The third argument contains data for isolation calculation.
405 
406  The V4 with respect to V3 has one change: both barrel and endcap
407  use the exponential scaling for the neutral hadron isolation cut
408  (in V3 it was only done for the barrel)
409  """
410  # print "VID: Configuring cut set %s" % wpEB.idName
411  parameterSet = cms.PSet(
412  #
413  idName = cms.string( wpEB.idName ), # same name stored in the _EB and _EE objects
414  cutFlow = cms.VPSet(
415  psetMinPtCut(), # pt cut
416  psetPhoSCEtaMultiRangeCut(), # eta cut
417  psetPhoSingleTowerHadOverEmCut(wpEB,wpEE), # H/E cut
418  psetPhoFull5x5SigmaIEtaIEtaCut(wpEB,wpEE), # full 5x5 sigmaIEtaIEta cut
419  psetChHadIsoWithEALinScalingCut(wpEB,wpEE,isoInputs), # charged hadron isolation cut
420  psetNeuHadIsoWithEAExpoScalingCut(wpEB,wpEE,isoInputs), # neutral hadron isolation cut
421  psetPhoIsoWithEALinScalingCut(wpEB,wpEE,isoInputs) # photon isolation cut
422  )
423  )
424  #
425  return parameterSet
426 
427 def configureVIDCutBasedPhoID_V5( wpEB, wpEE, isoInputs ):
428  """
429  This function configures the full cms.PSet for a VID ID and returns it.
430  The inputs: first object is of the type WorkingPoint_V2, second object
431  is of the type WorkingPoint_V2 as well, first containing the cuts for the
432  Barrel (EB) and the other one for the Endcap (EE).
433  The third argument contains data for isolation calculation.
434 
435  The V5 with respect to V4 has one change: the neutral hadron isolation
436  for both barrel and endcap now uses quadratic polynomial scaling.
437  """
438  # print "VID: Configuring cut set %s" % wpEB.idName
439  parameterSet = cms.PSet(
440  #
441  idName = cms.string( wpEB.idName ), # same name stored in the _EB and _EE objects
442  cutFlow = cms.VPSet(
443  psetMinPtCut(), # pt cut
444  psetPhoSCEtaMultiRangeCut(), # eta cut
445  psetPhoSingleTowerHadOverEmCut(wpEB,wpEE), # H/E cut
446  psetPhoFull5x5SigmaIEtaIEtaCut(wpEB,wpEE), # full 5x5 sigmaIEtaIEta cut
447  psetChHadIsoWithEALinScalingCut(wpEB,wpEE,isoInputs), # charged hadron isolation cut
448  psetNeuHadIsoWithEAQuadScalingCut(wpEB,wpEE,isoInputs), # neutral hadron isolation cut
449  psetPhoIsoWithEALinScalingCut(wpEB,wpEE,isoInputs) # photon isolation cut
450  )
451  )
452  #
453  return parameterSet
454