diff --git a/src/bmtf_orbit_processor.cc b/src/bmtf_orbit_processor.cc index 7a4974a7e7c0a9ab1938abb45a98c891457fbf93..c4406a90926871e5ba6cecfca3fb2d51820c5af0 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 766af6d9506207d5cd8fe691cde0d2bc18dab390..f5bbc6cb71ec414da20a0330c37a42edb3459296 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 1ad8fca88613f36694cff21858434bf76e219228..3fb950917bd61f360c0b905e343cbd3ae93383d6 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 4df90016300fe1e3327ff46a4c1ee12420124aad..225afa635c00191fc18298e813557039959bde95 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 af62cb187584581009e15ce98d7bf216ac81e4ad..1a7606b2be12f432ff7421086c14999c5aafe53b 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 01b2e9946982f7aee6bba962114d73d3946cf8b3..41f1e29beb30ac446e8a8b665a9d347e2fc38b6c 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 594e9ef8ba4862264b7734b9cde24d8c144065ec..c242ec3c2699aa0ec96c8430caeeb8ad78b632fc 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 8c7ba977e3ca072e2727d3eda44e234e3e13b003..4cdf2ff113fce9d92f7cb52690143e048b72f2b8 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 b7b8c118a664f8ec69fb2a21229517eecbd0c85f..1d8423df57737cd0d580fc09da9a5895189e5f2f 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 e1c4467cc3dcb0ab71c7757873ba3c593261dd13..fdf266ec9e03ab93787d911a0926ec9f271697e3 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 2324b6de9f97be856de0e6652cb5645f35148e95..e8f6c9139d6bbb901b48c99933e032c1444dee61 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 f7bf84bc7e922fdf5f5cd28d3e34a85357eb9d9d..fbedf90d096a03eb8fed50d77dbb9b1ce8e5d7fb 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 88147824300a5ba278fe6bb879955ef1408c8161..aacf829b4bdb7a6e12b0672bb13986de28831ea1 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 9616f868cba584150392456760cee44616b4cd01..b645da5faf3bf9e02d4c1ccc0883b6f1dce64a2d 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)