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