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.
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  ("byVLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBoldDMwLT"),
122  ("byLooseIsolationMVArun2v1DBoldDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBoldDMwLT"),
123  ("byMediumIsolationMVArun2v1DBoldDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBoldDMwLT"),
124  ("byTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByTightIsolationMVArun2v1DBoldDMwLT"),
125  ("byVTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBoldDMwLT"),
126  ("byVVTightIsolationMVArun2v1DBoldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBoldDMwLT"),
127  ("byIsolationMVArun2v1DBnewDMwLTraw", "DiscriminationByIsolationMVArun2v1DBnewDMwLTraw"),
128  ("byVLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBnewDMwLT"),
129  ("byLooseIsolationMVArun2v1DBnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBnewDMwLT"),
130  ("byMediumIsolationMVArun2v1DBnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBnewDMwLT"),
131  ("byTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByTightIsolationMVArun2v1DBnewDMwLT"),
132  ("byVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBnewDMwLT"),
133  ("byVVTightIsolationMVArun2v1DBnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBnewDMwLT"),
134  ("byIsolationMVArun2v1PWoldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWoldDMwLTraw"),
135  ("byVLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWoldDMwLT"),
136  ("byLooseIsolationMVArun2v1PWoldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWoldDMwLT"),
137  ("byMediumIsolationMVArun2v1PWoldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWoldDMwLT"),
138  ("byTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWoldDMwLT"),
139  ("byVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWoldDMwLT"),
140  ("byVVTightIsolationMVArun2v1PWoldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWoldDMwLT"),
141  ("byIsolationMVArun2v1PWnewDMwLTraw", "DiscriminationByIsolationMVArun2v1PWnewDMwLTraw"),
142  ("byVLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWnewDMwLT"),
143  ("byLooseIsolationMVArun2v1PWnewDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWnewDMwLT"),
144  ("byMediumIsolationMVArun2v1PWnewDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWnewDMwLT"),
145  ("byTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByTightIsolationMVArun2v1PWnewDMwLT"),
146  ("byVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWnewDMwLT"),
147  ("byVVTightIsolationMVArun2v1PWnewDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWnewDMwLT"),
148  ("chargedIsoPtSumdR03", "ChargedIsoPtSumdR03"),
149  ("neutralIsoPtSumdR03", "NeutralIsoPtSumdR03"),
150  ("neutralIsoPtSumWeightdR03", "NeutralIsoPtSumWeightdR03"),
151  ("footprintCorrectiondR03", "FootprintCorrectiondR03"),
152  ("photonPtSumOutsideSignalConedR03", "PhotonPtSumOutsideSignalConedR03"),
153  ("byIsolationMVArun2v1DBdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1DBdR03oldDMwLTraw"),
154  ("byVLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1DBdR03oldDMwLT"),
155  ("byLooseIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1DBdR03oldDMwLT"),
156  ("byMediumIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1DBdR03oldDMwLT"),
157  ("byTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1DBdR03oldDMwLT"),
158  ("byVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1DBdR03oldDMwLT"),
159  ("byVVTightIsolationMVArun2v1DBdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1DBdR03oldDMwLT"),
160  ("byIsolationMVArun2v1PWdR03oldDMwLTraw", "DiscriminationByIsolationMVArun2v1PWdR03oldDMwLTraw"),
161  ("byVLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVLooseIsolationMVArun2v1PWdR03oldDMwLT"),
162  ("byLooseIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByLooseIsolationMVArun2v1PWdR03oldDMwLT"),
163  ("byMediumIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByMediumIsolationMVArun2v1PWdR03oldDMwLT"),
164  ("byTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByTightIsolationMVArun2v1PWdR03oldDMwLT"),
165  ("byVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVTightIsolationMVArun2v1PWdR03oldDMwLT"),
166  ("byVVTightIsolationMVArun2v1PWdR03oldDMwLT", "DiscriminationByVVTightIsolationMVArun2v1PWdR03oldDMwLT"),
167  ("againstElectronMVA6Raw", "DiscriminationByMVA6rawElectronRejection"),
168  ("againstElectronMVA6category", "DiscriminationByMVA6rawElectronRejection:category"),
169  ("againstElectronVLooseMVA6", "DiscriminationByMVA6VLooseElectronRejection"),
170  ("againstElectronLooseMVA6", "DiscriminationByMVA6LooseElectronRejection"),
171  ("againstElectronMediumMVA6", "DiscriminationByMVA6MediumElectronRejection"),
172  ("againstElectronTightMVA6", "DiscriminationByMVA6TightElectronRejection"),
173  ("againstElectronVTightMVA6", "DiscriminationByMVA6VTightElectronRejection"),
174 ]
175 
176 # switch to PFTau collection produced for fixed dR = 0.07 signal cone size
177 def switchToPFTauFixedCone(process,
178  tauSource = cms.InputTag('fixedConePFTauProducer'),
179  patTauLabel = "",
180  postfix = ""):
181  fixedConeIDSources = copy.copy(classicTauIDSources)
182  fixedConeIDSources.extend(classicPFTauIDSources)
183 
184  _switchToPFTau(process, tauSource, 'fixedConePFTau', fixedConeIDSources,
185  patTauLabel = patTauLabel, postfix = postfix)
186 
187 # switch to PFTau collection produced for shrinking signal cone of size dR = 5.0/Et(PFTau)
188 def switchToPFTauShrinkingCone(process,
189  tauSource = cms.InputTag('shrinkingConePFTauProducer'),
190  patTauLabel = "",
191  postfix = ""):
192  shrinkingIDSources = copy.copy(classicTauIDSources)
193  shrinkingIDSources.extend(classicPFTauIDSources)
194 
195  _switchToPFTau(process, tauSource, 'shrinkingConePFTau', shrinkingIDSources,
196  patTauLabel = patTauLabel, postfix = postfix)
197 
198 # switch to hadron-plus-strip(s) (HPS) PFTau collection
199 def switchToPFTauHPS(process,
200  tauSource = cms.InputTag('hpsPFTauProducer'),
201  patTauLabel = "",
202  jecLevels = [],
203  postfix = ""):
204 
205  _switchToPFTau(process, tauSource, 'hpsPFTau', hpsTauIDSources,
206  patTauLabel = patTauLabel, postfix = postfix)
207 
208  # CV: enable tau lifetime information for HPS PFTaus
209  applyPostfix(process, "patTaus" + patTauLabel, postfix).tauTransverseImpactParameterSource = tauSource.value().replace("Producer", "TransverseImpactParameters")
210 
211  ## adapt cleanPatTaus
212  if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
213  getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = preselection
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:180
def applyPostfix
Definition: tauTools.py:9
def _switchToPFTau
Definition: tauTools.py:58
def switchToCaloTau
Definition: tauTools.py:21
def _buildIDSourcePSet
Definition: tauTools.py:42
def switchToPFTauHPS
Definition: tauTools.py:203
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
def switchToPFTauShrinkingCone
Definition: tauTools.py:191
def switchToPFTauByType
Definition: tauTools.py:220