CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RecoTauCombinatoricProducer_cfi.py
Go to the documentation of this file.
1 
2 import FWCore.ParameterSet.Config as cms
3 from RecoTauTag.RecoTau.PFRecoTauQualityCuts_cfi import PFTauQualityCuts
4 from RecoTauTag.RecoTau.PFRecoTauEnergyAlgorithmPlugin_cfi import pfTauEnergyAlgorithmPlugin
5 from RecoTauTag.RecoTau.PFRecoTauPFJetInputs_cfi import PFRecoTauPFJetInputs
6 '''
7 
8 Configuration for combinatoric PFTau producer plugins.
9 
10 Note that this plugin produces many taus for each PFJet!
11 To be useful the output from this module must be cleaned
12 using an implementation of the RecoTauCleaner module.
13 
14 Author: Evan K. Friis, UC Davis
15 
16 
17 '''
18 
19 # N.B. for combinatoric taus that worst-case scaling
20 # is (maxTracks choose dmTracks) * (maxPiZeros choose dmPiZeros)
21 #
22 # So for decay mode 11 (3 tracks, 1 pizero), with 10 for both
23 #
24 # (10 choose 3) * (10 choose 1) = 1200!
25 
26 # Configurations for the different decay modes
27 
28 combinatoricDecayModeConfigs = cms.PSet(
29  config1prong0pi0 = cms.PSet(
30  # One prong no pizero mode
31  nCharged = cms.uint32(1),
32  nPiZeros = cms.uint32(0),
33  maxTracks = cms.uint32(6),
34  maxPiZeros = cms.uint32(0),
35  ),
36  config1prong1pi0 = cms.PSet(
37  #One prong one pizero mode
38  nCharged = cms.uint32(1),
39  nPiZeros = cms.uint32(1),
40  maxTracks = cms.uint32(6),
41  maxPiZeros = cms.uint32(6),
42  ),
43  config1prong2pi0 = cms.PSet(
44  #One prong two pizero mode
45  nCharged = cms.uint32(1),
46  nPiZeros = cms.uint32(2),
47  maxTracks = cms.uint32(6),
48  maxPiZeros = cms.uint32(5),
49  ),
50  config2prong0pi0 = cms.PSet(
51  # Three prong no pizero mode (one of the tracks failed to get reconstructed)
52  nCharged = cms.uint32(2),
53  nPiZeros = cms.uint32(0),
54  maxTracks = cms.uint32(6),
55  maxPiZeros = cms.uint32(0),
56  ),
57  config2prong1pi0 = cms.PSet(
58  # Three prong one pizero mode (one of the tracks failed to get reconstructed)
59  nCharged = cms.uint32(2),
60  nPiZeros = cms.uint32(1),
61  maxTracks = cms.uint32(6),
62  maxPiZeros = cms.uint32(3),
63  ),
64  config3prong0pi0 = cms.PSet(
65  # Three prong no pizero mode
66  nCharged = cms.uint32(3),
67  nPiZeros = cms.uint32(0),
68  maxTracks = cms.uint32(6),
69  maxPiZeros = cms.uint32(0),
70  )
71 )
72 
73 _combinatoricTauConfig = cms.PSet(
74  name = cms.string("combinatoric"),
75  plugin = cms.string("RecoTauBuilderCombinatoricPlugin"),
76  pfCandSrc = cms.InputTag("particleFlow"),
77  isolationConeSize = PFRecoTauPFJetInputs.isolationConeSize,
78  qualityCuts = PFTauQualityCuts,
79  decayModes = cms.VPSet(
80  combinatoricDecayModeConfigs.config1prong0pi0,
81  combinatoricDecayModeConfigs.config1prong1pi0,
82  combinatoricDecayModeConfigs.config1prong2pi0,
83  combinatoricDecayModeConfigs.config2prong0pi0,
84  combinatoricDecayModeConfigs.config2prong1pi0,
85  combinatoricDecayModeConfigs.config3prong0pi0
86  ),
87  signalConeSize = cms.string("max(min(0.1, 3.0/pt()), 0.05)"),
88  minAbsPhotonSumPt_insideSignalCone = cms.double(2.5),
89  minRelPhotonSumPt_insideSignalCone = cms.double(0.10),
90  minAbsPhotonSumPt_outsideSignalCone = cms.double(1.e+9), # CV: always require at least some photon energy inside signal cone
91  minRelPhotonSumPt_outsideSignalCone = cms.double(1.e+9) # for a tau to be reconstructed in a decay mode with pi0s
92 )
93 
94 combinatoricRecoTaus = cms.EDProducer("RecoTauProducer",
95  jetSrc = PFRecoTauPFJetInputs.inputJetCollection,
96  minJetPt = PFRecoTauPFJetInputs.minJetPt,
97  maxJetAbsEta = PFRecoTauPFJetInputs.maxJetAbsEta,
98  jetRegionSrc = cms.InputTag("recoTauAK4PFJets08Region"),
99  chargedHadronSrc = cms.InputTag('ak4PFJetsRecoTauChargedHadrons'),
100  piZeroSrc = cms.InputTag("ak4PFJetsRecoTauPiZeros"),
101  buildNullTaus = cms.bool(True),
102  # Make maximum size from which to collect isolation cone objects, w.r.t to
103  # the axis of the signal cone objects
104  builders = cms.VPSet(
105  _combinatoricTauConfig
106  ),
107  modifiers = cms.VPSet(
108  cms.PSet(
109  name = cms.string("sipt"),
110  plugin = cms.string("RecoTauImpactParameterSignificancePlugin"),
111  qualityCuts = PFTauQualityCuts,
112  ),
113  # Electron rejection
114  cms.PSet(
115  name = cms.string("elec_rej"),
116  plugin = cms.string("RecoTauElectronRejectionPlugin"),
117  #Electron rejection parameters
118  ElectronPreIDProducer = cms.InputTag("elecpreid"),
119  EcalStripSumE_deltaPhiOverQ_minValue = cms.double(-0.1),
120  EcalStripSumE_deltaPhiOverQ_maxValue = cms.double(0.5),
121  EcalStripSumE_minClusEnergy = cms.double(0.1),
122  EcalStripSumE_deltaEta = cms.double(0.03),
123  ElecPreIDLeadTkMatch_maxDR = cms.double(0.01),
124  maximumForElectrionPreIDOutput = cms.double(-0.1),
125  DataType = cms.string("AOD"),
126  ),
127  # Tau energy reconstruction
128  # (to avoid double-counting of energy carried by neutral PFCandidates
129  # in case PFRecoTauChargedHadrons are built from reco::Tracks)
130  cms.PSet(
131  pfTauEnergyAlgorithmPlugin,
132  name = cms.string("tau_en_reconstruction"),
133  plugin = cms.string("PFRecoTauEnergyAlgorithmPlugin"),
134  verbosity = cms.int32(0)
135  )
136  )
137 )