CMS 3D CMS Logo

tauTools.py
Go to the documentation of this file.
1 from __future__ import print_function
2 import FWCore.ParameterSet.Config as cms
3 
5 from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet
8 
9 # applyPostFix function adapted to unscheduled mode
10 def applyPostfix(process, label, postfix):
11  result = None
12  if hasattr(process, label+postfix):
13  result = getattr(process, label + postfix)
14  else:
15  raise ValueError("Error in <applyPostfix>: No module of name = %s attached to process !!" % (label + postfix))
16  return result
17 
18 # switch to CaloTau collection
19 def switchToCaloTau(process,
20  tauSource = cms.InputTag('caloRecoTauProducer'),
21  patTauLabel = "",
22  postfix = ""):
23  print(' switching PAT Tau input to: ', tauSource)
24 
25  applyPostfix(process, "tauMatch" + patTauLabel, postfix).src = tauSource
26  applyPostfix(process, "tauGenJetMatch"+ patTauLabel, postfix).src = tauSource
27 
28  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauSource = tauSource
29  # CV: reconstruction of tau lifetime information not implemented for CaloTaus yet
30  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = ""
31  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauIDSources = _buildIDSourcePSet('caloRecoTau', classicTauIDSources, postfix)
32 
33  ## Isolation is somewhat an issue, so we start just by turning it off
34  print("NO PF Isolation will be computed for CaloTau (this could be improved later)")
35  applyPostfix(process, "patTaus" + patTauLabel, postfix).isolation = cms.PSet()
36  applyPostfix(process, "patTaus" + patTauLabel, postfix).isoDeposits = cms.PSet()
37  applyPostfix(process, "patTaus" + patTauLabel, postfix).userIsolation = cms.PSet()
38 
39  ## adapt cleanPatTaus
40  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
41  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = preselection
42 
43 def _buildIDSourcePSet(tauType, idSources, postfix =""):
44  """ Build a PSet defining the tau ID sources to embed into the pat::Tau """
45  output = cms.PSet()
46  for label, discriminator in idSources:
47  if ":" in discriminator:
48  discr = discriminator.split(":")
49  setattr(output, label, cms.InputTag(tauType + discr[0] + postfix + ":" + discr[1]))
50  else:
51  setattr(output, label, cms.InputTag(tauType + discriminator + postfix))
52  return output
53 
54 def _switchToPFTau(process,
55  tauSource,
56  pfTauType,
57  idSources,
58  patTauLabel = "",
59  postfix = ""):
60  """internal auxiliary function to switch to **any** PFTau collection"""
61  print(' switching PAT Tau input to: ', tauSource)
62 
63  applyPostfix(process, "tauMatch" + patTauLabel, postfix).src = tauSource
64  applyPostfix(process, "tauGenJetMatch" + patTauLabel, postfix).src = tauSource
65 
66  applyPostfix(process, "tauIsoDepositPFCandidates" + patTauLabel, postfix).src = tauSource
67  applyPostfix(process, "tauIsoDepositPFCandidates" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
68  applyPostfix(process, "tauIsoDepositPFChargedHadrons" + patTauLabel, postfix).src = tauSource
69  applyPostfix(process, "tauIsoDepositPFChargedHadrons" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
70  applyPostfix(process, "tauIsoDepositPFNeutralHadrons" + patTauLabel, postfix).src = tauSource
71  applyPostfix(process, "tauIsoDepositPFNeutralHadrons" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
72  applyPostfix(process, "tauIsoDepositPFGammas" + patTauLabel, postfix).src = tauSource
73  applyPostfix(process, "tauIsoDepositPFGammas" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
74 
75  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauSource = tauSource
76  # CV: reconstruction of tau lifetime information not enabled for tau collections other than 'hpsPFTauProducer' yet
77  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = ""
78  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauIDSources = _buildIDSourcePSet(pfTauType, idSources, postfix)
79 
80  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
81  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = preselection
82 
83 # Name mapping for classic tau ID sources (present for fixed and shrinkingCones)
84 classicTauIDSources = [
85  ("leadingTrackFinding", "DiscriminationByLeadingTrackFinding"),
86  ("leadingTrackPtCut", "DiscriminationByLeadingTrackPtCut"),
87  ("trackIsolation", "DiscriminationByTrackIsolation"),
88  ("ecalIsolation", "DiscriminationByECALIsolation"),
89  ("byIsolation", "DiscriminationByIsolation"),
90  ("againstElectron", "DiscriminationAgainstElectron"),
91  ("againstMuon", "DiscriminationAgainstMuon")
92 ]
93 
94 classicPFTauIDSources = [
95  ("leadingPionPtCut", "DiscriminationByLeadingPionPtCut"),
96  ("trackIsolationUsingLeadingPion", "DiscriminationByTrackIsolationUsingLeadingPion"),
97  ("ecalIsolationUsingLeadingPion", "DiscriminationByECALIsolationUsingLeadingPion"),
98  ("byIsolationUsingLeadingPion", "DiscriminationByIsolationUsingLeadingPion")
99 ]
100 
101 # Hadron-plus-strip(s) (HPS) Tau Discriminators
102 hpsTauIDSources = [
103  ("decayModeFindingNewDMs", "DiscriminationByDecayModeFindingNewDMs"),
104  ("decayModeFinding", "DiscriminationByDecayModeFinding"), # CV: kept for backwards compatibility
105  ("byLooseCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits"),
106  ("byMediumCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByMediumCombinedIsolationDBSumPtCorr3Hits"),
107  ("byTightCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByTightCombinedIsolationDBSumPtCorr3Hits"),
108  ("byCombinedIsolationDeltaBetaCorrRaw3Hits", "DiscriminationByRawCombinedIsolationDBSumPtCorr3Hits"),
109  ("byLooseCombinedIsolationDeltaBetaCorr3HitsdR03", "DiscriminationByLooseCombinedIsolationDBSumPtCorr3HitsdR03"),
110  ("byMediumCombinedIsolationDeltaBetaCorr3HitsdR03", "DiscriminationByMediumCombinedIsolationDBSumPtCorr3HitsdR03"),
111  ("byTightCombinedIsolationDeltaBetaCorr3HitsdR03", "DiscriminationByTightCombinedIsolationDBSumPtCorr3HitsdR03"),
112  ("byPhotonPtSumOutsideSignalCone", "DiscriminationByPhotonPtSumOutsideSignalCone"),
113  ("chargedIsoPtSum", "ChargedIsoPtSum"),
114  ("neutralIsoPtSum", "NeutralIsoPtSum"),
115  ("puCorrPtSum", "PUcorrPtSum"),
116  ("neutralIsoPtSumWeight", "NeutralIsoPtSumWeight"),
117  ("footprintCorrection", "FootprintCorrection"),
118  ("photonPtSumOutsideSignalCone", "PhotonPtSumOutsideSignalCone"),
119  ("againstMuonLoose3", "DiscriminationByLooseMuonRejection3"),
120  ("againstMuonTight3", "DiscriminationByTightMuonRejection3"),
121  ("byIsolationMVArun2v1DBoldDMwLTraw", "DiscriminationByIsolationMVArun2v1DBoldDMwLTraw"),
122  ("byVVLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVVLooseIsolationMVArun2v1DBoldDMwLT"),
123  ("byVLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBoldDMwLT"),
124  ("byLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBoldDMwLT"),
125  ("byMediumIsolationMVArun2v1DBoldDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBoldDMwLT"),
126  ("byTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByTightIsolationMVArun2v1DBoldDMwLT"),
127  ("byVTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBoldDMwLT"),
128  ("byVVTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBoldDMwLT"),
129  ("byIsolationMVArun2v1DBnewDMwLTraw", "DiscriminationByIsolationMVArun2v1DBnewDMwLTraw"),
130  ("byVLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBnewDMwLT"),
131  ("byLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBnewDMwLT"),
132  ("byMediumIsolationMVArun2v1DBnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBnewDMwLT"),
133  ("byTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByTightIsolationMVArun2v1DBnewDMwLT"),
134  ("byVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBnewDMwLT"),
135  ("byVVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBnewDMwLT"),
136  ("byIsolationMVArun2v1PWoldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWoldDMwLTraw"),
137  ("byVLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWoldDMwLT"),
138  ("byLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWoldDMwLT"),
139  ("byMediumIsolationMVArun2v1PWoldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWoldDMwLT"),
140  ("byTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWoldDMwLT"),
141  ("byVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWoldDMwLT"),
142  ("byVVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWoldDMwLT"),
143  ("byIsolationMVArun2v1PWnewDMwLTraw", "DiscriminationByIsolationMVArun2v1PWnewDMwLTraw"),
144  ("byVLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWnewDMwLT"),
145  ("byLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWnewDMwLT"),
146  ("byMediumIsolationMVArun2v1PWnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWnewDMwLT"),
147  ("byTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByTightIsolationMVArun2v1PWnewDMwLT"),
148  ("byVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWnewDMwLT"),
149  ("byVVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWnewDMwLT"),
150  ("chargedIsoPtSumdR03", "ChargedIsoPtSumdR03"),
151  ("neutralIsoPtSumdR03", "NeutralIsoPtSumdR03"),
152  ("neutralIsoPtSumWeightdR03", "NeutralIsoPtSumWeightdR03"),
153  ("footprintCorrectiondR03", "FootprintCorrectiondR03"),
154  ("photonPtSumOutsideSignalConedR03", "PhotonPtSumOutsideSignalConedR03"),
155  ("byIsolationMVArun2v1DBdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1DBdR03oldDMwLTraw"),
156  ("byVLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBdR03oldDMwLT"),
157  ("byLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBdR03oldDMwLT"),
158  ("byMediumIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBdR03oldDMwLT"),
159  ("byTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1DBdR03oldDMwLT"),
160  ("byVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBdR03oldDMwLT"),
161  ("byVVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBdR03oldDMwLT"),
162  ("byIsolationMVArun2v1PWdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWdR03oldDMwLTraw"),
163  ("byVLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWdR03oldDMwLT"),
164  ("byLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWdR03oldDMwLT"),
165  ("byMediumIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWdR03oldDMwLT"),
166  ("byTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWdR03oldDMwLT"),
167  ("byVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWdR03oldDMwLT"),
168  ("byVVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWdR03oldDMwLT"),
169  ("againstElectronMVA6Raw", "DiscriminationByMVA6rawElectronRejection"),
170  ("againstElectronMVA6category", "DiscriminationByMVA6rawElectronRejection:category"),
171  ("againstElectronVLooseMVA6", "DiscriminationByMVA6VLooseElectronRejection"),
172  ("againstElectronLooseMVA6", "DiscriminationByMVA6LooseElectronRejection"),
173  ("againstElectronMediumMVA6", "DiscriminationByMVA6MediumElectronRejection"),
174  ("againstElectronTightMVA6", "DiscriminationByMVA6TightElectronRejection"),
175  ("againstElectronVTightMVA6", "DiscriminationByMVA6VTightElectronRejection"),
176 ]
177 
178 # switch to PFTau collection produced for fixed dR = 0.07 signal cone size
179 def switchToPFTauFixedCone(process,
180  tauSource = cms.InputTag('fixedConePFTauProducer'),
181  patTauLabel = "",
182  postfix = ""):
183  fixedConeIDSources = copy.copy(classicTauIDSources)
184  fixedConeIDSources.extend(classicPFTauIDSources)
185 
186  _switchToPFTau(process, tauSource, 'fixedConePFTau', fixedConeIDSources,
187  patTauLabel = patTauLabel, postfix = postfix)
188 
189 # switch to PFTau collection produced for shrinking signal cone of size dR = 5.0/Et(PFTau)
190 def switchToPFTauShrinkingCone(process,
191  tauSource = cms.InputTag('shrinkingConePFTauProducer'),
192  patTauLabel = "",
193  postfix = ""):
194  shrinkingIDSources = copy.copy(classicTauIDSources)
195  shrinkingIDSources.extend(classicPFTauIDSources)
196 
197  _switchToPFTau(process, tauSource, 'shrinkingConePFTau', shrinkingIDSources,
198  patTauLabel = patTauLabel, postfix = postfix)
199 
200 # switch to hadron-plus-strip(s) (HPS) PFTau collection
201 def switchToPFTauHPS(process,
202  tauSource = cms.InputTag('hpsPFTauProducer'),
203  patTauLabel = "",
204  jecLevels = [],
205  postfix = ""):
206 
207  _switchToPFTau(process, tauSource, 'hpsPFTau', hpsTauIDSources,
208  patTauLabel = patTauLabel, postfix = postfix)
209 
210  # CV: enable tau lifetime information for HPS PFTaus
211  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = tauSource.value().replace("Producer", "TransverseImpactParameters")
212 
213  ## adapt cleanPatTaus
214  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
215  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = preselection
216 
217 # Select switcher by string
218 def switchToPFTauByType(process,
219  pfTauType = None,
220  tauSource = cms.InputTag('hpsPFTauProducer'),
221  patTauLabel = "",
222  postfix = "" ):
223  mapping = {
224  'shrinkingConePFTau' : switchToPFTauShrinkingCone,
225  'fixedConePFTau' : switchToPFTauFixedCone,
226  'hpsPFTau' : switchToPFTauHPS,
227  'caloRecoTau' : switchToCaloTau
228  }
229  if not pfTauType in mapping.keys():
230  raise ValueError("Error in <switchToPFTauByType>: Undefined pfTauType = %s !!" % pfTauType)
231 
232  mapping[pfTauType](process, tauSource = tauSource,
233  patTauLabel = patTauLabel, postfix = postfix)
234 
236 
237  """ Add a new collection of taus. Takes the configuration from the
238  already configured standard tau collection as starting point;
239  replaces before calling addTauCollection will also affect the
240  new tau collections
241  """
242  _label='addTauCollection'
243  _defaultParameters=dicttypes.SortedKeysDict()
244  def __init__(self):
245  ConfigToolBase.__init__(self)
246  self.addParameter(self._defaultParameters, 'tauCollection',
247  self._defaultValue, 'Input tau collection', cms.InputTag)
248  self.addParameter(self._defaultParameters, 'algoLabel',
249  self._defaultValue, "label to indicate the tau algorithm (e.g.'hps')", str)
250  self.addParameter(self._defaultParameters, 'typeLabel',
251  self._defaultValue, "label to indicate the type of constituents (either 'PFTau' or 'Tau')", str)
252  self.addParameter(self._defaultParameters, 'doPFIsoDeposits',
253  True, "run sequence for computing particle-flow based IsoDeposits")
254  self.addParameter(self._defaultParameters, 'standardAlgo',
255  "hps", "standard algorithm label of the collection from which the clones " \
256  + "for the new tau collection will be taken from " \
257  + "(note that this tau collection has to be available in the event before hand)")
258  self.addParameter(self._defaultParameters, 'standardType',
259  "PFTau", "standard constituent type label of the collection from which the clones " \
260  + " for the new tau collection will be taken from "\
261  + "(note that this tau collection has to be available in the event before hand)")
262 
263  self._parameters=copy.deepcopy(self._defaultParameters)
264  self._comment = ""
265 
267  return self._defaultParameters
268 
269  def __call__(self,process,
270  tauCollection = None,
271  algoLabel = None,
272  typeLabel = None,
273  doPFIsoDeposits = None,
274  jetCorrLabel = None,
275  standardAlgo = None,
276  standardType = None):
277 
278  if tauCollection is None:
279  tauCollection = self._defaultParameters['tauCollection'].value
280  if algoLabel is None:
281  algoLabel = self._defaultParameters['algoLabel'].value
282  if typeLabel is None:
283  typeLabel = self._defaultParameters['typeLabel'].value
284  if doPFIsoDeposits is None:
285  doPFIsoDeposits = self._defaultParameters['doPFIsoDeposits'].value
286  if standardAlgo is None:
287  standardAlgo = self._defaultParameters['standardAlgo'].value
288  if standardType is None:
289  standardType = self._defaultParameters['standardType'].value
290 
291  self.setParameter('tauCollection', tauCollection)
292  self.setParameter('algoLabel', algoLabel)
293  self.setParameter('typeLabel', typeLabel)
294  self.setParameter('doPFIsoDeposits', doPFIsoDeposits)
295  self.setParameter('standardAlgo', standardAlgo)
296  self.setParameter('standardType', standardType)
297 
298  self.apply(process)
299 
300  def toolCode(self, process):
301  tauCollection = self._parameters['tauCollection'].value
302  algoLabel = self._parameters['algoLabel'].value
303  typeLabel = self._parameters['typeLabel'].value
304  doPFIsoDeposits = self._parameters['doPFIsoDeposits'].value
305  standardAlgo = self._parameters['standardAlgo'].value
306  standardType = self._parameters['standardType'].value
307 
308  ## disable computation of particle-flow based IsoDeposits
309  ## in case tau is of CaloTau type
310  if typeLabel == 'Tau':
311  print("NO PF Isolation will be computed for CaloTau (this could be improved later)")
312  doPFIsoDeposits = False
313 
314  ## create old module label from standardAlgo
315  ## and standardType and return
316  def oldLabel(prefix = ''):
317  if prefix == '':
318  return "patTaus"
319  else:
320  return prefix + "PatTaus"
321 
322  ## capitalize first character of appended part
323  ## when creating new module label
324  ## (giving e.g. "patTausCaloRecoTau")
325  def capitalize(label):
326  return label[0].capitalize() + label[1:]
327 
328  ## create new module label from old module
329  ## label and return
330  def newLabel(oldLabel):
331  newLabel = oldLabel
332  if ( oldLabel.find(standardAlgo) >= 0 and oldLabel.find(standardType) >= 0 ):
333  oldLabel = oldLabel.replace(standardAlgo, algoLabel).replace(standardType, typeLabel)
334  else:
335  oldLabel = oldLabel + capitalize(algoLabel + typeLabel)
336  return oldLabel
337 
338  ## clone module and add it to the patDefaultSequence
339  def addClone(hook, **replaceStatements):
340  ## create a clone of the hook with corresponding
341  ## parameter replacements
342  newModule = getattr(process, hook).clone(**replaceStatements)
343 
344  ## clone module for computing particle-flow IsoDeposits
345  def addPFIsoDepositClone(hook, **replaceStatements):
346  newModule = getattr(process, hook).clone(**replaceStatements)
347  newModuleIsoDepositExtractor = getattr(newModule, "ExtractorPSet")
348  setattr(newModuleIsoDepositExtractor, "tauSource", getattr(newModule, "src"))
349 
350  ## add a clone of patTaus
351  addClone(oldLabel(), tauSource = tauCollection)
352 
353  ## add a clone of selectedPatTaus
354  addClone(oldLabel('selected'), src = cms.InputTag(newLabel(oldLabel())))
355 
356  ## add a clone of cleanPatTaus
357  addClone(oldLabel('clean'), src=cms.InputTag(newLabel(oldLabel('selected'))))
358 
359  ## get attributes of new module
360  newTaus = getattr(process, newLabel(oldLabel()))
361 
362  ## add a clone of gen tau matching
363  addClone('tauMatch', src = tauCollection)
364  addClone('tauGenJetMatch', src = tauCollection)
365 
366  ## add a clone of IsoDeposits computed based on particle-flow
367  if doPFIsoDeposits:
368  addPFIsoDepositClone('tauIsoDepositPFCandidates', src = tauCollection)
369  addPFIsoDepositClone('tauIsoDepositPFChargedHadrons', src = tauCollection)
370  addPFIsoDepositClone('tauIsoDepositPFNeutralHadrons', src = tauCollection)
371  addPFIsoDepositClone('tauIsoDepositPFGammas', src = tauCollection)
372 
373  ## fix label for input tag
374  def fixInputTag(x):
375  x.setModuleLabel(newLabel(x.moduleLabel))
376 
377  ## provide patTau inputs with individual labels
378  fixInputTag(newTaus.genParticleMatch)
379  fixInputTag(newTaus.genJetMatch)
380  fixInputTag(newTaus.isoDeposits.pfAllParticles)
381  fixInputTag(newTaus.isoDeposits.pfNeutralHadron)
382  fixInputTag(newTaus.isoDeposits.pfChargedHadron)
383  fixInputTag(newTaus.isoDeposits.pfGamma)
384  fixInputTag(newTaus.userIsolation.pfAllParticles.src)
385  fixInputTag(newTaus.userIsolation.pfNeutralHadron.src)
386  fixInputTag(newTaus.userIsolation.pfChargedHadron.src)
387  fixInputTag(newTaus.userIsolation.pfGamma.src)
388 
389  ## set discriminators
390  ## (using switchTauCollection functions)
391  oldTaus = getattr(process, oldLabel())
392  if typeLabel == 'Tau':
393  switchToCaloTau(process,
394  tauSource = getattr(newTaus, "tauSource"),
395  patTauLabel = capitalize(algoLabel + typeLabel))
396  else:
397  switchToPFTauByType(process, pfTauType = algoLabel + typeLabel,
398  tauSource = getattr(newTaus, "tauSource"),
399  patTauLabel = capitalize(algoLabel + typeLabel))
400 
401 addTauCollection=AddTauCollection()
def _buildIDSourcePSet(tauType, idSources, postfix="")
Definition: tauTools.py:43
def replace(string, replacements)
def switchToPFTauShrinkingCone(process, tauSource=cms.InputTag('shrinkingConePFTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:193
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def switchToCaloTau(process, tauSource=cms.InputTag('caloRecoTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:22
def __call__(self, process, tauCollection=None, algoLabel=None, typeLabel=None, doPFIsoDeposits=None, jetCorrLabel=None, standardAlgo=None, standardType=None)
Definition: tauTools.py:276
def switchToPFTauByType(process, pfTauType=None, tauSource=cms.InputTag('hpsPFTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:222
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
def switchToPFTauHPS(process, tauSource=cms.InputTag('hpsPFTauProducer'), patTauLabel="", jecLevels=[], postfix="")
Definition: tauTools.py:205
def toolCode(self, process)
Definition: tauTools.py:300
def getDefaultParameters(self)
Definition: tauTools.py:266
def _switchToPFTau(process, tauSource, pfTauType, idSources, patTauLabel="", postfix="")
Definition: tauTools.py:59
def switchToPFTauFixedCone(process, tauSource=cms.InputTag('fixedConePFTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:182
def applyPostfix(process, label, postfix)
Definition: tauTools.py:10