File indexing completed on 2025-05-04 22:50:51
0001 import FWCore.ParameterSet.Config as cms
0002 from PhysicsTools.NanoAOD.run3scouting_cff import *
0003 from EventFilter.L1TRawToDigi.gtStage2Digis_cfi import gtStage2Digis
0004 from PhysicsTools.NanoAOD.triggerObjects_cff import l1bits
0005 from PhysicsTools.NanoAOD.globals_cff import puTable
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 scoutingMuonTableTask = cms.Task(scoutingMuonTable)
0020 scoutingMuonDisplacedVertexTableTask = cms.Task(scoutingMuonDisplacedVertexTable)
0021
0022
0023 run3_scouting_nanoAOD_2024.toReplaceWith(scoutingMuonTableTask, cms.Task(scoutingMuonVtxTable, scoutingMuonNoVtxTable))\
0024 .toReplaceWith(scoutingMuonDisplacedVertexTableTask, cms.Task(scoutingMuonVtxDisplacedVertexTable, scoutingMuonNoVtxDisplacedVertexTable))
0025
0026
0027 scoutingElectronTableTask = cms.Task(scoutingElectronTable)
0028
0029
0030
0031 (run3_scouting_nanoAOD_2023 | run3_scouting_nanoAOD_2024).toReplaceWith(
0032 scoutingElectronTableTask, cms.Task(scoutingElectronBestTrack, scoutingElectronTable)
0033 )
0034
0035
0036
0037
0038
0039
0040
0041 scoutingPFCandidateTask = cms.Task(scoutingPFCandidate, scoutingPFCandidateTable)
0042 scoutingPFJetReclusterTask = cms.Task(
0043 scoutingPFCandidate,
0044 scoutingPFJetRecluster,
0045 scoutingPFJetReclusterParticleNetJetTagInfos, scoutingPFJetReclusterParticleNetJetTags,
0046 scoutingPFJetReclusterTable
0047 )
0048 scoutingPFJetReclusterMatchGenExtensionTask = cms.Task(
0049 scoutingPFJetReclusterMatchGen,
0050 scoutingPFJetReclusterMatchGenExtensionTable
0051 )
0052
0053 scoutingFatPFJetReclusterTask = cms.Task(
0054 scoutingPFCandidate,
0055 scoutingFatPFJetRecluster,
0056 scoutingFatPFJetReclusterParticleNetJetTagInfos, scoutingFatPFJetReclusterParticleNetJetTags,
0057 scoutingFatPFJetReclusterGlobalParticleTransformerJetTagInfos, scoutingFatPFJetReclusterGlobalParticleTransformerJetTags,
0058 scoutingFatPFJetReclusterSoftDrop, scoutingFatPFJetReclusterSoftDropMass,
0059 scoutingFatPFJetReclusterParticleNetJetTagInfos, scoutingFatPFJetReclusterParticleNetMassRegressionJetTags,
0060 scoutingFatPFJetReclusterEcfNbeta1, scoutingFatPFJetReclusterNjettiness,
0061 scoutingFatPFJetReclusterTable
0062 )
0063 scoutingFatPFJetReclusterMatchGenExtensionTask = cms.Task(
0064 scoutingFatPFJetReclusterMatchGen,
0065 scoutingFatPFJetReclusterMatchGenExtensionTable
0066 )
0067
0068
0069
0070
0071
0072
0073 gtStage2DigisScouting = gtStage2Digis.clone(InputLabel="hltFEDSelectorL1")
0074 l1bitsScouting = l1bits.clone(src="gtStage2DigisScouting")
0075
0076
0077 from PhysicsTools.NanoAOD.l1trig_cff import *
0078 l1MuScoutingTable = l1MuTable.clone(src=cms.InputTag("gtStage2DigisScouting", "Muon"))
0079 l1EGScoutingTable = l1EGTable.clone(src=cms.InputTag("gtStage2DigisScouting", "EGamma"))
0080 l1TauScoutingTable = l1TauTable.clone(src=cms.InputTag("gtStage2DigisScouting", "Tau"))
0081 l1JetScoutingTable = l1JetTable.clone(src=cms.InputTag("gtStage2DigisScouting", "Jet"))
0082 l1EtSumScoutingTable = l1EtSumTable.clone(src=cms.InputTag("gtStage2DigisScouting", "EtSum"))
0083
0084
0085 l1MuScoutingTable.variables = cms.PSet(l1MuonReducedVars)
0086 l1EGScoutingTable.variables = cms.PSet(l1EGReducedVars)
0087 l1TauScoutingTable.variables = cms.PSet(l1TauReducedVars)
0088 l1JetScoutingTable.variables = cms.PSet(l1JetReducedVars)
0089 l1EtSumScoutingTable.variables = cms.PSet(l1EtSumReducedVars)
0090
0091
0092
0093
0094
0095
0096 def prepareScoutingNanoTaskCommon():
0097
0098
0099 scoutingNanoTaskCommon = cms.Task()
0100 scoutingNanoTaskCommon.add(scoutingMuonTableTask, scoutingMuonDisplacedVertexTableTask)
0101 scoutingNanoTaskCommon.add(scoutingElectronTableTask)
0102 scoutingNanoTaskCommon.add(scoutingPhotonTable)
0103 scoutingNanoTaskCommon.add(scoutingPrimaryVertexTable)
0104 scoutingNanoTaskCommon.add(scoutingPFJetTable)
0105 scoutingNanoTaskCommon.add(scoutingMETTable, scoutingRhoTable)
0106
0107
0108 scoutingNanoTaskCommon.add(scoutingPFJetReclusterTask)
0109 scoutingNanoTaskCommon.add(scoutingFatPFJetReclusterTask)
0110
0111 return scoutingNanoTaskCommon
0112
0113
0114 def prepareScoutingTriggerTask():
0115 scoutingTriggerTask = cms.Task(gtStage2DigisScouting, l1bitsScouting)
0116 scoutingTriggerTask.add(cms.Task(l1MuScoutingTable, l1EGScoutingTable, l1TauScoutingTable, l1JetScoutingTable, l1EtSumScoutingTable))
0117 return scoutingTriggerTask
0118
0119
0120 def prepareScoutingNanoTaskMC():
0121 scoutingNanoTaskMC = cms.Task()
0122 scoutingNanoTaskMC.add(scoutingPFJetReclusterMatchGenExtensionTask)
0123 scoutingNanoTaskMC.add(scoutingFatPFJetReclusterMatchGenExtensionTask)
0124
0125 scoutingNanoTaskMC.add(puTable)
0126 return scoutingNanoTaskMC
0127
0128
0129 scoutingNanoTaskCommon = prepareScoutingNanoTaskCommon()
0130 scoutingNanoSequence = cms.Sequence(scoutingNanoTaskCommon)
0131
0132
0133 scoutingTriggerTask = prepareScoutingTriggerTask()
0134 scoutingTriggerSequence = cms.Sequence(scoutingTriggerTask)
0135 scoutingNanoTaskMC = prepareScoutingNanoTaskMC()
0136
0137 def customiseScoutingNano(process):
0138
0139
0140 if not ((hasattr(process, "nanoSequence") and process.schedule.contains(process.nanoSequence))
0141 or hasattr(process, "nanoSequenceMC") and process.schedule.contains(process.nanoSequenceMC)):
0142 process.trigger_step = cms.Path(process.scoutingTriggerSequence)
0143 process.schedule.extend([process.trigger_step])
0144
0145
0146 runOnMC = hasattr(process,"NANOEDMAODSIMoutput") or hasattr(process,"NANOAODSIMoutput")
0147 if runOnMC:
0148 process.scoutingNanoSequence.associate(scoutingNanoTaskMC)
0149
0150 return process
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162 def customiseScoutingNanoForScoutingPFMonitor(process):
0163 process = skipEventsWithoutScouting(process)
0164
0165
0166 process.scoutingTriggerTask.remove(process.gtStage2DigisScouting)
0167 process.scoutingTriggerTask.add(process.gtStage2Digis)
0168
0169
0170 process.load("EventFilter.L1TRawToDigi.gmtStage2Digis_cfi")
0171 process.scoutingTriggerTask.add(process.gmtStage2Digis)
0172
0173
0174 process.load("EventFilter.L1TRawToDigi.caloStage2Digis_cfi")
0175 process.scoutingTriggerTask.add(process.caloStage2Digis)
0176
0177
0178 process.scoutingTriggerTask.remove(process.l1bitsScouting)
0179 process.scoutingTriggerTask.add(process.l1bits)
0180
0181
0182 process.l1MuScoutingTable.src = cms.InputTag("gmtStage2Digis", "Muon")
0183 process.l1EGScoutingTable.src = cms.InputTag("caloStage2Digis", "EGamma")
0184 process.l1TauScoutingTable.src = cms.InputTag("caloStage2Digis", "Tau")
0185 process.l1JetScoutingTable.src = cms.InputTag("caloStage2Digis", "Jet")
0186 process.l1EtSumScoutingTable.src = cms.InputTag("caloStage2Digis", "EtSum")
0187
0188 return process
0189
0190
0191
0192
0193 def customiseScoutingNanoFromMini(process):
0194
0195 runOnData = hasattr(process,"NANOAODSIMoutput") or hasattr(process,"NANOAODoutput")
0196 if runOnData:
0197 process = skipEventsWithoutScouting(process)
0198
0199
0200 process.scoutingTriggerTask.remove(process.gtStage2DigisScouting)
0201
0202
0203 process.scoutingTriggerTask.remove(process.l1bitsScouting)
0204 process.scoutingTriggerTask.add(process.l1bits)
0205
0206
0207 process.l1MuScoutingTable.src = cms.InputTag("gmtStage2Digis", "Muon")
0208 process.l1EGScoutingTable.src = cms.InputTag("caloStage2Digis", "EGamma")
0209 process.l1TauScoutingTable.src = cms.InputTag("caloStage2Digis", "Tau")
0210 process.l1JetScoutingTable.src = cms.InputTag("caloStage2Digis", "Jet")
0211 process.l1EtSumScoutingTable.src = cms.InputTag("caloStage2Digis", "EtSum")
0212
0213 return process
0214
0215
0216
0217
0218 def skipEventsWithoutScouting(process):
0219
0220
0221 import HLTrigger.HLTfilters.hltHighLevel_cfi
0222
0223 process.scoutingTriggerPathFilter = HLTrigger.HLTfilters.hltHighLevel_cfi.hltHighLevel.clone(
0224 HLTPaths = cms.vstring("Dataset_ScoutingPFRun3")
0225 )
0226
0227 process.nanoSkim_step = cms.Path(process.scoutingTriggerPathFilter)
0228 process.schedule.extend([process.nanoSkim_step])
0229
0230 if hasattr(process, "NANOAODoutput"):
0231 process.NANOAODoutput.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("nanoSkim_step"))
0232
0233 if hasattr(process, "NANOAODEDMoutput"):
0234 process.NANOEDMAODoutput.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("nanoSkim_step"))
0235
0236 if hasattr(process, "write_NANOAOD"):
0237 process.write_NANOAOD.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("nanoSkim_step"))
0238
0239 return process
0240
0241 def addScoutingTrack(process):
0242 process.scoutingNanoSequence.associate(cms.Task(scoutingTrackTable))
0243 return process
0244
0245 def addScoutingParticle(process):
0246
0247 process.scoutingNanoSequence.associate(cms.Task(scoutingParticleTable))
0248 return process
0249
0250 def addScoutingPFCandidate(process):
0251
0252 process.scoutingNanoSequence.associate(scoutingPFCandidateTask)
0253 return process
0254
0255
0256
0257 def addScoutingElectronTrack(process):
0258 process.scoutingElectronTable.externalVariables.bestTrack_index\
0259 = ExtVar(cms.InputTag("scoutingElectronBestTrack", "Run3ScoutingElectronBestTrackIndex"), int, doc="best track index")
0260
0261 process.scoutingElectronTable.collectionVariables = cms.PSet(
0262 ScoutingElectronTrack = cms.PSet(
0263 name = cms.string("ScoutingElectronTrack"),
0264 doc = cms.string("Scouting Electron Track"),
0265 useCount = cms.bool(True),
0266 useOffset = cms.bool(True),
0267 variables = cms.PSet(
0268 d0 = Var("trkd0", "float", doc="track d0"),
0269 dz = Var("trkdz", "float", doc="track dz"),
0270 pt = Var("trkpt", "float", doc="track pt"),
0271 eta = Var("trketa", "float", doc="track eta"),
0272 phi = Var("trkphi", "float", doc="track phi"),
0273 chi2overndf = Var("trkchi2overndf", "float", doc="track normalized chi squared"),
0274 charge = Var("trkcharge", "int", doc="track charge"),
0275 ),
0276 ),
0277 )
0278
0279
0280 run3_scouting_nanoAOD_2024.toModify(
0281 process.scoutingElectronTable.collectionVariables.variables,
0282 pMode = Var("trkpMode", "float", doc="track pMode"),
0283 etaMode = Var("trketaMode", "float", doc="track etaMode"),
0284 phiMode = Var("trkphiMode", "float", doc="track phiMode"),
0285 qoverpModeError = Var("trkqoverpModeError", "float", doc="track qoverpModeError"),
0286 )
0287 return process