Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:27:53

0001 
0002 import FWCore.ParameterSet.Config as cms
0003 from RecoTauTag.RecoTau.PFRecoTauQualityCuts_cfi import PFTauQualityCuts
0004 from RecoTauTag.RecoTau.PFRecoTauEnergyAlgorithmPlugin_cfi import pfTauEnergyAlgorithmPlugin
0005 from RecoTauTag.RecoTau.PFRecoTauPFJetInputs_cfi import PFRecoTauPFJetInputs
0006 '''
0007 
0008 Configuration for combinatoric PFTau producer plugins.
0009 
0010 Note that this plugin produces many taus for each PFJet!
0011 To be useful the output from this module must be cleaned
0012 using an implementation of the RecoTauCleaner module.
0013 
0014 Author: Evan K. Friis, UC Davis
0015 
0016 
0017 '''
0018 
0019 # N.B. for combinatoric taus that worst-case scaling
0020 # is (maxTracks choose dmTracks) * (maxPiZeros choose dmPiZeros)
0021 #
0022 # So for decay mode 11 (3 tracks, 1 pizero), with 10 for both
0023 #
0024 # (10 choose 3) * (10 choose 1) = 1200!
0025 
0026 # Configurations for the different decay modes
0027 
0028 combinatoricDecayModeConfigs = cms.PSet(
0029     config1prong0pi0 = cms.PSet(
0030         # One prong no pizero mode
0031         nCharged = cms.uint32(1),
0032         nPiZeros = cms.uint32(0),
0033         maxTracks = cms.uint32(6),
0034         maxPiZeros = cms.uint32(0),
0035     ),
0036     config1prong1pi0 = cms.PSet(
0037         #One prong one pizero mode
0038         nCharged = cms.uint32(1),
0039         nPiZeros = cms.uint32(1),
0040         maxTracks = cms.uint32(6),
0041         maxPiZeros = cms.uint32(6),
0042     ),
0043     config1prong2pi0 = cms.PSet(
0044         #One prong two pizero mode
0045         nCharged = cms.uint32(1),
0046         nPiZeros = cms.uint32(2),
0047         maxTracks = cms.uint32(6),
0048         maxPiZeros = cms.uint32(5),
0049     ),
0050     config2prong0pi0 = cms.PSet(
0051         # Three prong no pizero mode (one of the tracks failed to get reconstructed)
0052         nCharged = cms.uint32(2),
0053         nPiZeros = cms.uint32(0),
0054         maxTracks = cms.uint32(6),
0055         maxPiZeros = cms.uint32(0),
0056     ),
0057     config2prong1pi0 = cms.PSet(
0058         # Three prong one pizero mode (one of the tracks failed to get reconstructed)
0059         nCharged = cms.uint32(2),
0060         nPiZeros = cms.uint32(1),
0061         maxTracks = cms.uint32(6),
0062         maxPiZeros = cms.uint32(3),
0063     ),
0064     config3prong0pi0 = cms.PSet(
0065         # Three prong no pizero mode
0066         nCharged = cms.uint32(3),
0067         nPiZeros = cms.uint32(0),
0068         maxTracks = cms.uint32(6),
0069         maxPiZeros = cms.uint32(0),
0070     ),
0071     config3prong1pi0 = cms.PSet( # suggestions made by CV
0072         # Three prong one pizero mode
0073         nCharged = cms.uint32(3),
0074         nPiZeros = cms.uint32(1),
0075         maxTracks = cms.uint32(6),
0076         maxPiZeros = cms.uint32(3),
0077     )
0078 )
0079 
0080 combinatoricModifierConfigs = [
0081     cms.PSet(
0082         name = cms.string("sipt"),
0083         plugin = cms.string("RecoTauImpactParameterSignificancePlugin"),
0084         qualityCuts = PFTauQualityCuts,
0085     ),
0086     # Electron rejection
0087     cms.PSet(
0088         name = cms.string("elec_rej"),
0089         plugin = cms.string("RecoTauElectronRejectionPlugin"),
0090         #Electron rejection parameters
0091         ElectronPreIDProducer                = cms.InputTag("elecpreid"),
0092         EcalStripSumE_deltaPhiOverQ_minValue = cms.double(-0.1),
0093         EcalStripSumE_deltaPhiOverQ_maxValue = cms.double(0.5),
0094         EcalStripSumE_minClusEnergy          = cms.double(0.1),
0095         EcalStripSumE_deltaEta               = cms.double(0.03),
0096         ElecPreIDLeadTkMatch_maxDR           = cms.double(0.01),
0097         maximumForElectrionPreIDOutput       = cms.double(-0.1),
0098         DataType = cms.string("AOD"),
0099     ),
0100     # Tau energy reconstruction
0101     # (to avoid double-counting of energy carried by neutral PFCandidates
0102     #  in case PFRecoTauChargedHadrons are built from reco::Tracks)
0103     cms.PSet(
0104         pfTauEnergyAlgorithmPlugin,
0105         name = cms.string("tau_en_reconstruction"),
0106         plugin = cms.string("PFRecoTauEnergyAlgorithmPlugin"),
0107     ),
0108     # Add refs to "lost tracks", i.e. tracks associated to
0109     # PFRecoTauChargedHadrons built from reco::Tracks
0110     cms.PSet(
0111         name = cms.string("tau_lost_tracks"),
0112         trackSrc = cms.InputTag("generalTracks"),
0113         plugin = cms.string("PFRecoTauLostTrackPlugin"),
0114         verbosity = cms.int32(0)
0115     )
0116 ]
0117 
0118 _combinatoricTauConfig = cms.PSet(
0119     name = cms.string("combinatoric"),
0120     plugin = cms.string("RecoTauBuilderCombinatoricPlugin"),
0121     pfCandSrc = cms.InputTag("particleFlow"),
0122     isolationConeSize = PFRecoTauPFJetInputs.isolationConeSize,
0123     qualityCuts = PFTauQualityCuts,
0124     decayModes = cms.VPSet(
0125         combinatoricDecayModeConfigs.config1prong0pi0,
0126         combinatoricDecayModeConfigs.config1prong1pi0,
0127         combinatoricDecayModeConfigs.config1prong2pi0,
0128         combinatoricDecayModeConfigs.config2prong0pi0,
0129         combinatoricDecayModeConfigs.config2prong1pi0,
0130         combinatoricDecayModeConfigs.config3prong0pi0,
0131     combinatoricDecayModeConfigs.config3prong1pi0
0132     ),
0133     signalConeSize = cms.string("max(min(0.1, 3.0/pt()), 0.05)"),
0134     minAbsPhotonSumPt_insideSignalCone = cms.double(2.5),
0135     minRelPhotonSumPt_insideSignalCone = cms.double(0.10),
0136     minAbsPhotonSumPt_outsideSignalCone = cms.double(1.e+9), # CV: always require at least some photon energy inside signal cone 
0137     minRelPhotonSumPt_outsideSignalCone = cms.double(1.e+9), #     for a tau to be reconstructed in a decay mode with pi0s
0138     verbosity = cms.int32(0)
0139 )
0140 
0141 combinatoricRecoTaus = cms.EDProducer("RecoTauProducer",
0142     jetSrc = PFRecoTauPFJetInputs.inputJetCollection,
0143     minJetPt = PFRecoTauPFJetInputs.minJetPt,
0144     maxJetAbsEta = PFRecoTauPFJetInputs.maxJetAbsEta,
0145     jetRegionSrc = cms.InputTag("recoTauAK4PFJets08Region"),
0146     chargedHadronSrc = cms.InputTag('ak4PFJetsRecoTauChargedHadrons'),
0147     piZeroSrc = cms.InputTag("ak4PFJetsRecoTauPiZeros"),
0148     buildNullTaus = cms.bool(False),
0149     outputSelection = cms.string("leadChargedHadrCand().isNonnull()"), # MB: always require that leading PFChargedHadron candidate exists
0150     # Make maximum size from which to collect isolation cone objects, w.r.t to
0151     # the axis of the signal cone objects
0152     builders = cms.VPSet(
0153         _combinatoricTauConfig
0154     ),
0155     modifiers = cms.VPSet(
0156         combinatoricModifierConfigs
0157     )
0158 )