CMS 3D CMS Logo

TauDiscriminatorTools.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 import six
3 
4 # require the EXISTANCE of a track - not necessarily above any pt cut (above the basic 0.5 GeV filter)
5 leadTrackFinding = cms.PSet(
6  Producer = cms.InputTag('pfRecoTauDiscriminationByLeadingTrackFinding'),
7  cut = cms.double(0.5)
8 )
9 
10 # Require no prediscriminants
11 noPrediscriminants = cms.PSet(
12  BooleanOperator = cms.string("and"),
13  )
14 
15 # Require the existence of a lead track
16 requireLeadTrack = cms.PSet(
17  BooleanOperator = cms.string("and"),
18  leadTrack = leadTrackFinding,
19  )
20 
21 # This is equivalent to the lead track case, and shoudl be deprecated.
22 # Preserved for backwards compatibility
23 requireLeadPion = cms.PSet(
24  BooleanOperator = cms.string("and"),
25  leadPion = leadTrackFinding,
26  )
27 
28 def subParameterSets(pSet):
29  ''' Generator to return all sub-PSets in a PSet '''
30  for name, value in six.iteritems(pSet.parameters_()):
31  if isinstance(value, cms.PSet):
32  yield getattr(pSet, name)
33 
34 # For RECO type taus, where the tau producer is [tauType]Producer
35 import re
36 recoTauTypeMapperRegex = re.compile("(\w*)Producer")
37 def recoTauTypeMapper(tauProducer):
38  return recoTauTypeMapperRegex.match(tauProducer).group(1)
39 
40 # For taus where the producer name is the type, like "allLayer1Taus", etc
41 producerIsTauTypeMapper = lambda tauProducer: tauProducer
42 
43 def adaptTauDiscriminator(discriminator, newTauProducer='shrinkingConePFTauProducer',
44  oldTauTypeMapper=recoTauTypeMapper, newTauTypeMapper=recoTauTypeMapper,
45  preservePFTauProducer = False):
46  ''' Change a TauDiscriminator to use a different tau/prediscriminant sources
47 
48  Tau discriminators use the following convention:
49  [tauType]DiscriminationByXXX
50 
51  i.e. fixedConePFTauDiscriminationByIsolation,
52  allLayer1TausDiscriminationByIsolation, etc
53 
54  However, the mapping of tauType to tau producer name is not constant. In
55  RECO, the form is [tauType]Producer. In PAT, the producer is just named
56  [tauType]. To manage this oldTauTypeMapper and newTauTypeMapper are
57  functions with signature f(str) that translate a TauProducer name (like
58  shrinkingConePFTauProducer) to its type (shrinkingConePFTau). Two types of
59  mapping are provided,
60  * recoTauTypeMapper
61  shrinkingConePFTauProducer->shrinkingConePFTau
62  * producerIsTauTypeMapper
63  allLayer1Taus->allLayer1Taus
64 
65  '''
66 
67  oldTauProducer = discriminator.PFTauProducer
68  if isinstance(newTauProducer, str):
69  newTauProducer = cms.InputTag(newTauProducer)
70 
71  # This is useful for the PF2PAT case where you wish to set the producer name
72  # seperately
73  if not preservePFTauProducer:
74  discriminator.PFTauProducer = newTauProducer
75 
76  oldTauType = oldTauTypeMapper(oldTauProducer.value())
77  newTauType = newTauTypeMapper(newTauProducer.value())
78 
79  replacementRegex = re.compile(oldTauType)
80 
81  # Adapt all the prediscriminants
82  for prediscriminant in subParameterSets(discriminator.Prediscriminants):
83  oldProducer = prediscriminant.Producer.value()
84  # Replace the old tau type by the new tau type in the prediscrimant
85  # producer
86  prediscriminant.Producer = cms.InputTag(replacementRegex.sub(newTauType,
87  oldProducer))
88 
89 def adaptTauDiscriminatorSequence(sequence, **kwargs):
90  def fixer(discriminator):
91  if hasattr(discriminator, "Prediscriminants"):
92  adaptTauDiscriminator(discriminator, **kwargs)
93  sequence.visit(fixer)
94 
95 def setTauSource(discriminator, newTauProducer):
96  ''' Same as adaptTauDiscriminator, kept for backwards compatibility'''
97  adaptTauDiscriminator(discriminator, newTauProducer)
98 
TauDiscriminatorTools.adaptTauDiscriminator
def adaptTauDiscriminator(discriminator, newTauProducer='shrinkingConePFTauProducer', oldTauTypeMapper=recoTauTypeMapper, newTauTypeMapper=recoTauTypeMapper, preservePFTauProducer=False)
Definition: TauDiscriminatorTools.py:43
TauDiscriminatorTools.setTauSource
def setTauSource(discriminator, newTauProducer)
Definition: TauDiscriminatorTools.py:95
TauDiscriminatorTools.recoTauTypeMapper
def recoTauTypeMapper(tauProducer)
Definition: TauDiscriminatorTools.py:37
TauDiscriminatorTools.adaptTauDiscriminatorSequence
def adaptTauDiscriminatorSequence(sequence, **kwargs)
Definition: TauDiscriminatorTools.py:89
TauDiscriminatorTools.subParameterSets
def subParameterSets(pSet)
Definition: TauDiscriminatorTools.py:28
watchdog.group
group
Definition: watchdog.py:82