diff --git a/DataFormats/L1TParticleFlow/interface/gt_datatypes.h b/DataFormats/L1TParticleFlow/interface/gt_datatypes.h index 178e332dbedf4..64c2596d346c9 100644 --- a/DataFormats/L1TParticleFlow/interface/gt_datatypes.h +++ b/DataFormats/L1TParticleFlow/interface/gt_datatypes.h @@ -226,6 +226,36 @@ namespace l1gt { pack_into_bits(ret, start, z0); return ret; } + + inline void initFromBits(const ap_uint &src) { + unsigned int start = 0; + unpack_from_bits(src, start, valid); + unpack_from_bits(src, start, v3.pt); + unpack_from_bits(src, start, v3.phi); + unpack_from_bits(src, start, v3.eta); + unpack_from_bits(src, start, quality); + unpack_from_bits(src, start, isolation); + unpack_from_bits(src, start, charge); + unpack_from_bits(src, start, z0); + } + + inline static Electron unpack_ap(const ap_uint &src) { + Electron ret; + ret.initFromBits(src); + return ret; + } + + inline static Electron unpack(const std::array &src, int parity) { + ap_uint bits; + if (parity == 0) { + bits(63, 0) = src[0]; + bits(95, 64) = src[1]; + } else { + bits(63, 0) = src[1]; + bits(95, 64) = (src[0] >> 32); + } + return unpack_ap(bits); + } }; struct Photon { @@ -234,7 +264,8 @@ namespace l1gt { egquality_t quality; iso_t isolation; - inline ap_uint<96> pack() const { + static const int BITWIDTH = 96; + inline ap_uint pack() const { ap_uint<96> ret(0); unsigned int start = 0; pack_into_bits(ret, start, valid); @@ -243,6 +274,34 @@ namespace l1gt { pack_into_bits(ret, start, isolation); return ret; } + + inline void initFromBits(const ap_uint &src) { + unsigned int start = 0; + unpack_from_bits(src, start, valid); + unpack_from_bits(src, start, v3.pt); + unpack_from_bits(src, start, v3.phi); + unpack_from_bits(src, start, v3.eta); + unpack_from_bits(src, start, quality); + unpack_from_bits(src, start, isolation); + } + + inline static Photon unpack_ap(const ap_uint &src) { + Photon ret; + ret.initFromBits(src); + return ret; + } + + inline static Photon unpack(const std::array &src, int parity) { + ap_uint bits; + if (parity == 0) { + bits(63, 0) = src[0]; + bits(95, 64) = src[1]; + } else { + bits(63, 0) = src[1]; + bits(95, 64) = (src[0] >> 32); + } + return unpack_ap(bits); + } }; } // namespace l1gt diff --git a/L1Trigger/Phase2L1ParticleFlow/python/l1ctLayer2EG_cff.py b/L1Trigger/Phase2L1ParticleFlow/python/l1ctLayer2EG_cff.py index f9d9196a1611e..517c8e82bf733 100644 --- a/L1Trigger/Phase2L1ParticleFlow/python/l1ctLayer2EG_cff.py +++ b/L1Trigger/Phase2L1ParticleFlow/python/l1ctLayer2EG_cff.py @@ -118,7 +118,7 @@ outPatternFile=cms.PSet( nFramesPerBX=cms.uint32(9), # 360 MHz clock or 25 Gb/s link format=cms.string("EMP"), - outputFilename=cms.string("L1TCTL2EG_OuPattern"), + outputFilename=cms.string("L1TCTL2EG_OutPattern"), TMUX=cms.uint32(6), maxLinesPerFile=cms.uint32(1024), channels=cms.VPSet( diff --git a/L1Trigger/Phase2L1ParticleFlow/test/make_l1ctLayer1_dumpFiles_cfg.py b/L1Trigger/Phase2L1ParticleFlow/test/make_l1ctLayer1_dumpFiles_cfg.py deleted file mode 100644 index c8eddfb3b029c..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/test/make_l1ctLayer1_dumpFiles_cfg.py +++ /dev/null @@ -1,77 +0,0 @@ -import FWCore.ParameterSet.Config as cms -from Configuration.StandardSequences.Eras import eras - -process = cms.Process("RESP", eras.Phase2C9) - -process.load('Configuration.StandardSequences.Services_cff') -process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") -process.load("FWCore.MessageLogger.MessageLogger_cfi") -process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True), allowUnscheduled = cms.untracked.bool(False) ) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1000)) -process.MessageLogger.cerr.FwkReport.reportEvery = 1 - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring('file:inputs110X.root'), - inputCommands = cms.untracked.vstring("keep *", - "drop l1tPFClusters_*_*_*", - "drop l1tPFTracks_*_*_*", - "drop l1tPFCandidates_*_*_*", - "drop l1tTkPrimaryVertexs_*_*_*") -) - -process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') -process.load('Configuration.Geometry.GeometryExtended2026D49_cff') -process.load('Configuration.StandardSequences.MagneticField_cff') -process.load('SimCalorimetry.HcalTrigPrimProducers.hcaltpdigi_cff') # needed to read HCal TPs -process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') - -from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, '123X_mcRun4_realistic_v3', '') - -process.load('L1Trigger.Phase2L1ParticleFlow.l1ctLayer1_cff') -process.load('L1Trigger.Phase2L1ParticleFlow.l1ctLayer2EG_cff') -process.load('L1Trigger.L1TTrackMatch.l1tGTTInputProducer_cfi') -process.load('L1Trigger.VertexFinder.l1tVertexProducer_cfi') -process.l1tVertexFinderEmulator = process.l1tVertexProducer.clone() -process.l1tVertexFinderEmulator.VertexReconstruction.Algorithm = "fastHistoEmulation" -process.l1tVertexFinderEmulator.l1TracksInputTag = cms.InputTag("l1tGTTInputProducer", "Level1TTTracksConverted") -from L1Trigger.Phase2L1GMT.gmt_cfi import l1tStandaloneMuons -process.l1tSAMuonsGmt = l1tStandaloneMuons.clone() - -process.l1tLayer1Barrel9 = process.l1tLayer1Barrel.clone() -process.l1tLayer1Barrel9.puAlgo.nFinalSort = 32 -process.l1tLayer1Barrel9.regions[0].etaBoundaries = [ -1.5, -0.5, 0.5, 1.5 ] -process.l1tLayer1Barrel9.boards=cms.VPSet( - cms.PSet( - regions=cms.vuint32(*[0+9*ie+i for ie in range(3) for i in range(3)])), - cms.PSet( - regions=cms.vuint32(*[3+9*ie+i for ie in range(3) for i in range(3)])), - cms.PSet( - regions=cms.vuint32(*[6+9*ie+i for ie in range(3) for i in range(3)])), - ) - -process.runPF = cms.Path( - process.l1tSAMuonsGmt + - process.l1tGTTInputProducer + - process.l1tVertexFinderEmulator + - process.l1tLayer1Barrel + - process.l1tLayer1Barrel9 + - process.l1tLayer1HGCal + - process.l1tLayer1HGCalNoTK + - process.l1tLayer1HF -) -process.runPF.associate(process.L1TLayer1TaskInputsTask) - - -for det in "Barrel", "Barrel9", "HGCal", "HGCalNoTK", "HF": - l1pf = getattr(process, 'l1tLayer1'+det) - l1pf.dumpFileName = cms.untracked.string("TTbar_PU200_"+det+".dump") - -process.source.fileNames = [ '/store/cmst3/group/l1tr/gpetrucc/11_1_0/NewInputs110X/110121.done/TTbar_PU200/inputs110X_%d.root' % i for i in (1,3,7,8,9) ] -process.l1tPFClustersFromL1EGClusters.src = cms.InputTag("L1EGammaClusterEmuProducer",) -process.l1tPFClustersFromCombinedCaloHCal.phase2barrelCaloTowers = [cms.InputTag("L1EGammaClusterEmuProducer",)] -process.l1tPFClustersFromHGC3DClusters.src = cms.InputTag("hgcalBackEndLayer2Producer","HGCalBackendLayer2Processor3DClustering") -process.l1tPFClustersFromCombinedCaloHF.hcalCandidates = [ cms.InputTag("hgcalBackEndLayer2Producer","HGCalBackendLayer2Processor3DClustering")] -process.l1tPFTracksFromL1Tracks.L1TrackTag = cms.InputTag("TTTracksFromTrackletEmulation","Level1TTTracks") -process.l1tGTTInputProducer.l1TracksInputTag = cms.InputTag("TTTracksFromTrackletEmulation","Level1TTTracks") - diff --git a/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_patternFiles_cfg.py b/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_binaryFiles_cfg.py similarity index 55% rename from L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_patternFiles_cfg.py rename to L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_binaryFiles_cfg.py index 1612a4c908c2c..e085f323c6c03 100644 --- a/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_patternFiles_cfg.py +++ b/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_binaryFiles_cfg.py @@ -1,7 +1,29 @@ +import argparse +import sys + +# example: cmsRun L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_patternFiles_cfg.py -- --dumpFilesOFF +# example: cmsRun L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_patternFiles_cfg.py -- --dumpFilesOFF + +parser = argparse.ArgumentParser(prog=sys.argv[0], description='Optional parameters') + +parser.add_argument("--dumpFilesOFF", help="switch on dump file production", action="store_true", default=False) +parser.add_argument("--patternFilesOFF", help="switch on Layer-1 pattern file production", action="store_true", default=False) + +argv = sys.argv[:] +if '--' in argv: + argv.remove("--") +args, unknown = parser.parse_known_args(argv) + +if args.dumpFilesOFF: + print(f'Switching off dump file creation: dumpFilesOFF is {args.dumpFilesOFF}') +if args.patternFilesOFF: + print(f'Switching off pattern file creation: patternFilesOFF is {args.patternFilesOFF}') + + import FWCore.ParameterSet.Config as cms from Configuration.StandardSequences.Eras import eras -process = cms.Process("RESP", eras.Phase2C9) +process = cms.Process("RESP", eras.Phase2C17I13M9) process.load('Configuration.StandardSequences.Services_cff') process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") @@ -19,14 +41,14 @@ "drop l1tTkPrimaryVertexs_*_*_*") ) -process.load('Configuration.Geometry.GeometryExtended2026D49Reco_cff') -process.load('Configuration.Geometry.GeometryExtended2026D49_cff') +process.load('Configuration.Geometry.GeometryExtended2026D88Reco_cff') +process.load('Configuration.Geometry.GeometryExtended2026D88_cff') process.load('Configuration.StandardSequences.MagneticField_cff') process.load('SimCalorimetry.HcalTrigPrimProducers.hcaltpdigi_cff') # needed to read HCal TPs process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag = GlobalTag(process.GlobalTag, '123X_mcRun4_realistic_v3', '') +process.GlobalTag = GlobalTag(process.GlobalTag, '125X_mcRun4_realistic_v2', '') process.load('L1Trigger.Phase2L1ParticleFlow.l1ctLayer1_cff') process.load('L1Trigger.Phase2L1ParticleFlow.l1ctLayer2EG_cff') @@ -38,14 +60,14 @@ from L1Trigger.Phase2L1GMT.gmt_cfi import l1tStandaloneMuons process.l1tSAMuonsGmt = l1tStandaloneMuons.clone() -from L1Trigger.Phase2L1ParticleFlow.l1tSeedConePFJetProducer_cfi import l1tSeedConePFJetEmulatorProducer +from L1Trigger.Phase2L1ParticleFlow.l1SeedConePFJetEmulatorProducer_cfi import l1SeedConePFJetEmulatorProducer from L1Trigger.Phase2L1ParticleFlow.l1tDeregionizerProducer_cfi import l1tDeregionizerProducer from L1Trigger.Phase2L1ParticleFlow.l1tJetFileWriter_cfi import l1tSeededConeJetFileWriter process.l1tLayer2Deregionizer = l1tDeregionizerProducer.clone() -process.l1tLayer2SeedConeJetsCorrected = l1tSeedConePFJetEmulatorProducer.clone(L1PFObject = ('l1tLayer2Deregionizer', 'Puppi'), - doCorrections = True, - correctorFile = "L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root", - correctorDir = "L1PuppiSC4EmuJets") +process.l1tLayer2SeedConeJetsCorrected = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = cms.InputTag('l1tLayer2Deregionizer', 'Puppi'), + doCorrections = cms.bool(True), + correctorFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root"), + correctorDir = cms.string('L1PuppiSC4EmuJets')) process.l1tLayer2SeedConeJetWriter = l1tSeededConeJetFileWriter.clone(jets = "l1tLayer2SeedConeJetsCorrected") process.l1tLayer1Barrel9 = process.l1tLayer1Barrel.clone() @@ -61,25 +83,26 @@ ) from L1Trigger.Phase2L1ParticleFlow.l1ctLayer1_patternWriters_cff import * -process.l1tLayer1Barrel.patternWriters = cms.untracked.VPSet(*barrelWriterConfigs) -#process.l1tLayer1Barrel9.patternWriters = cms.untracked.VPSet(*barrel9WriterConfigs) # not enabled for now -process.l1tLayer1HGCal.patternWriters = cms.untracked.VPSet(*hgcalWriterConfigs) -process.l1tLayer1HGCalNoTK.patternWriters = cms.untracked.VPSet(*hgcalNoTKWriterConfigs) -process.l1tLayer1HF.patternWriters = cms.untracked.VPSet(*hfWriterConfigs) +if not args.patternFilesOFF: + process.l1tLayer1Barrel.patternWriters = cms.untracked.VPSet(*barrelWriterConfigs) + # process.l1tLayer1Barrel9.patternWriters = cms.untracked.VPSet(*barrel9WriterConfigs) # not enabled for now + process.l1tLayer1HGCal.patternWriters = cms.untracked.VPSet(*hgcalWriterConfigs) + process.l1tLayer1HGCalNoTK.patternWriters = cms.untracked.VPSet(*hgcalNoTKWriterConfigs) + process.l1tLayer1HF.patternWriters = cms.untracked.VPSet(*hfWriterConfigs) process.runPF = cms.Path( process.l1tSAMuonsGmt + process.l1tGTTInputProducer + process.l1tVertexFinderEmulator + process.l1tLayer1Barrel + - #process.l1tLayer1Barrel9 + + process.l1tLayer1Barrel9 + process.l1tLayer1HGCal + process.l1tLayer1HGCalNoTK + process.l1tLayer1HF + process.l1tLayer1 + process.l1tLayer2Deregionizer + process.l1tLayer2SeedConeJetsCorrected + - process.l1tLayer2SeedConeJetWriter + + # process.l1tLayer2SeedConeJetWriter + process.l1tLayer2EG ) process.runPF.associate(process.L1TLayer1TaskInputsTask) @@ -88,20 +111,23 @@ ##################################################################################################################### ## Layer 2 e/gamma -process.l1tLayer2EG.writeInPattern = True -process.l1tLayer2EG.writeOutPattern = True -process.l1tLayer2EG.inPatternFile.maxLinesPerFile = eventsPerFile_*54 -process.l1tLayer2EG.outPatternFile.maxLinesPerFile = eventsPerFile_*54 +if not args.patternFilesOFF: + process.l1tLayer2EG.writeInPattern = True + process.l1tLayer2EG.writeOutPattern = True + process.l1tLayer2EG.inPatternFile.maxLinesPerFile = eventsPerFile_*54 + process.l1tLayer2EG.outPatternFile.maxLinesPerFile = eventsPerFile_*54 ##################################################################################################################### ## Layer 2 seeded-cone jets -process.l1tLayer2SeedConeJetWriter.maxLinesPerFile = eventsPerFile_*54 - -process.source.fileNames = [ '/store/cmst3/group/l1tr/gpetrucc/11_1_0/NewInputs110X/110121.done/TTbar_PU200/inputs110X_%d.root' % i for i in (1,3,7,8,9) ] -process.l1tPFClustersFromL1EGClusters.src = cms.InputTag("L1EGammaClusterEmuProducer",) -process.l1tPFClustersFromCombinedCaloHCal.phase2barrelCaloTowers = [cms.InputTag("L1EGammaClusterEmuProducer",)] -process.l1tPFClustersFromHGC3DClusters.src = cms.InputTag("hgcalBackEndLayer2Producer","HGCalBackendLayer2Processor3DClustering") -process.l1tPFClustersFromCombinedCaloHF.hcalCandidates = [ cms.InputTag("hgcalBackEndLayer2Producer","HGCalBackendLayer2Processor3DClustering")] -process.l1tPFTracksFromL1Tracks.L1TrackTag = cms.InputTag("TTTracksFromTrackletEmulation","Level1TTTracks") -process.l1tGTTInputProducer.l1TracksInputTag = cms.InputTag("TTTracksFromTrackletEmulation","Level1TTTracks") +if not args.patternFilesOFF: + process.runPF.insert(process.runPF.index(process.l1tLayer2SeedConeJetsCorrected)+1, process.l1tLayer2SeedConeJetWriter) + process.l1tLayer2SeedConeJetWriter.maxLinesPerFile = eventsPerFile_*54 + +if not args.dumpFilesOFF: + for det in "Barrel", "Barrel9", "HGCal", "HGCalNoTK", "HF": + l1pf = getattr(process, 'l1tLayer1'+det) + l1pf.dumpFileName = cms.untracked.string("TTbar_PU200_"+det+".dump") + + +process.source.fileNames = [ '/store/cmst3/group/l1tr/gpetrucc/12_5_X/NewInputs125X/150223/TTbar_PU200/inputs125X_%d.root' % i for i in (1,2,3,4,5) ]