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  ("decayModeFinding", "DiscriminationByDecayModeFinding"), # CV: kept for backwards compatibility
106  ("byLooseCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits"),
107  ("byMediumCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByMediumCombinedIsolationDBSumPtCorr3Hits"),
108  ("byTightCombinedIsolationDeltaBetaCorr3Hits", "DiscriminationByTightCombinedIsolationDBSumPtCorr3Hits"),
109  ("byCombinedIsolationDeltaBetaCorrRaw3Hits", "DiscriminationByRawCombinedIsolationDBSumPtCorr3Hits"),
110  ("byLoosePileupWeightedIsolation3Hits", "DiscriminationByLoosePileupWeightedIsolation3Hits"),
111  ("byMediumPileupWeightedIsolation3Hits", "DiscriminationByMediumPileupWeightedIsolation3Hits"),
112  ("byTightPileupWeightedIsolation3Hits", "DiscriminationByTightPileupWeightedIsolation3Hits"),
113  ("byPhotonPtSumOutsideSignalCone", "DiscriminationByPhotonPtSumOutsideSignalCone"),
114  ("byPileupWeightedIsolationRaw3Hits", "DiscriminationByRawPileupWeightedIsolation3Hits"),
115  ("chargedIsoPtSum", "ChargedIsoPtSum"),
116  ("neutralIsoPtSum", "NeutralIsoPtSum"),
117  ("puCorrPtSum", "PUcorrPtSum"),
118  ("neutralIsoPtSumWeight", "NeutralIsoPtSumWeight"),
119  ("footprintCorrection", "FootprintCorrection"),
120  ("photonPtSumOutsideSignalCone", "PhotonPtSumOutsideSignalCone"),
121  ##("byIsolationMVA3oldDMwoLTraw", "DiscriminationByIsolationMVA3oldDMwoLTraw"),
122  ##("byVLooseIsolationMVA3oldDMwoLT", "DiscriminationByVLooseIsolationMVA3oldDMwoLT"),
123  ##("byLooseIsolationMVA3oldDMwoLT", "DiscriminationByLooseIsolationMVA3oldDMwoLT"),
124  ##("byMediumIsolationMVA3oldDMwoLT", "DiscriminationByMediumIsolationMVA3oldDMwoLT"),
125  ##("byTightIsolationMVA3oldDMwoLT", "DiscriminationByTightIsolationMVA3oldDMwoLT"),
126  ##("byVTightIsolationMVA3oldDMwoLT", "DiscriminationByVTightIsolationMVA3oldDMwoLT"),
127  ##("byVVTightIsolationMVA3oldDMwoLT", "DiscriminationByVVTightIsolationMVA3oldDMwoLT"),
128  ("byIsolationMVA3oldDMwLTraw", "DiscriminationByIsolationMVA3oldDMwLTraw"),
129  ("byVLooseIsolationMVA3oldDMwLT", "DiscriminationByVLooseIsolationMVA3oldDMwLT"),
130  ("byLooseIsolationMVA3oldDMwLT", "DiscriminationByLooseIsolationMVA3oldDMwLT"),
131  ("byMediumIsolationMVA3oldDMwLT", "DiscriminationByMediumIsolationMVA3oldDMwLT"),
132  ("byTightIsolationMVA3oldDMwLT", "DiscriminationByTightIsolationMVA3oldDMwLT"),
133  ("byVTightIsolationMVA3oldDMwLT", "DiscriminationByVTightIsolationMVA3oldDMwLT"),
134  ("byVVTightIsolationMVA3oldDMwLT", "DiscriminationByVVTightIsolationMVA3oldDMwLT"),
135  ("byIsolationMVA3newDMwoLTraw", "DiscriminationByIsolationMVA3newDMwoLTraw"),
136  ##("byVLooseIsolationMVA3newDMwoLT", "DiscriminationByVLooseIsolationMVA3newDMwoLT"),
137  ##("byLooseIsolationMVA3newDMwoLT", "DiscriminationByLooseIsolationMVA3newDMwoLT"),
138  ##("byMediumIsolationMVA3newDMwoLT", "DiscriminationByMediumIsolationMVA3newDMwoLT"),
139  ##("byTightIsolationMVA3newDMwoLT", "DiscriminationByTightIsolationMVA3newDMwoLT"),
140  ##("byVTightIsolationMVA3newDMwoLT", "DiscriminationByVTightIsolationMVA3newDMwoLT"),
141  ##("byVVTightIsolationMVA3newDMwoLT", "DiscriminationByVVTightIsolationMVA3newDMwoLT"),
142  ("byIsolationMVA3newDMwLTraw", "DiscriminationByIsolationMVA3newDMwLTraw"),
143  ("byVLooseIsolationMVA3newDMwLT", "DiscriminationByVLooseIsolationMVA3newDMwLT"),
144  ("byLooseIsolationMVA3newDMwLT", "DiscriminationByLooseIsolationMVA3newDMwLT"),
145  ("byMediumIsolationMVA3newDMwLT", "DiscriminationByMediumIsolationMVA3newDMwLT"),
146  ("byTightIsolationMVA3newDMwLT", "DiscriminationByTightIsolationMVA3newDMwLT"),
147  ("byVTightIsolationMVA3newDMwLT", "DiscriminationByVTightIsolationMVA3newDMwLT"),
148  ("byVVTightIsolationMVA3newDMwLT", "DiscriminationByVVTightIsolationMVA3newDMwLT"),
149  ##("againstElectronLoose", "DiscriminationByLooseElectronRejection"),
150  ##("againstElectronMedium", "DiscriminationByMediumElectronRejection"),
151  ##("againstElectronTight", "DiscriminationByTightElectronRejection"),
152  ("againstElectronMVA5raw", "DiscriminationByMVA5rawElectronRejection"),
153  ("againstElectronMVA5category", "DiscriminationByMVA5rawElectronRejection:category"),
154  ("againstElectronVLooseMVA5", "DiscriminationByMVA5VLooseElectronRejection"),
155  ("againstElectronLooseMVA5", "DiscriminationByMVA5LooseElectronRejection"),
156  ("againstElectronMediumMVA5", "DiscriminationByMVA5MediumElectronRejection"),
157  ("againstElectronTightMVA5", "DiscriminationByMVA5TightElectronRejection"),
158  ("againstElectronVTightMVA5", "DiscriminationByMVA5VTightElectronRejection"),
159  ##("againstElectronDeadECAL", "DiscriminationByDeadECALElectronRejection"),
160  ##("againstMuonLoose", "DiscriminationByLooseMuonRejection"),
161  ##("againstMuonMedium", "DiscriminationByMediumMuonRejection"),
162  ##("againstMuonTight", "DiscriminationByTightMuonRejection"),
163  ##("againstMuonLoose2", "DiscriminationByLooseMuonRejection2"),
164  ##("againstMuonMedium2", "DiscriminationByMediumMuonRejection2"),
165  ##("againstMuonTight2", "DiscriminationByTightMuonRejection2"),
166  ("againstMuonLoose3", "DiscriminationByLooseMuonRejection3"),
167  ("againstMuonTight3", "DiscriminationByTightMuonRejection3"),
168  ##("againstMuonMVAraw", "DiscriminationByMVArawMuonRejection"),
169  ##("againstMuonLooseMVA", "DiscriminationByMVALooseMuonRejection"),
170  ##("againstMuonMediumMVA", "DiscriminationByMVAMediumMuonRejection"),
171  ##("againstMuonTightMVA", "DiscriminationByMVATightMuonRejection")
172  ]
173 
174 # switch to PFTau collection produced for fixed dR = 0.07 signal cone size
175 def switchToPFTauFixedCone(process,
176  tauSource = cms.InputTag('fixedConePFTauProducer'),
177  patTauLabel = "",
178  postfix = ""):
179  fixedConeIDSources = copy.copy(classicTauIDSources)
180  fixedConeIDSources.extend(classicPFTauIDSources)
181 
182  _switchToPFTau(process, tauSource, 'fixedConePFTau', fixedConeIDSources,
183  patTauLabel = patTauLabel, postfix = postfix)
184 
185 # switch to PFTau collection produced for shrinking signal cone of size dR = 5.0/Et(PFTau)
186 def switchToPFTauShrinkingCone(process,
187  tauSource = cms.InputTag('shrinkingConePFTauProducer'),
188  patTauLabel = "",
189  postfix = ""):
190  shrinkingIDSources = copy.copy(classicTauIDSources)
191  shrinkingIDSources.extend(classicPFTauIDSources)
192 
193  _switchToPFTau(process, tauSource, 'shrinkingConePFTau', shrinkingIDSources,
194  patTauLabel = patTauLabel, postfix = postfix)
195 
196 # switch to hadron-plus-strip(s) (HPS) PFTau collection
197 def switchToPFTauHPS(process,
198  tauSource = cms.InputTag('hpsPFTauProducer'),
199  patTauLabel = "",
200  jecLevels = [],
201  postfix = ""):
202 
203  _switchToPFTau(process, tauSource, 'hpsPFTau', hpsTauIDSources,
204  patTauLabel = patTauLabel, postfix = postfix)
205 
206  # CV: enable tau lifetime information for HPS PFTaus
207  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = tauSource.value().replace("Producer", "TransverseImpactParameters")
208 
209  ## adapt cleanPatTaus
210  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
211  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = \
212  'pt > 18 & abs(eta) < 2.3 & tauID("decayModeFinding") > 0.5 & tauID("byLooseCombinedIsolationDeltaBetaCorr3Hits") > 0.5' \
213  + ' & tauID("againstMuonTight3") > 0.5 & tauID("againstElectronVLooseMVA5") > 0.5'
214 
215 # Select switcher by string
216 def switchToPFTauByType(process,
217  pfTauType = None,
218  tauSource = cms.InputTag('hpsPFTauProducer'),
219  patTauLabel = "",
220  postfix = "" ):
221  mapping = {
222  'shrinkingConePFTau' : switchToPFTauShrinkingCone,
223  'fixedConePFTau' : switchToPFTauFixedCone,
224  'hpsPFTau' : switchToPFTauHPS,
225  'caloRecoTau' : switchToCaloTau
226  }
227  if not pfTauType in mapping.keys():
228  raise ValueError("Error in <switchToPFTauByType>: Undefined pfTauType = %s !!" % pfTauType)
229 
230  mapping[pfTauType](process, tauSource = tauSource,
231  patTauLabel = patTauLabel, postfix = postfix)
232 
234 
235  """ Add a new collection of taus. Takes the configuration from the
236  already configured standard tau collection as starting point;
237  replaces before calling addTauCollection will also affect the
238  new tau collections
239  """
240  _label='addTauCollection'
241  _defaultParameters=dicttypes.SortedKeysDict()
242  def __init__(self):
243  ConfigToolBase.__init__(self)
244  self.addParameter(self._defaultParameters, 'tauCollection',
245  self._defaultValue, 'Input tau collection', cms.InputTag)
246  self.addParameter(self._defaultParameters, 'algoLabel',
247  self._defaultValue, "label to indicate the tau algorithm (e.g.'hps')", str)
248  self.addParameter(self._defaultParameters, 'typeLabel',
249  self._defaultValue, "label to indicate the type of constituents (either 'PFTau' or 'Tau')", str)
250  self.addParameter(self._defaultParameters, 'doPFIsoDeposits',
251  True, "run sequence for computing particle-flow based IsoDeposits")
252  self.addParameter(self._defaultParameters, 'standardAlgo',
253  "hps", "standard algorithm label of the collection from which the clones " \
254  + "for the new tau collection will be taken from " \
255  + "(note that this tau collection has to be available in the event before hand)")
256  self.addParameter(self._defaultParameters, 'standardType',
257  "PFTau", "standard constituent type 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 
261  self._parameters=copy.deepcopy(self._defaultParameters)
262  self._comment = ""
263 
265  return self._defaultParameters
266 
267  def __call__(self,process,
268  tauCollection = None,
269  algoLabel = None,
270  typeLabel = None,
271  doPFIsoDeposits = None,
272  jetCorrLabel = None,
273  standardAlgo = None,
274  standardType = None):
275 
276  if tauCollection is None:
277  tauCollection = self._defaultParameters['tauCollection'].value
278  if algoLabel is None:
279  algoLabel = self._defaultParameters['algoLabel'].value
280  if typeLabel is None:
281  typeLabel = self._defaultParameters['typeLabel'].value
282  if doPFIsoDeposits is None:
283  doPFIsoDeposits = self._defaultParameters['doPFIsoDeposits'].value
284  if standardAlgo is None:
285  standardAlgo = self._defaultParameters['standardAlgo'].value
286  if standardType is None:
287  standardType = self._defaultParameters['standardType'].value
288 
289  self.setParameter('tauCollection', tauCollection)
290  self.setParameter('algoLabel', algoLabel)
291  self.setParameter('typeLabel', typeLabel)
292  self.setParameter('doPFIsoDeposits', doPFIsoDeposits)
293  self.setParameter('standardAlgo', standardAlgo)
294  self.setParameter('standardType', standardType)
295 
296  self.apply(process)
297 
298  def toolCode(self, process):
299  tauCollection = self._parameters['tauCollection'].value
300  algoLabel = self._parameters['algoLabel'].value
301  typeLabel = self._parameters['typeLabel'].value
302  doPFIsoDeposits = self._parameters['doPFIsoDeposits'].value
303  standardAlgo = self._parameters['standardAlgo'].value
304  standardType = self._parameters['standardType'].value
305 
306  ## disable computation of particle-flow based IsoDeposits
307  ## in case tau is of CaloTau type
308  if typeLabel == 'Tau':
309  print "NO PF Isolation will be computed for CaloTau (this could be improved later)"
310  doPFIsoDeposits = False
311 
312  ## create old module label from standardAlgo
313  ## and standardType and return
314  def oldLabel(prefix = ''):
315  if prefix == '':
316  return "patTaus"
317  else:
318  return prefix + "PatTaus"
319 
320  ## capitalize first character of appended part
321  ## when creating new module label
322  ## (giving e.g. "patTausCaloRecoTau")
323  def capitalize(label):
324  return label[0].capitalize() + label[1:]
325 
326  ## create new module label from old module
327  ## label and return
328  def newLabel(oldLabel):
329  newLabel = oldLabel
330  if ( oldLabel.find(standardAlgo) >= 0 and oldLabel.find(standardType) >= 0 ):
331  oldLabel = oldLabel.replace(standardAlgo, algoLabel).replace(standardType, typeLabel)
332  else:
333  oldLabel = oldLabel + capitalize(algoLabel + typeLabel)
334  return oldLabel
335 
336  ## clone module and add it to the patDefaultSequence
337  def addClone(hook, **replaceStatements):
338  ## create a clone of the hook with corresponding
339  ## parameter replacements
340  newModule = getattr(process, hook).clone(**replaceStatements)
341 
342  ## clone module for computing particle-flow IsoDeposits
343  def addPFIsoDepositClone(hook, **replaceStatements):
344  newModule = getattr(process, hook).clone(**replaceStatements)
345  newModuleIsoDepositExtractor = getattr(newModule, "ExtractorPSet")
346  setattr(newModuleIsoDepositExtractor, "tauSource", getattr(newModule, "src"))
347 
348  ## add a clone of patTaus
349  addClone(oldLabel(), tauSource = tauCollection)
350 
351  ## add a clone of selectedPatTaus
352  addClone(oldLabel('selected'), src = cms.InputTag(newLabel(oldLabel())))
353 
354  ## add a clone of cleanPatTaus
355  addClone(oldLabel('clean'), src=cms.InputTag(newLabel(oldLabel('selected'))))
356 
357  ## get attributes of new module
358  newTaus = getattr(process, newLabel(oldLabel()))
359 
360  ## add a clone of gen tau matching
361  addClone('tauMatch', src = tauCollection)
362  addClone('tauGenJetMatch', src = tauCollection)
363 
364  ## add a clone of IsoDeposits computed based on particle-flow
365  if doPFIsoDeposits:
366  addPFIsoDepositClone('tauIsoDepositPFCandidates', src = tauCollection)
367  addPFIsoDepositClone('tauIsoDepositPFChargedHadrons', src = tauCollection)
368  addPFIsoDepositClone('tauIsoDepositPFNeutralHadrons', src = tauCollection)
369  addPFIsoDepositClone('tauIsoDepositPFGammas', src = tauCollection)
370 
371  ## fix label for input tag
372  def fixInputTag(x):
373  x.setModuleLabel(newLabel(x.moduleLabel))
374 
375  ## provide patTau inputs with individual labels
376  fixInputTag(newTaus.genParticleMatch)
377  fixInputTag(newTaus.genJetMatch)
378  fixInputTag(newTaus.isoDeposits.pfAllParticles)
379  fixInputTag(newTaus.isoDeposits.pfNeutralHadron)
380  fixInputTag(newTaus.isoDeposits.pfChargedHadron)
381  fixInputTag(newTaus.isoDeposits.pfGamma)
382  fixInputTag(newTaus.userIsolation.pfAllParticles.src)
383  fixInputTag(newTaus.userIsolation.pfNeutralHadron.src)
384  fixInputTag(newTaus.userIsolation.pfChargedHadron.src)
385  fixInputTag(newTaus.userIsolation.pfGamma.src)
386 
387  ## set discriminators
388  ## (using switchTauCollection functions)
389  oldTaus = getattr(process, oldLabel())
390  if typeLabel == 'Tau':
391  switchToCaloTau(process,
392  tauSource = getattr(newTaus, "tauSource"),
393  patTauLabel = capitalize(algoLabel + typeLabel))
394  else:
395  switchToPFTauByType(process, pfTauType = algoLabel + typeLabel,
396  tauSource = getattr(newTaus, "tauSource"),
397  patTauLabel = capitalize(algoLabel + typeLabel))
398 
399 addTauCollection=AddTauCollection()
def switchToPFTauFixedCone
Definition: tauTools.py:178
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:201
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
def switchToPFTauShrinkingCone
Definition: tauTools.py:189
def switchToPFTauByType
Definition: tauTools.py:220