From f997f03b75a3682240cb70fef221bef7d8fbbfe0 Mon Sep 17 00:00:00 2001 From: Giovanna Lazzari Miotto <giovanna.lazzari.miotto@cern.ch> Date: Mon, 26 Feb 2024 00:08:17 +0100 Subject: [PATCH] Coalesce `ProcessBlock` args under `BxMetadata` --- src/bmtf_orbit_processor.cc | 7 +++---- src/bmtf_orbit_processor.h | 3 +-- src/calo_obj_orbit_processor.cc | 7 +++---- src/calo_obj_orbit_processor.h | 3 +-- src/calo_orbit_processor.cc | 6 ++---- src/calo_orbit_processor.h | 3 +-- src/calo_sum_orbit_processor.cc | 7 ++++--- src/calo_sum_orbit_processor.h | 3 +-- src/muon_orbit_processor.cc | 9 ++++----- src/muon_orbit_processor.h | 3 +-- src/orbit_processor.cc | 2 +- src/orbit_processor.h | 5 ++--- src/ugt_orbit_processor.cc | 5 ++--- src/ugt_orbit_processor.h | 3 +-- 14 files changed, 27 insertions(+), 39 deletions(-) diff --git a/src/bmtf_orbit_processor.cc b/src/bmtf_orbit_processor.cc index 7a4974a7..c4406a90 100644 --- a/src/bmtf_orbit_processor.cc +++ b/src/bmtf_orbit_processor.cc @@ -4,8 +4,7 @@ #include "log.h" -int BmtfOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, - WriteMemRegion &writer, MemRegion &reader) { +int BmtfOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) { using SourceDataType = blockBmtf; using SinkDataType = uint64_t; const uint32_t source_data_length = 8; @@ -28,8 +27,8 @@ int BmtfOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_heade // header word of packed bmtf stub data contains count of stubs in bx // as well as the warning test enable flag. - uint32_t header = uint32_t{(static_cast<uint32_t>(has_header) << 8) + bx_data.count}; - writer.Fill(BxMetadataType{header, bx, orbit}); + md.header = uint32_t{(static_cast<uint32_t>(md.header) << 8) + bx_data.count}; + writer.Fill(md); writer.Fill(bx_data.GetBuffer(), bx_data.GetSize()); return bx_data.count; // Original incremented counts by sCount diff --git a/src/bmtf_orbit_processor.h b/src/bmtf_orbit_processor.h index 766af6d9..f5bbc6cb 100644 --- a/src/bmtf_orbit_processor.h +++ b/src/bmtf_orbit_processor.h @@ -7,8 +7,7 @@ class BmtfOrbitProcessor : public OrbitProcessor { using OrbitProcessor::OrbitProcessor; protected: - int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer, - MemRegion &reader) override; + int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override; inline uint32_t GetPacketSize() const { // size of bmtf stubs packet is 4bytes*(3headerWords + 2frames*8dataWords)=236 diff --git a/src/calo_obj_orbit_processor.cc b/src/calo_obj_orbit_processor.cc index 1ad8fca8..3fb95091 100644 --- a/src/calo_obj_orbit_processor.cc +++ b/src/calo_obj_orbit_processor.cc @@ -5,8 +5,7 @@ #include "log.h" // Returns the counts if valid or a negative error code -int CaloObjOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, - WriteMemRegion &writer, MemRegion &reader) { +int CaloObjOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) { using SourceDataType = blockCaloObj; using SinkDataType = uint32_t; const uint32_t source_data_length = 12; @@ -29,8 +28,8 @@ int CaloObjOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_he return -1; } - auto header = uint32_t{(static_cast<uint32_t>(has_header) << 8) + bx_data.count}; - writer.Fill(BxMetadataType{header, bx, orbit}); + md.header = uint32_t{(static_cast<uint32_t>(md.header) << 8) + bx_data.count}; + writer.Fill(md); writer.Fill(bx_data.GetBuffer(), bx_data.GetSize()); return bx_data.count; // Original increments counts for each oBlocksOn toggled. diff --git a/src/calo_obj_orbit_processor.h b/src/calo_obj_orbit_processor.h index 4df90016..225afa63 100644 --- a/src/calo_obj_orbit_processor.h +++ b/src/calo_obj_orbit_processor.h @@ -30,8 +30,7 @@ class CaloObjOrbitProcessor : public OrbitProcessor { } protected: - int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer, - MemRegion &reader) override; + int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override; inline uint32_t GetPacketSize() const { // size of calo object packet is 4bytes*(3headerWords + 2frames*8dataWords)=76 diff --git a/src/calo_orbit_processor.cc b/src/calo_orbit_processor.cc index af62cb18..1a7606b2 100644 --- a/src/calo_orbit_processor.cc +++ b/src/calo_orbit_processor.cc @@ -2,8 +2,7 @@ #include <cassert> -int CaloOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, - WriteMemRegion &writer, MemRegion &reader) { +int CaloOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) { struct CaloLinkData { uint32_t id; uint32_t data[6]; // Contains inverse matrix `calo0..6[id]` from `blockCalo` @@ -22,8 +21,7 @@ int CaloOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_heade {i, bl->calo0[i], bl->calo1[i], bl->calo2[i], bl->calo3[i], bl->calo4[i], bl->calo5[i]}); } - auto header = uint32_t{has_header}; // header can be added to later - writer.Fill(BxMetadataType{header, bx, orbit}); + writer.Fill(BxMetadata{md.header, md.bx, md.orbit}); writer.Fill(bx_data.GetBuffer(), bx_data.GetSize()); return 1; // Returns one in the original diff --git a/src/calo_orbit_processor.h b/src/calo_orbit_processor.h index 01b2e994..41f1e29b 100644 --- a/src/calo_orbit_processor.h +++ b/src/calo_orbit_processor.h @@ -7,8 +7,7 @@ class CaloOrbitProcessor : public OrbitProcessor { using OrbitProcessor::OrbitProcessor; protected: - int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer, - MemRegion &reader) override; + int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override; inline uint32_t GetPacketSize() const { // size of calo packet is 4bytes*(8links*7dataWords + 3headerWords)=236 bytes. diff --git a/src/calo_sum_orbit_processor.cc b/src/calo_sum_orbit_processor.cc index 594e9ef8..c242ec3c 100644 --- a/src/calo_sum_orbit_processor.cc +++ b/src/calo_sum_orbit_processor.cc @@ -2,8 +2,7 @@ #include <cassert> -int CaloSumOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, WriteMemRegion &writer, - MemRegion &reader) { +int CaloSumOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) { struct BxMetadataType { uint32_t bx; uint32_t orbit; @@ -14,9 +13,11 @@ int CaloSumOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, Write // const uint32_t source_data_length = 6; assert(reader.CheckBounds(sizeof(SourceDataType))); + SourceDataType *bl = reader.Scan<SourceDataType>(); // BxData<SinkDataType, source_data_length> bx_data; - writer.Fill(BxMetadataType{bx, orbit}); + + writer.Fill(BxMetadataType{md.bx, md.orbit}); writer.Fill(bl->calo_sum, sizeof(bl->calo_sum)); return 6; // Original left counts at zero diff --git a/src/calo_sum_orbit_processor.h b/src/calo_sum_orbit_processor.h index 8c7ba977..4cdf2ff1 100644 --- a/src/calo_sum_orbit_processor.h +++ b/src/calo_sum_orbit_processor.h @@ -7,8 +7,7 @@ class CaloSumOrbitProcessor : public OrbitProcessor { using OrbitProcessor::OrbitProcessor; protected: - int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer, - MemRegion &reader) override; + int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override; inline uint32_t GetPacketSize() const { // size of calo sums packet is 4bytes*(2headerWords + 1frames*8dataWords)=40 diff --git a/src/muon_orbit_processor.cc b/src/muon_orbit_processor.cc index b7b8c118..1d8423df 100644 --- a/src/muon_orbit_processor.cc +++ b/src/muon_orbit_processor.cc @@ -4,8 +4,7 @@ #include "log.h" -int MuonOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, - WriteMemRegion &writer, MemRegion &reader) { +int MuonOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) { struct MuonLinkData { uint32_t f; uint32_t s; @@ -45,10 +44,10 @@ int MuonOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_heade // header word of packed muon data contains number of muons in words 3-4 and number of muons in // words 5-6, as well as the warning test enable flag. - auto header = uint32_t{(bx_data_1.count << 16) + ((static_cast<uint32_t>(has_header)) << 8) + - bx_data_2.count}; + md.header = uint32_t{(bx_data_1.count << 16) + ((static_cast<uint32_t>(md.header)) << 8) + + bx_data_2.count}; - writer.Fill(BxMetadataType{header, bx, orbit}); + writer.Fill(BxMetadata{md.header, md.bx, md.orbit}); writer.Fill(bx_data_1.GetBuffer(), bx_data_1.GetSize()); writer.Fill(bx_data_2.GetBuffer(), bx_data_2.GetSize()); diff --git a/src/muon_orbit_processor.h b/src/muon_orbit_processor.h index e1c4467c..fdf266ec 100644 --- a/src/muon_orbit_processor.h +++ b/src/muon_orbit_processor.h @@ -7,8 +7,7 @@ class MuonOrbitProcessor : public OrbitProcessor { using OrbitProcessor::OrbitProcessor; protected: - int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer, - MemRegion &reader) override; + int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override; inline uint32_t GetPacketSize() const { return (3 + 2 * 8 * 3) * 4; } diff --git a/src/orbit_processor.cc b/src/orbit_processor.cc index 2324b6de..e8f6c913 100644 --- a/src/orbit_processor.cc +++ b/src/orbit_processor.cc @@ -154,7 +154,7 @@ OrbitProcessor::FillOrbitMetadata OrbitProcessor::FillOrbit(orbit_trailer *trail WriteMemRegion writer(&wr_ptr, wr_end_ptr); assert(writer.CheckBounds(GetPacketSize())); // Max size a decoded block can use - if (int ret_counts = ProcessBlock(bx, orbit, orbit_header.second, writer, reader); + if (int ret_counts = ProcessBlock({orbit_header.second, bx, orbit}, writer, reader); ret_counts == -1) { continue; // skip bunch crossing } else { diff --git a/src/orbit_processor.h b/src/orbit_processor.h index f7bf84bc..fbedf90d 100644 --- a/src/orbit_processor.h +++ b/src/orbit_processor.h @@ -43,7 +43,7 @@ class OrbitProcessor : public Processor { uint32_t count = 0; }; - struct BxMetadataType { + struct BxMetadata { uint32_t header; uint32_t bx; uint32_t orbit; @@ -104,8 +104,7 @@ class OrbitProcessor : public Processor { void ProcessSliceImpl(Slice &input, Slice &out) override; - virtual int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer, - MemRegion &reader) = 0; + virtual int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) = 0; virtual uint32_t GetPacketSize() const = 0; diff --git a/src/ugt_orbit_processor.cc b/src/ugt_orbit_processor.cc index 88147824..aacf829b 100644 --- a/src/ugt_orbit_processor.cc +++ b/src/ugt_orbit_processor.cc @@ -2,8 +2,7 @@ #include <cassert> -int UgtOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, WriteMemRegion &writer, - MemRegion &reader) { +int UgtOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) { struct BxMetadataType { uint32_t bx; uint32_t orbit; @@ -12,7 +11,7 @@ int UgtOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, WriteMemR using SourceDataType = blockUgt; assert(reader.CheckBounds(sizeof(SourceDataType))); - writer.Fill(BxMetadataType{bx, orbit}); + writer.Fill(BxMetadataType{md.bx, md.orbit}); memcpy(writer.Scan<SourceDataType>(), reader.Scan<SourceDataType>(), sizeof(SourceDataType)); diff --git a/src/ugt_orbit_processor.h b/src/ugt_orbit_processor.h index 9616f868..b645da5f 100644 --- a/src/ugt_orbit_processor.h +++ b/src/ugt_orbit_processor.h @@ -7,8 +7,7 @@ class UgtOrbitProcessor : public OrbitProcessor { using OrbitProcessor::OrbitProcessor; protected: - int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer, - MemRegion &reader) override; + int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override; inline uint32_t GetPacketSize() const { // size of ugt bits packet is 4bytes*(2headerWords + 2frames*8dataWords) -- GitLab