CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/RecoTauTag/Configuration/python/HPSTancTaus_cff.py

Go to the documentation of this file.
00001 import FWCore.ParameterSet.Config as cms
00002 import RecoTauTag.RecoTau.RecoTauCleanerPlugins as cleaners
00003 from RecoTauTag.RecoTau.TauDiscriminatorTools import adaptTauDiscriminator, producerIsTauTypeMapper
00004 from RecoTauTag.RecoTau.PFRecoTauQualityCuts_cfi import PFTauQualityCuts
00005 import copy
00006 
00007 from RecoTauTag.RecoTau.hpstanc_transforms import transforms, cuts
00008 
00009 # Apply the TaNC to the input tau collection
00010 from RecoTauTag.RecoTau.TauDiscriminatorTools import noPrediscriminants
00011 
00012 from RecoTauTag.RecoTau.PFRecoTauDiscriminationByLeadingPionPtCut_cfi import pfRecoTauDiscriminationByLeadingPionPtCut
00013 # Common discrimination by lead pion
00014 combinatoricRecoTausDiscriminationByLeadingPionPtCut = pfRecoTauDiscriminationByLeadingPionPtCut.clone(
00015             PFTauProducer = cms.InputTag("combinatoricRecoTaus")
00016         )
00017 
00018 # Steering file that loads the TaNC database, if necessary.  If unused it will
00019 # be 'None'
00020 from RecoTauTag.Configuration.RecoTauMVAConfiguration_cfi import TauTagMVAComputerRecord, esPreferLocalTancDB
00021 
00022 # Build the tanc discriminates
00023 from RecoTauTag.RecoTau.RecoTauDiscriminantConfiguration import discriminantConfiguration
00024 
00025 combinatoricRecoTausDiscriminationByTanc = cms.EDProducer(
00026     "RecoTauMVADiscriminator",
00027     PFTauProducer = cms.InputTag("combinatoricRecoTaus"),
00028     Prediscriminants = noPrediscriminants,
00029     dbLabel = cms.string("hpstanc"),
00030     remapOutput = cms.bool(True),
00031     mvas = cms.VPSet(
00032         cms.PSet(
00033             nCharged = cms.uint32(1),
00034             nPiZeros = cms.uint32(0),
00035             mvaLabel = cms.string("1prong0pi0"),
00036         ),
00037         cms.PSet(
00038             nCharged = cms.uint32(1),
00039             nPiZeros = cms.uint32(1),
00040             mvaLabel = cms.string("1prong1pi0"),
00041         ),
00042         cms.PSet(
00043             nCharged = cms.uint32(1),
00044             nPiZeros = cms.uint32(2),
00045             mvaLabel = cms.string("1prong2pi0"),
00046         ),
00047         cms.PSet(
00048             nCharged = cms.uint32(3),
00049             nPiZeros = cms.uint32(0),
00050             mvaLabel = cms.string("3prong0pi0"),
00051         ),
00052     ),
00053     discriminantOptions = discriminantConfiguration,
00054 )
00055 
00056 
00057 #Produce the transformed TaNC output
00058 combinatoricRecoTausTancTransform = cms.EDProducer(
00059     "RecoTauMVATransform",
00060     transforms = transforms, # blank for now
00061     PFTauProducer = cms.InputTag("combinatoricRecoTaus"),
00062     toTransform = cms.InputTag("combinatoricRecoTausDiscriminationByTanc"),
00063     Prediscriminants = noPrediscriminants
00064 )
00065 
00066 from RecoTauTag.RecoTau.PFRecoTauDiscriminationByHPSSelection_cfi import hpsSelectionDiscriminator
00067 
00068 combinatoricRecoTausHPSSelector = hpsSelectionDiscriminator.clone(
00069     src = cms.InputTag("combinatoricRecoTaus"),
00070     minTauPt = cms.double(5.),
00071     # Turn off narrowness req.
00072     coneSizeFormula = cms.string('0.3'),
00073 )
00074 
00075 # Clean the taus according to the transformed output
00076 hpsTancTaus = cms.EDProducer(
00077     "RecoTauCleaner",
00078     src = cms.InputTag("combinatoricRecoTaus"),
00079     cleaners = cms.VPSet(
00080         # Prefer taus that don't have charge == 3
00081         cleaners.unitCharge,
00082         # Prefer taus that are within DR<0.1 of the jet axis
00083         cleaners.matchingConeCut,
00084         # Prefer taus that pass the lead pion requirement
00085         cms.PSet(
00086             name = cms.string("lead pion"),
00087             plugin = cms.string("RecoTauDiscriminantCleanerPlugin"),
00088             src = cms.InputTag("combinatoricRecoTausDiscriminationByLeadingPionPtCut")
00089         ),
00090         # Prefer taus that pass the HPS selection
00091         cms.PSet(
00092             name = cms.string("HPS selection"),
00093             plugin = cms.string("RecoTauDiscriminantCleanerPlugin"),
00094             src = cms.InputTag("combinatoricRecoTausHPSSelector")
00095         ),
00096         cleaners.combinedIsolation
00097     )
00098 )
00099 
00100 # Rerun the leading pion cut on our clean taus
00101 hpsTancTausDiscriminationByLeadingPionPtCut = combinatoricRecoTausDiscriminationByLeadingPionPtCut.clone(
00102     PFTauProducer = cms.InputTag("hpsTancTaus")
00103     )
00104 
00105 _leadPionPrediscriminant = cms.PSet(
00106     BooleanOperator = cms.string("and"),
00107     leadPion = cms.PSet(
00108         Producer = cms.InputTag(
00109             'hpsTancTausDiscriminationByLeadingPionPtCut'),
00110         cut = cms.double(0.5)
00111     )
00112 )
00113 
00114 # Build the HPS selection discriminator
00115 hpsTancTausDiscriminationByDecayModeSelection = combinatoricRecoTausHPSSelector.clone(
00116     PFTauProducer = cms.InputTag("hpsTancTaus")
00117     )
00118 
00119 from RecoTauTag.Configuration.HPSPFTaus_cff import requireDecayMode,\
00120      hpsPFTauDiscriminationByVLooseIsolation,\
00121      hpsPFTauDiscriminationByLooseIsolation,\
00122      hpsPFTauDiscriminationByMediumIsolation,\
00123      hpsPFTauDiscriminationByTightIsolation
00124 
00125 # Build the lead track and lepton discriminators
00126 from RecoTauTag.RecoTau.PFRecoTauDiscriminationByLeadingTrackFinding_cfi import pfRecoTauDiscriminationByLeadingTrackFinding
00127 hpsTancTausDiscriminationByLeadingTrackFinding = pfRecoTauDiscriminationByLeadingTrackFinding.clone(
00128     PFTauProducer = cms.InputTag("hpsTancTaus")
00129     )
00130 
00131 from RecoTauTag.RecoTau.PFRecoTauDiscriminationByLeadingTrackPtCut_cfi import pfRecoTauDiscriminationByLeadingTrackPtCut
00132 hpsTancTausDiscriminationByLeadingTrackPtCut = pfRecoTauDiscriminationByLeadingTrackPtCut.clone(
00133     PFTauProducer = cms.InputTag("hpsTancTaus")
00134     )
00135 
00136 
00137 # Build lepton discriminants
00138 from RecoTauTag.RecoTau.PFRecoTauDiscriminationAgainstElectron_cfi import pfRecoTauDiscriminationAgainstElectron
00139 
00140 hpsTancTausDiscriminationByLooseElectronRejection = pfRecoTauDiscriminationAgainstElectron.clone(
00141     PFTauProducer = cms.InputTag("hpsTancTaus"),
00142     Prediscriminants = noPrediscriminants,
00143     PFElectronMVA_maxValue = cms.double(0.6)
00144     )
00145 
00146 hpsTancTausDiscriminationByMediumElectronRejection = pfRecoTauDiscriminationAgainstElectron.clone(
00147     PFTauProducer = cms.InputTag("hpsTancTaus"),
00148     Prediscriminants = noPrediscriminants,
00149     ApplyCut_EcalCrackCut = cms.bool(True)
00150     )
00151 
00152 hpsTancTausDiscriminationByTightElectronRejection = pfRecoTauDiscriminationAgainstElectron.clone(
00153     PFTauProducer = cms.InputTag("hpsTancTaus"),
00154     Prediscriminants = noPrediscriminants,
00155     ApplyCut_EcalCrackCut = cms.bool(True),
00156     ApplyCut_BremCombined = cms.bool(True)
00157     )
00158 
00159 from RecoTauTag.RecoTau.PFRecoTauDiscriminationAgainstMuon_cfi import pfRecoTauDiscriminationAgainstMuon
00160 
00161 hpsTancTausDiscriminationByLooseMuonRejection = pfRecoTauDiscriminationAgainstMuon.clone(
00162     PFTauProducer = cms.InputTag("hpsTancTaus"),
00163     Prediscriminants = noPrediscriminants
00164    )
00165 
00166 hpsTancTausDiscriminationByTightMuonRejection = pfRecoTauDiscriminationAgainstMuon.clone(
00167     PFTauProducer = cms.InputTag("hpsTancTaus"),
00168     Prediscriminants = noPrediscriminants,
00169     discriminatorOption = cms.string('noAllArbitrated')
00170     )
00171 
00172 from RecoTauTag.RecoTau.PFRecoTauDiscriminationAgainstCaloMuon_cfi import pfRecoTauDiscriminationAgainstCaloMuon
00173 hpsTancTausDiscriminationAgainstCaloMuon = pfRecoTauDiscriminationAgainstCaloMuon.clone(
00174     PFTauProducer = cms.InputTag("hpsTancTaus")
00175     )
00176 hpsTancTausDiscriminationAgainstCaloMuon.Prediscriminants.leadTrack.Producer = cms.InputTag("hpsTancTausDiscriminationByLeadingTrackFinding")
00177 
00178 # Update the decay mode prediscriminant
00179 hpsTancRequireDecayMode = requireDecayMode.clone()
00180 hpsTancRequireDecayMode.decayMode.Producer = cms.InputTag("hpsTancTausDiscriminationByDecayModeSelection")
00181 
00182 hpsTancTausDiscriminationByFlightPath = cms.EDProducer(
00183     "PFRecoTauDiscriminationByFlight",
00184     PFTauProducer = cms.InputTag("hpsTancTaus"),
00185     vertexSource = PFTauQualityCuts.primaryVertexSrc,
00186     beamspot = cms.InputTag("offlineBeamSpot"),
00187     refitPV = cms.bool(True),
00188     Prediscriminants = cms.PSet(
00189         BooleanOperator = cms.string("and"),
00190         leadTrack = cms.PSet(
00191             Producer = cms.InputTag(
00192                 "hpsTancTausDiscriminationByDecayModeSelection"),
00193             cut = cms.double(0.5),
00194         )
00195     )
00196 )
00197 
00198 # Build the isolation discriminators
00199 hpsTancTausDiscriminationByVLooseIsolation = \
00200         hpsPFTauDiscriminationByVLooseIsolation.clone(
00201             PFTauProducer = cms.InputTag("hpsTancTaus"),
00202             Prediscriminants = hpsTancRequireDecayMode
00203         )
00204 hpsTancTausDiscriminationByVLooseIsolation.Prediscriminants = hpsTancRequireDecayMode
00205 
00206 hpsTancTausDiscriminationByLooseIsolation = \
00207         hpsPFTauDiscriminationByLooseIsolation.clone(
00208             PFTauProducer = cms.InputTag("hpsTancTaus"),
00209             Prediscriminants = hpsTancRequireDecayMode
00210         )
00211 hpsTancTausDiscriminationByLooseIsolation.Prediscriminants = hpsTancRequireDecayMode
00212 
00213 hpsTancTausDiscriminationByMediumIsolation = \
00214         hpsPFTauDiscriminationByMediumIsolation.clone(
00215             PFTauProducer = cms.InputTag("hpsTancTaus"),
00216             Prediscriminants = hpsTancRequireDecayMode
00217         )
00218 hpsTancTausDiscriminationByMediumIsolation.Prediscriminants = hpsTancRequireDecayMode
00219 
00220 hpsTancTausDiscriminationByTightIsolation = \
00221         hpsPFTauDiscriminationByTightIsolation.clone(
00222             PFTauProducer = cms.InputTag("hpsTancTaus"),
00223             Prediscriminants = hpsTancRequireDecayMode
00224         )
00225 hpsTancTausDiscriminationByTightIsolation.Prediscriminants = hpsTancRequireDecayMode
00226 
00227 _tancPrediscriminants = _leadPionPrediscriminant.clone(
00228     hpsSelect = cms.PSet(
00229         Producer = cms.InputTag(
00230             'hpsTancTausDiscriminationByDecayModeSelection'),
00231         cut = cms.double(0.5)
00232     )
00233 )
00234 
00235 # Rerun the TaNC on our clean taus - in the future, rekey.
00236 hpsTancTausDiscriminationByTancRaw = \
00237         combinatoricRecoTausDiscriminationByTanc.clone(
00238             PFTauProducer = cms.InputTag("hpsTancTaus"),
00239             Prediscriminants = _tancPrediscriminants,
00240         )
00241 
00242 # Rerun the transformation
00243 hpsTancTausDiscriminationByTanc = \
00244         combinatoricRecoTausTancTransform.clone(
00245             PFTauProducer = cms.InputTag("hpsTancTaus"),
00246             toTransform = cms.InputTag("hpsTancTausDiscriminationByTancRaw"),
00247             transforms = transforms,
00248             Prediscriminants = _tancPrediscriminants,
00249         )
00250 
00251 hpsTancTausDiscriminationByTancLoose = cms.EDProducer(
00252     # There is no PT selection applied; we use this only to use the
00253     # prediscriminants to make binary cuts.
00254     "PFRecoTauDiscriminationByLeadingObjectPtCut",
00255     PFTauProducer = cms.InputTag("hpsTancTaus"),
00256     UseOnlyChargedHadrons = cms.bool(True),
00257     MinPtLeadingObject = cms.double(0.0),
00258     Prediscriminants = cms.PSet(
00259         BooleanOperator = cms.string("and"),
00260         tancCut = cms.PSet(
00261             Producer = cms.InputTag("hpsTancTausDiscriminationByTanc"),
00262             cut = cuts.looseCut
00263         )
00264     )
00265 )
00266 
00267 # Make a very loose cut
00268 hpsTancTausDiscriminationByTancVLoose = \
00269         hpsTancTausDiscriminationByTancLoose.clone()
00270 hpsTancTausDiscriminationByTancVLoose.Prediscriminants.tancCut.cut = cuts.vlooseCut
00271 
00272 hpsTancTausDiscriminationByTancMedium = \
00273         hpsTancTausDiscriminationByTancLoose.clone()
00274 hpsTancTausDiscriminationByTancMedium.Prediscriminants.tancCut.cut = cuts.mediumCut
00275 
00276 hpsTancTausDiscriminationByTancTight = \
00277         hpsTancTausDiscriminationByTancLoose.clone()
00278 hpsTancTausDiscriminationByTancTight.Prediscriminants.tancCut.cut = cuts.tightCut
00279 
00280 hpsTancTauInitialSequence = cms.Sequence(
00281     combinatoricRecoTausDiscriminationByLeadingPionPtCut
00282     + combinatoricRecoTausHPSSelector
00283     # select & clean each decay mode
00284     + hpsTancTaus
00285     + hpsTancTausDiscriminationByLeadingTrackFinding
00286     + hpsTancTausDiscriminationByLeadingPionPtCut
00287     + hpsTancTausDiscriminationByLeadingTrackPtCut
00288     + hpsTancTausDiscriminationByDecayModeSelection
00289     + hpsTancTausDiscriminationByFlightPath
00290 )
00291 
00292 hpsTancTauDiscriminantSequence = cms.Sequence(
00293     #+ hpsTancTausDiscriminationAgainstCaloMuon
00294     hpsTancTausDiscriminationByTancRaw
00295     + hpsTancTausDiscriminationByTanc
00296     + hpsTancTausDiscriminationByTancVLoose
00297     + hpsTancTausDiscriminationByTancLoose
00298     + hpsTancTausDiscriminationByTancMedium
00299     + hpsTancTausDiscriminationByTancTight
00300     + hpsTancTausDiscriminationByVLooseIsolation
00301     + hpsTancTausDiscriminationByLooseIsolation
00302     + hpsTancTausDiscriminationByMediumIsolation
00303     + hpsTancTausDiscriminationByTightIsolation
00304     + hpsTancTausDiscriminationByLooseElectronRejection
00305     + hpsTancTausDiscriminationByMediumElectronRejection
00306     + hpsTancTausDiscriminationByTightElectronRejection
00307     + hpsTancTausDiscriminationByLooseMuonRejection
00308     + hpsTancTausDiscriminationByTightMuonRejection
00309 )