CMS 3D CMS Logo

tauTools.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
4 from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet
7 
8 # applyPostFix function adapted to unscheduled mode
9 def applyPostfix(process, label, postfix):
10  result = None
11  if hasattr(process, label+postfix):
12  result = getattr(process, label + postfix)
13  else:
14  raise ValueError("Error in <applyPostfix>: No module of name = %s attached to process !!" % (label + postfix))
15  return result
16 
17 # switch to CaloTau collection
18 def switchToCaloTau(process,
19  tauSource = cms.InputTag('caloRecoTauProducer'),
20  patTauLabel = "",
21  postfix = ""):
22  print ' switching PAT Tau input to: ', tauSource
23 
24  applyPostfix(process, "tauMatch" + patTauLabel, postfix).src = tauSource
25  applyPostfix(process, "tauGenJetMatch"+ patTauLabel, postfix).src = tauSource
26 
27  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauSource = tauSource
28  # CV: reconstruction of tau lifetime information not implemented for CaloTaus yet
29  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = ""
30  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauIDSources = _buildIDSourcePSet('caloRecoTau', classicTauIDSources, postfix)
31 
32  ## Isolation is somewhat an issue, so we start just by turning it off
33  print "NO PF Isolation will be computed for CaloTau (this could be improved later)"
34  applyPostfix(process, "patTaus" + patTauLabel, postfix).isolation = cms.PSet()
35  applyPostfix(process, "patTaus" + patTauLabel, postfix).isoDeposits = cms.PSet()
36  applyPostfix(process, "patTaus" + patTauLabel, postfix).userIsolation = cms.PSet()
37 
38  ## adapt cleanPatTaus
39  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
40  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = preselection
41 
42 def _buildIDSourcePSet(tauType, idSources, postfix =""):
43  """ Build a PSet defining the tau ID sources to embed into the pat::Tau """
44  output = cms.PSet()
45  for label, discriminator in idSources:
46  if ":" in discriminator:
47  discr = discriminator.split(":")
48  setattr(output, label, cms.InputTag(tauType + discr[0] + postfix + ":" + discr[1]))
49  else:
50  setattr(output, label, cms.InputTag(tauType + discriminator + postfix))
51  return output
52 
53 def _switchToPFTau(process,
54  tauSource,
55  pfTauType,
56  idSources,
57  patTauLabel = "",
58  postfix = ""):
59  """internal auxiliary function to switch to **any** PFTau collection"""
60  print ' switching PAT Tau input to: ', tauSource
61 
62  applyPostfix(process, "tauMatch" + patTauLabel, postfix).src = tauSource
63  applyPostfix(process, "tauGenJetMatch" + patTauLabel, postfix).src = tauSource
64 
65  applyPostfix(process, "tauIsoDepositPFCandidates" + patTauLabel, postfix).src = tauSource
66  applyPostfix(process, "tauIsoDepositPFCandidates" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
67  applyPostfix(process, "tauIsoDepositPFChargedHadrons" + patTauLabel, postfix).src = tauSource
68  applyPostfix(process, "tauIsoDepositPFChargedHadrons" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
69  applyPostfix(process, "tauIsoDepositPFNeutralHadrons" + patTauLabel, postfix).src = tauSource
70  applyPostfix(process, "tauIsoDepositPFNeutralHadrons" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
71  applyPostfix(process, "tauIsoDepositPFGammas" + patTauLabel, postfix).src = tauSource
72  applyPostfix(process, "tauIsoDepositPFGammas" + patTauLabel, postfix).ExtractorPSet.tauSource = tauSource
73 
74  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauSource = tauSource
75  # CV: reconstruction of tau lifetime information not enabled for tau collections other than 'hpsPFTauProducer' yet
76  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = ""
77  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauIDSources = _buildIDSourcePSet(pfTauType, idSources, postfix)
78 
79  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
80  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = preselection
81 
82 # Name mapping for classic tau ID sources (present for fixed and shrinkingCones)
83 classicTauIDSources = [
84  ("leadingTrackFinding", "DiscriminationByLeadingTrackFinding"),
85  ("leadingTrackPtCut", "DiscriminationByLeadingTrackPtCut"),
86  ("trackIsolation", "DiscriminationByTrackIsolation"),
87  ("ecalIsolation", "DiscriminationByECALIsolation"),
88  ("byIsolation", "DiscriminationByIsolation"),
89  ("againstElectron", "DiscriminationAgainstElectron"),
90  ("againstMuon", "DiscriminationAgainstMuon")
91 ]
92 
93 classicPFTauIDSources = [
94  ("leadingPionPtCut", "DiscriminationByLeadingPionPtCut"),
95  ("trackIsolationUsingLeadingPion", "DiscriminationByTrackIsolationUsingLeadingPion"),
96  ("ecalIsolationUsingLeadingPion", "DiscriminationByECALIsolationUsingLeadingPion"),
97  ("byIsolationUsingLeadingPion", "DiscriminationByIsolationUsingLeadingPion")
98 ]
99 
100 # Hadron-plus-strip(s) (HPS) Tau Discriminators
101 hpsTauIDSources = [
102  ("decayModeFindingNewDMs", "DiscriminationByDecayModeFindingNewDMs"),
103  ("decayModeFinding", "DiscriminationByDecayModeFinding"), # CV: kept for backwards compatibility
104  ("byLooseCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits"),
105  ("byMediumCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByMediumCombinedIsolationDBSumPtCorr3Hits"),
106  ("byTightCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByTightCombinedIsolationDBSumPtCorr3Hits"),
107  ("byCombinedIsolationDeltaBetaCorrRaw3Hits", "DiscriminationByRawCombinedIsolationDBSumPtCorr3Hits"),
108  ("byLooseCombinedIsolationDeltaBetaCorr3HitsdR03", "DiscriminationByLooseCombinedIsolationDBSumPtCorr3HitsdR03"),
109  ("byMediumCombinedIsolationDeltaBetaCorr3HitsdR03", "DiscriminationByMediumCombinedIsolationDBSumPtCorr3HitsdR03"),
110  ("byTightCombinedIsolationDeltaBetaCorr3HitsdR03", "DiscriminationByTightCombinedIsolationDBSumPtCorr3HitsdR03"),
111  ("byPhotonPtSumOutsideSignalCone", "DiscriminationByPhotonPtSumOutsideSignalCone"),
112  ("chargedIsoPtSum", "ChargedIsoPtSum"),
113  ("neutralIsoPtSum", "NeutralIsoPtSum"),
114  ("puCorrPtSum", "PUcorrPtSum"),
115  ("neutralIsoPtSumWeight", "NeutralIsoPtSumWeight"),
116  ("footprintCorrection", "FootprintCorrection"),
117  ("photonPtSumOutsideSignalCone", "PhotonPtSumOutsideSignalCone"),
118  ("againstMuonLoose3", "DiscriminationByLooseMuonRejection3"),
119  ("againstMuonTight3", "DiscriminationByTightMuonRejection3"),
120  ("byIsolationMVArun2v1DBoldDMwLTraw", "DiscriminationByIsolationMVArun2v1DBoldDMwLTraw"),
121  ("byVVLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVVLooseIsolationMVArun2v1DBoldDMwLT"),
122  ("byVLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBoldDMwLT"),
123  ("byLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBoldDMwLT"),
124  ("byMediumIsolationMVArun2v1DBoldDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBoldDMwLT"),
125  ("byTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByTightIsolationMVArun2v1DBoldDMwLT"),
126  ("byVTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBoldDMwLT"),
127  ("byVVTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBoldDMwLT"),
128  ("byIsolationMVArun2v1DBnewDMwLTraw", "DiscriminationByIsolationMVArun2v1DBnewDMwLTraw"),
129  ("byVLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBnewDMwLT"),
130  ("byLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBnewDMwLT"),
131  ("byMediumIsolationMVArun2v1DBnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBnewDMwLT"),
132  ("byTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByTightIsolationMVArun2v1DBnewDMwLT"),
133  ("byVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBnewDMwLT"),
134  ("byVVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBnewDMwLT"),
135  ("byIsolationMVArun2v1PWoldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWoldDMwLTraw"),
136  ("byVLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWoldDMwLT"),
137  ("byLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWoldDMwLT"),
138  ("byMediumIsolationMVArun2v1PWoldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWoldDMwLT"),
139  ("byTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWoldDMwLT"),
140  ("byVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWoldDMwLT"),
141  ("byVVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWoldDMwLT"),
142  ("byIsolationMVArun2v1PWnewDMwLTraw", "DiscriminationByIsolationMVArun2v1PWnewDMwLTraw"),
143  ("byVLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWnewDMwLT"),
144  ("byLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWnewDMwLT"),
145  ("byMediumIsolationMVArun2v1PWnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWnewDMwLT"),
146  ("byTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByTightIsolationMVArun2v1PWnewDMwLT"),
147  ("byVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWnewDMwLT"),
148  ("byVVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWnewDMwLT"),
149  ("chargedIsoPtSumdR03", "ChargedIsoPtSumdR03"),
150  ("neutralIsoPtSumdR03", "NeutralIsoPtSumdR03"),
151  ("neutralIsoPtSumWeightdR03", "NeutralIsoPtSumWeightdR03"),
152  ("footprintCorrectiondR03", "FootprintCorrectiondR03"),
153  ("photonPtSumOutsideSignalConedR03", "PhotonPtSumOutsideSignalConedR03"),
154  ("byIsolationMVArun2v1DBdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1DBdR03oldDMwLTraw"),
155  ("byVLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBdR03oldDMwLT"),
156  ("byLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBdR03oldDMwLT"),
157  ("byMediumIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBdR03oldDMwLT"),
158  ("byTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1DBdR03oldDMwLT"),
159  ("byVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBdR03oldDMwLT"),
160  ("byVVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBdR03oldDMwLT"),
161  ("byIsolationMVArun2v1PWdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWdR03oldDMwLTraw"),
162  ("byVLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWdR03oldDMwLT"),
163  ("byLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWdR03oldDMwLT"),
164  ("byMediumIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWdR03oldDMwLT"),
165  ("byTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWdR03oldDMwLT"),
166  ("byVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWdR03oldDMwLT"),
167  ("byVVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWdR03oldDMwLT"),
168  ("againstElectronMVA6Raw", "DiscriminationByMVA6rawElectronRejection"),
169  ("againstElectronMVA6category", "DiscriminationByMVA6rawElectronRejection:category"),
170  ("againstElectronVLooseMVA6", "DiscriminationByMVA6VLooseElectronRejection"),
171  ("againstElectronLooseMVA6", "DiscriminationByMVA6LooseElectronRejection"),
172  ("againstElectronMediumMVA6", "DiscriminationByMVA6MediumElectronRejection"),
173  ("againstElectronTightMVA6", "DiscriminationByMVA6TightElectronRejection"),
174  ("againstElectronVTightMVA6", "DiscriminationByMVA6VTightElectronRejection"),
175  ("againstElectronDeadECAL", "DiscriminationByDeadECALElectronRejection"),
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:42
def replace(string, replacements)
def switchToPFTauShrinkingCone(process, tauSource=cms.InputTag('shrinkingConePFTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:193
def switchToCaloTau(process, tauSource=cms.InputTag('caloRecoTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:21
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:58
def switchToPFTauFixedCone(process, tauSource=cms.InputTag('fixedConePFTauProducer'), patTauLabel="", postfix="")
Definition: tauTools.py:182
def applyPostfix(process, label, postfix)
Definition: tauTools.py:9