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  ("byVVLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVVLooseIsolationMVArun2v1DBnewDMwLT"),
131  ("byVLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBnewDMwLT"),
132  ("byLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBnewDMwLT"),
133  ("byMediumIsolationMVArun2v1DBnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBnewDMwLT"),
134  ("byTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByTightIsolationMVArun2v1DBnewDMwLT"),
135  ("byVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBnewDMwLT"),
136  ("byVVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBnewDMwLT"),
137  ("byIsolationMVArun2v1PWoldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWoldDMwLTraw"),
138  ("byVLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWoldDMwLT"),
139  ("byLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWoldDMwLT"),
140  ("byMediumIsolationMVArun2v1PWoldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWoldDMwLT"),
141  ("byTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWoldDMwLT"),
142  ("byVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWoldDMwLT"),
143  ("byVVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWoldDMwLT"),
144  ("byIsolationMVArun2v1PWnewDMwLTraw", "DiscriminationByIsolationMVArun2v1PWnewDMwLTraw"),
145  ("byVLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWnewDMwLT"),
146  ("byLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWnewDMwLT"),
147  ("byMediumIsolationMVArun2v1PWnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWnewDMwLT"),
148  ("byTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByTightIsolationMVArun2v1PWnewDMwLT"),
149  ("byVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWnewDMwLT"),
150  ("byVVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWnewDMwLT"),
151  ("chargedIsoPtSumdR03", "ChargedIsoPtSumdR03"),
152  ("neutralIsoPtSumdR03", "NeutralIsoPtSumdR03"),
153  ("neutralIsoPtSumWeightdR03", "NeutralIsoPtSumWeightdR03"),
154  ("footprintCorrectiondR03", "FootprintCorrectiondR03"),
155  ("photonPtSumOutsideSignalConedR03", "PhotonPtSumOutsideSignalConedR03"),
156  ("byIsolationMVArun2v1DBdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1DBdR03oldDMwLTraw"),
157  ("byVVLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVVLooseIsolationMVArun2v1DBdR03oldDMwLT"),
158  ("byVLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBdR03oldDMwLT"),
159  ("byLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBdR03oldDMwLT"),
160  ("byMediumIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBdR03oldDMwLT"),
161  ("byTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1DBdR03oldDMwLT"),
162  ("byVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBdR03oldDMwLT"),
163  ("byVVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBdR03oldDMwLT"),
164  ("byIsolationMVArun2v1PWdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWdR03oldDMwLTraw"),
165  ("byVLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWdR03oldDMwLT"),
166  ("byLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWdR03oldDMwLT"),
167  ("byMediumIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWdR03oldDMwLT"),
168  ("byTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWdR03oldDMwLT"),
169  ("byVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWdR03oldDMwLT"),
170  ("byVVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWdR03oldDMwLT"),
171  ("againstElectronMVA6Raw", "DiscriminationByMVA6rawElectronRejection"),
172  ("againstElectronMVA6category", "DiscriminationByMVA6rawElectronRejection:category"),
173  ("againstElectronVLooseMVA6", "DiscriminationByMVA6VLooseElectronRejection"),
174  ("againstElectronLooseMVA6", "DiscriminationByMVA6LooseElectronRejection"),
175  ("againstElectronMediumMVA6", "DiscriminationByMVA6MediumElectronRejection"),
176  ("againstElectronTightMVA6", "DiscriminationByMVA6TightElectronRejection"),
177  ("againstElectronVTightMVA6", "DiscriminationByMVA6VTightElectronRejection"),
178 ]
179 
180 # switch to PFTau collection produced for fixed dR = 0.07 signal cone size
181 def switchToPFTauFixedCone(process,
182  tauSource = cms.InputTag('fixedConePFTauProducer'),
183  patTauLabel = "",
184  postfix = ""):
185  fixedConeIDSources = copy.copy(classicTauIDSources)
186  fixedConeIDSources.extend(classicPFTauIDSources)
187 
188  _switchToPFTau(process, tauSource, 'fixedConePFTau', fixedConeIDSources,
189  patTauLabel = patTauLabel, postfix = postfix)
190 
191 # switch to PFTau collection produced for shrinking signal cone of size dR = 5.0/Et(PFTau)
192 def switchToPFTauShrinkingCone(process,
193  tauSource = cms.InputTag('shrinkingConePFTauProducer'),
194  patTauLabel = "",
195  postfix = ""):
196  shrinkingIDSources = copy.copy(classicTauIDSources)
197  shrinkingIDSources.extend(classicPFTauIDSources)
198 
199  _switchToPFTau(process, tauSource, 'shrinkingConePFTau', shrinkingIDSources,
200  patTauLabel = patTauLabel, postfix = postfix)
201 
202 # switch to hadron-plus-strip(s) (HPS) PFTau collection
203 def switchToPFTauHPS(process,
204  tauSource = cms.InputTag('hpsPFTauProducer'),
205  patTauLabel = "",
206  jecLevels = [],
207  postfix = ""):
208 
209  _switchToPFTau(process, tauSource, 'hpsPFTau', hpsTauIDSources,
210  patTauLabel = patTauLabel, postfix = postfix)
211 
212  # CV: enable tau lifetime information for HPS PFTaus
213  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = tauSource.value().replace("Producer", "TransverseImpactParameters")
214 
215  ## adapt cleanPatTaus
216  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
217  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = preselection
218 
219 # Select switcher by string
220 def switchToPFTauByType(process,
221  pfTauType = None,
222  tauSource = cms.InputTag('hpsPFTauProducer'),
223  patTauLabel = "",
224  postfix = "" ):
225  mapping = {
226  'shrinkingConePFTau' : switchToPFTauShrinkingCone,
227  'fixedConePFTau' : switchToPFTauFixedCone,
228  'hpsPFTau' : switchToPFTauHPS,
229  'caloRecoTau' : switchToCaloTau
230  }
231  if not pfTauType in mapping.keys():
232  raise ValueError("Error in <switchToPFTauByType>: Undefined pfTauType = %s !!" % pfTauType)
233 
234  mapping[pfTauType](process, tauSource = tauSource,
235  patTauLabel = patTauLabel, postfix = postfix)
236 
238 
239  """ Add a new collection of taus. Takes the configuration from the
240  already configured standard tau collection as starting point;
241  replaces before calling addTauCollection will also affect the
242  new tau collections
243  """
244  _label='addTauCollection'
245  _defaultParameters=dicttypes.SortedKeysDict()
246  def __init__(self):
247  ConfigToolBase.__init__(self)
248  self.addParameter(self._defaultParameters, 'tauCollection',
249  self._defaultValue, 'Input tau collection', cms.InputTag)
250  self.addParameter(self._defaultParameters, 'algoLabel',
251  self._defaultValue, "label to indicate the tau algorithm (e.g.'hps')", str)
252  self.addParameter(self._defaultParameters, 'typeLabel',
253  self._defaultValue, "label to indicate the type of constituents (either 'PFTau' or 'Tau')", str)
254  self.addParameter(self._defaultParameters, 'doPFIsoDeposits',
255  True, "run sequence for computing particle-flow based IsoDeposits")
256  self.addParameter(self._defaultParameters, 'standardAlgo',
257  "hps", "standard algorithm label of the collection from which the clones " \
258  + "for the new tau collection will be taken from " \
259  + "(note that this tau collection has to be available in the event before hand)")
260  self.addParameter(self._defaultParameters, 'standardType',
261  "PFTau", "standard constituent type label of the collection from which the clones " \
262  + " for the new tau collection will be taken from "\
263  + "(note that this tau collection has to be available in the event before hand)")
264 
265  self._parameters=copy.deepcopy(self._defaultParameters)
266  self._comment = ""
267 
269  return self._defaultParameters
270 
271  def __call__(self,process,
272  tauCollection = None,
273  algoLabel = None,
274  typeLabel = None,
275  doPFIsoDeposits = None,
276  jetCorrLabel = None,
277  standardAlgo = None,
278  standardType = None):
279 
280  if tauCollection is None:
281  tauCollection = self._defaultParameters['tauCollection'].value
282  if algoLabel is None:
283  algoLabel = self._defaultParameters['algoLabel'].value
284  if typeLabel is None:
285  typeLabel = self._defaultParameters['typeLabel'].value
286  if doPFIsoDeposits is None:
287  doPFIsoDeposits = self._defaultParameters['doPFIsoDeposits'].value
288  if standardAlgo is None:
289  standardAlgo = self._defaultParameters['standardAlgo'].value
290  if standardType is None:
291  standardType = self._defaultParameters['standardType'].value
292 
293  self.setParameter('tauCollection', tauCollection)
294  self.setParameter('algoLabel', algoLabel)
295  self.setParameter('typeLabel', typeLabel)
296  self.setParameter('doPFIsoDeposits', doPFIsoDeposits)
297  self.setParameter('standardAlgo', standardAlgo)
298  self.setParameter('standardType', standardType)
299 
300  self.apply(process)
301 
302  def toolCode(self, process):
303  tauCollection = self._parameters['tauCollection'].value
304  algoLabel = self._parameters['algoLabel'].value
305  typeLabel = self._parameters['typeLabel'].value
306  doPFIsoDeposits = self._parameters['doPFIsoDeposits'].value
307  standardAlgo = self._parameters['standardAlgo'].value
308  standardType = self._parameters['standardType'].value
309 
310  ## disable computation of particle-flow based IsoDeposits
311  ## in case tau is of CaloTau type
312  if typeLabel == 'Tau':
313  print("NO PF Isolation will be computed for CaloTau (this could be improved later)")
314  doPFIsoDeposits = False
315 
316  ## create old module label from standardAlgo
317  ## and standardType and return
318  def oldLabel(prefix = ''):
319  if prefix == '':
320  return "patTaus"
321  else:
322  return prefix + "PatTaus"
323 
324  ## capitalize first character of appended part
325  ## when creating new module label
326  ## (giving e.g. "patTausCaloRecoTau")
327  def capitalize(label):
328  return label[0].capitalize() + label[1:]
329 
330  ## create new module label from old module
331  ## label and return
332  def newLabel(oldLabel):
333  newLabel = oldLabel
334  if ( oldLabel.find(standardAlgo) >= 0 and oldLabel.find(standardType) >= 0 ):
335  oldLabel = oldLabel.replace(standardAlgo, algoLabel).replace(standardType, typeLabel)
336  else:
337  oldLabel = oldLabel + capitalize(algoLabel + typeLabel)
338  return oldLabel
339 
340  ## clone module and add it to the patDefaultSequence
341  def addClone(hook, **replaceStatements):
342  ## create a clone of the hook with corresponding
343  ## parameter replacements
344  newModule = getattr(process, hook).clone(**replaceStatements)
345 
346  ## clone module for computing particle-flow IsoDeposits
347  def addPFIsoDepositClone(hook, **replaceStatements):
348  newModule = getattr(process, hook).clone(**replaceStatements)
349  newModuleIsoDepositExtractor = getattr(newModule, "ExtractorPSet")
350  setattr(newModuleIsoDepositExtractor, "tauSource", getattr(newModule, "src"))
351 
352  ## add a clone of patTaus
353  addClone(oldLabel(), tauSource = tauCollection)
354 
355  ## add a clone of selectedPatTaus
356  addClone(oldLabel('selected'), src = cms.InputTag(newLabel(oldLabel())))
357 
358  ## add a clone of cleanPatTaus
359  addClone(oldLabel('clean'), src=cms.InputTag(newLabel(oldLabel('selected'))))
360 
361  ## get attributes of new module
362  newTaus = getattr(process, newLabel(oldLabel()))
363 
364  ## add a clone of gen tau matching
365  addClone('tauMatch', src = tauCollection)
366  addClone('tauGenJetMatch', src = tauCollection)
367 
368  ## add a clone of IsoDeposits computed based on particle-flow
369  if doPFIsoDeposits:
370  addPFIsoDepositClone('tauIsoDepositPFCandidates', src = tauCollection)
371  addPFIsoDepositClone('tauIsoDepositPFChargedHadrons', src = tauCollection)
372  addPFIsoDepositClone('tauIsoDepositPFNeutralHadrons', src = tauCollection)
373  addPFIsoDepositClone('tauIsoDepositPFGammas', src = tauCollection)
374 
375  ## fix label for input tag
376  def fixInputTag(x):
377  x.setModuleLabel(newLabel(x.moduleLabel))
378 
379  ## provide patTau inputs with individual labels
380  fixInputTag(newTaus.genParticleMatch)
381  fixInputTag(newTaus.genJetMatch)
382  fixInputTag(newTaus.isoDeposits.pfAllParticles)
383  fixInputTag(newTaus.isoDeposits.pfNeutralHadron)
384  fixInputTag(newTaus.isoDeposits.pfChargedHadron)
385  fixInputTag(newTaus.isoDeposits.pfGamma)
386  fixInputTag(newTaus.userIsolation.pfAllParticles.src)
387  fixInputTag(newTaus.userIsolation.pfNeutralHadron.src)
388  fixInputTag(newTaus.userIsolation.pfChargedHadron.src)
389  fixInputTag(newTaus.userIsolation.pfGamma.src)
390 
391  ## set discriminators
392  ## (using switchTauCollection functions)
393  oldTaus = getattr(process, oldLabel())
394  if typeLabel == 'Tau':
395  switchToCaloTau(process,
396  tauSource = getattr(newTaus, "tauSource"),
397  patTauLabel = capitalize(algoLabel + typeLabel))
398  else:
399  switchToPFTauByType(process, pfTauType = algoLabel + typeLabel,
400  tauSource = getattr(newTaus, "tauSource"),
401  patTauLabel = capitalize(algoLabel + typeLabel))
402 
403 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:195
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:278
def switchToPFTauByType(process, pfTauType=None, tauSource=cms.InputTag('hpsPFTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:224
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:207
def toolCode(self, process)
Definition: tauTools.py:302
def getDefaultParameters(self)
Definition: tauTools.py:268
def _switchToPFTau(process, tauSource, pfTauType, idSources, patTauLabel="", postfix="")
Definition: tauTools.py:59
def switchToPFTauFixedCone(process, tauSource=cms.InputTag('fixedConePFTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:184
def applyPostfix(process, label, postfix)
Definition: tauTools.py:10