Back to home page

Project CMSSW displayed by LXR

 
 

    


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 #    cut = cms.string('gsfTrack.isNonnull && gsfTrack.hitPattern().numberOfLostHits(\'MISSING_INNER_HITS\') = 0 && 0.7 < eSuperClusterOverP < 1.5'),
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+")     # this is needed to define a mass do not trust the sign, it is dummy
0084     )
0085 
0086 ZeeCandElectronTrack = cms.EDProducer(
0087     "CandViewShallowCloneCombiner",
0088     decay = cms.string("isolatedElectrons@+ ElTrackCands@-"), # it takes opposite sign collection, no matter if +- or -+
0089     cut   = cms.string("80 < mass < 100")
0090     )
0091 
0092 BestZee = cms.EDProducer(
0093     "BestMassZArbitrationProducer", # returns the Z with mass closest to 91.18 GeV
0094     ZCandidateCollection = cms.InputTag("ZeeCandElectronTrack")
0095     )
0096 
0097 ElZLegs  = cms.EDProducer(
0098     "CollectionFromZLegProducer", 
0099     ZCandidateCollection  = cms.InputTag("BestZee"),      
0100     )
0101 
0102 procAttributes = dir(proc) #Takes a snapshot of what there in the process
0103 helpers.cloneProcessingSnippet( proc, proc.TauValNumeratorAndDenominator, 'RealElectronsData') #clones the sequence inside the process with RealElectronsData postfix
0104 helpers.cloneProcessingSnippet( proc, proc.TauEfficiencies, 'RealElectronsData') #clones the sequence inside the process with RealElectronsData postfix
0105 helpers.massSearchReplaceAnyInputTag(proc.TauValNumeratorAndDenominatorRealElectronsData, 'kinematicSelectedTauValDenominator', cms.InputTag("ElZLegs","theProbeLeg")) #sets the correct input tag
0106 
0107 #adds to TauValNumeratorAndDenominator modules in the sequence RealElectronsData to the extention name
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.) ), #hinfo(75, 0., 150.)
0114     eta = cms.PSet( nbins = cms.int32(4), min = cms.double(-3.), max = cms.double(3.) ), #hinfo(60, -3.0, 3.0);
0115     phi = cms.PSet( nbins = cms.int32(4), min = cms.double(-180.), max = cms.double(180.) ), #hinfo(36, -180., 180.);
0116     pileup = cms.PSet( nbins = cms.int32(18), min = cms.double(0.), max = cms.double(72.) ),#hinfo(25, 0., 25.0);
0117     )
0118 zttModifier = ApplyFunctionToSequence(lambda m: setBinning(m,binning))
0119 proc.TauValNumeratorAndDenominatorRealElectronsData.visit(zttModifier)
0120 #-----------------------------------------
0121 
0122 #Set discriminators
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 #Sets the correct naming to efficiency histograms
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 #checks what's new in the process (the cloned sequences and modules in them)
0141 newProcAttributes = [x for x in dir(proc) if (x not in procAttributes) and (x.find('RealElectronsData') != -1)]
0142 
0143 #spawns a local variable with the same name as the proc attribute, needed for future process.load
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       )