00001 import FWCore.ParameterSet.Config as cms
00002
00003 from PhysicsTools.PatAlgos.tools.coreTools import *
00004 from FWCore.GuiBrowsers.ConfigToolBase import *
00005 from PhysicsTools.PatAlgos.tools.helpers import applyPostfix
00006 from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet
00007 from RecoTauTag.RecoTau.TauDiscriminatorTools import *
00008
00009 def redoPFTauDiscriminators(process,
00010 oldPFTauLabel = cms.InputTag('hpsPFTauProducer'),
00011 newPFTauLabel = cms.InputTag('hpsPFTauProducer'),
00012 tauType = 'hpsPFTau', postfix = ""):
00013 print 'Tau discriminators: ', oldPFTauLabel, '->', newPFTauLabel
00014 print 'Tau type: ', tauType
00015
00016 tauSrc = 'PFTauProducer'
00017
00018 tauDiscriminationSequence = None
00019
00020 if tauType == 'hpsPFTau':
00021 process.patHPSPFTauDiscrimination = process.produceAndDiscriminateHPSPFTaus.copy()
00022
00023 for iname in process.patHPSPFTauDiscrimination.moduleNames():
00024 if not (iname.find("DiscriminationBy")>-1 or iname.find("DiscriminationAgainst")>-1):
00025 process.patHPSPFTauDiscrimination.remove(getattr(process,iname) )
00026 tauDiscriminationSequence = cloneProcessingSnippet(process, process.patHPSPFTauDiscrimination, postfix)
00027
00028 elif tauType == 'hpsTancTaus':
00029 process.patHPSTaNCPFTauDiscrimination = process.hpsTancTauInitialSequence.copy()
00030 process.patHPSTaNCPFTauDiscrimination *= process.hpsTancTauDiscriminantSequence
00031
00032 for iname in process.patHPSTaNCPFTauDiscrimination.moduleNames():
00033 if not (iname.find("DiscriminationBy")>-1 or iname.find("DiscriminationAgainst")>-1):
00034 process.patHPSTaNCPFTauDiscrimination.remove(getattr(process,iname) )
00035 tauDiscriminationSequence = cloneProcessingSnippet(process, process.patHPSTaNCPFTauDiscrimination, postfix)
00036
00037 elif tauType == 'fixedConePFTau':
00038 process.patFixedConePFTauDiscrimination = process.produceAndDiscriminateFixedConePFTaus.copy()
00039
00040 for iname in process.patFixedConePFTauDiscrimination.moduleNames():
00041 if not (iname.find("DiscriminationBy")>-1 or iname.find("DiscriminationAgainst")>-1):
00042 process.patFixedConePFTauDiscrimination.remove(getattr(process,iname) )
00043 tauDiscriminationSequence = cloneProcessingSnippet(process, process.patFixedConePFTauDiscrimination, postfix)
00044
00045 elif tauType == 'shrinkingConePFTau':
00046 process.patShrinkingConePFTauDiscrimination = process.produceAndDiscriminateShrinkingConePFTaus.copy()
00047 process.patShrinkingConePFTauDiscrimination *= process.produceShrinkingConeDiscriminationByTauNeuralClassifier
00048
00049 for iname in process.patShrinkingConePFTauDiscrimination.moduleNames():
00050 if not (iname.find("DiscriminationBy")>-1 or iname.find("DiscriminationAgainst")>-1):
00051 process.patShrinkingConePFTauDiscrimination.remove(getattr(process,iname) )
00052 tauDiscriminationSequence = cloneProcessingSnippet(process, process.patShrinkingConePFTauDiscrimination, postfix)
00053
00054 elif tauType == 'caloTau':
00055
00056 process.patCaloTauDiscrimination = process.tautagging.copy()
00057
00058 for iname in process.patCaloTauDiscrimination.moduleNames():
00059 if not (iname.find("DiscriminationBy")>-1 or iname.find("DiscriminationAgainst")>-1):
00060 process.patCaloTauDiscrimination.remove(getattr(process,iname) )
00061 tauDiscriminationSequence = cloneProcessingSnippet(process, process.patCaloTauDiscrimination, postfix)
00062 tauSrc = 'CaloTauProducer'
00063 else:
00064 raise StandardError, "Unkown tauType: '%s'"%tauType
00065
00066 applyPostfix(process,"patDefaultSequence",postfix).replace(
00067 applyPostfix(process,"patTaus",postfix),
00068 tauDiscriminationSequence*applyPostfix(process,"patTaus",postfix)
00069 )
00070
00071 massSearchReplaceParam(tauDiscriminationSequence, tauSrc, oldPFTauLabel, newPFTauLabel)
00072
00073
00074 def switchToCaloTau(process,
00075 pfTauLabelOld = cms.InputTag('hpsPFTauProducer'),
00076 pfTauLabelNew = cms.InputTag('caloRecoTauProducer'),
00077 patTauLabel = "",
00078 postfix = ""):
00079 print ' Taus: ', pfTauLabelOld, '->', pfTauLabelNew
00080
00081 caloTauLabel = pfTauLabelNew
00082 applyPostfix(process, "tauMatch" + patTauLabel, postfix).src = caloTauLabel
00083 applyPostfix(process, "tauGenJetMatch"+ patTauLabel, postfix).src = caloTauLabel
00084
00085 applyPostfix(process, "patTaus" + patTauLabel, postfix).tauSource = caloTauLabel
00086 applyPostfix(process, "patTaus" + patTauLabel, postfix).tauIDSources = _buildIDSourcePSet('caloRecoTau', classicTauIDSources, postfix)
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 print "NO PF Isolation will be computed for CaloTau (this could be improved later)"
00098 applyPostfix(process, "patTaus" + patTauLabel, postfix).isolation = cms.PSet()
00099 applyPostfix(process, "patTaus" + patTauLabel, postfix).isoDeposits = cms.PSet()
00100 applyPostfix(process, "patTaus" + patTauLabel, postfix).userIsolation = cms.PSet()
00101
00102
00103
00104
00105
00106
00107 if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
00108 getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = \
00109 'tauID("leadingTrackFinding") > 0.5 & tauID("leadingTrackPtCut") > 0.5' \
00110 + ' & tauID("byIsolation") > 0.5 & tauID("againstElectron") > 0.5 & (signalTracks.size() = 1 | signalTracks.size() = 3)'
00111
00112 def _buildIDSourcePSet(pfTauType, idSources, postfix =""):
00113 """ Build a PSet defining the tau ID sources to embed into the pat::Tau """
00114 output = cms.PSet()
00115 for label, discriminator in idSources:
00116 setattr(output, label, cms.InputTag(pfTauType + discriminator + postfix))
00117 return output
00118
00119 def _switchToPFTau(process,
00120 pfTauLabelOld,
00121 pfTauLabelNew,
00122 pfTauType,
00123 idSources,
00124 jecLevels, jecPayloadMapping,
00125 patTauLabel = "",
00126 postfix = ""):
00127 """internal auxiliary function to switch to **any** PFTau collection"""
00128 print ' Taus: ', pfTauLabelOld, '->', pfTauLabelNew
00129
00130 applyPostfix(process, "tauMatch" + patTauLabel, postfix).src = pfTauLabelNew
00131 applyPostfix(process, "tauGenJetMatch" + patTauLabel, postfix).src = pfTauLabelNew
00132
00133 applyPostfix(process, "tauIsoDepositPFCandidates" + patTauLabel, postfix).src = pfTauLabelNew
00134 applyPostfix(process, "tauIsoDepositPFCandidates" + patTauLabel, postfix).ExtractorPSet.tauSource = pfTauLabelNew
00135 applyPostfix(process, "tauIsoDepositPFChargedHadrons" + patTauLabel, postfix).src = pfTauLabelNew
00136 applyPostfix(process, "tauIsoDepositPFChargedHadrons" + patTauLabel, postfix).ExtractorPSet.tauSource = pfTauLabelNew
00137 applyPostfix(process, "tauIsoDepositPFNeutralHadrons" + patTauLabel, postfix).src = pfTauLabelNew
00138 applyPostfix(process, "tauIsoDepositPFNeutralHadrons" + patTauLabel, postfix).ExtractorPSet.tauSource = pfTauLabelNew
00139 applyPostfix(process, "tauIsoDepositPFGammas" + patTauLabel, postfix).src = pfTauLabelNew
00140 applyPostfix(process, "tauIsoDepositPFGammas" + patTauLabel, postfix).ExtractorPSet.tauSource = pfTauLabelNew
00141
00142
00143
00144
00145
00146
00147
00148
00149 applyPostfix(process, "patTaus" + patTauLabel, postfix).tauSource = pfTauLabelNew
00150 applyPostfix(process, "patTaus" + patTauLabel, postfix).tauIDSources = _buildIDSourcePSet(pfTauType, idSources, postfix)
00151
00152 if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
00153 getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = \
00154 'tauID("leadingTrackFinding") > 0.5 & tauID("leadingPionPtCut") > 0.5 & tauID("byIsolationUsingLeadingPion") > 0.5' \
00155 + ' & tauID("againstMuon") > 0.5 & tauID("againstElectron") > 0.5' \
00156 + ' & (signalPFChargedHadrCands.size() = 1 | signalPFChargedHadrCands.size() = 3)'
00157
00158
00159 classicTauIDSources = [
00160 ("leadingTrackFinding", "DiscriminationByLeadingTrackFinding"),
00161 ("leadingTrackPtCut", "DiscriminationByLeadingTrackPtCut"),
00162 ("trackIsolation", "DiscriminationByTrackIsolation"),
00163 ("ecalIsolation", "DiscriminationByECALIsolation"),
00164 ("byIsolation", "DiscriminationByIsolation"),
00165 ("againstElectron", "DiscriminationAgainstElectron"),
00166 ("againstMuon", "DiscriminationAgainstMuon") ]
00167
00168 classicPFTauIDSources = [
00169 ("leadingPionPtCut", "DiscriminationByLeadingPionPtCut"),
00170 ("trackIsolationUsingLeadingPion", "DiscriminationByTrackIsolationUsingLeadingPion"),
00171 ("ecalIsolationUsingLeadingPion", "DiscriminationByECALIsolationUsingLeadingPion"),
00172 ("byIsolationUsingLeadingPion", "DiscriminationByIsolationUsingLeadingPion")]
00173
00174
00175 tancTauIDSources = [
00176 ("byTaNC", "DiscriminationByTaNC"),
00177 ("byTaNCfrOnePercent", "DiscriminationByTaNCfrOnePercent"),
00178 ("byTaNCfrHalfPercent", "DiscriminationByTaNCfrHalfPercent"),
00179 ("byTaNCfrQuarterPercent", "DiscriminationByTaNCfrQuarterPercent"),
00180 ("byTaNCfrTenthPercent", "DiscriminationByTaNCfrTenthPercent") ]
00181
00182
00183 hpsTauIDSources = [
00184 ("decayModeFinding", "DiscriminationByDecayModeFinding"),
00185 ("byVLooseIsolation", "DiscriminationByVLooseIsolation"),
00186 ("byLooseIsolation", "DiscriminationByLooseIsolation"),
00187 ("byMediumIsolation", "DiscriminationByMediumIsolation"),
00188 ("byTightIsolation", "DiscriminationByTightIsolation"),
00189 ("byVLooseIsolationDeltaBetaCorr", "DiscriminationByVLooseIsolationDBSumPtCorr"),
00190 ("byLooseIsolationDeltaBetaCorr", "DiscriminationByLooseIsolationDBSumPtCorr"),
00191 ("byMediumIsolationDeltaBetaCorr", "DiscriminationByMediumIsolationDBSumPtCorr"),
00192 ("byTightIsolationDeltaBetaCorr", "DiscriminationByTightIsolationDBSumPtCorr"),
00193 ("byVLooseCombinedIsolationDeltaBetaCorr", "DiscriminationByVLooseCombinedIsolationDBSumPtCorr"),
00194 ("byLooseCombinedIsolationDeltaBetaCorr", "DiscriminationByLooseCombinedIsolationDBSumPtCorr"),
00195 ("byMediumCombinedIsolationDeltaBetaCorr", "DiscriminationByMediumCombinedIsolationDBSumPtCorr"),
00196 ("byTightCombinedIsolationDeltaBetaCorr", "DiscriminationByTightCombinedIsolationDBSumPtCorr"),
00197 ("againstElectronLoose", "DiscriminationByLooseElectronRejection"),
00198 ("againstElectronMedium", "DiscriminationByMediumElectronRejection"),
00199 ("againstElectronTight", "DiscriminationByTightElectronRejection"),
00200 ("againstElectronMVA", "DiscriminationByMVAElectronRejection"),
00201 ("againstMuonLoose", "DiscriminationByLooseMuonRejection"),
00202 ("againstMuonMedium", "DiscriminationByMediumMuonRejection"),
00203 ("againstMuonTight", "DiscriminationByTightMuonRejection") ]
00204
00205
00206 hpsTancTauIDSources = [
00207 ("leadingTrackFinding", "DiscriminationByLeadingTrackFinding"),
00208 ("leadingTrackPtCut", "DiscriminationByLeadingTrackPtCut"),
00209 ("leadingPionPtCut", "DiscriminationByLeadingPionPtCut"),
00210 ("byTaNCraw", "DiscriminationByTancRaw"),
00211 ("byTaNC", "DiscriminationByTanc"),
00212 ("byTaNCvloose", "DiscriminationByTancVLoose"),
00213 ("byTaNCloose", "DiscriminationByTancLoose"),
00214 ("byTaNCmedium", "DiscriminationByTancMedium"),
00215 ("byTaNCtight", "DiscriminationByTancTight"),
00216 ("decayModeFinding", "DiscriminationByDecayModeSelection"),
00217 ("byHPSvloose", "DiscriminationByVLooseIsolation"),
00218 ("byHPSloose", "DiscriminationByLooseIsolation"),
00219 ("byHPSmedium", "DiscriminationByMediumIsolation"),
00220 ("byHPStight", "DiscriminationByTightIsolation"),
00221 ("againstElectronLoose", "DiscriminationByLooseElectronRejection"),
00222 ("againstElectronMedium", "DiscriminationByMediumElectronRejection"),
00223 ("againstElectronTight", "DiscriminationByTightElectronRejection"),
00224 ("againstMuonLoose", "DiscriminationByLooseMuonRejection"),
00225 ("againstMuonTight", "DiscriminationByTightMuonRejection") ]
00226
00227
00228 from RecoTauTag.TauTagTools.tauDecayModes_cfi import *
00229 pfTauJECpayloadMapping = cms.VPSet(
00230 cms.PSet(
00231 payload = cms.string('AK5tauHPSlooseCombDBcorrOneProng0Pi0'),
00232 decayModes = cms.vstring('%i' % tauToOneProng0PiZero)
00233 ),
00234 cms.PSet(
00235 payload = cms.string('AK5tauHPSlooseCombDBcorrOneProng1Pi0'),
00236 decayModes = cms.vstring('%i' % tauToOneProng1PiZero)
00237 ),
00238 cms.PSet(
00239 payload = cms.string('AK5tauHPSlooseCombDBcorrOneProng2Pi0'),
00240 decayModes = cms.vstring('%i' % tauToOneProng2PiZero)
00241 ),
00242 cms.PSet(
00243 payload = cms.string('AK5tauHPSlooseCombDBcorrThreeProng0Pi0'),
00244 decayModes = cms.vstring('%i' % tauToThreeProng0PiZero)
00245 ),
00246 cms.PSet(
00247 payload = cms.string('AK5tauHPSlooseCombDBcorr'),
00248 decayModes = cms.vstring('*')
00249 )
00250 )
00251
00252
00253 def switchToPFTauFixedCone(process,
00254 pfTauLabelOld = cms.InputTag('hpsPFTauProducer'),
00255 pfTauLabelNew = cms.InputTag('fixedConePFTauProducer'),
00256 patTauLabel = "",
00257 jecLevels = [],
00258 postfix = ""):
00259 fixedConeIDSources = copy.copy(classicTauIDSources)
00260 fixedConeIDSources.extend(classicPFTauIDSources)
00261
00262 fixedConeJECpayloadMapping = pfTauJECpayloadMapping
00263
00264 _switchToPFTau(process, pfTauLabelOld, pfTauLabelNew, 'fixedConePFTau', fixedConeIDSources,
00265 jecLevels, fixedConeJECpayloadMapping,
00266 patTauLabel = patTauLabel, postfix = postfix)
00267
00268
00269 def switchToPFTauShrinkingCone(process,
00270 pfTauLabelOld = cms.InputTag('hpsPFTauProducer'),
00271 pfTauLabelNew = cms.InputTag('shrinkingConePFTauProducer'),
00272 patTauLabel = "",
00273 jecLevels = [],
00274 postfix = ""):
00275 shrinkingIDSources = copy.copy(classicTauIDSources)
00276 shrinkingIDSources.extend(classicPFTauIDSources)
00277
00278 shrinkingIDSources.extend(tancTauIDSources)
00279
00280 shrinkingConeJECpayloadMapping = pfTauJECpayloadMapping
00281
00282 _switchToPFTau(process, pfTauLabelOld, pfTauLabelNew, 'shrinkingConePFTau', shrinkingIDSources,
00283 jecLevels, shrinkingConeJECpayloadMapping,
00284 patTauLabel = patTauLabel, postfix = postfix)
00285
00286
00287 def switchToPFTauHPS(process,
00288 pfTauLabelOld = cms.InputTag('hpsPFTauProducer'),
00289 pfTauLabelNew = cms.InputTag('hpsPFTauProducer'),
00290 patTauLabel = "",
00291 jecLevels = [],
00292 postfix = ""):
00293
00294 hpsTauJECpayloadMapping = pfTauJECpayloadMapping
00295
00296 _switchToPFTau(process, pfTauLabelOld, pfTauLabelNew, 'hpsPFTau', hpsTauIDSources,
00297 jecLevels, hpsTauJECpayloadMapping,
00298 patTauLabel = patTauLabel, postfix = postfix)
00299
00300
00301 if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
00302 getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = \
00303 'pt > 15 & abs(eta) < 2.3 & tauID("decayModeFinding") > 0.5 & tauID("byLooseIsolation") > 0.5' \
00304 + ' & tauID("againstMuonTight") > 0.5 & tauID("againstElectronLoose") > 0.5'
00305
00306
00307 def switchToPFTauHPSpTaNC(process,
00308 pfTauLabelOld = cms.InputTag('hpsPFTauProducer'),
00309 pfTauLabelNew = cms.InputTag('hpsTancTaus'),
00310 patTauLabel = "",
00311 jecLevels = [],
00312 postfix = ""):
00313
00314 hpsTancTauJECpayloadMapping = pfTauJECpayloadMapping
00315
00316 _switchToPFTau(process, pfTauLabelOld, pfTauLabelNew, 'hpsTancTaus', hpsTancTauIDSources,
00317 jecLevels, hpsTancTauJECpayloadMapping,
00318 patTauLabel = patTauLabel, postfix = postfix)
00319
00320
00321 if hasattr(process, "cleanPatTaus" + patTauLabel + postfix):
00322 getattr(process, "cleanPatTaus" + patTauLabel + postfix).preselection = \
00323 'pt > 15 & abs(eta) < 2.3 & tauID("decayModeFinding") > 0.5 & tauID("byHPSloose") > 0.5' \
00324 + ' & tauID("againstMuonTight") > 0.5 & tauID("againstElectronLoose") > 0.5'
00325
00326
00327 def switchToPFTauByType(process,
00328 pfTauType = None,
00329 pfTauLabelNew = None,
00330 pfTauLabelOld = cms.InputTag('hpsPFTauProducer'),
00331 patTauLabel = "",
00332 jecLevels = [],
00333 postfix = "" ):
00334 mapping = { 'shrinkingConePFTau' : switchToPFTauShrinkingCone,
00335 'fixedConePFTau' : switchToPFTauFixedCone,
00336 'hpsPFTau' : switchToPFTauHPS,
00337 'caloRecoTau' : switchToCaloTau,
00338 'hpsTancPFTau' : switchToPFTauHPSpTaNC }
00339 mapping[pfTauType](process, pfTauLabelOld = pfTauLabelOld, pfTauLabelNew = pfTauLabelNew,
00340 jecLevels = jecLevels,
00341 patTauLabel = patTauLabel, postfix = postfix)
00342
00343
00344 def switchTo31Xdefaults(process):
00345 switchToPFTauFixedCone(process)
00346 process.cleanPatTaus.preselection = cms.string('tauID("byIsolation") > 0')
00347
00348 class AddTauCollection(ConfigToolBase):
00349
00350 """ Add a new collection of taus. Takes the configuration from the
00351 already configured standard tau collection as starting point;
00352 replaces before calling addTauCollection will also affect the
00353 new tau collections
00354 """
00355 _label='addTauCollection'
00356 _defaultParameters=dicttypes.SortedKeysDict()
00357 def __init__(self):
00358 ConfigToolBase.__init__(self)
00359 self.addParameter(self._defaultParameters, 'tauCollection',
00360 self._defaultValue, 'Input tau collection', cms.InputTag)
00361 self.addParameter(self._defaultParameters, 'algoLabel',
00362 self._defaultValue, "label to indicate the tau algorithm (e.g.'hps')", str)
00363 self.addParameter(self._defaultParameters, 'typeLabel',
00364 self._defaultValue, "label to indicate the type of constituents (either 'PFTau' or 'Tau')", str)
00365 self.addParameter(self._defaultParameters, 'doPFIsoDeposits',
00366 True, "run sequence for computing particle-flow based IsoDeposits")
00367
00368
00369
00370 self.addParameter(self._defaultParameters, 'jetCorrLabel',
00371 None, "payload and list of new jet correction labels", tuple, acceptNoneValue = True)
00372 self.addParameter(self._defaultParameters, 'standardAlgo',
00373 "hps", "standard algorithm label of the collection from which the clones " \
00374 + "for the new tau collection will be taken from " \
00375 + "(note that this tau collection has to be available in the event before hand)")
00376 self.addParameter(self._defaultParameters, 'standardType',
00377 "PFTau", "standard constituent type label of the collection from which the clones " \
00378 + " for the new tau collection will be taken from "\
00379 + "(note that this tau collection has to be available in the event before hand)")
00380
00381 self._parameters=copy.deepcopy(self._defaultParameters)
00382 self._comment = ""
00383
00384 def getDefaultParameters(self):
00385 return self._defaultParameters
00386
00387 def __call__(self,process,
00388 tauCollection = None,
00389 algoLabel = None,
00390 typeLabel = None,
00391 doPFIsoDeposits = None,
00392 jetCorrLabel = None,
00393 standardAlgo = None,
00394 standardType = None):
00395
00396 if tauCollection is None:
00397 tauCollection = self._defaultParameters['tauCollection'].value
00398 if algoLabel is None:
00399 algoLabel = self._defaultParameters['algoLabel'].value
00400 if typeLabel is None:
00401 typeLabel = self._defaultParameters['typeLabel'].value
00402 if doPFIsoDeposits is None:
00403 doPFIsoDeposits = self._defaultParameters['doPFIsoDeposits'].value
00404 if jetCorrLabel is None:
00405 jetCorrLabel = self._defaultParameters['jetCorrLabel'].value
00406 if standardAlgo is None:
00407 standardAlgo = self._defaultParameters['standardAlgo'].value
00408 if standardType is None:
00409 standardType = self._defaultParameters['standardType'].value
00410
00411 self.setParameter('tauCollection', tauCollection)
00412 self.setParameter('algoLabel', algoLabel)
00413 self.setParameter('typeLabel', typeLabel)
00414 self.setParameter('doPFIsoDeposits', doPFIsoDeposits)
00415 self.setParameter('jetCorrLabel', jetCorrLabel)
00416 self.setParameter('standardAlgo', standardAlgo)
00417 self.setParameter('standardType', standardType)
00418
00419 self.apply(process)
00420
00421 def toolCode(self, process):
00422 tauCollection = self._parameters['tauCollection'].value
00423 algoLabel = self._parameters['algoLabel'].value
00424 typeLabel = self._parameters['typeLabel'].value
00425 doPFIsoDeposits = self._parameters['doPFIsoDeposits'].value
00426 jetCorrLabel = self._parameters['jetCorrLabel'].value
00427 standardAlgo = self._parameters['standardAlgo'].value
00428 standardType = self._parameters['standardType'].value
00429
00430
00431
00432 if typeLabel == 'Tau':
00433
00434 doPFIsoDeposits = False
00435
00436
00437
00438 def oldLabel(prefix = ''):
00439 if prefix == '':
00440 return "patTaus"
00441 else:
00442 return prefix + "PatTaus"
00443
00444
00445
00446
00447 def capitalize(label):
00448 return label[0].capitalize() + label[1:]
00449
00450
00451
00452 def newLabel(oldLabel):
00453 newLabel = oldLabel
00454 if ( oldLabel.find(standardAlgo) >= 0 and oldLabel.find(standardType) >= 0 ):
00455 oldLabel = oldLabel.replace(standardAlgo, algoLabel).replace(standardType, typeLabel)
00456 else:
00457 oldLabel = oldLabel + capitalize(algoLabel + typeLabel)
00458 return oldLabel
00459
00460
00461 def addClone(hook, **replaceStatements):
00462
00463
00464 newModule = getattr(process, hook).clone(**replaceStatements)
00465
00466 addModuleToSequence(hook, newModule)
00467
00468
00469 def addPFIsoDepositClone(hook, **replaceStatements):
00470 newModule = getattr(process, hook).clone(**replaceStatements)
00471 newModuleIsoDepositExtractor = getattr(newModule, "ExtractorPSet")
00472 setattr(newModuleIsoDepositExtractor, "tauSource", getattr(newModule, "src"))
00473 addModuleToSequence(hook, newModule)
00474
00475
00476 def addModuleToSequence(hook, newModule):
00477 hookModule = getattr(process, hook)
00478
00479
00480 setattr(process, newLabel(hook), newModule)
00481
00482
00483 process.patDefaultSequence.replace( hookModule, hookModule*newModule )
00484
00485
00486 addClone(oldLabel(), tauSource = tauCollection)
00487
00488
00489 addClone(oldLabel('selected'), src = cms.InputTag(newLabel(oldLabel())))
00490
00491
00492 addClone(oldLabel('clean'), src=cms.InputTag(newLabel(oldLabel('selected'))))
00493
00494
00495 newTaus = getattr(process, newLabel(oldLabel()))
00496
00497
00498 addClone('tauMatch', src = tauCollection)
00499 addClone('tauGenJetMatch', src = tauCollection)
00500
00501
00502 if doPFIsoDeposits:
00503 addPFIsoDepositClone('tauIsoDepositPFCandidates', src = tauCollection)
00504 addPFIsoDepositClone('tauIsoDepositPFChargedHadrons', src = tauCollection)
00505 addPFIsoDepositClone('tauIsoDepositPFNeutralHadrons', src = tauCollection)
00506 addPFIsoDepositClone('tauIsoDepositPFGammas', src = tauCollection)
00507
00508 if jetCorrLabel:
00509 addClone('patTauJetCorrFactors', src = tauCollection)
00510 getattr(process,newLabel('patTauJetCorrFactors')).payload = jetCorrLabel[0]
00511 getattr(process,newLabel('patTauJetCorrFactors')).levels = jetCorrLabel[1]
00512 getattr(process, newLabel('patTaus')).tauJetCorrFactorsSource = cms.VInputTag(cms.InputTag(newLabel('patTauJetCorrFactors')))
00513
00514
00515 def fixInputTag(x): x.setModuleLabel(newLabel(x.moduleLabel))
00516
00517
00518 fixInputTag(newTaus.genParticleMatch)
00519 fixInputTag(newTaus.genJetMatch)
00520 fixInputTag(newTaus.isoDeposits.pfAllParticles)
00521 fixInputTag(newTaus.isoDeposits.pfNeutralHadron)
00522 fixInputTag(newTaus.isoDeposits.pfChargedHadron)
00523 fixInputTag(newTaus.isoDeposits.pfGamma)
00524 fixInputTag(newTaus.userIsolation.pfAllParticles.src)
00525 fixInputTag(newTaus.userIsolation.pfNeutralHadron.src)
00526 fixInputTag(newTaus.userIsolation.pfChargedHadron.src)
00527 fixInputTag(newTaus.userIsolation.pfGamma.src)
00528
00529
00530
00531 oldTaus = getattr(process, oldLabel())
00532
00533
00534
00535
00536
00537
00538 switchToPFTauByType(process, pfTauType = algoLabel + typeLabel,
00539 pfTauLabelNew = getattr(newTaus, "tauSource"),
00540 pfTauLabelOld = getattr(oldTaus, "tauSource"),
00541 patTauLabel = capitalize(algoLabel + typeLabel))
00542
00543 addTauCollection=AddTauCollection()