File indexing completed on 2025-06-03 00:12:45
0001 import FWCore.ParameterSet.Config as cms
0002 from Validation.RecoTau.RecoTauValidation_cfi import *
0003 import copy
0004
0005 import PhysicsTools.PatAlgos.tools.helpers as helpers
0006
0007 ElPrimaryVertexFilter = cms.EDFilter(
0008 "VertexSelector",
0009 src = cms.InputTag("offlinePrimaryVertices"),
0010 cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"),
0011 filter = cms.bool(False)
0012 )
0013
0014 ElBestPV = cms.EDProducer(
0015 "HighestSumP4PrimaryVertexSelector",
0016 src = cms.InputTag("ElPrimaryVertexFilter")
0017 )
0018
0019 selectedElectrons = cms.EDFilter(
0020 "TauValElectronSelector",
0021 src = cms.InputTag('gedGsfElectrons'),
0022 cut = cms.string("pt > 25.0 && abs(eta) < 2.4 && isElectron"),
0023 filter = cms.bool(False)
0024 )
0025
0026 ElectronsFromPV = cms.EDProducer(
0027 "GsfElectronFromPVSelector",
0028 srcElectron = cms.InputTag("selectedElectrons"),
0029 srcVertex = cms.InputTag("ElBestPV"),
0030 max_dxy = cms.double(0.01),
0031 max_dz = cms.double(0.1)
0032 )
0033
0034 idElectrons = cms.EDFilter(
0035 "TauValElectronSelector",
0036 src = cms.InputTag('ElectronsFromPV'),
0037 cut = cms.string('ecalDrivenSeed & isGsfCtfScPixChargeConsistent & isGsfScPixChargeConsistent & isGsfCtfChargeConsistent & !isEBEEGap & (isEB & sigmaIetaIeta<0.01 & abs(deltaPhiSuperClusterTrackAtVtx)<0.06 & abs(deltaEtaSuperClusterTrackAtVtx)<0.006 & hadronicOverEm<0.04 | isEE & sigmaIetaIeta<0.03 & abs(deltaPhiSuperClusterTrackAtVtx)<0.04 & abs(deltaEtaSuperClusterTrackAtVtx)<0.007 & hadronicOverEm<0.025)'),
0038 filter = cms.bool(False)
0039 )
0040
0041 trackElectrons = cms.EDFilter(
0042 "TauValElectronSelector",
0043 src = cms.InputTag('idElectrons'),
0044 cut = cms.string('gsfTrack.isNonnull && 0.7 < eSuperClusterOverP < 1.5'),
0045
0046 filter = cms.bool(False)
0047 )
0048
0049 isolatedElectrons = cms.EDFilter(
0050 "TauValElectronSelector",
0051 src = cms.InputTag('trackElectrons'),
0052 cut = cms.string("(isEB & (dr04TkSumPt/pt + max(0.,dr04EcalRecHitSumEt-2.)/pt + dr04HcalTowerSumEt/pt < 0.10)) | (isEE & (dr04TkSumPt/pt + dr04EcalRecHitSumEt/pt + dr04HcalTowerSumEt/pt < 0.09))"),
0053 filter = cms.bool(False)
0054 )
0055
0056 from SimGeneral.HepPDTESSource.pythiapdt_cfi import *
0057
0058 ElGoodTracks = cms.EDFilter(
0059 "TrackSelector",
0060 src = cms.InputTag("generalTracks"),
0061 cut = cms.string("pt > 5 && abs(eta) < 2.5"),
0062 filter = cms.bool(False)
0063 )
0064
0065 ElIsoTracks = cms.EDProducer(
0066 "IsoTracks",
0067 src = cms.InputTag("ElGoodTracks"),
0068 radius = cms.double(0.3),
0069 SumPtFraction = cms.double(0.5)
0070 )
0071
0072 ElTrackFromPV = cms.EDProducer(
0073 "TrackFromPVSelector",
0074 srcTrack = cms.InputTag("ElIsoTracks"),
0075 srcVertex = cms.InputTag("ElBestPV"),
0076 max_dxy = cms.double(0.01),
0077 max_dz = cms.double(0.1)
0078 )
0079
0080 ElTrackCands = cms.EDProducer(
0081 "ConcreteChargedCandidateProducer",
0082 src = cms.InputTag("ElTrackFromPV"),
0083 particleType = cms.string("e+")
0084 )
0085
0086 ZeeCandElectronTrack = cms.EDProducer(
0087 "CandViewShallowCloneCombiner",
0088 decay = cms.string("isolatedElectrons@+ ElTrackCands@-"),
0089 cut = cms.string("80 < mass < 100")
0090 )
0091
0092 BestZee = cms.EDProducer(
0093 "BestMassZArbitrationProducer",
0094 ZCandidateCollection = cms.InputTag("ZeeCandElectronTrack")
0095 )
0096
0097 ElZLegs = cms.EDProducer(
0098 "CollectionFromZLegProducer",
0099 ZCandidateCollection = cms.InputTag("BestZee"),
0100 )
0101
0102 procAttributes = dir(proc)
0103 helpers.cloneProcessingSnippet( proc, proc.TauValNumeratorAndDenominator, 'RealElectronsData')
0104 helpers.cloneProcessingSnippet( proc, proc.TauEfficiencies, 'RealElectronsData')
0105 helpers.massSearchReplaceAnyInputTag(proc.TauValNumeratorAndDenominatorRealElectronsData, 'kinematicSelectedTauValDenominator', cms.InputTag("ElZLegs","theProbeLeg"))
0106
0107
0108 zttLabeler = lambda module : SetValidationExtention(module, 'RealElectronsData')
0109 zttModifier = ApplyFunctionToSequence(zttLabeler)
0110 proc.TauValNumeratorAndDenominatorRealElectronsData.visit(zttModifier)
0111
0112 binning = cms.PSet(
0113 pt = cms.PSet( nbins = cms.int32(10), min = cms.double(0.), max = cms.double(100.) ),
0114 eta = cms.PSet( nbins = cms.int32(4), min = cms.double(-3.), max = cms.double(3.) ),
0115 phi = cms.PSet( nbins = cms.int32(4), min = cms.double(-180.), max = cms.double(180.) ),
0116 pileup = cms.PSet( nbins = cms.int32(18), min = cms.double(0.), max = cms.double(72.) ),
0117 )
0118 zttModifier = ApplyFunctionToSequence(lambda m: setBinning(m,binning))
0119 proc.TauValNumeratorAndDenominatorRealElectronsData.visit(zttModifier)
0120
0121
0122
0123 discs_to_retain = ['ByDecayModeFinding', 'ElectronRejection']
0124 proc.RunHPSValidationRealElectronsData.discriminators = cms.VPSet([p for p in proc.RunHPSValidationRealElectronsData.discriminators if any(disc in p.discriminator.value() for disc in discs_to_retain) ])
0125
0126
0127 proc.efficienciesRealElectronsData.plots = Utils.SetPlotSequence(proc.TauValNumeratorAndDenominatorRealElectronsData)
0128 proc.efficienciesRealElectronsDataSummary = cms.EDProducer("TauDQMHistEffProducer",
0129 plots = cms.PSet(
0130 Summary = cms.PSet(
0131 denominator = cms.string('RecoTauV/standardValidation/hpsPFTauProducerRealElectronsData_Summary/#PAR#PlotDen'),
0132 efficiency = cms.string('RecoTauV/standardValidation/hpsPFTauProducerRealElectronsData_Summary/#PAR#Plot'),
0133 numerator = cms.string('RecoTauV/standardValidation/hpsPFTauProducerRealElectronsData_Summary/#PAR#PlotNum'),
0134 parameter = cms.vstring('summary'),
0135 stepByStep = cms.bool(True)
0136 ),
0137 )
0138 )
0139
0140
0141 newProcAttributes = [x for x in dir(proc) if (x not in procAttributes) and (x.find('RealElectronsData') != -1)]
0142
0143
0144 for newAttr in newProcAttributes:
0145 locals()[newAttr] = getattr(proc,newAttr)
0146
0147 produceDenominatorRealElectronsData = cms.Sequence( cms.ignore(ElPrimaryVertexFilter) * ElBestPV *
0148 ( (cms.ignore(selectedElectrons) * ElectronsFromPV * cms.ignore(idElectrons) * cms.ignore(trackElectrons) * cms.ignore(isolatedElectrons)) +
0149 (cms.ignore(ElGoodTracks) * ElIsoTracks * ElTrackFromPV * ElTrackCands) ) *
0150 ZeeCandElectronTrack *
0151 BestZee *
0152 ElZLegs
0153 )
0154
0155 produceDenominator = cms.Sequence(produceDenominatorRealElectronsData)
0156
0157 runTauValidationBatchMode = cms.Sequence(
0158 produceDenominatorRealElectronsData
0159 +TauValNumeratorAndDenominatorRealElectronsData
0160 )
0161
0162 runTauValidation = cms.Sequence(
0163 runTauValidationBatchMode
0164 +TauEfficienciesRealElectronsData
0165 )