CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
tauTools.py
Go to the documentation of this file.
2 
4 from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet
6 
7 # applyPostFix function adapted to unscheduled mode
8 def applyPostfix(process, label, postfix):
9  result = None
10  if hasattr(process, label+postfix):
11  result = getattr(process, label + postfix)
12  else:
13  raise ValueError("Error in <applyPostfix>: No module of name = %s attached to process !!" % (label + postfix))
14  return result
15 
16 # switch to CaloTau collection
17 def switchToCaloTau(process,
18  tauSource = cms.InputTag('caloRecoTauProducer'),
19  patTauLabel = "",
20  postfix = ""):
21  print ' switching PAT Tau input to: ', tauSource
22 
23  applyPostfix(process, "tauMatch" + patTauLabel, postfix).src = tauSource
24  applyPostfix(process, "tauGenJetMatch"+ patTauLabel, postfix).src = tauSource
25 
26  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauSource = tauSource
27  # CV: reconstruction of tau lifetime information not implemented for CaloTaus yet
28  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = ""
29  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauIDSources = _buildIDSourcePSet('caloRecoTau', classicTauIDSources, postfix)
30 
31  ## Isolation is somewhat an issue, so we start just by turning it off
32  print "NO PF Isolation will be computed for CaloTau (this could be improved later)"
33  applyPostfix(process, "patTaus" + patTauLabel, postfix).isolation = cms.PSet()
34  applyPostfix(process, "patTaus" + patTauLabel, postfix).isoDeposits = cms.PSet()
35  applyPostfix(process, "patTaus" + patTauLabel, postfix).userIsolation = cms.PSet()
36 
37  ## adapt cleanPatTaus
38  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
39  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = \
40  'tauID("leadingTrackFinding") > 0.5 & tauID("leadingTrackPtCut") > 0.5' \
41  + ' & tauID("byIsolation") > 0.5 & tauID("againstElectron") > 0.5 & (signalTracks.size() = 1 | signalTracks.size() = 3)'
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 = \
82  'tauID("leadingTrackFinding") > 0.5 & tauID("leadingPionPtCut") > 0.5 & tauID("byIsolationUsingLeadingPion") > 0.5' \
83  + ' & tauID("againstMuon") > 0.5 & tauID("againstElectron") > 0.5' \
84  + ' & (signalPFChargedHadrCands.size() = 1 | signalPFChargedHadrCands.size() = 3)'
85 
86 # Name mapping for classic tau ID sources (present for fixed and shrinkingCones)
87 classicTauIDSources = [
88  ("leadingTrackFinding", "DiscriminationByLeadingTrackFinding"),
89  ("leadingTrackPtCut", "DiscriminationByLeadingTrackPtCut"),
90  ("trackIsolation", "DiscriminationByTrackIsolation"),
91  ("ecalIsolation", "DiscriminationByECALIsolation"),
92  ("byIsolation", "DiscriminationByIsolation"),
93  ("againstElectron", "DiscriminationAgainstElectron"),
94  ("againstMuon", "DiscriminationAgainstMuon") ]
95 
96 classicPFTauIDSources = [
97  ("leadingPionPtCut", "DiscriminationByLeadingPionPtCut"),
98  ("trackIsolationUsingLeadingPion", "DiscriminationByTrackIsolationUsingLeadingPion"),
99  ("ecalIsolationUsingLeadingPion", "DiscriminationByECALIsolationUsingLeadingPion"),
100  ("byIsolationUsingLeadingPion", "DiscriminationByIsolationUsingLeadingPion")]
101 
102 # Hadron-plus-strip(s) (HPS) Tau Discriminators
103 hpsTauIDSources = [
104  ("decayModeFindingNewDMs", "DiscriminationByDecayModeFindingNewDMs"),
105  ("decayModeFindingOldDMs", "DiscriminationByDecayModeFindingOldDMs"),
106  ("decayModeFinding", "DiscriminationByDecayModeFinding"), # CV: kept for backwards compatibility
107  ("byLooseIsolation", "DiscriminationByLooseIsolation"),
108  ("byVLooseCombinedIsolationDeltaBetaCorr", "DiscriminationByVLooseCombinedIsolationDBSumPtCorr"),
109  ("byLooseCombinedIsolationDeltaBetaCorr", "DiscriminationByLooseCombinedIsolationDBSumPtCorr"),
110  ("byMediumCombinedIsolationDeltaBetaCorr", "DiscriminationByMediumCombinedIsolationDBSumPtCorr"),
111  ("byTightCombinedIsolationDeltaBetaCorr", "DiscriminationByTightCombinedIsolationDBSumPtCorr"),
112  ("byCombinedIsolationDeltaBetaCorrRaw", "DiscriminationByRawCombinedIsolationDBSumPtCorr"),
113  ("byLooseCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits"),
114  ("byMediumCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByMediumCombinedIsolationDBSumPtCorr3Hits"),
115  ("byTightCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByTightCombinedIsolationDBSumPtCorr3Hits"),
116  ("byCombinedIsolationDeltaBetaCorrRaw3Hits", "DiscriminationByRawCombinedIsolationDBSumPtCorr3Hits"),
117  ("chargedIsoPtSum", "MVA3IsolationChargedIsoPtSum"),
118  ("neutralIsoPtSum", "MVA3IsolationNeutralIsoPtSum"),
119  ("puCorrPtSum", "MVA3IsolationPUcorrPtSum"),
120  ("byIsolationMVA3oldDMwoLTraw", "DiscriminationByIsolationMVA3oldDMwoLTraw"),
121  ("byVLooseIsolationMVA3oldDMwoLT", "DiscriminationByVLooseIsolationMVA3oldDMwoLT"),
122  ("byLooseIsolationMVA3oldDMwoLT", "DiscriminationByLooseIsolationMVA3oldDMwoLT"),
123  ("byMediumIsolationMVA3oldDMwoLT", "DiscriminationByMediumIsolationMVA3oldDMwoLT"),
124  ("byTightIsolationMVA3oldDMwoLT", "DiscriminationByTightIsolationMVA3oldDMwoLT"),
125  ("byVTightIsolationMVA3oldDMwoLT", "DiscriminationByVTightIsolationMVA3oldDMwoLT"),
126  ("byVVTightIsolationMVA3oldDMwoLT", "DiscriminationByVVTightIsolationMVA3oldDMwoLT"),
127  ("byIsolationMVA3oldDMwLTraw", "DiscriminationByIsolationMVA3oldDMwLTraw"),
128  ("byVLooseIsolationMVA3oldDMwLT", "DiscriminationByVLooseIsolationMVA3oldDMwLT"),
129  ("byLooseIsolationMVA3oldDMwLT", "DiscriminationByLooseIsolationMVA3oldDMwLT"),
130  ("byMediumIsolationMVA3oldDMwLT", "DiscriminationByMediumIsolationMVA3oldDMwLT"),
131  ("byTightIsolationMVA3oldDMwLT", "DiscriminationByTightIsolationMVA3oldDMwLT"),
132  ("byVTightIsolationMVA3oldDMwLT", "DiscriminationByVTightIsolationMVA3oldDMwLT"),
133  ("byVVTightIsolationMVA3oldDMwLT", "DiscriminationByVVTightIsolationMVA3oldDMwLT"),
134  ("byIsolationMVA3newDMwoLTraw", "DiscriminationByIsolationMVA3newDMwoLTraw"),
135  ("byVLooseIsolationMVA3newDMwoLT", "DiscriminationByVLooseIsolationMVA3newDMwoLT"),
136  ("byLooseIsolationMVA3newDMwoLT", "DiscriminationByLooseIsolationMVA3newDMwoLT"),
137  ("byMediumIsolationMVA3newDMwoLT", "DiscriminationByMediumIsolationMVA3newDMwoLT"),
138  ("byTightIsolationMVA3newDMwoLT", "DiscriminationByTightIsolationMVA3newDMwoLT"),
139  ("byVTightIsolationMVA3newDMwoLT", "DiscriminationByVTightIsolationMVA3newDMwoLT"),
140  ("byVVTightIsolationMVA3newDMwoLT", "DiscriminationByVVTightIsolationMVA3newDMwoLT"),
141  ("byIsolationMVA3newDMwLTraw", "DiscriminationByIsolationMVA3newDMwLTraw"),
142  ("byVLooseIsolationMVA3newDMwLT", "DiscriminationByVLooseIsolationMVA3newDMwLT"),
143  ("byLooseIsolationMVA3newDMwLT", "DiscriminationByLooseIsolationMVA3newDMwLT"),
144  ("byMediumIsolationMVA3newDMwLT", "DiscriminationByMediumIsolationMVA3newDMwLT"),
145  ("byTightIsolationMVA3newDMwLT", "DiscriminationByTightIsolationMVA3newDMwLT"),
146  ("byVTightIsolationMVA3newDMwLT", "DiscriminationByVTightIsolationMVA3newDMwLT"),
147  ("byVVTightIsolationMVA3newDMwLT", "DiscriminationByVVTightIsolationMVA3newDMwLT"),
148  ("againstElectronLoose", "DiscriminationByLooseElectronRejection"),
149  ("againstElectronMedium", "DiscriminationByMediumElectronRejection"),
150  ("againstElectronTight", "DiscriminationByTightElectronRejection"),
151  ("againstElectronMVA5raw", "DiscriminationByMVA5rawElectronRejection"),
152  ("againstElectronMVA5category", "DiscriminationByMVA5rawElectronRejection:category"),
153  ("againstElectronVLooseMVA5", "DiscriminationByMVA5VLooseElectronRejection"),
154  ("againstElectronLooseMVA5", "DiscriminationByMVA5LooseElectronRejection"),
155  ("againstElectronMediumMVA5", "DiscriminationByMVA5MediumElectronRejection"),
156  ("againstElectronTightMVA5", "DiscriminationByMVA5TightElectronRejection"),
157  ("againstElectronVTightMVA5", "DiscriminationByMVA5VTightElectronRejection"),
158  ("againstElectronDeadECAL", "DiscriminationByDeadECALElectronRejection"),
159  ("againstMuonLoose", "DiscriminationByLooseMuonRejection"),
160  ("againstMuonMedium", "DiscriminationByMediumMuonRejection"),
161  ("againstMuonTight", "DiscriminationByTightMuonRejection"),
162  ("againstMuonLoose2", "DiscriminationByLooseMuonRejection2"),
163  ("againstMuonMedium2", "DiscriminationByMediumMuonRejection2"),
164  ("againstMuonTight2", "DiscriminationByTightMuonRejection2"),
165  ("againstMuonLoose3", "DiscriminationByLooseMuonRejection3"),
166  ("againstMuonTight3", "DiscriminationByTightMuonRejection3"),
167  ("againstMuonMVAraw", "DiscriminationByMVArawMuonRejection"),
168  ("againstMuonLooseMVA", "DiscriminationByMVALooseMuonRejection"),
169  ("againstMuonMediumMVA", "DiscriminationByMVAMediumMuonRejection"),
170  ("againstMuonTightMVA", "DiscriminationByMVATightMuonRejection") ]
171 
172 
173 # switch to PFTau collection produced for fixed dR = 0.07 signal cone size
174 def switchToPFTauFixedCone(process,
175  tauSource = cms.InputTag('fixedConePFTauProducer'),
176  patTauLabel = "",
177  postfix = ""):
178  fixedConeIDSources = copy.copy(classicTauIDSources)
179  fixedConeIDSources.extend(classicPFTauIDSources)
180 
181  _switchToPFTau(process, tauSource, 'fixedConePFTau', fixedConeIDSources,
182  patTauLabel = patTauLabel, postfix = postfix)
183 
184 # switch to PFTau collection produced for shrinking signal cone of size dR = 5.0/Et(PFTau)
185 def switchToPFTauShrinkingCone(process,
186  tauSource = cms.InputTag('shrinkingConePFTauProducer'),
187  patTauLabel = "",
188  postfix = ""):
189  shrinkingIDSources = copy.copy(classicTauIDSources)
190  shrinkingIDSources.extend(classicPFTauIDSources)
191 
192  _switchToPFTau(process, tauSource, 'shrinkingConePFTau', shrinkingIDSources,
193  patTauLabel = patTauLabel, postfix = postfix)
194 
195 # switch to hadron-plus-strip(s) (HPS) PFTau collection
196 def switchToPFTauHPS(process,
197  tauSource = cms.InputTag('hpsPFTauProducer'),
198  patTauLabel = "",
199  jecLevels = [],
200  postfix = ""):
201 
202  _switchToPFTau(process, tauSource, 'hpsPFTau', hpsTauIDSources,
203  patTauLabel = patTauLabel, postfix = postfix)
204 
205  # CV: enable tau lifetime information for HPS PFTaus
206  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = tauSource.value().replace("Producer", "TransverseImpactParameters")
207 
208  ## adapt cleanPatTaus
209  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
210  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = \
211  'pt > 20 & abs(eta) < 2.3 & tauID("decayModeFindingOldDMs") > 0.5 & tauID("byLooseCombinedIsolationDeltaBetaCorr3Hits") > 0.5' \
212  + ' & tauID("againstMuonTight3") > 0.5 & tauID("againstElectronLoose") > 0.5'
213 
214 # Select switcher by string
215 def switchToPFTauByType(process,
216  pfTauType = None,
217  tauSource = cms.InputTag('hpsPFTauProducer'),
218  patTauLabel = "",
219  postfix = "" ):
220  mapping = {
221  'shrinkingConePFTau' : switchToPFTauShrinkingCone,
222  'fixedConePFTau' : switchToPFTauFixedCone,
223  'hpsPFTau' : switchToPFTauHPS,
224  'caloRecoTau' : switchToCaloTau
225  }
226  if not pfTauType in mapping.keys():
227  raise ValueError("Error in <switchToPFTauByType>: Undefined pfTauType = %s !!" % pfTauType)
228 
229  mapping[pfTauType](process, tauSource = tauSource,
230  patTauLabel = patTauLabel, postfix = postfix)
231 
233 
234  """ Add a new collection of taus. Takes the configuration from the
235  already configured standard tau collection as starting point;
236  replaces before calling addTauCollection will also affect the
237  new tau collections
238  """
239  _label='addTauCollection'
240  _defaultParameters=dicttypes.SortedKeysDict()
241  def __init__(self):
242  ConfigToolBase.__init__(self)
243  self.addParameter(self._defaultParameters, 'tauCollection',
244  self._defaultValue, 'Input tau collection', cms.InputTag)
245  self.addParameter(self._defaultParameters, 'algoLabel',
246  self._defaultValue, "label to indicate the tau algorithm (e.g.'hps')", str)
247  self.addParameter(self._defaultParameters, 'typeLabel',
248  self._defaultValue, "label to indicate the type of constituents (either 'PFTau' or 'Tau')", str)
249  self.addParameter(self._defaultParameters, 'doPFIsoDeposits',
250  True, "run sequence for computing particle-flow based IsoDeposits")
251  self.addParameter(self._defaultParameters, 'standardAlgo',
252  "hps", "standard algorithm label of the collection from which the clones " \
253  + "for the new tau collection will be taken from " \
254  + "(note that this tau collection has to be available in the event before hand)")
255  self.addParameter(self._defaultParameters, 'standardType',
256  "PFTau", "standard constituent type label of the collection from which the clones " \
257  + " for the new tau collection will be taken from "\
258  + "(note that this tau collection has to be available in the event before hand)")
259 
260  self._parameters=copy.deepcopy(self._defaultParameters)
261  self._comment = ""
262 
264  return self._defaultParameters
265 
266  def __call__(self,process,
267  tauCollection = None,
268  algoLabel = None,
269  typeLabel = None,
270  doPFIsoDeposits = None,
271  jetCorrLabel = None,
272  standardAlgo = None,
273  standardType = None):
274 
275  if tauCollection is None:
276  tauCollection = self._defaultParameters['tauCollection'].value
277  if algoLabel is None:
278  algoLabel = self._defaultParameters['algoLabel'].value
279  if typeLabel is None:
280  typeLabel = self._defaultParameters['typeLabel'].value
281  if doPFIsoDeposits is None:
282  doPFIsoDeposits = self._defaultParameters['doPFIsoDeposits'].value
283  if standardAlgo is None:
284  standardAlgo = self._defaultParameters['standardAlgo'].value
285  if standardType is None:
286  standardType = self._defaultParameters['standardType'].value
287 
288  self.setParameter('tauCollection', tauCollection)
289  self.setParameter('algoLabel', algoLabel)
290  self.setParameter('typeLabel', typeLabel)
291  self.setParameter('doPFIsoDeposits', doPFIsoDeposits)
292  self.setParameter('standardAlgo', standardAlgo)
293  self.setParameter('standardType', standardType)
294 
295  self.apply(process)
296 
297  def toolCode(self, process):
298  tauCollection = self._parameters['tauCollection'].value
299  algoLabel = self._parameters['algoLabel'].value
300  typeLabel = self._parameters['typeLabel'].value
301  doPFIsoDeposits = self._parameters['doPFIsoDeposits'].value
302  standardAlgo = self._parameters['standardAlgo'].value
303  standardType = self._parameters['standardType'].value
304 
305  ## disable computation of particle-flow based IsoDeposits
306  ## in case tau is of CaloTau type
307  if typeLabel == 'Tau':
308  print "NO PF Isolation will be computed for CaloTau (this could be improved later)"
309  doPFIsoDeposits = False
310 
311  ## create old module label from standardAlgo
312  ## and standardType and return
313  def oldLabel(prefix = ''):
314  if prefix == '':
315  return "patTaus"
316  else:
317  return prefix + "PatTaus"
318 
319  ## capitalize first character of appended part
320  ## when creating new module label
321  ## (giving e.g. "patTausCaloRecoTau")
322  def capitalize(label):
323  return label[0].capitalize() + label[1:]
324 
325  ## create new module label from old module
326  ## label and return
327  def newLabel(oldLabel):
328  newLabel = oldLabel
329  if ( oldLabel.find(standardAlgo) >= 0 and oldLabel.find(standardType) >= 0 ):
330  oldLabel = oldLabel.replace(standardAlgo, algoLabel).replace(standardType, typeLabel)
331  else:
332  oldLabel = oldLabel + capitalize(algoLabel + typeLabel)
333  return oldLabel
334 
335  ## clone module and add it to the patDefaultSequence
336  def addClone(hook, **replaceStatements):
337  ## create a clone of the hook with corresponding
338  ## parameter replacements
339  newModule = getattr(process, hook).clone(**replaceStatements)
340 
341  ## clone module for computing particle-flow IsoDeposits
342  def addPFIsoDepositClone(hook, **replaceStatements):
343  newModule = getattr(process, hook).clone(**replaceStatements)
344  newModuleIsoDepositExtractor = getattr(newModule, "ExtractorPSet")
345  setattr(newModuleIsoDepositExtractor, "tauSource", getattr(newModule, "src"))
346 
347  ## add a clone of patTaus
348  addClone(oldLabel(), tauSource = tauCollection)
349 
350  ## add a clone of selectedPatTaus
351  addClone(oldLabel('selected'), src = cms.InputTag(newLabel(oldLabel())))
352 
353  ## add a clone of cleanPatTaus
354  addClone(oldLabel('clean'), src=cms.InputTag(newLabel(oldLabel('selected'))))
355 
356  ## get attributes of new module
357  newTaus = getattr(process, newLabel(oldLabel()))
358 
359  ## add a clone of gen tau matching
360  addClone('tauMatch', src = tauCollection)
361  addClone('tauGenJetMatch', src = tauCollection)
362 
363  ## add a clone of IsoDeposits computed based on particle-flow
364  if doPFIsoDeposits:
365  addPFIsoDepositClone('tauIsoDepositPFCandidates', src = tauCollection)
366  addPFIsoDepositClone('tauIsoDepositPFChargedHadrons', src = tauCollection)
367  addPFIsoDepositClone('tauIsoDepositPFNeutralHadrons', src = tauCollection)
368  addPFIsoDepositClone('tauIsoDepositPFGammas', src = tauCollection)
369 
370  ## fix label for input tag
371  def fixInputTag(x):
372  x.setModuleLabel(newLabel(x.moduleLabel))
373 
374  ## provide patTau inputs with individual labels
375  fixInputTag(newTaus.genParticleMatch)
376  fixInputTag(newTaus.genJetMatch)
377  fixInputTag(newTaus.isoDeposits.pfAllParticles)
378  fixInputTag(newTaus.isoDeposits.pfNeutralHadron)
379  fixInputTag(newTaus.isoDeposits.pfChargedHadron)
380  fixInputTag(newTaus.isoDeposits.pfGamma)
381  fixInputTag(newTaus.userIsolation.pfAllParticles.src)
382  fixInputTag(newTaus.userIsolation.pfNeutralHadron.src)
383  fixInputTag(newTaus.userIsolation.pfChargedHadron.src)
384  fixInputTag(newTaus.userIsolation.pfGamma.src)
385 
386  ## set discriminators
387  ## (using switchTauCollection functions)
388  oldTaus = getattr(process, oldLabel())
389  if typeLabel == 'Tau':
390  switchToCaloTau(process,
391  tauSource = getattr(newTaus, "tauSource"),
392  patTauLabel = capitalize(algoLabel + typeLabel))
393  else:
394  switchToPFTauByType(process, pfTauType = algoLabel + typeLabel,
395  tauSource = getattr(newTaus, "tauSource"),
396  patTauLabel = capitalize(algoLabel + typeLabel))
397 
398 addTauCollection=AddTauCollection()
def switchToPFTauFixedCone
Definition: tauTools.py:177
def applyPostfix
Definition: tauTools.py:8
def _switchToPFTau
Definition: tauTools.py:59
def switchToCaloTau
Definition: tauTools.py:20
def _buildIDSourcePSet
Definition: tauTools.py:43
def switchToPFTauHPS
Definition: tauTools.py:200
tuple clone
Definition: statics.py:58
def switchToPFTauShrinkingCone
Definition: tauTools.py:188
def switchToPFTauByType
Definition: tauTools.py:219