Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-08-12 02:29:06

0001 import FWCore.ParameterSet.Config as cms
0002 from PhysicsTools.NanoAOD.l1scoutingrun3_cff import *
0003 
0004 #########################
0005 # Default Configuration #
0006 #########################
0007 
0008 # since L1ScoutingNano should be run standalone only,
0009 # this replace task and sequences in standard NanoAOD
0010 nanoTableTaskCommon = cms.Task(
0011     l1scoutingMuonPhysicalValueMap,
0012     l1scoutingEGammaPhysicalValueMap,
0013     l1scoutingTauPhysicalValueMap,
0014     l1scoutingJetPhysicalValueMap,
0015     l1scoutingMuonTable,
0016     l1scoutingEGammaTable,
0017     l1scoutingTauTable,
0018     l1scoutingJetTable,
0019     l1scoutingEtSumTable,
0020     l1scoutingBMTFStubTable,
0021 )
0022 
0023 nanoSequenceCommon = cms.Sequence(l1scoutingJetPhysicalValueMap + cms.Sequence(nanoTableTaskCommon))
0024 
0025 nanoSequence = cms.Sequence(nanoSequenceCommon)
0026 
0027 nanoSequenceMC = cms.Sequence(nanoSequenceCommon)
0028 
0029 def customiseL1ScoutingNanoAOD(process):
0030     # change OutputModule to OrbitNanoAODOutputModule
0031     if hasattr(process, "NANOAODoutput"):
0032         print("custom_l1scoutingrun3_cff: Change NANOAODoutput to OrbitNanoAODOutputModule")
0033         setattr(process, "NANOAODoutput",
0034             cms.OutputModule("OrbitNanoAODOutputModule",
0035                 # copy from standard NanoAOD
0036                 compressionAlgorithm = process.NANOAODoutput.compressionAlgorithm,
0037                 compressionLevel = process.NANOAODoutput.compressionLevel,
0038                 dataset = process.NANOAODoutput.dataset,
0039                 fileName = process.NANOAODoutput.fileName,
0040                 # change eventcontent
0041                 outputCommands = cms.untracked.vstring(
0042                     "drop *",
0043                     "keep l1ScoutingRun3OrbitFlatTable_*_*_*"),
0044                 # additional parameters for l1scouting 
0045                 SelectEvents = cms.untracked.PSet(
0046                     SelectEvents = cms.vstring('nanoAOD_step') # l1scouting runs standalone only
0047                 ),
0048                 skipEmptyBXs = cms.bool(True), # drop empty bxs
0049             )
0050         )
0051 
0052     return process
0053 
0054 #################
0055 # Customisation #
0056 #################
0057 # these function are designed to be used with --customise flag in cmsDriver.py
0058 # e.g. --customise PhysicsTools/NanoAOD/python/custom_l1scoutingrun3_cff.dropStub
0059 
0060 # configure to run with L1ScoutingSelection dataset
0061 # should be used with default customiseL1ScoutingNanoAOD
0062 def customiseL1ScoutingNanoAODSelection(process):
0063     # change sources
0064     process.l1scoutingMuonPhysicalValueMap.src = cms.InputTag("FinalBxSelectorMuon", "Muon")
0065     process.l1scoutingEGammaPhysicalValueMap.src = cms.InputTag("FinalBxSelectorEGamma", "EGamma")
0066     process.l1scoutingJetPhysicalValueMap.src = cms.InputTag("FinalBxSelectorJet", "Jet")
0067 
0068     process.l1scoutingMuonTable.src = cms.InputTag("FinalBxSelectorMuon", "Muon")
0069     process.l1scoutingEGammaTable.src = cms.InputTag("FinalBxSelectorEGamma", "EGamma")
0070     process.l1scoutingJetTable.src = cms.InputTag("FinalBxSelectorJet", "Jet")
0071     process.l1scoutingEtSumTable.src = cms.InputTag("FinalBxSelectorBxSums", "EtSum")
0072     process.l1scoutingBMTFStubTable.src = cms.InputTag("FinalBxSelectorBMTFStub", "BMTFStub")
0073 
0074     # drop L1Tau
0075     process.nanoTableTaskCommon.remove(process.l1scoutingTauTable)
0076 
0077     # change parameters in OrbitNanoAODOutputModule
0078     process.NANOAODoutput.outputCommands += ["keep uints_*_SelBx_*"] # keep SelBx
0079     process.NANOAODoutput.selectedBx = cms.InputTag("FinalBxSelector", "SelBx") # use to select products
0080 
0081     return process
0082 
0083 def addHardwareValues(process):
0084     # add hardware values to variables
0085     process.l1scoutingMuonTable.variables = cms.PSet(
0086             process.l1scoutingMuonTable.variables,
0087             l1scoutingMuonUnconvertedVariables
0088     )
0089     process.l1scoutingEGammaTable.variables = cms.PSet(
0090             process.l1scoutingEGammaTable.variables,
0091             l1scoutingCaloObjectUnconvertedVariables
0092     )
0093     process.l1scoutingTauTable.variables = cms.PSet(
0094             process.l1scoutingTauTable.variables,
0095             l1scoutingCaloObjectUnconvertedVariables
0096     )
0097     process.l1scoutingJetTable.variables = cms.PSet(
0098             process.l1scoutingJetTable.variables,
0099             l1scoutingCaloObjectUnconvertedVariables
0100     )
0101 
0102     # EtSum uses dedicated EDProducer and can add hardware values by setting a boolean
0103     process.l1scoutingEtSumTable.writeHardwareValues = cms.bool(True)
0104 
0105     return process
0106 
0107 def keepHardwareValuesOnly(process):
0108     # first, add hardware values
0109     process = addHardwareValues(process)
0110 
0111     # remove physical values
0112     # currently external values are all physical values, so we can simple remove them
0113     process.l1scoutingMuonTable.externalVariables = cms.PSet()
0114     process.l1scoutingEGammaTable.externalVariables = cms.PSet()
0115     process.l1scoutingTauTable.externalVariables = cms.PSet()
0116     process.l1scoutingJetTable.externalVariables = cms.PSet()
0117 
0118     # EtSum uses dedicated EDProducer and can remove physical values by setting a boolean
0119     process.l1scoutingEtSumTable.writePhysicalValues = cms.bool(False)
0120 
0121     return process
0122 
0123 def outputMultipleEtSums(process):
0124     process.l1scoutingEtSumTable.singleton = cms.bool(False)
0125     return process
0126 
0127 def dropEmptyBXs(process):
0128     process.NANOAODoutput.skipEmptyBXs = cms.bool(True)
0129     return process
0130 
0131 def keepEmptyBXs(process):
0132     process.NANOAODoutput.skipEmptyBXs = cms.bool(False)
0133     return process
0134 
0135 def dropBMTFStub(process):
0136     process.nanoTableTaskCommon.remove(process.l1scoutingBMTFStubTable)
0137     return process