diff --git a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatAlg.cxx b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatAlg.cxx index 3f65e63bce244c6f1778f2bb489d54e7c9badf5a..d3a65ea064872354614c2b854ece2ec64793137b 100644 --- a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatAlg.cxx +++ b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatAlg.cxx @@ -151,13 +151,13 @@ StatusCode FPGADataFormatAlg::execute(const EventContext &ctx) const ATH_MSG_DEBUG("==="); ATH_MSG_DEBUG("\tCluster [" << i << "] has id: " << pcAux.id[i]); ATH_MSG_DEBUG("\tCluster [" << i << "] has idHash: " << pcAux.idHash[i]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has localPosition x: " << pcAux.localPosition[i]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has localPosition y: " << pcAux.localPosition[i + 1]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has localCovariance xx: " << pcAux.localCovariance[i]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has localCovariance yy: " << pcAux.localCovariance[i + 1]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition x: " << pcAux.globalPosition[i]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition y: " << pcAux.globalPosition[i + 1]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition z: " << pcAux.globalPosition[i + 2]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has localPosition x: " << pcAux.localPosition[2 * i]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has localPosition y: " << pcAux.localPosition[2 * i + 1]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has localCovariance xx: " << pcAux.localCovariance[2 * i]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has localCovariance yy: " << pcAux.localCovariance[2 * i + 1]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition x: " << pcAux.globalPosition[3 * i]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition y: " << pcAux.globalPosition[3 * i + 1]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition z: " << pcAux.globalPosition[3 * i + 2]); ATH_MSG_DEBUG("\tCluster [" << i << "] has channelsInPhi: " << pcAux.channelsInPhi[i]); ATH_MSG_DEBUG("\tCluster [" << i << "] has omegaX: " << pcAux.omegaX[i]); ATH_MSG_DEBUG("\tCluster [" << i << "] has omegaY: " << pcAux.omegaY[i]); @@ -173,9 +173,9 @@ StatusCode FPGADataFormatAlg::execute(const EventContext &ctx) const ATH_MSG_DEBUG("\tCluster [" << i << "] has idHash: " << scAux.idHash[i]); ATH_MSG_DEBUG("\tCluster [" << i << "] has localPosition x: " << scAux.localPosition[i]); ATH_MSG_DEBUG("\tCluster [" << i << "] has localCovariance xx: " << scAux.localCovariance[i]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition x: " << scAux.globalPosition[i]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition y: " << scAux.globalPosition[i + 1]); - ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition z: " << scAux.globalPosition[i + 2]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition x: " << scAux.globalPosition[3 * i]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition y: " << scAux.globalPosition[3 * i + 1]); + ATH_MSG_DEBUG("\tCluster [" << i << "] has globalPosition z: " << scAux.globalPosition[3 * i + 2]); ATH_MSG_DEBUG("\tCluster [" << i << "] has channelsInPhi: " << scAux.channelsInPhi[i]); } ATH_MSG_DEBUG("===================End of Event Summary===================="); diff --git a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatTool.cxx b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatTool.cxx index 2e35a03bfebafdabc3d82ac57e3bcce32b362ea7..fac986c0f02c2f39485d71a81775c67ce730625c 100644 --- a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatTool.cxx +++ b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatTool.cxx @@ -87,7 +87,6 @@ StatusCode FPGADataFormatTool::convertPixelRDO( m_pixelId->phi_index(rdoId), // COL pixelRawData->getToT(), // TOT pixelRawData->getLVL1A(), // Lvl! - pixelCounter, // id 0 // Spare ); pixelCounter++; @@ -193,9 +192,8 @@ StatusCode FPGADataFormatTool::convertStripRDO( auto stripWord = FPGADataFormatUtilities::fill_STRIP_EF_RDO( lastBit, // last bit indicating module boundary chipID, // chip ID - ITkStripID, // strip ID + ITkStripID, // cluster number stripEncodingForITK.at(stripID), // cluster map - stripNumber, // cluster ID 0 // spare bits ); diff --git a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatUtilities.h b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatUtilities.h index 13246e1aaa9bdaa51d64f22bee006b529fc4c037..e5802f489e9324d46b0ce86220cf3654313efdc1 100644 --- a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatUtilities.h +++ b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/FPGADataFormatUtilities.h @@ -8,11 +8,11 @@ #include <cstdint> // Provider of simple function for conversion of data into the FPGA dataformat -// Using FPGA Dataformat doc v0.6 +// Using FPGA Dataformat doc v0.6.2 namespace FPGADataFormatUtilities { consteval uint64_t SELECTBITS(uint8_t len, uint8_t startbit) { - return (len == 64 ? UINTMAX_MAX : (((1ULL << len) - 1ULL) << startbit)); + return (len == 64 ? 0xFFFFFFFFFFFFFFFFULL : (((1ULL << len) - 1ULL) << startbit)); } // EVT_HDR defined flags @@ -95,24 +95,24 @@ namespace FPGADataFormatUtilities inline uint64_t get_dataformat_EVT_HDR_w1 (const EVT_HDR_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.flag) << EVT_HDR_W1_FLAG_lsb); - temp |= (static_cast<uint64_t>(in.l0id) << EVT_HDR_W1_L0ID_lsb); - temp |= (static_cast<uint64_t>(in.bcid) << EVT_HDR_W1_BCID_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EVT_HDR_W1_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(EVT_HDR_W1_FLAG_bits, 0)) << EVT_HDR_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.l0id)) & SELECTBITS(EVT_HDR_W1_L0ID_bits, 0)) << EVT_HDR_W1_L0ID_lsb); + temp |= (((static_cast<uint64_t>(in.bcid)) & SELECTBITS(EVT_HDR_W1_BCID_bits, 0)) << EVT_HDR_W1_BCID_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EVT_HDR_W1_SPARE_bits, 0)) << EVT_HDR_W1_SPARE_lsb); return temp; } inline uint64_t get_dataformat_EVT_HDR_w2 (const EVT_HDR_w2& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.runnumber) << EVT_HDR_W2_RUNNUMBER_lsb); - temp |= (static_cast<uint64_t>(in.time) << EVT_HDR_W2_TIME_lsb); + temp |= (((static_cast<uint64_t>(in.runnumber)) & SELECTBITS(EVT_HDR_W2_RUNNUMBER_bits, 0)) << EVT_HDR_W2_RUNNUMBER_lsb); + temp |= (((static_cast<uint64_t>(in.time)) & SELECTBITS(EVT_HDR_W2_TIME_bits, 0)) << EVT_HDR_W2_TIME_lsb); return temp; } inline uint64_t get_dataformat_EVT_HDR_w3 (const EVT_HDR_w3& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.status) << EVT_HDR_W3_STATUS_lsb); - temp |= (static_cast<uint64_t>(in.crc) << EVT_HDR_W3_CRC_lsb); + temp |= (((static_cast<uint64_t>(in.status)) & SELECTBITS(EVT_HDR_W3_STATUS_bits, 0)) << EVT_HDR_W3_STATUS_lsb); + temp |= (((static_cast<uint64_t>(in.crc)) & SELECTBITS(EVT_HDR_W3_CRC_bits, 0)) << EVT_HDR_W3_CRC_lsb); return temp; } @@ -239,22 +239,22 @@ namespace FPGADataFormatUtilities inline uint64_t get_dataformat_EVT_FTR_w1 (const EVT_FTR_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.flag) << EVT_FTR_W1_FLAG_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EVT_FTR_W1_SPARE_lsb); - temp |= (static_cast<uint64_t>(in.hdr_crc) << EVT_FTR_W1_HDR_CRC_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(EVT_FTR_W1_FLAG_bits, 0)) << EVT_FTR_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EVT_FTR_W1_SPARE_bits, 0)) << EVT_FTR_W1_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.hdr_crc)) & SELECTBITS(EVT_FTR_W1_HDR_CRC_bits, 0)) << EVT_FTR_W1_HDR_CRC_lsb); return temp; } inline uint64_t get_dataformat_EVT_FTR_w2 (const EVT_FTR_w2& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.error_flags) << EVT_FTR_W2_ERROR_FLAGS_lsb); + temp |= (((static_cast<uint64_t>(in.error_flags)) & SELECTBITS(EVT_FTR_W2_ERROR_FLAGS_bits, 0)) << EVT_FTR_W2_ERROR_FLAGS_lsb); return temp; } inline uint64_t get_dataformat_EVT_FTR_w3 (const EVT_FTR_w3& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.word_count) << EVT_FTR_W3_WORD_COUNT_lsb); - temp |= (static_cast<uint64_t>(in.crc) << EVT_FTR_W3_CRC_lsb); + temp |= (((static_cast<uint64_t>(in.word_count)) & SELECTBITS(EVT_FTR_W3_WORD_COUNT_bits, 0)) << EVT_FTR_W3_WORD_COUNT_lsb); + temp |= (((static_cast<uint64_t>(in.crc)) & SELECTBITS(EVT_FTR_W3_CRC_bits, 0)) << EVT_FTR_W3_CRC_lsb); return temp; } @@ -341,10 +341,10 @@ namespace FPGADataFormatUtilities inline uint64_t get_dataformat_M_HDR_w1 (const M_HDR_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.flag) << M_HDR_W1_FLAG_lsb); - temp |= (static_cast<uint64_t>(in.modid) << M_HDR_W1_MODID_lsb); - temp |= (static_cast<uint64_t>(in.modhash) << M_HDR_W1_MODHASH_lsb); - temp |= (static_cast<uint64_t>(in.spare) << M_HDR_W1_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(M_HDR_W1_FLAG_bits, 0)) << M_HDR_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.modid)) & SELECTBITS(M_HDR_W1_MODID_bits, 0)) << M_HDR_W1_MODID_lsb); + temp |= (((static_cast<uint64_t>(in.modhash)) & SELECTBITS(M_HDR_W1_MODHASH_bits, 0)) << M_HDR_W1_MODHASH_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(M_HDR_W1_SPARE_bits, 0)) << M_HDR_W1_SPARE_lsb); return temp; } @@ -374,7 +374,7 @@ namespace FPGADataFormatUtilities } // SLICE_HDR defined flags - const int SLICE_HDR_FLAG = 0x92; + const int SLICE_HDR_FLAG = 0x88; // SLICE_HDR_W1 word description const int SLICE_HDR_W1_FLAG_bits = 8; @@ -417,11 +417,11 @@ namespace FPGADataFormatUtilities inline uint64_t get_dataformat_SLICE_HDR_w1 (const SLICE_HDR_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.flag) << SLICE_HDR_W1_FLAG_lsb); - temp |= (static_cast<uint64_t>(in.sliceid) << SLICE_HDR_W1_SLICEID_lsb); - temp |= (static_cast<uint64_t>(in.eta_region) << SLICE_HDR_W1_ETA_REGION_lsb); - temp |= (static_cast<uint64_t>(in.phi_region) << SLICE_HDR_W1_PHI_REGION_lsb); - temp |= (static_cast<uint64_t>(in.spare) << SLICE_HDR_W1_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(SLICE_HDR_W1_FLAG_bits, 0)) << SLICE_HDR_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.sliceid)) & SELECTBITS(SLICE_HDR_W1_SLICEID_bits, 0)) << SLICE_HDR_W1_SLICEID_lsb); + temp |= (((static_cast<uint64_t>(in.eta_region)) & SELECTBITS(SLICE_HDR_W1_ETA_REGION_bits, 0)) << SLICE_HDR_W1_ETA_REGION_lsb); + temp |= (((static_cast<uint64_t>(in.phi_region)) & SELECTBITS(SLICE_HDR_W1_PHI_REGION_bits, 0)) << SLICE_HDR_W1_PHI_REGION_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(SLICE_HDR_W1_SPARE_bits, 0)) << SLICE_HDR_W1_SPARE_lsb); return temp; } @@ -556,24 +556,24 @@ namespace FPGADataFormatUtilities inline uint64_t get_dataformat_RD_HDR_w1 (const RD_HDR_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.flag) << RD_HDR_W1_FLAG_lsb); - temp |= (static_cast<uint64_t>(in.type) << RD_HDR_W1_TYPE_lsb); - temp |= (static_cast<uint64_t>(in.eta_region) << RD_HDR_W1_ETA_REGION_lsb); - temp |= (static_cast<uint64_t>(in.phi_region) << RD_HDR_W1_PHI_REGION_lsb); - temp |= (static_cast<uint64_t>(in.slice) << RD_HDR_W1_SLICE_lsb); - temp |= (static_cast<uint64_t>(in.hough_x_bin) << RD_HDR_W1_HOUGH_X_BIN_lsb); - temp |= (static_cast<uint64_t>(in.hough_y_bin) << RD_HDR_W1_HOUGH_Y_BIN_lsb); - temp |= (static_cast<uint64_t>(in.second_stage) << RD_HDR_W1_SECOND_STAGE_lsb); - temp |= (static_cast<uint64_t>(in.layer_bitmask) << RD_HDR_W1_LAYER_BITMASK_lsb); - temp |= (static_cast<uint64_t>(in.spare) << RD_HDR_W1_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(RD_HDR_W1_FLAG_bits, 0)) << RD_HDR_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.type)) & SELECTBITS(RD_HDR_W1_TYPE_bits, 0)) << RD_HDR_W1_TYPE_lsb); + temp |= (((static_cast<uint64_t>(in.eta_region)) & SELECTBITS(RD_HDR_W1_ETA_REGION_bits, 0)) << RD_HDR_W1_ETA_REGION_lsb); + temp |= (((static_cast<uint64_t>(in.phi_region)) & SELECTBITS(RD_HDR_W1_PHI_REGION_bits, 0)) << RD_HDR_W1_PHI_REGION_lsb); + temp |= (((static_cast<uint64_t>(in.slice)) & SELECTBITS(RD_HDR_W1_SLICE_bits, 0)) << RD_HDR_W1_SLICE_lsb); + temp |= (((static_cast<uint64_t>(in.hough_x_bin)) & SELECTBITS(RD_HDR_W1_HOUGH_X_BIN_bits, 0)) << RD_HDR_W1_HOUGH_X_BIN_lsb); + temp |= (((static_cast<uint64_t>(in.hough_y_bin)) & SELECTBITS(RD_HDR_W1_HOUGH_Y_BIN_bits, 0)) << RD_HDR_W1_HOUGH_Y_BIN_lsb); + temp |= (((static_cast<uint64_t>(in.second_stage)) & SELECTBITS(RD_HDR_W1_SECOND_STAGE_bits, 0)) << RD_HDR_W1_SECOND_STAGE_lsb); + temp |= (((static_cast<uint64_t>(in.layer_bitmask)) & SELECTBITS(RD_HDR_W1_LAYER_BITMASK_bits, 0)) << RD_HDR_W1_LAYER_BITMASK_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(RD_HDR_W1_SPARE_bits, 0)) << RD_HDR_W1_SPARE_lsb); return temp; } inline uint64_t get_dataformat_RD_HDR_w2 (const RD_HDR_w2& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.global_phi) << RD_HDR_W2_GLOBAL_PHI_lsb); - temp |= (static_cast<uint64_t>(in.global_eta) << RD_HDR_W2_GLOBAL_ETA_lsb); - temp |= (static_cast<uint64_t>(in.spare) << RD_HDR_W2_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.global_phi)) & SELECTBITS(RD_HDR_W2_GLOBAL_PHI_bits, 0)) << RD_HDR_W2_GLOBAL_PHI_lsb); + temp |= (((static_cast<uint64_t>(in.global_eta)) & SELECTBITS(RD_HDR_W2_GLOBAL_ETA_bits, 0)) << RD_HDR_W2_GLOBAL_ETA_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(RD_HDR_W2_SPARE_bits, 0)) << RD_HDR_W2_SPARE_lsb); return temp; } @@ -789,37 +789,37 @@ namespace FPGADataFormatUtilities temp.spare = (in & SELECTBITS(GTRACK_HDR_W3_SPARE_bits, GTRACK_HDR_W3_SPARE_lsb)) >> GTRACK_HDR_W3_SPARE_lsb; return temp; } - + inline uint64_t get_dataformat_GTRACK_HDR_w1 (const GTRACK_HDR_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.flag) << GTRACK_HDR_W1_FLAG_lsb); - temp |= (static_cast<uint64_t>(in.type) << GTRACK_HDR_W1_TYPE_lsb); - temp |= (static_cast<uint64_t>(in.eta_region) << GTRACK_HDR_W1_ETA_REGION_lsb); - temp |= (static_cast<uint64_t>(in.phi_region) << GTRACK_HDR_W1_PHI_REGION_lsb); - temp |= (static_cast<uint64_t>(in.slice) << GTRACK_HDR_W1_SLICE_lsb); - temp |= (static_cast<uint64_t>(in.hough_x_bin) << GTRACK_HDR_W1_HOUGH_X_BIN_lsb); - temp |= (static_cast<uint64_t>(in.hough_y_bin) << GTRACK_HDR_W1_HOUGH_Y_BIN_lsb); - temp |= (static_cast<uint64_t>(in.second_stage) << GTRACK_HDR_W1_SECOND_STAGE_lsb); - temp |= (static_cast<uint64_t>(in.layer_bitmask) << GTRACK_HDR_W1_LAYER_BITMASK_lsb); - temp |= (static_cast<uint64_t>(in.spare) << GTRACK_HDR_W1_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(GTRACK_HDR_W1_FLAG_bits, 0)) << GTRACK_HDR_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.type)) & SELECTBITS(GTRACK_HDR_W1_TYPE_bits, 0)) << GTRACK_HDR_W1_TYPE_lsb); + temp |= (((static_cast<uint64_t>(in.eta_region)) & SELECTBITS(GTRACK_HDR_W1_ETA_REGION_bits, 0)) << GTRACK_HDR_W1_ETA_REGION_lsb); + temp |= (((static_cast<uint64_t>(in.phi_region)) & SELECTBITS(GTRACK_HDR_W1_PHI_REGION_bits, 0)) << GTRACK_HDR_W1_PHI_REGION_lsb); + temp |= (((static_cast<uint64_t>(in.slice)) & SELECTBITS(GTRACK_HDR_W1_SLICE_bits, 0)) << GTRACK_HDR_W1_SLICE_lsb); + temp |= (((static_cast<uint64_t>(in.hough_x_bin)) & SELECTBITS(GTRACK_HDR_W1_HOUGH_X_BIN_bits, 0)) << GTRACK_HDR_W1_HOUGH_X_BIN_lsb); + temp |= (((static_cast<uint64_t>(in.hough_y_bin)) & SELECTBITS(GTRACK_HDR_W1_HOUGH_Y_BIN_bits, 0)) << GTRACK_HDR_W1_HOUGH_Y_BIN_lsb); + temp |= (((static_cast<uint64_t>(in.second_stage)) & SELECTBITS(GTRACK_HDR_W1_SECOND_STAGE_bits, 0)) << GTRACK_HDR_W1_SECOND_STAGE_lsb); + temp |= (((static_cast<uint64_t>(in.layer_bitmask)) & SELECTBITS(GTRACK_HDR_W1_LAYER_BITMASK_bits, 0)) << GTRACK_HDR_W1_LAYER_BITMASK_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(GTRACK_HDR_W1_SPARE_bits, 0)) << GTRACK_HDR_W1_SPARE_lsb); return temp; } inline uint64_t get_dataformat_GTRACK_HDR_w2 (const GTRACK_HDR_w2& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.score) << GTRACK_HDR_W2_SCORE_lsb); - temp |= (static_cast<uint64_t>(in.d0) << GTRACK_HDR_W2_D0_lsb); - temp |= (static_cast<uint64_t>(in.z0) << GTRACK_HDR_W2_Z0_lsb); - temp |= (static_cast<uint64_t>(in.spare) << GTRACK_HDR_W2_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.score)) & SELECTBITS(GTRACK_HDR_W2_SCORE_bits, 0)) << GTRACK_HDR_W2_SCORE_lsb); + temp |= (((static_cast<uint64_t>(in.d0)) & SELECTBITS(GTRACK_HDR_W2_D0_bits, 0)) << GTRACK_HDR_W2_D0_lsb); + temp |= (((static_cast<uint64_t>(in.z0)) & SELECTBITS(GTRACK_HDR_W2_Z0_bits, 0)) << GTRACK_HDR_W2_Z0_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(GTRACK_HDR_W2_SPARE_bits, 0)) << GTRACK_HDR_W2_SPARE_lsb); return temp; } inline uint64_t get_dataformat_GTRACK_HDR_w3 (const GTRACK_HDR_w3& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.qoverpt) << GTRACK_HDR_W3_QOVERPT_lsb); - temp |= (static_cast<uint64_t>(in.phi) << GTRACK_HDR_W3_PHI_lsb); - temp |= (static_cast<uint64_t>(in.eta) << GTRACK_HDR_W3_ETA_lsb); - temp |= (static_cast<uint64_t>(in.spare) << GTRACK_HDR_W3_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.qoverpt)) & SELECTBITS(GTRACK_HDR_W3_QOVERPT_bits, 0)) << GTRACK_HDR_W3_QOVERPT_lsb); + temp |= (((static_cast<uint64_t>(in.phi)) & SELECTBITS(GTRACK_HDR_W3_PHI_bits, 0)) << GTRACK_HDR_W3_PHI_lsb); + temp |= (((static_cast<uint64_t>(in.eta)) & SELECTBITS(GTRACK_HDR_W3_ETA_bits, 0)) << GTRACK_HDR_W3_ETA_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(GTRACK_HDR_W3_SPARE_bits, 0)) << GTRACK_HDR_W3_SPARE_lsb); return temp; } @@ -838,11 +838,11 @@ namespace FPGADataFormatUtilities return temp; } - inline GTRACK_HDR_w2 fill_GTRACK_HDR_w2 (const uint64_t& score, const int64_t& d0, const int64_t& z0, const uint64_t& spare) { + inline GTRACK_HDR_w2 fill_GTRACK_HDR_w2 (const double& score, const double& d0, const double& z0, const uint64_t& spare) { GTRACK_HDR_w2 temp; - temp.score = score; - temp.d0 = d0; - temp.z0 = z0; + temp.score = (uint64_t)(score * GTRACK_HDR_W2_SCORE_mf); + temp.d0 = (int64_t)(d0 * GTRACK_HDR_W2_D0_mf); + temp.z0 = (int64_t)(z0 * GTRACK_HDR_W2_Z0_mf); temp.spare = spare; return temp; } @@ -896,16 +896,16 @@ namespace FPGADataFormatUtilities return in; } - inline uint64_t to_real_GTRACK_HDR_w2_score (const uint64_t& in) { - return in; + inline double to_real_GTRACK_HDR_w2_score (const uint64_t& in) { + return (double)in / GTRACK_HDR_W2_SCORE_mf; } - inline int64_t to_real_GTRACK_HDR_w2_d0 (const int64_t& in) { - return in; + inline double to_real_GTRACK_HDR_w2_d0 (const int64_t& in) { + return (double)in / GTRACK_HDR_W2_D0_mf; } - inline int64_t to_real_GTRACK_HDR_w2_z0 (const int64_t& in) { - return in; + inline double to_real_GTRACK_HDR_w2_z0 (const int64_t& in) { + return (double)in / GTRACK_HDR_W2_Z0_mf; } inline uint64_t to_real_GTRACK_HDR_w2_spare (const uint64_t& in) { @@ -941,25 +941,25 @@ namespace FPGADataFormatUtilities const int PIXEL_CLUSTER_ROW_lsb = 37; const float PIXEL_CLUSTER_ROW_mf = 1.; - const int PIXEL_CLUSTER_CLUSTERID_bits = 13; - const int PIXEL_CLUSTER_CLUSTERID_lsb = 24; - const float PIXEL_CLUSTER_CLUSTERID_mf = 1.; - const int PIXEL_CLUSTER_CENTROID_COL_bits = 12; - const int PIXEL_CLUSTER_CENTROID_COL_lsb = 12; + const int PIXEL_CLUSTER_CENTROID_COL_lsb = 25; const float PIXEL_CLUSTER_CENTROID_COL_mf = 16.; const int PIXEL_CLUSTER_CENTROID_ROW_bits = 12; - const int PIXEL_CLUSTER_CENTROID_ROW_lsb = 0; + const int PIXEL_CLUSTER_CENTROID_ROW_lsb = 13; const float PIXEL_CLUSTER_CENTROID_ROW_mf = 16.; + const int PIXEL_CLUSTER_SPARE_bits = 13; + const int PIXEL_CLUSTER_SPARE_lsb = 0; + const float PIXEL_CLUSTER_SPARE_mf = 1.; + typedef struct PIXEL_CLUSTER { uint64_t last : PIXEL_CLUSTER_LAST_bits; uint64_t col : PIXEL_CLUSTER_COL_bits; uint64_t row : PIXEL_CLUSTER_ROW_bits; - uint64_t clusterid : PIXEL_CLUSTER_CLUSTERID_bits; uint64_t centroid_col : PIXEL_CLUSTER_CENTROID_COL_bits; uint64_t centroid_row : PIXEL_CLUSTER_CENTROID_ROW_bits; + uint64_t spare : PIXEL_CLUSTER_SPARE_bits; } PIXEL_CLUSTER; inline PIXEL_CLUSTER get_bitfields_PIXEL_CLUSTER (const uint64_t& in) { @@ -967,31 +967,31 @@ namespace FPGADataFormatUtilities temp.last = (in & SELECTBITS(PIXEL_CLUSTER_LAST_bits, PIXEL_CLUSTER_LAST_lsb)) >> PIXEL_CLUSTER_LAST_lsb; temp.col = (in & SELECTBITS(PIXEL_CLUSTER_COL_bits, PIXEL_CLUSTER_COL_lsb)) >> PIXEL_CLUSTER_COL_lsb; temp.row = (in & SELECTBITS(PIXEL_CLUSTER_ROW_bits, PIXEL_CLUSTER_ROW_lsb)) >> PIXEL_CLUSTER_ROW_lsb; - temp.clusterid = (in & SELECTBITS(PIXEL_CLUSTER_CLUSTERID_bits, PIXEL_CLUSTER_CLUSTERID_lsb)) >> PIXEL_CLUSTER_CLUSTERID_lsb; temp.centroid_col = (in & SELECTBITS(PIXEL_CLUSTER_CENTROID_COL_bits, PIXEL_CLUSTER_CENTROID_COL_lsb)) >> PIXEL_CLUSTER_CENTROID_COL_lsb; temp.centroid_row = (in & SELECTBITS(PIXEL_CLUSTER_CENTROID_ROW_bits, PIXEL_CLUSTER_CENTROID_ROW_lsb)) >> PIXEL_CLUSTER_CENTROID_ROW_lsb; + temp.spare = (in & SELECTBITS(PIXEL_CLUSTER_SPARE_bits, PIXEL_CLUSTER_SPARE_lsb)) >> PIXEL_CLUSTER_SPARE_lsb; return temp; } inline uint64_t get_dataformat_PIXEL_CLUSTER (const PIXEL_CLUSTER& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.last) << PIXEL_CLUSTER_LAST_lsb); - temp |= (static_cast<uint64_t>(in.col) << PIXEL_CLUSTER_COL_lsb); - temp |= (static_cast<uint64_t>(in.row) << PIXEL_CLUSTER_ROW_lsb); - temp |= (static_cast<uint64_t>(in.clusterid) << PIXEL_CLUSTER_CLUSTERID_lsb); - temp |= (static_cast<uint64_t>(in.centroid_col) << PIXEL_CLUSTER_CENTROID_COL_lsb); - temp |= (static_cast<uint64_t>(in.centroid_row) << PIXEL_CLUSTER_CENTROID_ROW_lsb); + temp |= (((static_cast<uint64_t>(in.last)) & SELECTBITS(PIXEL_CLUSTER_LAST_bits, 0)) << PIXEL_CLUSTER_LAST_lsb); + temp |= (((static_cast<uint64_t>(in.col)) & SELECTBITS(PIXEL_CLUSTER_COL_bits, 0)) << PIXEL_CLUSTER_COL_lsb); + temp |= (((static_cast<uint64_t>(in.row)) & SELECTBITS(PIXEL_CLUSTER_ROW_bits, 0)) << PIXEL_CLUSTER_ROW_lsb); + temp |= (((static_cast<uint64_t>(in.centroid_col)) & SELECTBITS(PIXEL_CLUSTER_CENTROID_COL_bits, 0)) << PIXEL_CLUSTER_CENTROID_COL_lsb); + temp |= (((static_cast<uint64_t>(in.centroid_row)) & SELECTBITS(PIXEL_CLUSTER_CENTROID_ROW_bits, 0)) << PIXEL_CLUSTER_CENTROID_ROW_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(PIXEL_CLUSTER_SPARE_bits, 0)) << PIXEL_CLUSTER_SPARE_lsb); return temp; } - inline PIXEL_CLUSTER fill_PIXEL_CLUSTER (const uint64_t& last, const uint64_t& col, const uint64_t& row, const uint64_t& clusterid, const double& centroid_col, const double& centroid_row) { + inline PIXEL_CLUSTER fill_PIXEL_CLUSTER (const uint64_t& last, const uint64_t& col, const uint64_t& row, const double& centroid_col, const double& centroid_row, const uint64_t& spare) { PIXEL_CLUSTER temp; temp.last = last; temp.col = col; temp.row = row; - temp.clusterid = clusterid; temp.centroid_col = (uint64_t)(centroid_col * PIXEL_CLUSTER_CENTROID_COL_mf); temp.centroid_row = (uint64_t)(centroid_row * PIXEL_CLUSTER_CENTROID_ROW_mf); + temp.spare = spare; return temp; } @@ -1007,10 +1007,6 @@ namespace FPGADataFormatUtilities return in; } - inline uint64_t to_real_PIXEL_CLUSTER_clusterid (const uint64_t& in) { - return in; - } - inline double to_real_PIXEL_CLUSTER_centroid_col (const uint64_t& in) { return (double)in / PIXEL_CLUSTER_CENTROID_COL_mf; } @@ -1019,6 +1015,10 @@ namespace FPGADataFormatUtilities return (double)in / PIXEL_CLUSTER_CENTROID_ROW_mf; } + inline uint64_t to_real_PIXEL_CLUSTER_spare (const uint64_t& in) { + return in; + } + // STRIP_CLUSTER word description const int STRIP_CLUSTER_LAST_bits = 1; const int STRIP_CLUSTER_LAST_lsb = 31; @@ -1028,19 +1028,15 @@ namespace FPGADataFormatUtilities const int STRIP_CLUSTER_ROW_lsb = 30; const float STRIP_CLUSTER_ROW_mf = 1.; - const int STRIP_CLUSTER_NSTRIPS_bits = 2; - const int STRIP_CLUSTER_NSTRIPS_lsb = 28; + const int STRIP_CLUSTER_NSTRIPS_bits = 8; + const int STRIP_CLUSTER_NSTRIPS_lsb = 22; const float STRIP_CLUSTER_NSTRIPS_mf = 1.; const int STRIP_CLUSTER_STRIP_INDEX_bits = 12; - const int STRIP_CLUSTER_STRIP_INDEX_lsb = 16; + const int STRIP_CLUSTER_STRIP_INDEX_lsb = 10; const float STRIP_CLUSTER_STRIP_INDEX_mf = 1.; - const int STRIP_CLUSTER_CLUSTERID_bits = 13; - const int STRIP_CLUSTER_CLUSTERID_lsb = 3; - const float STRIP_CLUSTER_CLUSTERID_mf = 1.; - - const int STRIP_CLUSTER_SPARE_bits = 3; + const int STRIP_CLUSTER_SPARE_bits = 10; const int STRIP_CLUSTER_SPARE_lsb = 0; const float STRIP_CLUSTER_SPARE_mf = 1.; @@ -1049,19 +1045,15 @@ namespace FPGADataFormatUtilities uint64_t row : STRIP_CLUSTER_ROW_bits; uint64_t nstrips : STRIP_CLUSTER_NSTRIPS_bits; uint64_t strip_index : STRIP_CLUSTER_STRIP_INDEX_bits; - uint64_t clusterid : STRIP_CLUSTER_CLUSTERID_bits; uint64_t spare : STRIP_CLUSTER_SPARE_bits; } STRIP_CLUSTER; - // Even though the input is 64 bits, this function really only operates on the lower 32 bits - // Make sure to shift right by 32 bits to get the upper 32 bits inline STRIP_CLUSTER get_bitfields_STRIP_CLUSTER (const uint64_t& in) { STRIP_CLUSTER temp; temp.last = (in & SELECTBITS(STRIP_CLUSTER_LAST_bits, STRIP_CLUSTER_LAST_lsb)) >> STRIP_CLUSTER_LAST_lsb; temp.row = (in & SELECTBITS(STRIP_CLUSTER_ROW_bits, STRIP_CLUSTER_ROW_lsb)) >> STRIP_CLUSTER_ROW_lsb; temp.nstrips = (in & SELECTBITS(STRIP_CLUSTER_NSTRIPS_bits, STRIP_CLUSTER_NSTRIPS_lsb)) >> STRIP_CLUSTER_NSTRIPS_lsb; temp.strip_index = (in & SELECTBITS(STRIP_CLUSTER_STRIP_INDEX_bits, STRIP_CLUSTER_STRIP_INDEX_lsb)) >> STRIP_CLUSTER_STRIP_INDEX_lsb; - temp.clusterid = (in & SELECTBITS(STRIP_CLUSTER_CLUSTERID_bits, STRIP_CLUSTER_CLUSTERID_lsb)) >> STRIP_CLUSTER_CLUSTERID_lsb; temp.spare = (in & SELECTBITS(STRIP_CLUSTER_SPARE_bits, STRIP_CLUSTER_SPARE_lsb)) >> STRIP_CLUSTER_SPARE_lsb; return temp; } @@ -1076,12 +1068,11 @@ namespace FPGADataFormatUtilities inline uint64_t get_dataformat_STRIP_CLUSTER (const STRIP_CLUSTER& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.last) << STRIP_CLUSTER_LAST_lsb); - temp |= (static_cast<uint64_t>(in.row) << STRIP_CLUSTER_ROW_lsb); - temp |= (static_cast<uint64_t>(in.nstrips) << STRIP_CLUSTER_NSTRIPS_lsb); - temp |= (static_cast<uint64_t>(in.strip_index) << STRIP_CLUSTER_STRIP_INDEX_lsb); - temp |= (static_cast<uint64_t>(in.clusterid) << STRIP_CLUSTER_CLUSTERID_lsb); - temp |= (static_cast<uint64_t>(in.spare) << STRIP_CLUSTER_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.last)) & SELECTBITS(STRIP_CLUSTER_LAST_bits, 0)) << STRIP_CLUSTER_LAST_lsb); + temp |= (((static_cast<uint64_t>(in.row)) & SELECTBITS(STRIP_CLUSTER_ROW_bits, 0)) << STRIP_CLUSTER_ROW_lsb); + temp |= (((static_cast<uint64_t>(in.nstrips)) & SELECTBITS(STRIP_CLUSTER_NSTRIPS_bits, 0)) << STRIP_CLUSTER_NSTRIPS_lsb); + temp |= (((static_cast<uint64_t>(in.strip_index)) & SELECTBITS(STRIP_CLUSTER_STRIP_INDEX_bits, 0)) << STRIP_CLUSTER_STRIP_INDEX_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(STRIP_CLUSTER_SPARE_bits, 0)) << STRIP_CLUSTER_SPARE_lsb); return temp; } @@ -1090,13 +1081,12 @@ namespace FPGADataFormatUtilities return (temp | low); } - inline STRIP_CLUSTER fill_STRIP_CLUSTER (const uint64_t& last, const uint64_t& row, const uint64_t& nstrips, const uint64_t& strip_index, const uint64_t& clusterid, const uint64_t& spare) { + inline STRIP_CLUSTER fill_STRIP_CLUSTER (const uint64_t& last, const uint64_t& row, const uint64_t& nstrips, const uint64_t& strip_index, const uint64_t& spare) { STRIP_CLUSTER temp; temp.last = last; temp.row = row; temp.nstrips = nstrips; temp.strip_index = strip_index; - temp.clusterid = clusterid; temp.spare = spare; return temp; } @@ -1117,10 +1107,6 @@ namespace FPGADataFormatUtilities return in; } - inline uint64_t to_real_STRIP_CLUSTER_clusterid (const uint64_t& in) { - return in; - } - inline uint64_t to_real_STRIP_CLUSTER_spare (const uint64_t& in) { return in; } @@ -1130,40 +1116,44 @@ namespace FPGADataFormatUtilities const int GHITZ_W1_LAST_lsb = 63; const float GHITZ_W1_LAST_mf = 1.; - const int GHITZ_W1_LYR_bits = 4; - const int GHITZ_W1_LYR_lsb = 59; + const int GHITZ_W1_LYR_bits = 6; + const int GHITZ_W1_LYR_lsb = 57; const float GHITZ_W1_LYR_mf = 1.; const int GHITZ_W1_RAD_bits = 18; - const int GHITZ_W1_RAD_lsb = 41; + const int GHITZ_W1_RAD_lsb = 39; const float GHITZ_W1_RAD_mf = 256.; const int GHITZ_W1_PHI_bits = 16; - const int GHITZ_W1_PHI_lsb = 25; + const int GHITZ_W1_PHI_lsb = 23; const float GHITZ_W1_PHI_mf = 8192.; - const int GHITZ_W1_Z_bits = 18; - const int GHITZ_W1_Z_lsb = 7; + const int GHITZ_W1_Z_bits = 20; + const int GHITZ_W1_Z_lsb = 3; const float GHITZ_W1_Z_mf = 128.; - const int GHITZ_W1_ROW_bits = 6; - const int GHITZ_W1_ROW_lsb = 1; - const float GHITZ_W1_ROW_mf = 1.; - const int GHITZ_W1_LASTOFSLICE_bits = 1; - const int GHITZ_W1_LASTOFSLICE_lsb = 0; + const int GHITZ_W1_LASTOFSLICE_lsb = 2; const float GHITZ_W1_LASTOFSLICE_mf = 1.; + const int GHITZ_W1_SPARE_bits = 2; + const int GHITZ_W1_SPARE_lsb = 0; + const float GHITZ_W1_SPARE_mf = 1.; + // GHITZ_W2 word description - const int GHITZ_W2_CLUSTER1_bits = 13; - const int GHITZ_W2_CLUSTER1_lsb = 51; + const int GHITZ_W2_CLUSTER1_bits = 19; + const int GHITZ_W2_CLUSTER1_lsb = 45; const float GHITZ_W2_CLUSTER1_mf = 1.; - const int GHITZ_W2_CLUSTER2_bits = 13; - const int GHITZ_W2_CLUSTER2_lsb = 38; + const int GHITZ_W2_CLUSTER2_bits = 19; + const int GHITZ_W2_CLUSTER2_lsb = 26; const float GHITZ_W2_CLUSTER2_mf = 1.; - const int GHITZ_W2_SPARE_bits = 38; + const int GHITZ_W2_ROW_bits = 6; + const int GHITZ_W2_ROW_lsb = 20; + const float GHITZ_W2_ROW_mf = 1.; + + const int GHITZ_W2_SPARE_bits = 20; const int GHITZ_W2_SPARE_lsb = 0; const float GHITZ_W2_SPARE_mf = 1.; @@ -1173,13 +1163,14 @@ namespace FPGADataFormatUtilities uint64_t rad : GHITZ_W1_RAD_bits; int64_t phi : GHITZ_W1_PHI_bits; int64_t z : GHITZ_W1_Z_bits; - uint64_t row : GHITZ_W1_ROW_bits; uint64_t lastofslice : GHITZ_W1_LASTOFSLICE_bits; + uint64_t spare : GHITZ_W1_SPARE_bits; } GHITZ_w1; typedef struct GHITZ_w2 { uint64_t cluster1 : GHITZ_W2_CLUSTER1_bits; uint64_t cluster2 : GHITZ_W2_CLUSTER2_bits; + uint64_t row : GHITZ_W2_ROW_bits; uint64_t spare : GHITZ_W2_SPARE_bits; } GHITZ_w2; @@ -1190,8 +1181,8 @@ namespace FPGADataFormatUtilities temp.rad = (in & SELECTBITS(GHITZ_W1_RAD_bits, GHITZ_W1_RAD_lsb)) >> GHITZ_W1_RAD_lsb; temp.phi = (in & SELECTBITS(GHITZ_W1_PHI_bits, GHITZ_W1_PHI_lsb)) >> GHITZ_W1_PHI_lsb; temp.z = (in & SELECTBITS(GHITZ_W1_Z_bits, GHITZ_W1_Z_lsb)) >> GHITZ_W1_Z_lsb; - temp.row = (in & SELECTBITS(GHITZ_W1_ROW_bits, GHITZ_W1_ROW_lsb)) >> GHITZ_W1_ROW_lsb; temp.lastofslice = (in & SELECTBITS(GHITZ_W1_LASTOFSLICE_bits, GHITZ_W1_LASTOFSLICE_lsb)) >> GHITZ_W1_LASTOFSLICE_lsb; + temp.spare = (in & SELECTBITS(GHITZ_W1_SPARE_bits, GHITZ_W1_SPARE_lsb)) >> GHITZ_W1_SPARE_lsb; return temp; } @@ -1199,46 +1190,49 @@ namespace FPGADataFormatUtilities GHITZ_w2 temp; temp.cluster1 = (in & SELECTBITS(GHITZ_W2_CLUSTER1_bits, GHITZ_W2_CLUSTER1_lsb)) >> GHITZ_W2_CLUSTER1_lsb; temp.cluster2 = (in & SELECTBITS(GHITZ_W2_CLUSTER2_bits, GHITZ_W2_CLUSTER2_lsb)) >> GHITZ_W2_CLUSTER2_lsb; + temp.row = (in & SELECTBITS(GHITZ_W2_ROW_bits, GHITZ_W2_ROW_lsb)) >> GHITZ_W2_ROW_lsb; temp.spare = (in & SELECTBITS(GHITZ_W2_SPARE_bits, GHITZ_W2_SPARE_lsb)) >> GHITZ_W2_SPARE_lsb; return temp; } inline uint64_t get_dataformat_GHITZ_w1 (const GHITZ_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.last) << GHITZ_W1_LAST_lsb); - temp |= (static_cast<uint64_t>(in.lyr) << GHITZ_W1_LYR_lsb); - temp |= (static_cast<uint64_t>(in.rad) << GHITZ_W1_RAD_lsb); - temp |= (static_cast<uint64_t>(in.phi) << GHITZ_W1_PHI_lsb); - temp |= (static_cast<uint64_t>(in.z) << GHITZ_W1_Z_lsb); - temp |= (static_cast<uint64_t>(in.row) << GHITZ_W1_ROW_lsb); - temp |= (static_cast<uint64_t>(in.lastofslice) << GHITZ_W1_LASTOFSLICE_lsb); + temp |= (((static_cast<uint64_t>(in.last)) & SELECTBITS(GHITZ_W1_LAST_bits, 0)) << GHITZ_W1_LAST_lsb); + temp |= (((static_cast<uint64_t>(in.lyr)) & SELECTBITS(GHITZ_W1_LYR_bits, 0)) << GHITZ_W1_LYR_lsb); + temp |= (((static_cast<uint64_t>(in.rad)) & SELECTBITS(GHITZ_W1_RAD_bits, 0)) << GHITZ_W1_RAD_lsb); + temp |= (((static_cast<uint64_t>(in.phi)) & SELECTBITS(GHITZ_W1_PHI_bits, 0)) << GHITZ_W1_PHI_lsb); + temp |= (((static_cast<uint64_t>(in.z)) & SELECTBITS(GHITZ_W1_Z_bits, 0)) << GHITZ_W1_Z_lsb); + temp |= (((static_cast<uint64_t>(in.lastofslice)) & SELECTBITS(GHITZ_W1_LASTOFSLICE_bits, 0)) << GHITZ_W1_LASTOFSLICE_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(GHITZ_W1_SPARE_bits, 0)) << GHITZ_W1_SPARE_lsb); return temp; } inline uint64_t get_dataformat_GHITZ_w2 (const GHITZ_w2& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.cluster1) << GHITZ_W2_CLUSTER1_lsb); - temp |= (static_cast<uint64_t>(in.cluster2) << GHITZ_W2_CLUSTER2_lsb); - temp |= (static_cast<uint64_t>(in.spare) << GHITZ_W2_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.cluster1)) & SELECTBITS(GHITZ_W2_CLUSTER1_bits, 0)) << GHITZ_W2_CLUSTER1_lsb); + temp |= (((static_cast<uint64_t>(in.cluster2)) & SELECTBITS(GHITZ_W2_CLUSTER2_bits, 0)) << GHITZ_W2_CLUSTER2_lsb); + temp |= (((static_cast<uint64_t>(in.row)) & SELECTBITS(GHITZ_W2_ROW_bits, 0)) << GHITZ_W2_ROW_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(GHITZ_W2_SPARE_bits, 0)) << GHITZ_W2_SPARE_lsb); return temp; } - inline GHITZ_w1 fill_GHITZ_w1 (const uint64_t& last, const uint64_t& lyr, const double& rad, const double& phi, const double& z, const uint64_t& row, const uint64_t& lastofslice) { + inline GHITZ_w1 fill_GHITZ_w1 (const uint64_t& last, const uint64_t& lyr, const double& rad, const double& phi, const double& z, const uint64_t& lastofslice, const uint64_t& spare) { GHITZ_w1 temp; temp.last = last; temp.lyr = lyr; temp.rad = (uint64_t)(rad * GHITZ_W1_RAD_mf); temp.phi = (int64_t)(phi * GHITZ_W1_PHI_mf); temp.z = (int64_t)(z * GHITZ_W1_Z_mf); - temp.row = row; temp.lastofslice = lastofslice; + temp.spare = spare; return temp; } - inline GHITZ_w2 fill_GHITZ_w2 (const uint64_t& cluster1, const uint64_t& cluster2, const uint64_t& spare) { + inline GHITZ_w2 fill_GHITZ_w2 (const uint64_t& cluster1, const uint64_t& cluster2, const uint64_t& row, const uint64_t& spare) { GHITZ_w2 temp; temp.cluster1 = cluster1; temp.cluster2 = cluster2; + temp.row = row; temp.spare = spare; return temp; } @@ -1263,11 +1257,11 @@ namespace FPGADataFormatUtilities return (double)in / GHITZ_W1_Z_mf; } - inline uint64_t to_real_GHITZ_w1_row (const uint64_t& in) { + inline uint64_t to_real_GHITZ_w1_lastofslice (const uint64_t& in) { return in; } - inline uint64_t to_real_GHITZ_w1_lastofslice (const uint64_t& in) { + inline uint64_t to_real_GHITZ_w1_spare (const uint64_t& in) { return in; } @@ -1279,760 +1273,930 @@ namespace FPGADataFormatUtilities return in; } + inline uint64_t to_real_GHITZ_w2_row (const uint64_t& in) { + return in; + } + inline uint64_t to_real_GHITZ_w2_spare (const uint64_t& in) { return in; } + // EDM_STRIPCLUSTER defined flags + const int EDM_STRIPCLUSTER_FLAG = 0x66; + // EDM_STRIPCLUSTER_W1 word description + const int EDM_STRIPCLUSTER_W1_FLAG_bits = 8; + const int EDM_STRIPCLUSTER_W1_FLAG_lsb = 56; + const float EDM_STRIPCLUSTER_W1_FLAG_mf = 1.; + const int EDM_STRIPCLUSTER_W1_ID_HASH_bits = 32; - const int EDM_STRIPCLUSTER_W1_ID_HASH_lsb = 32; + const int EDM_STRIPCLUSTER_W1_ID_HASH_lsb = 24; const float EDM_STRIPCLUSTER_W1_ID_HASH_mf = 1.; - const int EDM_STRIPCLUSTER_W1_IDENTIFIER_bits = 32; - const int EDM_STRIPCLUSTER_W1_IDENTIFIER_lsb = 0; - const float EDM_STRIPCLUSTER_W1_IDENTIFIER_mf = 1.; + const int EDM_STRIPCLUSTER_W1_Spare_bits = 24; + const int EDM_STRIPCLUSTER_W1_Spare_lsb = 0; + const float EDM_STRIPCLUSTER_W1_Spare_mf = 1.; // EDM_STRIPCLUSTER_W2 word description - const int EDM_STRIPCLUSTER_W2_RDO_LIST_W1_bits = 32; - const int EDM_STRIPCLUSTER_W2_RDO_LIST_W1_lsb = 32; - const float EDM_STRIPCLUSTER_W2_RDO_LIST_W1_mf = 1.; - - const int EDM_STRIPCLUSTER_W2_RDO_LIST_W2_bits = 32; - const int EDM_STRIPCLUSTER_W2_RDO_LIST_W2_lsb = 0; - const float EDM_STRIPCLUSTER_W2_RDO_LIST_W2_mf = 1.; + const int EDM_STRIPCLUSTER_W2_IDENTIFIER_bits = 64; + const int EDM_STRIPCLUSTER_W2_IDENTIFIER_lsb = 0; + const float EDM_STRIPCLUSTER_W2_IDENTIFIER_mf = 1.; // EDM_STRIPCLUSTER_W3 word description - const int EDM_STRIPCLUSTER_W3_RDO_LIST_W3_bits = 32; - const int EDM_STRIPCLUSTER_W3_RDO_LIST_W3_lsb = 32; - const float EDM_STRIPCLUSTER_W3_RDO_LIST_W3_mf = 1.; - - const int EDM_STRIPCLUSTER_W3_RDO_LIST_W4_bits = 32; - const int EDM_STRIPCLUSTER_W3_RDO_LIST_W4_lsb = 0; - const float EDM_STRIPCLUSTER_W3_RDO_LIST_W4_mf = 1.; + const int EDM_STRIPCLUSTER_W3_RDO_LIST_W1_bits = 64; + const int EDM_STRIPCLUSTER_W3_RDO_LIST_W1_lsb = 0; + const float EDM_STRIPCLUSTER_W3_RDO_LIST_W1_mf = 1.; // EDM_STRIPCLUSTER_W4 word description - const int EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_bits = 21; - const int EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_lsb = 43; - const float EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_mf = 8192.; + const int EDM_STRIPCLUSTER_W4_RDO_LIST_W2_bits = 64; + const int EDM_STRIPCLUSTER_W4_RDO_LIST_W2_lsb = 0; + const float EDM_STRIPCLUSTER_W4_RDO_LIST_W2_mf = 1.; - const int EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_bits = 21; - const int EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_lsb = 22; - const float EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_mf = 8192.; + // EDM_STRIPCLUSTER_W5 word description + const int EDM_STRIPCLUSTER_W5_RDO_LIST_W3_bits = 64; + const int EDM_STRIPCLUSTER_W5_RDO_LIST_W3_lsb = 0; + const float EDM_STRIPCLUSTER_W5_RDO_LIST_W3_mf = 1.; - const int EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_bits = 20; - const int EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_lsb = 2; - const float EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_mf = 524288.; + // EDM_STRIPCLUSTER_W6 word description + const int EDM_STRIPCLUSTER_W6_RDO_LIST_W4_bits = 64; + const int EDM_STRIPCLUSTER_W6_RDO_LIST_W4_lsb = 0; + const float EDM_STRIPCLUSTER_W6_RDO_LIST_W4_mf = 1.; - const int EDM_STRIPCLUSTER_W4_SPARE_bits = 2; - const int EDM_STRIPCLUSTER_W4_SPARE_lsb = 0; - const float EDM_STRIPCLUSTER_W4_SPARE_mf = 1.; + // EDM_STRIPCLUSTER_W7 word description + const int EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_bits = 21; + const int EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_lsb = 43; + const float EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_mf = 8192.; - // EDM_STRIPCLUSTER_W5 word description - const int EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_bits = 27; - const int EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_lsb = 37; - const float EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_mf = 65536.; + const int EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_bits = 21; + const int EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_lsb = 22; + const float EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_mf = 8192.; - const int EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_bits = 27; - const int EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_lsb = 10; - const float EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_mf = 65536.; + const int EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_bits = 20; + const int EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_lsb = 2; + const float EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_mf = 524288.; - const int EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_bits = 6; - const int EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_lsb = 4; - const float EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_mf = 1.; + const int EDM_STRIPCLUSTER_W7_SPARE_bits = 2; + const int EDM_STRIPCLUSTER_W7_SPARE_lsb = 0; + const float EDM_STRIPCLUSTER_W7_SPARE_mf = 1.; - const int EDM_STRIPCLUSTER_W5_SPARE_bits = 4; - const int EDM_STRIPCLUSTER_W5_SPARE_lsb = 0; - const float EDM_STRIPCLUSTER_W5_SPARE_mf = 1.; + // EDM_STRIPCLUSTER_W8 word description + const int EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_bits = 27; + const int EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_lsb = 37; + const float EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_mf = 65536.; - // EDM_STRIPCLUSTER_W6 word description - const int EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_bits = 29; - const int EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_lsb = 35; - const float EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_mf = 65536.; + const int EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_bits = 27; + const int EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_lsb = 10; + const float EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_mf = 65536.; + + const int EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_bits = 6; + const int EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_lsb = 4; + const float EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_mf = 1.; - const int EDM_STRIPCLUSTER_W6_LASTWORD_bits = 1; - const int EDM_STRIPCLUSTER_W6_LASTWORD_lsb = 34; - const float EDM_STRIPCLUSTER_W6_LASTWORD_mf = 1.; + const int EDM_STRIPCLUSTER_W8_SPARE_bits = 4; + const int EDM_STRIPCLUSTER_W8_SPARE_lsb = 0; + const float EDM_STRIPCLUSTER_W8_SPARE_mf = 1.; - const int EDM_STRIPCLUSTER_W6_INDEX_bits = 32; - const int EDM_STRIPCLUSTER_W6_INDEX_lsb = 2; - const float EDM_STRIPCLUSTER_W6_INDEX_mf = 1.; + // EDM_STRIPCLUSTER_W9 word description + const int EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_bits = 29; + const int EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_lsb = 35; + const float EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_mf = 65536.; - const int EDM_STRIPCLUSTER_W6_SPARE_bits = 2; - const int EDM_STRIPCLUSTER_W6_SPARE_lsb = 0; - const float EDM_STRIPCLUSTER_W6_SPARE_mf = 1.; + const int EDM_STRIPCLUSTER_W9_LASTWORD_bits = 1; + const int EDM_STRIPCLUSTER_W9_LASTWORD_lsb = 34; + const float EDM_STRIPCLUSTER_W9_LASTWORD_mf = 1.; + + const int EDM_STRIPCLUSTER_W9_INDEX_bits = 32; + const int EDM_STRIPCLUSTER_W9_INDEX_lsb = 2; + const float EDM_STRIPCLUSTER_W9_INDEX_mf = 1.; + + const int EDM_STRIPCLUSTER_W9_SPARE_bits = 2; + const int EDM_STRIPCLUSTER_W9_SPARE_lsb = 0; + const float EDM_STRIPCLUSTER_W9_SPARE_mf = 1.; typedef struct EDM_STRIPCLUSTER_w1 { + uint64_t flag : EDM_STRIPCLUSTER_W1_FLAG_bits; uint64_t id_hash : EDM_STRIPCLUSTER_W1_ID_HASH_bits; - uint64_t identifier : EDM_STRIPCLUSTER_W1_IDENTIFIER_bits; + uint64_t spare : EDM_STRIPCLUSTER_W1_Spare_bits; } EDM_STRIPCLUSTER_w1; typedef struct EDM_STRIPCLUSTER_w2 { - uint64_t rdo_list_w1 : EDM_STRIPCLUSTER_W2_RDO_LIST_W1_bits; - uint64_t rdo_list_w2 : EDM_STRIPCLUSTER_W2_RDO_LIST_W2_bits; + uint64_t identifier : EDM_STRIPCLUSTER_W2_IDENTIFIER_bits; } EDM_STRIPCLUSTER_w2; typedef struct EDM_STRIPCLUSTER_w3 { - uint64_t rdo_list_w3 : EDM_STRIPCLUSTER_W3_RDO_LIST_W3_bits; - uint64_t rdo_list_w4 : EDM_STRIPCLUSTER_W3_RDO_LIST_W4_bits; + uint64_t rdo_list_w1 : EDM_STRIPCLUSTER_W3_RDO_LIST_W1_bits; } EDM_STRIPCLUSTER_w3; typedef struct EDM_STRIPCLUSTER_w4 { - int64_t localposition_x : EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_bits; - int64_t localposition_y : EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_bits; - uint64_t localcovariance_xx : EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_bits; - uint64_t spare : EDM_STRIPCLUSTER_W4_SPARE_bits; + uint64_t rdo_list_w2 : EDM_STRIPCLUSTER_W4_RDO_LIST_W2_bits; } EDM_STRIPCLUSTER_w4; typedef struct EDM_STRIPCLUSTER_w5 { - int64_t globalposition_x : EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_bits; - int64_t globalposition_y : EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_bits; - uint64_t channels_in_phi : EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_bits; - uint64_t spare : EDM_STRIPCLUSTER_W5_SPARE_bits; + uint64_t rdo_list_w3 : EDM_STRIPCLUSTER_W5_RDO_LIST_W3_bits; } EDM_STRIPCLUSTER_w5; typedef struct EDM_STRIPCLUSTER_w6 { - int64_t globalposition_z : EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_bits; - uint64_t lastword : EDM_STRIPCLUSTER_W6_LASTWORD_bits; - uint64_t index : EDM_STRIPCLUSTER_W6_INDEX_bits; - uint64_t spare : EDM_STRIPCLUSTER_W6_SPARE_bits; + uint64_t rdo_list_w4 : EDM_STRIPCLUSTER_W6_RDO_LIST_W4_bits; } EDM_STRIPCLUSTER_w6; + typedef struct EDM_STRIPCLUSTER_w7 { + int64_t localposition_x : EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_bits; + int64_t localposition_y : EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_bits; + uint64_t localcovariance_xx : EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_bits; + uint64_t spare : EDM_STRIPCLUSTER_W7_SPARE_bits; + } EDM_STRIPCLUSTER_w7; + + typedef struct EDM_STRIPCLUSTER_w8 { + int64_t globalposition_x : EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_bits; + int64_t globalposition_y : EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_bits; + uint64_t channels_in_phi : EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_bits; + uint64_t spare : EDM_STRIPCLUSTER_W8_SPARE_bits; + } EDM_STRIPCLUSTER_w8; + + typedef struct EDM_STRIPCLUSTER_w9 { + int64_t globalposition_z : EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_bits; + uint64_t lastword : EDM_STRIPCLUSTER_W9_LASTWORD_bits; + uint64_t index : EDM_STRIPCLUSTER_W9_INDEX_bits; + uint64_t spare : EDM_STRIPCLUSTER_W9_SPARE_bits; + } EDM_STRIPCLUSTER_w9; + inline EDM_STRIPCLUSTER_w1 get_bitfields_EDM_STRIPCLUSTER_w1 (const uint64_t& in) { EDM_STRIPCLUSTER_w1 temp; + temp.flag = (in & SELECTBITS(EDM_STRIPCLUSTER_W1_FLAG_bits, EDM_STRIPCLUSTER_W1_FLAG_lsb)) >> EDM_STRIPCLUSTER_W1_FLAG_lsb; temp.id_hash = (in & SELECTBITS(EDM_STRIPCLUSTER_W1_ID_HASH_bits, EDM_STRIPCLUSTER_W1_ID_HASH_lsb)) >> EDM_STRIPCLUSTER_W1_ID_HASH_lsb; - temp.identifier = (in & SELECTBITS(EDM_STRIPCLUSTER_W1_IDENTIFIER_bits, EDM_STRIPCLUSTER_W1_IDENTIFIER_lsb)) >> EDM_STRIPCLUSTER_W1_IDENTIFIER_lsb; + temp.spare = (in & SELECTBITS(EDM_STRIPCLUSTER_W1_Spare_bits, EDM_STRIPCLUSTER_W1_Spare_lsb)) >> EDM_STRIPCLUSTER_W1_Spare_lsb; return temp; } inline EDM_STRIPCLUSTER_w2 get_bitfields_EDM_STRIPCLUSTER_w2 (const uint64_t& in) { EDM_STRIPCLUSTER_w2 temp; - temp.rdo_list_w1 = (in & SELECTBITS(EDM_STRIPCLUSTER_W2_RDO_LIST_W1_bits, EDM_STRIPCLUSTER_W2_RDO_LIST_W1_lsb)) >> EDM_STRIPCLUSTER_W2_RDO_LIST_W1_lsb; - temp.rdo_list_w2 = (in & SELECTBITS(EDM_STRIPCLUSTER_W2_RDO_LIST_W2_bits, EDM_STRIPCLUSTER_W2_RDO_LIST_W2_lsb)) >> EDM_STRIPCLUSTER_W2_RDO_LIST_W2_lsb; + temp.identifier = (in & SELECTBITS(EDM_STRIPCLUSTER_W2_IDENTIFIER_bits, EDM_STRIPCLUSTER_W2_IDENTIFIER_lsb)) >> EDM_STRIPCLUSTER_W2_IDENTIFIER_lsb; return temp; } inline EDM_STRIPCLUSTER_w3 get_bitfields_EDM_STRIPCLUSTER_w3 (const uint64_t& in) { EDM_STRIPCLUSTER_w3 temp; - temp.rdo_list_w3 = (in & SELECTBITS(EDM_STRIPCLUSTER_W3_RDO_LIST_W3_bits, EDM_STRIPCLUSTER_W3_RDO_LIST_W3_lsb)) >> EDM_STRIPCLUSTER_W3_RDO_LIST_W3_lsb; - temp.rdo_list_w4 = (in & SELECTBITS(EDM_STRIPCLUSTER_W3_RDO_LIST_W4_bits, EDM_STRIPCLUSTER_W3_RDO_LIST_W4_lsb)) >> EDM_STRIPCLUSTER_W3_RDO_LIST_W4_lsb; + temp.rdo_list_w1 = (in & SELECTBITS(EDM_STRIPCLUSTER_W3_RDO_LIST_W1_bits, EDM_STRIPCLUSTER_W3_RDO_LIST_W1_lsb)) >> EDM_STRIPCLUSTER_W3_RDO_LIST_W1_lsb; return temp; } inline EDM_STRIPCLUSTER_w4 get_bitfields_EDM_STRIPCLUSTER_w4 (const uint64_t& in) { EDM_STRIPCLUSTER_w4 temp; - temp.localposition_x = (in & SELECTBITS(EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_bits, EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_lsb)) >> EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_lsb; - temp.localposition_y = (in & SELECTBITS(EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_bits, EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_lsb)) >> EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_lsb; - temp.localcovariance_xx = (in & SELECTBITS(EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_bits, EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_lsb)) >> EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_lsb; - temp.spare = (in & SELECTBITS(EDM_STRIPCLUSTER_W4_SPARE_bits, EDM_STRIPCLUSTER_W4_SPARE_lsb)) >> EDM_STRIPCLUSTER_W4_SPARE_lsb; + temp.rdo_list_w2 = (in & SELECTBITS(EDM_STRIPCLUSTER_W4_RDO_LIST_W2_bits, EDM_STRIPCLUSTER_W4_RDO_LIST_W2_lsb)) >> EDM_STRIPCLUSTER_W4_RDO_LIST_W2_lsb; return temp; } inline EDM_STRIPCLUSTER_w5 get_bitfields_EDM_STRIPCLUSTER_w5 (const uint64_t& in) { EDM_STRIPCLUSTER_w5 temp; - temp.globalposition_x = (in & SELECTBITS(EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_bits, EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_lsb)) >> EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_lsb; - temp.globalposition_y = (in & SELECTBITS(EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_bits, EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_lsb)) >> EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_lsb; - temp.channels_in_phi = (in & SELECTBITS(EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_bits, EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_lsb)) >> EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_lsb; - temp.spare = (in & SELECTBITS(EDM_STRIPCLUSTER_W5_SPARE_bits, EDM_STRIPCLUSTER_W5_SPARE_lsb)) >> EDM_STRIPCLUSTER_W5_SPARE_lsb; + temp.rdo_list_w3 = (in & SELECTBITS(EDM_STRIPCLUSTER_W5_RDO_LIST_W3_bits, EDM_STRIPCLUSTER_W5_RDO_LIST_W3_lsb)) >> EDM_STRIPCLUSTER_W5_RDO_LIST_W3_lsb; return temp; } inline EDM_STRIPCLUSTER_w6 get_bitfields_EDM_STRIPCLUSTER_w6 (const uint64_t& in) { EDM_STRIPCLUSTER_w6 temp; - temp.globalposition_z = (in & SELECTBITS(EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_bits, EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_lsb)) >> EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_lsb; - temp.lastword = (in & SELECTBITS(EDM_STRIPCLUSTER_W6_LASTWORD_bits, EDM_STRIPCLUSTER_W6_LASTWORD_lsb)) >> EDM_STRIPCLUSTER_W6_LASTWORD_lsb; - temp.index = (in & SELECTBITS(EDM_STRIPCLUSTER_W6_INDEX_bits, EDM_STRIPCLUSTER_W6_INDEX_lsb)) >> EDM_STRIPCLUSTER_W6_INDEX_lsb; - temp.spare = (in & SELECTBITS(EDM_STRIPCLUSTER_W6_SPARE_bits, EDM_STRIPCLUSTER_W6_SPARE_lsb)) >> EDM_STRIPCLUSTER_W6_SPARE_lsb; + temp.rdo_list_w4 = (in & SELECTBITS(EDM_STRIPCLUSTER_W6_RDO_LIST_W4_bits, EDM_STRIPCLUSTER_W6_RDO_LIST_W4_lsb)) >> EDM_STRIPCLUSTER_W6_RDO_LIST_W4_lsb; + return temp; + } + + inline EDM_STRIPCLUSTER_w7 get_bitfields_EDM_STRIPCLUSTER_w7 (const uint64_t& in) { + EDM_STRIPCLUSTER_w7 temp; + temp.localposition_x = (in & SELECTBITS(EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_bits, EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_lsb)) >> EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_lsb; + temp.localposition_y = (in & SELECTBITS(EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_bits, EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_lsb)) >> EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_lsb; + temp.localcovariance_xx = (in & SELECTBITS(EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_bits, EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_lsb)) >> EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_lsb; + temp.spare = (in & SELECTBITS(EDM_STRIPCLUSTER_W7_SPARE_bits, EDM_STRIPCLUSTER_W7_SPARE_lsb)) >> EDM_STRIPCLUSTER_W7_SPARE_lsb; + return temp; + } + + inline EDM_STRIPCLUSTER_w8 get_bitfields_EDM_STRIPCLUSTER_w8 (const uint64_t& in) { + EDM_STRIPCLUSTER_w8 temp; + temp.globalposition_x = (in & SELECTBITS(EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_bits, EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_lsb)) >> EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_lsb; + temp.globalposition_y = (in & SELECTBITS(EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_bits, EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_lsb)) >> EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_lsb; + temp.channels_in_phi = (in & SELECTBITS(EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_bits, EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_lsb)) >> EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_lsb; + temp.spare = (in & SELECTBITS(EDM_STRIPCLUSTER_W8_SPARE_bits, EDM_STRIPCLUSTER_W8_SPARE_lsb)) >> EDM_STRIPCLUSTER_W8_SPARE_lsb; + return temp; + } + + inline EDM_STRIPCLUSTER_w9 get_bitfields_EDM_STRIPCLUSTER_w9 (const uint64_t& in) { + EDM_STRIPCLUSTER_w9 temp; + temp.globalposition_z = (in & SELECTBITS(EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_bits, EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_lsb)) >> EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_lsb; + temp.lastword = (in & SELECTBITS(EDM_STRIPCLUSTER_W9_LASTWORD_bits, EDM_STRIPCLUSTER_W9_LASTWORD_lsb)) >> EDM_STRIPCLUSTER_W9_LASTWORD_lsb; + temp.index = (in & SELECTBITS(EDM_STRIPCLUSTER_W9_INDEX_bits, EDM_STRIPCLUSTER_W9_INDEX_lsb)) >> EDM_STRIPCLUSTER_W9_INDEX_lsb; + temp.spare = (in & SELECTBITS(EDM_STRIPCLUSTER_W9_SPARE_bits, EDM_STRIPCLUSTER_W9_SPARE_lsb)) >> EDM_STRIPCLUSTER_W9_SPARE_lsb; return temp; } inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w1 (const EDM_STRIPCLUSTER_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.id_hash) << EDM_STRIPCLUSTER_W1_ID_HASH_lsb); - temp |= (static_cast<uint64_t>(in.identifier) << EDM_STRIPCLUSTER_W1_IDENTIFIER_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(EDM_STRIPCLUSTER_W1_FLAG_bits, 0)) << EDM_STRIPCLUSTER_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.id_hash)) & SELECTBITS(EDM_STRIPCLUSTER_W1_ID_HASH_bits, 0)) << EDM_STRIPCLUSTER_W1_ID_HASH_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_STRIPCLUSTER_W1_Spare_bits, 0)) << EDM_STRIPCLUSTER_W1_Spare_lsb); return temp; } inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w2 (const EDM_STRIPCLUSTER_w2& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.rdo_list_w1) << EDM_STRIPCLUSTER_W2_RDO_LIST_W1_lsb); - temp |= (static_cast<uint64_t>(in.rdo_list_w2) << EDM_STRIPCLUSTER_W2_RDO_LIST_W2_lsb); + temp |= (((static_cast<uint64_t>(in.identifier)) & SELECTBITS(EDM_STRIPCLUSTER_W2_IDENTIFIER_bits, 0)) << EDM_STRIPCLUSTER_W2_IDENTIFIER_lsb); return temp; } inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w3 (const EDM_STRIPCLUSTER_w3& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.rdo_list_w3) << EDM_STRIPCLUSTER_W3_RDO_LIST_W3_lsb); - temp |= (static_cast<uint64_t>(in.rdo_list_w4) << EDM_STRIPCLUSTER_W3_RDO_LIST_W4_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w1)) & SELECTBITS(EDM_STRIPCLUSTER_W3_RDO_LIST_W1_bits, 0)) << EDM_STRIPCLUSTER_W3_RDO_LIST_W1_lsb); return temp; } inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w4 (const EDM_STRIPCLUSTER_w4& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.localposition_x) << EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_lsb); - temp |= (static_cast<uint64_t>(in.localposition_y) << EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_lsb); - temp |= (static_cast<uint64_t>(in.localcovariance_xx) << EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EDM_STRIPCLUSTER_W4_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w2)) & SELECTBITS(EDM_STRIPCLUSTER_W4_RDO_LIST_W2_bits, 0)) << EDM_STRIPCLUSTER_W4_RDO_LIST_W2_lsb); return temp; } inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w5 (const EDM_STRIPCLUSTER_w5& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.globalposition_x) << EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_lsb); - temp |= (static_cast<uint64_t>(in.globalposition_y) << EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_lsb); - temp |= (static_cast<uint64_t>(in.channels_in_phi) << EDM_STRIPCLUSTER_W5_CHANNELS_IN_PHI_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EDM_STRIPCLUSTER_W5_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w3)) & SELECTBITS(EDM_STRIPCLUSTER_W5_RDO_LIST_W3_bits, 0)) << EDM_STRIPCLUSTER_W5_RDO_LIST_W3_lsb); return temp; } inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w6 (const EDM_STRIPCLUSTER_w6& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.globalposition_z) << EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_lsb); - temp |= (static_cast<uint64_t>(in.lastword) << EDM_STRIPCLUSTER_W6_LASTWORD_lsb); - temp |= (static_cast<uint64_t>(in.index) << EDM_STRIPCLUSTER_W6_INDEX_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EDM_STRIPCLUSTER_W6_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w4)) & SELECTBITS(EDM_STRIPCLUSTER_W6_RDO_LIST_W4_bits, 0)) << EDM_STRIPCLUSTER_W6_RDO_LIST_W4_lsb); + return temp; + } + + inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w7 (const EDM_STRIPCLUSTER_w7& in) { + uint64_t temp = 0; + temp |= (((static_cast<uint64_t>(in.localposition_x)) & SELECTBITS(EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_bits, 0)) << EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_lsb); + temp |= (((static_cast<uint64_t>(in.localposition_y)) & SELECTBITS(EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_bits, 0)) << EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_lsb); + temp |= (((static_cast<uint64_t>(in.localcovariance_xx)) & SELECTBITS(EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_bits, 0)) << EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_STRIPCLUSTER_W7_SPARE_bits, 0)) << EDM_STRIPCLUSTER_W7_SPARE_lsb); return temp; } - inline EDM_STRIPCLUSTER_w1 fill_EDM_STRIPCLUSTER_w1 (const uint64_t& id_hash, const uint64_t& identifier) { + inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w8 (const EDM_STRIPCLUSTER_w8& in) { + uint64_t temp = 0; + temp |= (((static_cast<uint64_t>(in.globalposition_x)) & SELECTBITS(EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_bits, 0)) << EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_lsb); + temp |= (((static_cast<uint64_t>(in.globalposition_y)) & SELECTBITS(EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_bits, 0)) << EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_lsb); + temp |= (((static_cast<uint64_t>(in.channels_in_phi)) & SELECTBITS(EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_bits, 0)) << EDM_STRIPCLUSTER_W8_CHANNELS_IN_PHI_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_STRIPCLUSTER_W8_SPARE_bits, 0)) << EDM_STRIPCLUSTER_W8_SPARE_lsb); + return temp; + } + + inline uint64_t get_dataformat_EDM_STRIPCLUSTER_w9 (const EDM_STRIPCLUSTER_w9& in) { + uint64_t temp = 0; + temp |= (((static_cast<uint64_t>(in.globalposition_z)) & SELECTBITS(EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_bits, 0)) << EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_lsb); + temp |= (((static_cast<uint64_t>(in.lastword)) & SELECTBITS(EDM_STRIPCLUSTER_W9_LASTWORD_bits, 0)) << EDM_STRIPCLUSTER_W9_LASTWORD_lsb); + temp |= (((static_cast<uint64_t>(in.index)) & SELECTBITS(EDM_STRIPCLUSTER_W9_INDEX_bits, 0)) << EDM_STRIPCLUSTER_W9_INDEX_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_STRIPCLUSTER_W9_SPARE_bits, 0)) << EDM_STRIPCLUSTER_W9_SPARE_lsb); + return temp; + } + + inline EDM_STRIPCLUSTER_w1 fill_EDM_STRIPCLUSTER_w1 (const uint64_t& flag, const uint64_t& id_hash, const uint64_t& spare) { EDM_STRIPCLUSTER_w1 temp; + temp.flag = flag; temp.id_hash = id_hash; - temp.identifier = identifier; + temp.spare = spare; return temp; } - inline EDM_STRIPCLUSTER_w2 fill_EDM_STRIPCLUSTER_w2 (const uint64_t& rdo_list_w1, const uint64_t& rdo_list_w2) { + inline EDM_STRIPCLUSTER_w2 fill_EDM_STRIPCLUSTER_w2 (const uint64_t& identifier) { EDM_STRIPCLUSTER_w2 temp; + temp.identifier = identifier; + return temp; + } + + inline EDM_STRIPCLUSTER_w3 fill_EDM_STRIPCLUSTER_w3 (const uint64_t& rdo_list_w1) { + EDM_STRIPCLUSTER_w3 temp; temp.rdo_list_w1 = rdo_list_w1; + return temp; + } + + inline EDM_STRIPCLUSTER_w4 fill_EDM_STRIPCLUSTER_w4 (const uint64_t& rdo_list_w2) { + EDM_STRIPCLUSTER_w4 temp; temp.rdo_list_w2 = rdo_list_w2; return temp; } - inline EDM_STRIPCLUSTER_w3 fill_EDM_STRIPCLUSTER_w3 (const uint64_t& rdo_list_w3, const uint64_t& rdo_list_w4) { - EDM_STRIPCLUSTER_w3 temp; + inline EDM_STRIPCLUSTER_w5 fill_EDM_STRIPCLUSTER_w5 (const uint64_t& rdo_list_w3) { + EDM_STRIPCLUSTER_w5 temp; temp.rdo_list_w3 = rdo_list_w3; + return temp; + } + + inline EDM_STRIPCLUSTER_w6 fill_EDM_STRIPCLUSTER_w6 (const uint64_t& rdo_list_w4) { + EDM_STRIPCLUSTER_w6 temp; temp.rdo_list_w4 = rdo_list_w4; return temp; } - inline EDM_STRIPCLUSTER_w4 fill_EDM_STRIPCLUSTER_w4 (const double& localposition_x, const double& localposition_y, const double& localcovariance_xx, const uint64_t& spare) { - EDM_STRIPCLUSTER_w4 temp; - temp.localposition_x = (int64_t)(localposition_x * EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_mf); - temp.localposition_y = (int64_t)(localposition_y * EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_mf); - temp.localcovariance_xx = (uint64_t)(localcovariance_xx * EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_mf); + inline EDM_STRIPCLUSTER_w7 fill_EDM_STRIPCLUSTER_w7 (const double& localposition_x, const double& localposition_y, const double& localcovariance_xx, const uint64_t& spare) { + EDM_STRIPCLUSTER_w7 temp; + temp.localposition_x = (int64_t)(localposition_x * EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_mf); + temp.localposition_y = (int64_t)(localposition_y * EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_mf); + temp.localcovariance_xx = (uint64_t)(localcovariance_xx * EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_mf); temp.spare = spare; return temp; } - inline EDM_STRIPCLUSTER_w5 fill_EDM_STRIPCLUSTER_w5 (const double& globalposition_x, const double& globalposition_y, const uint64_t& channels_in_phi, const uint64_t& spare) { - EDM_STRIPCLUSTER_w5 temp; - temp.globalposition_x = (int64_t)(globalposition_x * EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_mf); - temp.globalposition_y = (int64_t)(globalposition_y * EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_mf); + inline EDM_STRIPCLUSTER_w8 fill_EDM_STRIPCLUSTER_w8 (const double& globalposition_x, const double& globalposition_y, const uint64_t& channels_in_phi, const uint64_t& spare) { + EDM_STRIPCLUSTER_w8 temp; + temp.globalposition_x = (int64_t)(globalposition_x * EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_mf); + temp.globalposition_y = (int64_t)(globalposition_y * EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_mf); temp.channels_in_phi = channels_in_phi; temp.spare = spare; return temp; } - inline EDM_STRIPCLUSTER_w6 fill_EDM_STRIPCLUSTER_w6 (const double& globalposition_z, const uint64_t& lastword, const uint64_t& index, const uint64_t& spare) { - EDM_STRIPCLUSTER_w6 temp; - temp.globalposition_z = (int64_t)(globalposition_z * EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_mf); + inline EDM_STRIPCLUSTER_w9 fill_EDM_STRIPCLUSTER_w9 (const double& globalposition_z, const uint64_t& lastword, const uint64_t& index, const uint64_t& spare) { + EDM_STRIPCLUSTER_w9 temp; + temp.globalposition_z = (int64_t)(globalposition_z * EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_mf); temp.lastword = lastword; temp.index = index; temp.spare = spare; return temp; } + inline uint64_t to_real_EDM_STRIPCLUSTER_w1_flag (const uint64_t& in) { + return in; + } + inline uint64_t to_real_EDM_STRIPCLUSTER_w1_id_hash (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w1_identifier (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w1_spare (const uint64_t& in) { + return in; + } + + inline uint64_t to_real_EDM_STRIPCLUSTER_w2_identifier (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w2_rdo_list_w1 (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w3_rdo_list_w1 (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w2_rdo_list_w2 (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w4_rdo_list_w2 (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w3_rdo_list_w3 (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w5_rdo_list_w3 (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w3_rdo_list_w4 (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w6_rdo_list_w4 (const uint64_t& in) { return in; } - inline double to_real_EDM_STRIPCLUSTER_w4_localposition_x (const int64_t& in) { - return (double)in / EDM_STRIPCLUSTER_W4_LOCALPOSITION_X_mf; + inline double to_real_EDM_STRIPCLUSTER_w7_localposition_x (const int64_t& in) { + return (double)in / EDM_STRIPCLUSTER_W7_LOCALPOSITION_X_mf; } - inline double to_real_EDM_STRIPCLUSTER_w4_localposition_y (const int64_t& in) { - return (double)in / EDM_STRIPCLUSTER_W4_LOCALPOSITION_Y_mf; + inline double to_real_EDM_STRIPCLUSTER_w7_localposition_y (const int64_t& in) { + return (double)in / EDM_STRIPCLUSTER_W7_LOCALPOSITION_Y_mf; } - inline double to_real_EDM_STRIPCLUSTER_w4_localcovariance_xx (const uint64_t& in) { - return (double)in / EDM_STRIPCLUSTER_W4_LOCALCOVARIANCE_XX_mf; + inline double to_real_EDM_STRIPCLUSTER_w7_localcovariance_xx (const uint64_t& in) { + return (double)in / EDM_STRIPCLUSTER_W7_LOCALCOVARIANCE_XX_mf; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w4_spare (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w7_spare (const uint64_t& in) { return in; } - inline double to_real_EDM_STRIPCLUSTER_w5_globalposition_x (const int64_t& in) { - return (double)in / EDM_STRIPCLUSTER_W5_GLOBALPOSITION_X_mf; + inline double to_real_EDM_STRIPCLUSTER_w8_globalposition_x (const int64_t& in) { + return (double)in / EDM_STRIPCLUSTER_W8_GLOBALPOSITION_X_mf; } - inline double to_real_EDM_STRIPCLUSTER_w5_globalposition_y (const int64_t& in) { - return (double)in / EDM_STRIPCLUSTER_W5_GLOBALPOSITION_Y_mf; + inline double to_real_EDM_STRIPCLUSTER_w8_globalposition_y (const int64_t& in) { + return (double)in / EDM_STRIPCLUSTER_W8_GLOBALPOSITION_Y_mf; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w5_channels_in_phi (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w8_channels_in_phi (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w5_spare (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w8_spare (const uint64_t& in) { return in; } - inline double to_real_EDM_STRIPCLUSTER_w6_globalposition_z (const int64_t& in) { - return (double)in / EDM_STRIPCLUSTER_W6_GLOBALPOSITION_Z_mf; + inline double to_real_EDM_STRIPCLUSTER_w9_globalposition_z (const int64_t& in) { + return (double)in / EDM_STRIPCLUSTER_W9_GLOBALPOSITION_Z_mf; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w6_lastword (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w9_lastword (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w6_index (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w9_index (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_STRIPCLUSTER_w6_spare (const uint64_t& in) { + inline uint64_t to_real_EDM_STRIPCLUSTER_w9_spare (const uint64_t& in) { return in; } + // EDM_PIXELCLUSTER defined flags + const int EDM_PIXELCLUSTER_FLAG = 0x77; + // EDM_PIXELCLUSTER_W1 word description + const int EDM_PIXELCLUSTER_W1_FLAG_bits = 8; + const int EDM_PIXELCLUSTER_W1_FLAG_lsb = 56; + const float EDM_PIXELCLUSTER_W1_FLAG_mf = 1.; + const int EDM_PIXELCLUSTER_W1_ID_HASH_bits = 32; - const int EDM_PIXELCLUSTER_W1_ID_HASH_lsb = 32; + const int EDM_PIXELCLUSTER_W1_ID_HASH_lsb = 24; const float EDM_PIXELCLUSTER_W1_ID_HASH_mf = 1.; - const int EDM_PIXELCLUSTER_W1_IDENTFIER_bits = 32; - const int EDM_PIXELCLUSTER_W1_IDENTFIER_lsb = 0; - const float EDM_PIXELCLUSTER_W1_IDENTFIER_mf = 1.; + const int EDM_PIXELCLUSTER_W1_Spare_bits = 24; + const int EDM_PIXELCLUSTER_W1_Spare_lsb = 0; + const float EDM_PIXELCLUSTER_W1_Spare_mf = 1.; // EDM_PIXELCLUSTER_W2 word description - const int EDM_PIXELCLUSTER_W2_RDO_LIST_W1_bits = 32; - const int EDM_PIXELCLUSTER_W2_RDO_LIST_W1_lsb = 32; - const float EDM_PIXELCLUSTER_W2_RDO_LIST_W1_mf = 1.; - - const int EDM_PIXELCLUSTER_W2_RDO_LIST_W2_bits = 32; - const int EDM_PIXELCLUSTER_W2_RDO_LIST_W2_lsb = 0; - const float EDM_PIXELCLUSTER_W2_RDO_LIST_W2_mf = 1.; + const int EDM_PIXELCLUSTER_W2_IDENTIFIER_bits = 64; + const int EDM_PIXELCLUSTER_W2_IDENTIFIER_lsb = 0; + const float EDM_PIXELCLUSTER_W2_IDENTIFIER_mf = 1.; // EDM_PIXELCLUSTER_W3 word description - const int EDM_PIXELCLUSTER_W3_RDO_LIST_W3_bits = 32; - const int EDM_PIXELCLUSTER_W3_RDO_LIST_W3_lsb = 32; - const float EDM_PIXELCLUSTER_W3_RDO_LIST_W3_mf = 1.; - - const int EDM_PIXELCLUSTER_W3_RDO_LIST_W4_bits = 32; - const int EDM_PIXELCLUSTER_W3_RDO_LIST_W4_lsb = 0; - const float EDM_PIXELCLUSTER_W3_RDO_LIST_W4_mf = 1.; + const int EDM_PIXELCLUSTER_W3_RDO_LIST_W1_bits = 64; + const int EDM_PIXELCLUSTER_W3_RDO_LIST_W1_lsb = 0; + const float EDM_PIXELCLUSTER_W3_RDO_LIST_W1_mf = 1.; // EDM_PIXELCLUSTER_W4 word description - const int EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_bits = 20; - const int EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_lsb = 44; - const float EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_mf = 8192.; + const int EDM_PIXELCLUSTER_W4_RDO_LIST_W2_bits = 64; + const int EDM_PIXELCLUSTER_W4_RDO_LIST_W2_lsb = 0; + const float EDM_PIXELCLUSTER_W4_RDO_LIST_W2_mf = 1.; - const int EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_bits = 20; - const int EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_lsb = 24; - const float EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_mf = 8192.; + // EDM_PIXELCLUSTER_W5 word description + const int EDM_PIXELCLUSTER_W5_RDO_LIST_W3_bits = 64; + const int EDM_PIXELCLUSTER_W5_RDO_LIST_W3_lsb = 0; + const float EDM_PIXELCLUSTER_W5_RDO_LIST_W3_mf = 1.; - const int EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_bits = 5; - const int EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_lsb = 19; - const float EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_mf = 1.; + // EDM_PIXELCLUSTER_W6 word description + const int EDM_PIXELCLUSTER_W6_RDO_LIST_W4_bits = 64; + const int EDM_PIXELCLUSTER_W6_RDO_LIST_W4_lsb = 0; + const float EDM_PIXELCLUSTER_W6_RDO_LIST_W4_mf = 1.; - const int EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_bits = 5; - const int EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_lsb = 14; - const float EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_mf = 1.; + // EDM_PIXELCLUSTER_W7 word description + const int EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_bits = 20; + const int EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_lsb = 44; + const float EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_mf = 8192.; - const int EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_bits = 6; - const int EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_lsb = 8; - const float EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_mf = 32.; + const int EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_bits = 20; + const int EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_lsb = 24; + const float EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_mf = 8192.; - const int EDM_PIXELCLUSTER_W4_SPARE_bits = 8; - const int EDM_PIXELCLUSTER_W4_SPARE_lsb = 0; - const float EDM_PIXELCLUSTER_W4_SPARE_mf = 1.; + const int EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_bits = 8; + const int EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_lsb = 16; + const float EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_mf = 1.; - // EDM_PIXELCLUSTER_W5 word description - const int EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_bits = 20; - const int EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_lsb = 44; - const float EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_mf = 524288.; + const int EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_bits = 8; + const int EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_lsb = 8; + const float EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_mf = 1.; - const int EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_bits = 20; - const int EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_lsb = 24; - const float EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_mf = 524288.; + const int EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_bits = 6; + const int EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_lsb = 2; + const float EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_mf = 32.; - const int EDM_PIXELCLUSTER_W5_OMEGA_X_bits = 10; - const int EDM_PIXELCLUSTER_W5_OMEGA_X_lsb = 14; - const float EDM_PIXELCLUSTER_W5_OMEGA_X_mf = 512.; + const int EDM_PIXELCLUSTER_W7_SPARE_bits = 2; + const int EDM_PIXELCLUSTER_W7_SPARE_lsb = 0; + const float EDM_PIXELCLUSTER_W7_SPARE_mf = 1.; - const int EDM_PIXELCLUSTER_W5_OMEGA_Y_bits = 10; - const int EDM_PIXELCLUSTER_W5_OMEGA_Y_lsb = 4; - const float EDM_PIXELCLUSTER_W5_OMEGA_Y_mf = 512.; + // EDM_PIXELCLUSTER_W8 word description + const int EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_bits = 20; + const int EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_lsb = 44; + const float EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_mf = 524288.; - const int EDM_PIXELCLUSTER_W5_SPARE_bits = 4; - const int EDM_PIXELCLUSTER_W5_SPARE_lsb = 0; - const float EDM_PIXELCLUSTER_W5_SPARE_mf = 1.; + const int EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_bits = 20; + const int EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_lsb = 24; + const float EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_mf = 524288.; - // EDM_PIXELCLUSTER_W6 word description - const int EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_bits = 26; - const int EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_lsb = 38; - const float EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_mf = 65536.; + const int EDM_PIXELCLUSTER_W8_OMEGA_X_bits = 10; + const int EDM_PIXELCLUSTER_W8_OMEGA_X_lsb = 14; + const float EDM_PIXELCLUSTER_W8_OMEGA_X_mf = 512.; - const int EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_bits = 26; - const int EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_lsb = 12; - const float EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_mf = 65536.; + const int EDM_PIXELCLUSTER_W8_OMEGA_Y_bits = 10; + const int EDM_PIXELCLUSTER_W8_OMEGA_Y_lsb = 4; + const float EDM_PIXELCLUSTER_W8_OMEGA_Y_mf = 512.; - const int EDM_PIXELCLUSTER_W6_SPARE_bits = 12; - const int EDM_PIXELCLUSTER_W6_SPARE_lsb = 0; - const float EDM_PIXELCLUSTER_W6_SPARE_mf = 1.; + const int EDM_PIXELCLUSTER_W8_SPARE_bits = 4; + const int EDM_PIXELCLUSTER_W8_SPARE_lsb = 0; + const float EDM_PIXELCLUSTER_W8_SPARE_mf = 1.; - // EDM_PIXELCLUSTER_W7 word description - const int EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_bits = 27; - const int EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_lsb = 37; - const float EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_mf = 65536.; + // EDM_PIXELCLUSTER_W9 word description + const int EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_bits = 26; + const int EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_lsb = 38; + const float EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_mf = 65536.; - const int EDM_PIXELCLUSTER_W7_TOTAL_TOT_bits = 9; - const int EDM_PIXELCLUSTER_W7_TOTAL_TOT_lsb = 28; - const float EDM_PIXELCLUSTER_W7_TOTAL_TOT_mf = 1.; + const int EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_bits = 26; + const int EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_lsb = 12; + const float EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_mf = 65536.; - const int EDM_PIXELCLUSTER_W7_LASTWORD_bits = 1; - const int EDM_PIXELCLUSTER_W7_LASTWORD_lsb = 27; - const float EDM_PIXELCLUSTER_W7_LASTWORD_mf = 1.; + const int EDM_PIXELCLUSTER_W9_SPARE_bits = 12; + const int EDM_PIXELCLUSTER_W9_SPARE_lsb = 0; + const float EDM_PIXELCLUSTER_W9_SPARE_mf = 1.; - const int EDM_PIXELCLUSTER_W7_SPARE_bits = 27; - const int EDM_PIXELCLUSTER_W7_SPARE_lsb = 0; - const float EDM_PIXELCLUSTER_W7_SPARE_mf = 1.; + // EDM_PIXELCLUSTER_W10 word description + const int EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_bits = 29; + const int EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_lsb = 35; + const float EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_mf = 65536.; + + const int EDM_PIXELCLUSTER_W10_TOTAL_TOT_bits = 9; + const int EDM_PIXELCLUSTER_W10_TOTAL_TOT_lsb = 26; + const float EDM_PIXELCLUSTER_W10_TOTAL_TOT_mf = 1.; + + const int EDM_PIXELCLUSTER_W10_LASTWORD_bits = 1; + const int EDM_PIXELCLUSTER_W10_LASTWORD_lsb = 25; + const float EDM_PIXELCLUSTER_W10_LASTWORD_mf = 1.; + + const int EDM_PIXELCLUSTER_W10_SPARE_bits = 25; + const int EDM_PIXELCLUSTER_W10_SPARE_lsb = 0; + const float EDM_PIXELCLUSTER_W10_SPARE_mf = 1.; typedef struct EDM_PIXELCLUSTER_w1 { + uint64_t flag : EDM_PIXELCLUSTER_W1_FLAG_bits; uint64_t id_hash : EDM_PIXELCLUSTER_W1_ID_HASH_bits; - uint64_t identfier : EDM_PIXELCLUSTER_W1_IDENTFIER_bits; + uint64_t spare : EDM_PIXELCLUSTER_W1_Spare_bits; } EDM_PIXELCLUSTER_w1; typedef struct EDM_PIXELCLUSTER_w2 { - uint64_t rdo_list_w1 : EDM_PIXELCLUSTER_W2_RDO_LIST_W1_bits; - uint64_t rdo_list_w2 : EDM_PIXELCLUSTER_W2_RDO_LIST_W2_bits; + uint64_t identifier : EDM_PIXELCLUSTER_W2_IDENTIFIER_bits; } EDM_PIXELCLUSTER_w2; typedef struct EDM_PIXELCLUSTER_w3 { - uint64_t rdo_list_w3 : EDM_PIXELCLUSTER_W3_RDO_LIST_W3_bits; - uint64_t rdo_list_w4 : EDM_PIXELCLUSTER_W3_RDO_LIST_W4_bits; + uint64_t rdo_list_w1 : EDM_PIXELCLUSTER_W3_RDO_LIST_W1_bits; } EDM_PIXELCLUSTER_w3; typedef struct EDM_PIXELCLUSTER_w4 { - int64_t localposition_x : EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_bits; - int64_t localposition_y : EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_bits; - uint64_t channels_in_phi : EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_bits; - uint64_t channels_in_eta : EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_bits; - uint64_t width_in_eta : EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_bits; - uint64_t spare : EDM_PIXELCLUSTER_W4_SPARE_bits; + uint64_t rdo_list_w2 : EDM_PIXELCLUSTER_W4_RDO_LIST_W2_bits; } EDM_PIXELCLUSTER_w4; typedef struct EDM_PIXELCLUSTER_w5 { - uint64_t localcovariance_xx : EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_bits; - uint64_t localcovariance_yy : EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_bits; - uint64_t omega_x : EDM_PIXELCLUSTER_W5_OMEGA_X_bits; - uint64_t omega_y : EDM_PIXELCLUSTER_W5_OMEGA_Y_bits; - uint64_t spare : EDM_PIXELCLUSTER_W5_SPARE_bits; + uint64_t rdo_list_w3 : EDM_PIXELCLUSTER_W5_RDO_LIST_W3_bits; } EDM_PIXELCLUSTER_w5; typedef struct EDM_PIXELCLUSTER_w6 { - int64_t globalposition_x : EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_bits; - int64_t globalposition_y : EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_bits; - uint64_t spare : EDM_PIXELCLUSTER_W6_SPARE_bits; + uint64_t rdo_list_w4 : EDM_PIXELCLUSTER_W6_RDO_LIST_W4_bits; } EDM_PIXELCLUSTER_w6; typedef struct EDM_PIXELCLUSTER_w7 { - int64_t globalposition_z : EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_bits; - uint64_t total_tot : EDM_PIXELCLUSTER_W7_TOTAL_TOT_bits; - uint64_t lastword : EDM_PIXELCLUSTER_W7_LASTWORD_bits; + int64_t localposition_x : EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_bits; + int64_t localposition_y : EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_bits; + uint64_t channels_in_phi : EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_bits; + uint64_t channels_in_eta : EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_bits; + uint64_t width_in_eta : EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_bits; uint64_t spare : EDM_PIXELCLUSTER_W7_SPARE_bits; } EDM_PIXELCLUSTER_w7; + typedef struct EDM_PIXELCLUSTER_w8 { + uint64_t localcovariance_xx : EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_bits; + uint64_t localcovariance_yy : EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_bits; + uint64_t omega_x : EDM_PIXELCLUSTER_W8_OMEGA_X_bits; + uint64_t omega_y : EDM_PIXELCLUSTER_W8_OMEGA_Y_bits; + uint64_t spare : EDM_PIXELCLUSTER_W8_SPARE_bits; + } EDM_PIXELCLUSTER_w8; + + typedef struct EDM_PIXELCLUSTER_w9 { + int64_t globalposition_x : EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_bits; + int64_t globalposition_y : EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_bits; + uint64_t spare : EDM_PIXELCLUSTER_W9_SPARE_bits; + } EDM_PIXELCLUSTER_w9; + + typedef struct EDM_PIXELCLUSTER_w10 { + int64_t globalposition_z : EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_bits; + uint64_t total_tot : EDM_PIXELCLUSTER_W10_TOTAL_TOT_bits; + uint64_t lastword : EDM_PIXELCLUSTER_W10_LASTWORD_bits; + uint64_t spare : EDM_PIXELCLUSTER_W10_SPARE_bits; + } EDM_PIXELCLUSTER_w10; + inline EDM_PIXELCLUSTER_w1 get_bitfields_EDM_PIXELCLUSTER_w1 (const uint64_t& in) { EDM_PIXELCLUSTER_w1 temp; + temp.flag = (in & SELECTBITS(EDM_PIXELCLUSTER_W1_FLAG_bits, EDM_PIXELCLUSTER_W1_FLAG_lsb)) >> EDM_PIXELCLUSTER_W1_FLAG_lsb; temp.id_hash = (in & SELECTBITS(EDM_PIXELCLUSTER_W1_ID_HASH_bits, EDM_PIXELCLUSTER_W1_ID_HASH_lsb)) >> EDM_PIXELCLUSTER_W1_ID_HASH_lsb; - temp.identfier = (in & SELECTBITS(EDM_PIXELCLUSTER_W1_IDENTFIER_bits, EDM_PIXELCLUSTER_W1_IDENTFIER_lsb)) >> EDM_PIXELCLUSTER_W1_IDENTFIER_lsb; + temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W1_Spare_bits, EDM_PIXELCLUSTER_W1_Spare_lsb)) >> EDM_PIXELCLUSTER_W1_Spare_lsb; return temp; } inline EDM_PIXELCLUSTER_w2 get_bitfields_EDM_PIXELCLUSTER_w2 (const uint64_t& in) { EDM_PIXELCLUSTER_w2 temp; - temp.rdo_list_w1 = (in & SELECTBITS(EDM_PIXELCLUSTER_W2_RDO_LIST_W1_bits, EDM_PIXELCLUSTER_W2_RDO_LIST_W1_lsb)) >> EDM_PIXELCLUSTER_W2_RDO_LIST_W1_lsb; - temp.rdo_list_w2 = (in & SELECTBITS(EDM_PIXELCLUSTER_W2_RDO_LIST_W2_bits, EDM_PIXELCLUSTER_W2_RDO_LIST_W2_lsb)) >> EDM_PIXELCLUSTER_W2_RDO_LIST_W2_lsb; + temp.identifier = (in & SELECTBITS(EDM_PIXELCLUSTER_W2_IDENTIFIER_bits, EDM_PIXELCLUSTER_W2_IDENTIFIER_lsb)) >> EDM_PIXELCLUSTER_W2_IDENTIFIER_lsb; return temp; } inline EDM_PIXELCLUSTER_w3 get_bitfields_EDM_PIXELCLUSTER_w3 (const uint64_t& in) { EDM_PIXELCLUSTER_w3 temp; - temp.rdo_list_w3 = (in & SELECTBITS(EDM_PIXELCLUSTER_W3_RDO_LIST_W3_bits, EDM_PIXELCLUSTER_W3_RDO_LIST_W3_lsb)) >> EDM_PIXELCLUSTER_W3_RDO_LIST_W3_lsb; - temp.rdo_list_w4 = (in & SELECTBITS(EDM_PIXELCLUSTER_W3_RDO_LIST_W4_bits, EDM_PIXELCLUSTER_W3_RDO_LIST_W4_lsb)) >> EDM_PIXELCLUSTER_W3_RDO_LIST_W4_lsb; + temp.rdo_list_w1 = (in & SELECTBITS(EDM_PIXELCLUSTER_W3_RDO_LIST_W1_bits, EDM_PIXELCLUSTER_W3_RDO_LIST_W1_lsb)) >> EDM_PIXELCLUSTER_W3_RDO_LIST_W1_lsb; return temp; } inline EDM_PIXELCLUSTER_w4 get_bitfields_EDM_PIXELCLUSTER_w4 (const uint64_t& in) { EDM_PIXELCLUSTER_w4 temp; - temp.localposition_x = (in & SELECTBITS(EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_bits, EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_lsb)) >> EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_lsb; - temp.localposition_y = (in & SELECTBITS(EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_bits, EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_lsb)) >> EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_lsb; - temp.channels_in_phi = (in & SELECTBITS(EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_bits, EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_lsb)) >> EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_lsb; - temp.channels_in_eta = (in & SELECTBITS(EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_bits, EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_lsb)) >> EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_lsb; - temp.width_in_eta = (in & SELECTBITS(EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_bits, EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_lsb)) >> EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_lsb; - temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W4_SPARE_bits, EDM_PIXELCLUSTER_W4_SPARE_lsb)) >> EDM_PIXELCLUSTER_W4_SPARE_lsb; + temp.rdo_list_w2 = (in & SELECTBITS(EDM_PIXELCLUSTER_W4_RDO_LIST_W2_bits, EDM_PIXELCLUSTER_W4_RDO_LIST_W2_lsb)) >> EDM_PIXELCLUSTER_W4_RDO_LIST_W2_lsb; return temp; } inline EDM_PIXELCLUSTER_w5 get_bitfields_EDM_PIXELCLUSTER_w5 (const uint64_t& in) { EDM_PIXELCLUSTER_w5 temp; - temp.localcovariance_xx = (in & SELECTBITS(EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_bits, EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_lsb)) >> EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_lsb; - temp.localcovariance_yy = (in & SELECTBITS(EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_bits, EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_lsb)) >> EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_lsb; - temp.omega_x = (in & SELECTBITS(EDM_PIXELCLUSTER_W5_OMEGA_X_bits, EDM_PIXELCLUSTER_W5_OMEGA_X_lsb)) >> EDM_PIXELCLUSTER_W5_OMEGA_X_lsb; - temp.omega_y = (in & SELECTBITS(EDM_PIXELCLUSTER_W5_OMEGA_Y_bits, EDM_PIXELCLUSTER_W5_OMEGA_Y_lsb)) >> EDM_PIXELCLUSTER_W5_OMEGA_Y_lsb; - temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W5_SPARE_bits, EDM_PIXELCLUSTER_W5_SPARE_lsb)) >> EDM_PIXELCLUSTER_W5_SPARE_lsb; + temp.rdo_list_w3 = (in & SELECTBITS(EDM_PIXELCLUSTER_W5_RDO_LIST_W3_bits, EDM_PIXELCLUSTER_W5_RDO_LIST_W3_lsb)) >> EDM_PIXELCLUSTER_W5_RDO_LIST_W3_lsb; return temp; } inline EDM_PIXELCLUSTER_w6 get_bitfields_EDM_PIXELCLUSTER_w6 (const uint64_t& in) { EDM_PIXELCLUSTER_w6 temp; - temp.globalposition_x = (in & SELECTBITS(EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_bits, EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_lsb)) >> EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_lsb; - temp.globalposition_y = (in & SELECTBITS(EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_bits, EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_lsb)) >> EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_lsb; - temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W6_SPARE_bits, EDM_PIXELCLUSTER_W6_SPARE_lsb)) >> EDM_PIXELCLUSTER_W6_SPARE_lsb; + temp.rdo_list_w4 = (in & SELECTBITS(EDM_PIXELCLUSTER_W6_RDO_LIST_W4_bits, EDM_PIXELCLUSTER_W6_RDO_LIST_W4_lsb)) >> EDM_PIXELCLUSTER_W6_RDO_LIST_W4_lsb; return temp; } inline EDM_PIXELCLUSTER_w7 get_bitfields_EDM_PIXELCLUSTER_w7 (const uint64_t& in) { EDM_PIXELCLUSTER_w7 temp; - temp.globalposition_z = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_bits, EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_lsb)) >> EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_lsb; - temp.total_tot = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_TOTAL_TOT_bits, EDM_PIXELCLUSTER_W7_TOTAL_TOT_lsb)) >> EDM_PIXELCLUSTER_W7_TOTAL_TOT_lsb; - temp.lastword = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_LASTWORD_bits, EDM_PIXELCLUSTER_W7_LASTWORD_lsb)) >> EDM_PIXELCLUSTER_W7_LASTWORD_lsb; + temp.localposition_x = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_bits, EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_lsb)) >> EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_lsb; + temp.localposition_y = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_bits, EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_lsb)) >> EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_lsb; + temp.channels_in_phi = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_bits, EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_lsb)) >> EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_lsb; + temp.channels_in_eta = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_bits, EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_lsb)) >> EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_lsb; + temp.width_in_eta = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_bits, EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_lsb)) >> EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_lsb; temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W7_SPARE_bits, EDM_PIXELCLUSTER_W7_SPARE_lsb)) >> EDM_PIXELCLUSTER_W7_SPARE_lsb; return temp; } + inline EDM_PIXELCLUSTER_w8 get_bitfields_EDM_PIXELCLUSTER_w8 (const uint64_t& in) { + EDM_PIXELCLUSTER_w8 temp; + temp.localcovariance_xx = (in & SELECTBITS(EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_bits, EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_lsb)) >> EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_lsb; + temp.localcovariance_yy = (in & SELECTBITS(EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_bits, EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_lsb)) >> EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_lsb; + temp.omega_x = (in & SELECTBITS(EDM_PIXELCLUSTER_W8_OMEGA_X_bits, EDM_PIXELCLUSTER_W8_OMEGA_X_lsb)) >> EDM_PIXELCLUSTER_W8_OMEGA_X_lsb; + temp.omega_y = (in & SELECTBITS(EDM_PIXELCLUSTER_W8_OMEGA_Y_bits, EDM_PIXELCLUSTER_W8_OMEGA_Y_lsb)) >> EDM_PIXELCLUSTER_W8_OMEGA_Y_lsb; + temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W8_SPARE_bits, EDM_PIXELCLUSTER_W8_SPARE_lsb)) >> EDM_PIXELCLUSTER_W8_SPARE_lsb; + return temp; + } + + inline EDM_PIXELCLUSTER_w9 get_bitfields_EDM_PIXELCLUSTER_w9 (const uint64_t& in) { + EDM_PIXELCLUSTER_w9 temp; + temp.globalposition_x = (in & SELECTBITS(EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_bits, EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_lsb)) >> EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_lsb; + temp.globalposition_y = (in & SELECTBITS(EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_bits, EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_lsb)) >> EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_lsb; + temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W9_SPARE_bits, EDM_PIXELCLUSTER_W9_SPARE_lsb)) >> EDM_PIXELCLUSTER_W9_SPARE_lsb; + return temp; + } + + inline EDM_PIXELCLUSTER_w10 get_bitfields_EDM_PIXELCLUSTER_w10 (const uint64_t& in) { + EDM_PIXELCLUSTER_w10 temp; + temp.globalposition_z = (in & SELECTBITS(EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_bits, EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_lsb)) >> EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_lsb; + temp.total_tot = (in & SELECTBITS(EDM_PIXELCLUSTER_W10_TOTAL_TOT_bits, EDM_PIXELCLUSTER_W10_TOTAL_TOT_lsb)) >> EDM_PIXELCLUSTER_W10_TOTAL_TOT_lsb; + temp.lastword = (in & SELECTBITS(EDM_PIXELCLUSTER_W10_LASTWORD_bits, EDM_PIXELCLUSTER_W10_LASTWORD_lsb)) >> EDM_PIXELCLUSTER_W10_LASTWORD_lsb; + temp.spare = (in & SELECTBITS(EDM_PIXELCLUSTER_W10_SPARE_bits, EDM_PIXELCLUSTER_W10_SPARE_lsb)) >> EDM_PIXELCLUSTER_W10_SPARE_lsb; + return temp; + } + inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w1 (const EDM_PIXELCLUSTER_w1& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.id_hash) << EDM_PIXELCLUSTER_W1_ID_HASH_lsb); - temp |= (static_cast<uint64_t>(in.identfier) << EDM_PIXELCLUSTER_W1_IDENTFIER_lsb); + temp |= (((static_cast<uint64_t>(in.flag)) & SELECTBITS(EDM_PIXELCLUSTER_W1_FLAG_bits, 0)) << EDM_PIXELCLUSTER_W1_FLAG_lsb); + temp |= (((static_cast<uint64_t>(in.id_hash)) & SELECTBITS(EDM_PIXELCLUSTER_W1_ID_HASH_bits, 0)) << EDM_PIXELCLUSTER_W1_ID_HASH_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_PIXELCLUSTER_W1_Spare_bits, 0)) << EDM_PIXELCLUSTER_W1_Spare_lsb); return temp; } inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w2 (const EDM_PIXELCLUSTER_w2& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.rdo_list_w1) << EDM_PIXELCLUSTER_W2_RDO_LIST_W1_lsb); - temp |= (static_cast<uint64_t>(in.rdo_list_w2) << EDM_PIXELCLUSTER_W2_RDO_LIST_W2_lsb); + temp |= (((static_cast<uint64_t>(in.identifier)) & SELECTBITS(EDM_PIXELCLUSTER_W2_IDENTIFIER_bits, 0)) << EDM_PIXELCLUSTER_W2_IDENTIFIER_lsb); return temp; } inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w3 (const EDM_PIXELCLUSTER_w3& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.rdo_list_w3) << EDM_PIXELCLUSTER_W3_RDO_LIST_W3_lsb); - temp |= (static_cast<uint64_t>(in.rdo_list_w4) << EDM_PIXELCLUSTER_W3_RDO_LIST_W4_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w1)) & SELECTBITS(EDM_PIXELCLUSTER_W3_RDO_LIST_W1_bits, 0)) << EDM_PIXELCLUSTER_W3_RDO_LIST_W1_lsb); return temp; } inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w4 (const EDM_PIXELCLUSTER_w4& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.localposition_x) << EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_lsb); - // Manual hack until a solution on the auto-generation is found - const uint64_t local_Y_mask = 0x00000FFFFFFFFFFF; - temp |= ((static_cast<uint64_t>(in.localposition_y) << EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_lsb) & local_Y_mask); - temp |= (static_cast<uint64_t>(in.channels_in_phi) << EDM_PIXELCLUSTER_W4_CHANNELS_IN_PHI_lsb); - temp |= (static_cast<uint64_t>(in.channels_in_eta) << EDM_PIXELCLUSTER_W4_CHANNELS_IN_ETA_lsb); - temp |= (static_cast<uint64_t>(in.width_in_eta) << EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EDM_PIXELCLUSTER_W4_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w2)) & SELECTBITS(EDM_PIXELCLUSTER_W4_RDO_LIST_W2_bits, 0)) << EDM_PIXELCLUSTER_W4_RDO_LIST_W2_lsb); return temp; } inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w5 (const EDM_PIXELCLUSTER_w5& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.localcovariance_xx) << EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_lsb); - temp |= (static_cast<uint64_t>(in.localcovariance_yy) << EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_lsb); - temp |= (static_cast<uint64_t>(in.omega_x) << EDM_PIXELCLUSTER_W5_OMEGA_X_lsb); - temp |= (static_cast<uint64_t>(in.omega_y) << EDM_PIXELCLUSTER_W5_OMEGA_Y_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EDM_PIXELCLUSTER_W5_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w3)) & SELECTBITS(EDM_PIXELCLUSTER_W5_RDO_LIST_W3_bits, 0)) << EDM_PIXELCLUSTER_W5_RDO_LIST_W3_lsb); return temp; } inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w6 (const EDM_PIXELCLUSTER_w6& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.globalposition_x) << EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_lsb); - temp |= (static_cast<uint64_t>(in.globalposition_y) << EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EDM_PIXELCLUSTER_W6_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.rdo_list_w4)) & SELECTBITS(EDM_PIXELCLUSTER_W6_RDO_LIST_W4_bits, 0)) << EDM_PIXELCLUSTER_W6_RDO_LIST_W4_lsb); return temp; } inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w7 (const EDM_PIXELCLUSTER_w7& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.globalposition_z) << EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_lsb); - temp |= (static_cast<uint64_t>(in.total_tot) << EDM_PIXELCLUSTER_W7_TOTAL_TOT_lsb); - temp |= (static_cast<uint64_t>(in.lastword) << EDM_PIXELCLUSTER_W7_LASTWORD_lsb); - temp |= (static_cast<uint64_t>(in.spare) << EDM_PIXELCLUSTER_W7_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.localposition_x)) & SELECTBITS(EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_bits, 0)) << EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_lsb); + temp |= (((static_cast<uint64_t>(in.localposition_y)) & SELECTBITS(EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_bits, 0)) << EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_lsb); + temp |= (((static_cast<uint64_t>(in.channels_in_phi)) & SELECTBITS(EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_bits, 0)) << EDM_PIXELCLUSTER_W7_CHANNELS_IN_PHI_lsb); + temp |= (((static_cast<uint64_t>(in.channels_in_eta)) & SELECTBITS(EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_bits, 0)) << EDM_PIXELCLUSTER_W7_CHANNELS_IN_ETA_lsb); + temp |= (((static_cast<uint64_t>(in.width_in_eta)) & SELECTBITS(EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_bits, 0)) << EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_PIXELCLUSTER_W7_SPARE_bits, 0)) << EDM_PIXELCLUSTER_W7_SPARE_lsb); + return temp; + } + + inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w8 (const EDM_PIXELCLUSTER_w8& in) { + uint64_t temp = 0; + temp |= (((static_cast<uint64_t>(in.localcovariance_xx)) & SELECTBITS(EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_bits, 0)) << EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_lsb); + temp |= (((static_cast<uint64_t>(in.localcovariance_yy)) & SELECTBITS(EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_bits, 0)) << EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_lsb); + temp |= (((static_cast<uint64_t>(in.omega_x)) & SELECTBITS(EDM_PIXELCLUSTER_W8_OMEGA_X_bits, 0)) << EDM_PIXELCLUSTER_W8_OMEGA_X_lsb); + temp |= (((static_cast<uint64_t>(in.omega_y)) & SELECTBITS(EDM_PIXELCLUSTER_W8_OMEGA_Y_bits, 0)) << EDM_PIXELCLUSTER_W8_OMEGA_Y_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_PIXELCLUSTER_W8_SPARE_bits, 0)) << EDM_PIXELCLUSTER_W8_SPARE_lsb); + return temp; + } + + inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w9 (const EDM_PIXELCLUSTER_w9& in) { + uint64_t temp = 0; + temp |= (((static_cast<uint64_t>(in.globalposition_x)) & SELECTBITS(EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_bits, 0)) << EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_lsb); + temp |= (((static_cast<uint64_t>(in.globalposition_y)) & SELECTBITS(EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_bits, 0)) << EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_PIXELCLUSTER_W9_SPARE_bits, 0)) << EDM_PIXELCLUSTER_W9_SPARE_lsb); + return temp; + } + + inline uint64_t get_dataformat_EDM_PIXELCLUSTER_w10 (const EDM_PIXELCLUSTER_w10& in) { + uint64_t temp = 0; + temp |= (((static_cast<uint64_t>(in.globalposition_z)) & SELECTBITS(EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_bits, 0)) << EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_lsb); + temp |= (((static_cast<uint64_t>(in.total_tot)) & SELECTBITS(EDM_PIXELCLUSTER_W10_TOTAL_TOT_bits, 0)) << EDM_PIXELCLUSTER_W10_TOTAL_TOT_lsb); + temp |= (((static_cast<uint64_t>(in.lastword)) & SELECTBITS(EDM_PIXELCLUSTER_W10_LASTWORD_bits, 0)) << EDM_PIXELCLUSTER_W10_LASTWORD_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(EDM_PIXELCLUSTER_W10_SPARE_bits, 0)) << EDM_PIXELCLUSTER_W10_SPARE_lsb); return temp; } - inline EDM_PIXELCLUSTER_w1 fill_EDM_PIXELCLUSTER_w1 (const uint64_t& id_hash, const uint64_t& identfier) { + inline EDM_PIXELCLUSTER_w1 fill_EDM_PIXELCLUSTER_w1 (const uint64_t& flag, const uint64_t& id_hash, const uint64_t& spare) { EDM_PIXELCLUSTER_w1 temp; + temp.flag = flag; temp.id_hash = id_hash; - temp.identfier = identfier; + temp.spare = spare; return temp; } - inline EDM_PIXELCLUSTER_w2 fill_EDM_PIXELCLUSTER_w2 (const uint64_t& rdo_list_w1, const uint64_t& rdo_list_w2) { + inline EDM_PIXELCLUSTER_w2 fill_EDM_PIXELCLUSTER_w2 (const uint64_t& identifier) { EDM_PIXELCLUSTER_w2 temp; + temp.identifier = identifier; + return temp; + } + + inline EDM_PIXELCLUSTER_w3 fill_EDM_PIXELCLUSTER_w3 (const uint64_t& rdo_list_w1) { + EDM_PIXELCLUSTER_w3 temp; temp.rdo_list_w1 = rdo_list_w1; + return temp; + } + + inline EDM_PIXELCLUSTER_w4 fill_EDM_PIXELCLUSTER_w4 (const uint64_t& rdo_list_w2) { + EDM_PIXELCLUSTER_w4 temp; temp.rdo_list_w2 = rdo_list_w2; return temp; } - inline EDM_PIXELCLUSTER_w3 fill_EDM_PIXELCLUSTER_w3 (const uint64_t& rdo_list_w3, const uint64_t& rdo_list_w4) { - EDM_PIXELCLUSTER_w3 temp; + inline EDM_PIXELCLUSTER_w5 fill_EDM_PIXELCLUSTER_w5 (const uint64_t& rdo_list_w3) { + EDM_PIXELCLUSTER_w5 temp; temp.rdo_list_w3 = rdo_list_w3; + return temp; + } + + inline EDM_PIXELCLUSTER_w6 fill_EDM_PIXELCLUSTER_w6 (const uint64_t& rdo_list_w4) { + EDM_PIXELCLUSTER_w6 temp; temp.rdo_list_w4 = rdo_list_w4; return temp; } - inline EDM_PIXELCLUSTER_w4 fill_EDM_PIXELCLUSTER_w4 (const double& localposition_x, const double& localposition_y, const uint64_t& channels_in_phi, const uint64_t& channels_in_eta, const double& width_in_eta, const uint64_t& spare) { - EDM_PIXELCLUSTER_w4 temp; - temp.localposition_x = (int64_t)(localposition_x * EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_mf); - temp.localposition_y = (int64_t)(localposition_y * EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_mf); + inline EDM_PIXELCLUSTER_w7 fill_EDM_PIXELCLUSTER_w7 (const double& localposition_x, const double& localposition_y, const uint64_t& channels_in_phi, const uint64_t& channels_in_eta, const double& width_in_eta, const uint64_t& spare) { + EDM_PIXELCLUSTER_w7 temp; + temp.localposition_x = (int64_t)(localposition_x * EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_mf); + temp.localposition_y = (int64_t)(localposition_y * EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_mf); temp.channels_in_phi = channels_in_phi; temp.channels_in_eta = channels_in_eta; - temp.width_in_eta = (uint64_t)(width_in_eta * EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_mf); + temp.width_in_eta = (uint64_t)(width_in_eta * EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_mf); temp.spare = spare; return temp; } - inline EDM_PIXELCLUSTER_w5 fill_EDM_PIXELCLUSTER_w5 (const double& localcovariance_xx, const double& localcovariance_yy, const double& omega_x, const double& omega_y, const uint64_t& spare) { - EDM_PIXELCLUSTER_w5 temp; - temp.localcovariance_xx = (uint64_t)(localcovariance_xx * EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_mf); - temp.localcovariance_yy = (uint64_t)(localcovariance_yy * EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_mf); - temp.omega_x = (uint64_t)(omega_x * EDM_PIXELCLUSTER_W5_OMEGA_X_mf); - temp.omega_y = (uint64_t)(omega_y * EDM_PIXELCLUSTER_W5_OMEGA_Y_mf); + inline EDM_PIXELCLUSTER_w8 fill_EDM_PIXELCLUSTER_w8 (const double& localcovariance_xx, const double& localcovariance_yy, const double& omega_x, const double& omega_y, const uint64_t& spare) { + EDM_PIXELCLUSTER_w8 temp; + temp.localcovariance_xx = (uint64_t)(localcovariance_xx * EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_mf); + temp.localcovariance_yy = (uint64_t)(localcovariance_yy * EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_mf); + temp.omega_x = (uint64_t)(omega_x * EDM_PIXELCLUSTER_W8_OMEGA_X_mf); + temp.omega_y = (uint64_t)(omega_y * EDM_PIXELCLUSTER_W8_OMEGA_Y_mf); temp.spare = spare; return temp; } - inline EDM_PIXELCLUSTER_w6 fill_EDM_PIXELCLUSTER_w6 (const double& globalposition_x, const double& globalposition_y, const uint64_t& spare) { - EDM_PIXELCLUSTER_w6 temp; - temp.globalposition_x = (int64_t)(globalposition_x * EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_mf); - temp.globalposition_y = (int64_t)(globalposition_y * EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_mf); + inline EDM_PIXELCLUSTER_w9 fill_EDM_PIXELCLUSTER_w9 (const double& globalposition_x, const double& globalposition_y, const uint64_t& spare) { + EDM_PIXELCLUSTER_w9 temp; + temp.globalposition_x = (int64_t)(globalposition_x * EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_mf); + temp.globalposition_y = (int64_t)(globalposition_y * EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_mf); temp.spare = spare; return temp; } - inline EDM_PIXELCLUSTER_w7 fill_EDM_PIXELCLUSTER_w7 (const double& globalposition_z, const uint64_t& total_tot, const uint64_t& lastword, const uint64_t& spare) { - EDM_PIXELCLUSTER_w7 temp; - temp.globalposition_z = (int64_t)(globalposition_z * EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_mf); + inline EDM_PIXELCLUSTER_w10 fill_EDM_PIXELCLUSTER_w10 (const double& globalposition_z, const uint64_t& total_tot, const uint64_t& lastword, const uint64_t& spare) { + EDM_PIXELCLUSTER_w10 temp; + temp.globalposition_z = (int64_t)(globalposition_z * EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_mf); temp.total_tot = total_tot; temp.lastword = lastword; temp.spare = spare; return temp; } + inline uint64_t to_real_EDM_PIXELCLUSTER_w1_flag (const uint64_t& in) { + return in; + } + inline uint64_t to_real_EDM_PIXELCLUSTER_w1_id_hash (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w1_identfier (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w1_spare (const uint64_t& in) { + return in; + } + + inline uint64_t to_real_EDM_PIXELCLUSTER_w2_identifier (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w2_rdo_list_w1 (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w3_rdo_list_w1 (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w2_rdo_list_w2 (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w4_rdo_list_w2 (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w3_rdo_list_w3 (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w5_rdo_list_w3 (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w3_rdo_list_w4 (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w6_rdo_list_w4 (const uint64_t& in) { return in; } - inline double to_real_EDM_PIXELCLUSTER_w4_localposition_x (const int64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W4_LOCALPOSITION_X_mf; + inline double to_real_EDM_PIXELCLUSTER_w7_localposition_x (const int64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W7_LOCALPOSITION_X_mf; } - inline double to_real_EDM_PIXELCLUSTER_w4_localposition_y (const int64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W4_LOCALPOSITION_Y_mf; + inline double to_real_EDM_PIXELCLUSTER_w7_localposition_y (const int64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W7_LOCALPOSITION_Y_mf; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w4_channels_in_phi (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w7_channels_in_phi (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w4_channels_in_eta (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w7_channels_in_eta (const uint64_t& in) { return in; } - inline double to_real_EDM_PIXELCLUSTER_w4_width_in_eta (const uint64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W4_WIDTH_IN_ETA_mf; + inline double to_real_EDM_PIXELCLUSTER_w7_width_in_eta (const uint64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W7_WIDTH_IN_ETA_mf; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w4_spare (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w7_spare (const uint64_t& in) { return in; } - inline double to_real_EDM_PIXELCLUSTER_w5_localcovariance_xx (const uint64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_XX_mf; + inline double to_real_EDM_PIXELCLUSTER_w8_localcovariance_xx (const uint64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_XX_mf; } - inline double to_real_EDM_PIXELCLUSTER_w5_localcovariance_yy (const uint64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W5_LOCALCOVARIANCE_YY_mf; + inline double to_real_EDM_PIXELCLUSTER_w8_localcovariance_yy (const uint64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W8_LOCALCOVARIANCE_YY_mf; } - inline double to_real_EDM_PIXELCLUSTER_w5_omega_x (const uint64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W5_OMEGA_X_mf; + inline double to_real_EDM_PIXELCLUSTER_w8_omega_x (const uint64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W8_OMEGA_X_mf; } - inline double to_real_EDM_PIXELCLUSTER_w5_omega_y (const uint64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W5_OMEGA_Y_mf; + inline double to_real_EDM_PIXELCLUSTER_w8_omega_y (const uint64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W8_OMEGA_Y_mf; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w5_spare (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w8_spare (const uint64_t& in) { return in; } - inline double to_real_EDM_PIXELCLUSTER_w6_globalposition_x (const int64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W6_GLOBALPOSITION_X_mf; + inline double to_real_EDM_PIXELCLUSTER_w9_globalposition_x (const int64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W9_GLOBALPOSITION_X_mf; } - inline double to_real_EDM_PIXELCLUSTER_w6_globalposition_y (const int64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W6_GLOBALPOSITION_Y_mf; + inline double to_real_EDM_PIXELCLUSTER_w9_globalposition_y (const int64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W9_GLOBALPOSITION_Y_mf; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w6_spare (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w9_spare (const uint64_t& in) { return in; } - inline double to_real_EDM_PIXELCLUSTER_w7_globalposition_z (const int64_t& in) { - return (double)in / EDM_PIXELCLUSTER_W7_GLOBALPOSITION_Z_mf; + inline double to_real_EDM_PIXELCLUSTER_w10_globalposition_z (const int64_t& in) { + return (double)in / EDM_PIXELCLUSTER_W10_GLOBALPOSITION_Z_mf; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w7_total_tot (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w10_total_tot (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w7_lastword (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w10_lastword (const uint64_t& in) { return in; } - inline uint64_t to_real_EDM_PIXELCLUSTER_w7_spare (const uint64_t& in) { + inline uint64_t to_real_EDM_PIXELCLUSTER_w10_spare (const uint64_t& in) { return in; } @@ -2057,11 +2221,7 @@ namespace FPGADataFormatUtilities const int PIXEL_EF_RDO_LVL1_lsb = 38; const float PIXEL_EF_RDO_LVL1_mf = 1.; - const int PIXEL_EF_RDO_ID_bits = 13; - const int PIXEL_EF_RDO_ID_lsb = 25; - const float PIXEL_EF_RDO_ID_mf = 1.; - - const int PIXEL_EF_RDO_SPARE_bits = 25; + const int PIXEL_EF_RDO_SPARE_bits = 38; const int PIXEL_EF_RDO_SPARE_lsb = 0; const float PIXEL_EF_RDO_SPARE_mf = 1.; @@ -2071,7 +2231,6 @@ namespace FPGADataFormatUtilities uint64_t col : PIXEL_EF_RDO_COL_bits; uint64_t tot : PIXEL_EF_RDO_TOT_bits; uint64_t lvl1 : PIXEL_EF_RDO_LVL1_bits; - uint64_t id : PIXEL_EF_RDO_ID_bits; uint64_t spare : PIXEL_EF_RDO_SPARE_bits; } PIXEL_EF_RDO; @@ -2082,31 +2241,28 @@ namespace FPGADataFormatUtilities temp.col = (in & SELECTBITS(PIXEL_EF_RDO_COL_bits, PIXEL_EF_RDO_COL_lsb)) >> PIXEL_EF_RDO_COL_lsb; temp.tot = (in & SELECTBITS(PIXEL_EF_RDO_TOT_bits, PIXEL_EF_RDO_TOT_lsb)) >> PIXEL_EF_RDO_TOT_lsb; temp.lvl1 = (in & SELECTBITS(PIXEL_EF_RDO_LVL1_bits, PIXEL_EF_RDO_LVL1_lsb)) >> PIXEL_EF_RDO_LVL1_lsb; - temp.id = (in & SELECTBITS(PIXEL_EF_RDO_ID_bits, PIXEL_EF_RDO_ID_lsb)) >> PIXEL_EF_RDO_ID_lsb; temp.spare = (in & SELECTBITS(PIXEL_EF_RDO_SPARE_bits, PIXEL_EF_RDO_SPARE_lsb)) >> PIXEL_EF_RDO_SPARE_lsb; return temp; } inline uint64_t get_dataformat_PIXEL_EF_RDO (const PIXEL_EF_RDO& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.last) << PIXEL_EF_RDO_LAST_lsb); - temp |= (static_cast<uint64_t>(in.row) << PIXEL_EF_RDO_ROW_lsb); - temp |= (static_cast<uint64_t>(in.col) << PIXEL_EF_RDO_COL_lsb); - temp |= (static_cast<uint64_t>(in.tot) << PIXEL_EF_RDO_TOT_lsb); - temp |= (static_cast<uint64_t>(in.lvl1) << PIXEL_EF_RDO_LVL1_lsb); - temp |= (static_cast<uint64_t>(in.id) << PIXEL_EF_RDO_ID_lsb); - temp |= (static_cast<uint64_t>(in.spare) << PIXEL_EF_RDO_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.last)) & SELECTBITS(PIXEL_EF_RDO_LAST_bits, 0)) << PIXEL_EF_RDO_LAST_lsb); + temp |= (((static_cast<uint64_t>(in.row)) & SELECTBITS(PIXEL_EF_RDO_ROW_bits, 0)) << PIXEL_EF_RDO_ROW_lsb); + temp |= (((static_cast<uint64_t>(in.col)) & SELECTBITS(PIXEL_EF_RDO_COL_bits, 0)) << PIXEL_EF_RDO_COL_lsb); + temp |= (((static_cast<uint64_t>(in.tot)) & SELECTBITS(PIXEL_EF_RDO_TOT_bits, 0)) << PIXEL_EF_RDO_TOT_lsb); + temp |= (((static_cast<uint64_t>(in.lvl1)) & SELECTBITS(PIXEL_EF_RDO_LVL1_bits, 0)) << PIXEL_EF_RDO_LVL1_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(PIXEL_EF_RDO_SPARE_bits, 0)) << PIXEL_EF_RDO_SPARE_lsb); return temp; } - inline PIXEL_EF_RDO fill_PIXEL_EF_RDO (const uint64_t& last, const uint64_t& row, const uint64_t& col, const uint64_t& tot, const uint64_t& lvl1, const uint64_t& id, const uint64_t& spare) { + inline PIXEL_EF_RDO fill_PIXEL_EF_RDO (const uint64_t& last, const uint64_t& row, const uint64_t& col, const uint64_t& tot, const uint64_t& lvl1, const uint64_t& spare) { PIXEL_EF_RDO temp; temp.last = last; temp.row = row; temp.col = col; temp.tot = tot; temp.lvl1 = lvl1; - temp.id = id; temp.spare = spare; return temp; } @@ -2131,10 +2287,6 @@ namespace FPGADataFormatUtilities return in; } - inline uint64_t to_real_PIXEL_EF_RDO_id (const uint64_t& in) { - return in; - } - inline uint64_t to_real_PIXEL_EF_RDO_spare (const uint64_t& in) { return in; } @@ -2156,11 +2308,7 @@ namespace FPGADataFormatUtilities const int STRIP_EF_RDO_CLUSTER_MAP_lsb = 16; const float STRIP_EF_RDO_CLUSTER_MAP_mf = 1.; - const int STRIP_EF_RDO_ID_bits = 13; - const int STRIP_EF_RDO_ID_lsb = 3; - const float STRIP_EF_RDO_ID_mf = 1.; - - const int STRIP_EF_RDO_SPARE_bits = 3; + const int STRIP_EF_RDO_SPARE_bits = 16; const int STRIP_EF_RDO_SPARE_lsb = 0; const float STRIP_EF_RDO_SPARE_mf = 1.; @@ -2169,7 +2317,6 @@ namespace FPGADataFormatUtilities uint64_t chipid : STRIP_EF_RDO_CHIPID_bits; uint64_t strip_num : STRIP_EF_RDO_STRIP_NUM_bits; uint64_t cluster_map : STRIP_EF_RDO_CLUSTER_MAP_bits; - uint64_t id : STRIP_EF_RDO_ID_bits; uint64_t spare : STRIP_EF_RDO_SPARE_bits; } STRIP_EF_RDO; @@ -2179,7 +2326,6 @@ namespace FPGADataFormatUtilities temp.chipid = (in & SELECTBITS(STRIP_EF_RDO_CHIPID_bits, STRIP_EF_RDO_CHIPID_lsb)) >> STRIP_EF_RDO_CHIPID_lsb; temp.strip_num = (in & SELECTBITS(STRIP_EF_RDO_STRIP_NUM_bits, STRIP_EF_RDO_STRIP_NUM_lsb)) >> STRIP_EF_RDO_STRIP_NUM_lsb; temp.cluster_map = (in & SELECTBITS(STRIP_EF_RDO_CLUSTER_MAP_bits, STRIP_EF_RDO_CLUSTER_MAP_lsb)) >> STRIP_EF_RDO_CLUSTER_MAP_lsb; - temp.id = (in & SELECTBITS(STRIP_EF_RDO_ID_bits, STRIP_EF_RDO_ID_lsb)) >> STRIP_EF_RDO_ID_lsb; temp.spare = (in & SELECTBITS(STRIP_EF_RDO_SPARE_bits, STRIP_EF_RDO_SPARE_lsb)) >> STRIP_EF_RDO_SPARE_lsb; return temp; } @@ -2194,12 +2340,11 @@ namespace FPGADataFormatUtilities inline uint64_t get_dataformat_STRIP_EF_RDO (const STRIP_EF_RDO& in) { uint64_t temp = 0; - temp |= (static_cast<uint64_t>(in.last) << STRIP_EF_RDO_LAST_lsb); - temp |= (static_cast<uint64_t>(in.chipid) << STRIP_EF_RDO_CHIPID_lsb); - temp |= (static_cast<uint64_t>(in.strip_num) << STRIP_EF_RDO_STRIP_NUM_lsb); - temp |= (static_cast<uint64_t>(in.cluster_map) << STRIP_EF_RDO_CLUSTER_MAP_lsb); - temp |= (static_cast<uint64_t>(in.id) << STRIP_EF_RDO_ID_lsb); - temp |= (static_cast<uint64_t>(in.spare) << STRIP_EF_RDO_SPARE_lsb); + temp |= (((static_cast<uint64_t>(in.last)) & SELECTBITS(STRIP_EF_RDO_LAST_bits, 0)) << STRIP_EF_RDO_LAST_lsb); + temp |= (((static_cast<uint64_t>(in.chipid)) & SELECTBITS(STRIP_EF_RDO_CHIPID_bits, 0)) << STRIP_EF_RDO_CHIPID_lsb); + temp |= (((static_cast<uint64_t>(in.strip_num)) & SELECTBITS(STRIP_EF_RDO_STRIP_NUM_bits, 0)) << STRIP_EF_RDO_STRIP_NUM_lsb); + temp |= (((static_cast<uint64_t>(in.cluster_map)) & SELECTBITS(STRIP_EF_RDO_CLUSTER_MAP_bits, 0)) << STRIP_EF_RDO_CLUSTER_MAP_lsb); + temp |= (((static_cast<uint64_t>(in.spare)) & SELECTBITS(STRIP_EF_RDO_SPARE_bits, 0)) << STRIP_EF_RDO_SPARE_lsb); return temp; } @@ -2208,13 +2353,12 @@ namespace FPGADataFormatUtilities return (temp | low); } - inline STRIP_EF_RDO fill_STRIP_EF_RDO (const uint64_t& last, const uint64_t& chipid, const uint64_t& strip_num, const uint64_t& cluster_map, const uint64_t& id, const uint64_t& spare) { + inline STRIP_EF_RDO fill_STRIP_EF_RDO (const uint64_t& last, const uint64_t& chipid, const uint64_t& strip_num, const uint64_t& cluster_map, const uint64_t& spare) { STRIP_EF_RDO temp; temp.last = last; temp.chipid = chipid; temp.strip_num = strip_num; temp.cluster_map = cluster_map; - temp.id = id; temp.spare = spare; return temp; } @@ -2235,10 +2379,6 @@ namespace FPGADataFormatUtilities return in; } - inline uint64_t to_real_STRIP_EF_RDO_id (const uint64_t& in) { - return in; - } - inline uint64_t to_real_STRIP_EF_RDO_spare (const uint64_t& in) { return in; } diff --git a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/OutputConversionTool.cxx b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/OutputConversionTool.cxx index 209ce87f7199cb479da5b49449bd29db96e4b8bf..4448711c4e9876fbeccc2535d052fe3fb27ce2a0 100644 --- a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/OutputConversionTool.cxx +++ b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/OutputConversionTool.cxx @@ -60,11 +60,23 @@ StatusCode OutputConversionTool::decodeFPGAoutput(const std::vector<uint64_t> &b case OutputConversion::FSM::PixelEDM: { state = OutputConversion::FSM::PixelEDM; + if(pcAux == nullptr) + { + ATH_MSG_ERROR("The PixelClusterAuxInput is not provided to decode function! Something is wrong"); + state = OutputConversion::FSM::Error; + break; + } break; } case OutputConversion::FSM::StripEDM: { state = OutputConversion::FSM::StripEDM; + if(scAux == nullptr) + { + ATH_MSG_ERROR("The StripClusterAuxInput is not provided to decode function! Something is wrong"); + state = OutputConversion::FSM::Error; + break; + } break; } default: @@ -166,8 +178,8 @@ StatusCode OutputConversionTool::decodeFPGAoutput(const std::vector<uint64_t> &b case OutputConversion::FSM::PixelEDM: { pixel_edm_words.push_back(word); - // Read in 7 consecutive words - if (pixel_edm_words.size() == 7) + // Read in 10 consecutive words + if (pixel_edm_words.size() == 10) { // decode the pixel EDM // For pixel EDM aux, we need @@ -176,26 +188,26 @@ StatusCode OutputConversionTool::decodeFPGAoutput(const std::vector<uint64_t> &b // omegaX, omegaY, global position // totalToT pcAux->idHash.push_back(get_bitfields_EDM_PIXELCLUSTER_w1(pixel_edm_words[0]).id_hash); - pcAux->id.push_back(get_bitfields_EDM_PIXELCLUSTER_w1(pixel_edm_words[0]).identfier); - pcAux->localPosition.push_back(to_real_EDM_PIXELCLUSTER_w4_localposition_x(get_bitfields_EDM_PIXELCLUSTER_w4(pixel_edm_words[3]).localposition_x)); - pcAux->localPosition.push_back(to_real_EDM_PIXELCLUSTER_w4_localposition_y(get_bitfields_EDM_PIXELCLUSTER_w4(pixel_edm_words[3]).localposition_y)); - pcAux->channelsInPhi.push_back(get_bitfields_EDM_PIXELCLUSTER_w4(pixel_edm_words[3]).channels_in_phi); - pcAux->channelsInEta.push_back(get_bitfields_EDM_PIXELCLUSTER_w4(pixel_edm_words[3]).channels_in_eta); - pcAux->widthInEta.push_back(to_real_EDM_PIXELCLUSTER_w4_width_in_eta(get_bitfields_EDM_PIXELCLUSTER_w4(pixel_edm_words[3]).width_in_eta)); - pcAux->localCovariance.push_back(to_real_EDM_PIXELCLUSTER_w5_localcovariance_xx(get_bitfields_EDM_PIXELCLUSTER_w5(pixel_edm_words[4]).localcovariance_xx)); - pcAux->localCovariance.push_back(to_real_EDM_PIXELCLUSTER_w5_localcovariance_yy(get_bitfields_EDM_PIXELCLUSTER_w5(pixel_edm_words[4]).localcovariance_yy)); - pcAux->omegaX.push_back(to_real_EDM_PIXELCLUSTER_w5_omega_x(get_bitfields_EDM_PIXELCLUSTER_w5(pixel_edm_words[4]).omega_x)); - pcAux->omegaY.push_back(to_real_EDM_PIXELCLUSTER_w5_omega_y(get_bitfields_EDM_PIXELCLUSTER_w5(pixel_edm_words[4]).omega_y)); - pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w6_globalposition_x(get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).globalposition_x)); - pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w6_globalposition_y(get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).globalposition_y)); - pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w7_globalposition_z(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).globalposition_z)); - pcAux->totalToT.push_back(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).total_tot); + pcAux->id.push_back(get_bitfields_EDM_PIXELCLUSTER_w2(pixel_edm_words[1]).identifier); + pcAux->localPosition.push_back(to_real_EDM_PIXELCLUSTER_w7_localposition_x(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).localposition_x)); + pcAux->localPosition.push_back(to_real_EDM_PIXELCLUSTER_w7_localposition_y(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).localposition_y)); + pcAux->channelsInPhi.push_back(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).channels_in_phi); + pcAux->channelsInEta.push_back(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).channels_in_eta); + pcAux->widthInEta.push_back(to_real_EDM_PIXELCLUSTER_w7_width_in_eta(get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).width_in_eta)); + pcAux->localCovariance.push_back(to_real_EDM_PIXELCLUSTER_w8_localcovariance_xx(get_bitfields_EDM_PIXELCLUSTER_w8(pixel_edm_words[7]).localcovariance_xx)); + pcAux->localCovariance.push_back(to_real_EDM_PIXELCLUSTER_w8_localcovariance_yy(get_bitfields_EDM_PIXELCLUSTER_w8(pixel_edm_words[7]).localcovariance_yy)); + pcAux->omegaX.push_back(to_real_EDM_PIXELCLUSTER_w8_omega_x(get_bitfields_EDM_PIXELCLUSTER_w8(pixel_edm_words[7]).omega_x)); + pcAux->omegaY.push_back(to_real_EDM_PIXELCLUSTER_w8_omega_y(get_bitfields_EDM_PIXELCLUSTER_w8(pixel_edm_words[7]).omega_y)); + pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w9_globalposition_x(get_bitfields_EDM_PIXELCLUSTER_w9(pixel_edm_words[8]).globalposition_x)); + pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w9_globalposition_y(get_bitfields_EDM_PIXELCLUSTER_w9(pixel_edm_words[8]).globalposition_y)); + pcAux->globalPosition.push_back(to_real_EDM_PIXELCLUSTER_w10_globalposition_z(get_bitfields_EDM_PIXELCLUSTER_w10(pixel_edm_words[9]).globalposition_z)); + pcAux->totalToT.push_back(get_bitfields_EDM_PIXELCLUSTER_w10(pixel_edm_words[9]).total_tot); // check if the rdo list word is empty, there are only 4 words in the pixel EDM - auto rdo_w1 = get_bitfields_EDM_PIXELCLUSTER_w2(pixel_edm_words[1]).rdo_list_w1; - auto rdo_w2 = get_bitfields_EDM_PIXELCLUSTER_w2(pixel_edm_words[1]).rdo_list_w2; - auto rdo_w3 = get_bitfields_EDM_PIXELCLUSTER_w3(pixel_edm_words[2]).rdo_list_w3; - auto rdo_w4 = get_bitfields_EDM_PIXELCLUSTER_w3(pixel_edm_words[2]).rdo_list_w4; + auto rdo_w1 = get_bitfields_EDM_PIXELCLUSTER_w3(pixel_edm_words[2]).rdo_list_w1; + auto rdo_w2 = get_bitfields_EDM_PIXELCLUSTER_w4(pixel_edm_words[3]).rdo_list_w2; + auto rdo_w3 = get_bitfields_EDM_PIXELCLUSTER_w5(pixel_edm_words[4]).rdo_list_w3; + auto rdo_w4 = get_bitfields_EDM_PIXELCLUSTER_w6(pixel_edm_words[5]).rdo_list_w4; unsigned short current_rdo_size = 0; if (rdo_w1 != 0) @@ -223,7 +235,7 @@ StatusCode OutputConversionTool::decodeFPGAoutput(const std::vector<uint64_t> &b counter++; // Determine if this is the last cluster - if (get_bitfields_EDM_PIXELCLUSTER_w7(pixel_edm_words[6]).lastword == 1) + if (get_bitfields_EDM_PIXELCLUSTER_w10(pixel_edm_words[9]).lastword == 1) { metadata->pcRdoIndexSize = counter; metadata->numOfPixelClusters = counter; @@ -259,22 +271,22 @@ StatusCode OutputConversionTool::decodeFPGAoutput(const std::vector<uint64_t> &b case OutputConversion::FSM::StripEDM: { strip_edm_words.push_back(word); - // Read in 6 consecutive words - if (strip_edm_words.size() == 6) + // Read in 9 consecutive words + if (strip_edm_words.size() == 9) { scAux->idHash.push_back(get_bitfields_EDM_STRIPCLUSTER_w1(strip_edm_words[0]).id_hash); - scAux->id.push_back(get_bitfields_EDM_STRIPCLUSTER_w1(strip_edm_words[0]).identifier); - scAux->localPosition.push_back(to_real_EDM_STRIPCLUSTER_w4_localposition_x(get_bitfields_EDM_STRIPCLUSTER_w4(strip_edm_words[3]).localposition_x)); - scAux->localCovariance.push_back(to_real_EDM_STRIPCLUSTER_w4_localcovariance_xx(get_bitfields_EDM_STRIPCLUSTER_w4(strip_edm_words[3]).localcovariance_xx)); - scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w5_globalposition_x(get_bitfields_EDM_STRIPCLUSTER_w5(strip_edm_words[4]).globalposition_x)); - scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w5_globalposition_y(get_bitfields_EDM_STRIPCLUSTER_w5(strip_edm_words[4]).globalposition_y)); - scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w6_globalposition_z(get_bitfields_EDM_STRIPCLUSTER_w6(strip_edm_words[5]).globalposition_z)); - scAux->channelsInPhi.push_back(get_bitfields_EDM_STRIPCLUSTER_w5(strip_edm_words[4]).channels_in_phi); + scAux->id.push_back(get_bitfields_EDM_STRIPCLUSTER_w2(strip_edm_words[1]).identifier); + scAux->localPosition.push_back(to_real_EDM_STRIPCLUSTER_w7_localposition_x(get_bitfields_EDM_STRIPCLUSTER_w7(strip_edm_words[6]).localposition_x)); + scAux->localCovariance.push_back(to_real_EDM_STRIPCLUSTER_w7_localcovariance_xx(get_bitfields_EDM_STRIPCLUSTER_w7(strip_edm_words[6]).localcovariance_xx)); + scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w8_globalposition_x(get_bitfields_EDM_STRIPCLUSTER_w8(strip_edm_words[7]).globalposition_x)); + scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w8_globalposition_y(get_bitfields_EDM_STRIPCLUSTER_w8(strip_edm_words[7]).globalposition_y)); + scAux->globalPosition.push_back(to_real_EDM_STRIPCLUSTER_w9_globalposition_z(get_bitfields_EDM_STRIPCLUSTER_w9(strip_edm_words[8]).globalposition_z)); + scAux->channelsInPhi.push_back(get_bitfields_EDM_STRIPCLUSTER_w8(strip_edm_words[7]).channels_in_phi); // check if the rdo list word is empty, there are only 4 words in the strip EDM - auto rdo_w1 = get_bitfields_EDM_STRIPCLUSTER_w2(strip_edm_words[1]).rdo_list_w1; - auto rdo_w2 = get_bitfields_EDM_STRIPCLUSTER_w2(strip_edm_words[1]).rdo_list_w2; - auto rdo_w3 = get_bitfields_EDM_STRIPCLUSTER_w3(strip_edm_words[2]).rdo_list_w3; - auto rdo_w4 = get_bitfields_EDM_STRIPCLUSTER_w3(strip_edm_words[2]).rdo_list_w4; + auto rdo_w1 = get_bitfields_EDM_STRIPCLUSTER_w3(strip_edm_words[2]).rdo_list_w1; + auto rdo_w2 = get_bitfields_EDM_STRIPCLUSTER_w4(strip_edm_words[3]).rdo_list_w2; + auto rdo_w3 = get_bitfields_EDM_STRIPCLUSTER_w5(strip_edm_words[4]).rdo_list_w3; + auto rdo_w4 = get_bitfields_EDM_STRIPCLUSTER_w6(strip_edm_words[5]).rdo_list_w4; unsigned short current_rdo_size = 0; if (rdo_w1 != 0) @@ -302,7 +314,7 @@ StatusCode OutputConversionTool::decodeFPGAoutput(const std::vector<uint64_t> &b counter++; // Determine if this is the last cluster - if (get_bitfields_EDM_STRIPCLUSTER_w6(strip_edm_words[5]).lastword == 1) + if (get_bitfields_EDM_STRIPCLUSTER_w9(strip_edm_words[8]).lastword == 1) { metadata->scRdoIndexSize = counter; metadata->numOfStripClusters = counter; diff --git a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/TestVectorTool.cxx b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/TestVectorTool.cxx index 6d596030583cccaae1114adb98579c52c22c296c..0af7f86242fb2a7c95ab98f09d3eaeebe565c466 100644 --- a/Trigger/EFTracking/EFTrackingFPGAIntegration/src/TestVectorTool.cxx +++ b/Trigger/EFTracking/EFTrackingFPGAIntegration/src/TestVectorTool.cxx @@ -179,10 +179,15 @@ StatusCode TestVectorTool::encodePixelL2G(const xAOD::PixelClusterContainer *pix for (unsigned int i = 0; i < pixelClusters->size(); i++) { // Pixel cluster w1 - auto pixelCluster_w1 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w1(pixelClusters->at(i)->identifierHash(), - pixelClusters->at(i)->identifier()); + auto pixelCluster_w1 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w1(FPGADataFormatUtilities::EDM_PIXELCLUSTER_FLAG, + pixelClusters->at(i)->identifierHash(), + 0); encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w1(pixelCluster_w1)); + // Pixel cluster w2 + auto pixelCluster_w2 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w2(pixelClusters->at(i)->identifier()); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w2(pixelCluster_w2)); + // Determine the size of rdo list and retrieve accordingly uint64_t rdoList[4] = {0, 0, 0, 0}; // Current dataformat only supports 4 RDOs @@ -193,44 +198,52 @@ StatusCode TestVectorTool::encodePixelL2G(const xAOD::PixelClusterContainer *pix rdoList[j] = pixelClusters->at(i)->rdoList().at(j).get_compact(); } - // Pixel cluster w2 - auto pixelCluster_w2 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w2(rdoList[0], rdoList[1]); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w2(pixelCluster_w2)); - // Pixel cluster w3 - auto pixelCluster_w3 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w3(rdoList[2], rdoList[3]); + auto pixelCluster_w3 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w3(rdoList[0]); encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w3(pixelCluster_w3)); // Pixel cluster w4 - auto pixelCluster_w4 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w4(pixelClusters->at(i)->localPosition<2>()(0, 0), + auto pixelCluster_w4 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w4(rdoList[1]); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w4(pixelCluster_w4)); + + // Pixel cluster w5 + auto pixelCluster_w5 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w5(rdoList[2]); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w5(pixelCluster_w5)); + + // Pixel cluster w6 + auto pixelCluster_w6 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w6(rdoList[3]); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w6(pixelCluster_w6)); + + // Pixel cluster w7 + auto pixelCluster_w7 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w7(pixelClusters->at(i)->localPosition<2>()(0, 0), pixelClusters->at(i)->localPosition<2>()(1, 0), pixelClusters->at(i)->channelsInPhi(), pixelClusters->at(i)->channelsInEta(), pixelClusters->at(i)->widthInEta(), 0); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w4(pixelCluster_w4)); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w7(pixelCluster_w7)); - // Pixel cluster w5 - auto pixelCluster_w5 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w5(pixelClusters->at(i)->localCovariance<2>()(0, 0), + // Pixel cluster w8 + auto pixelCluster_w8 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w8(pixelClusters->at(i)->localCovariance<2>()(0, 0), pixelClusters->at(i)->localCovariance<2>()(1, 1), pixelClusters->at(i)->omegaX(), pixelClusters->at(i)->omegaY(), 0); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w5(pixelCluster_w5)); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w8(pixelCluster_w8)); - // Pixel cluster w6 - auto pixelCluster_w6 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w6(pixelClusters->at(i)->globalPosition()[0], + // Pixel cluster w9 + auto pixelCluster_w9 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w9(pixelClusters->at(i)->globalPosition()[0], pixelClusters->at(i)->globalPosition()[1], 0); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w6(pixelCluster_w6)); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w9(pixelCluster_w9)); - // Pixel cluster w7 + // Pixel cluster w10 isLast = i == (pixelClusters->size() - 1) ? 1 : 0; - auto pixelCluster_w7 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w7(pixelClusters->at(i)->globalPosition()[2], - pixelClusters->at(i)->totalToT(), - isLast, - 0); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w7(pixelCluster_w7)); + auto pixelCluster_w10 = FPGADataFormatUtilities::fill_EDM_PIXELCLUSTER_w10(pixelClusters->at(i)->globalPosition()[2], + pixelClusters->at(i)->totalToT(), + isLast, + 0); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_PIXELCLUSTER_w10(pixelCluster_w10)); } // Fill the event footer @@ -272,10 +285,15 @@ StatusCode TestVectorTool::encodeStripL2G(const xAOD::StripClusterContainer *str for (unsigned int i = 0; i < stripClusters->size(); i++) { // Strip cluster w1 - auto stripCluster_w1 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w1(stripClusters->at(i)->identifierHash(), - stripClusters->at(i)->identifier()); + auto stripCluster_w1 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w1(FPGADataFormatUtilities::EDM_STRIPCLUSTER_FLAG, + stripClusters->at(i)->identifierHash(), + 0); encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w1(stripCluster_w1)); + // Strip cluster w2 + auto stripCluster_w2 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w2(stripClusters->at(i)->identifier()); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w2(stripCluster_w2)); + // Determine the size of rdo list and retrieve accordingly uint64_t rdoList[4] = {0, 0, 0, 0}; // Current dataformat only supports 4 RDOs @@ -286,33 +304,41 @@ StatusCode TestVectorTool::encodeStripL2G(const xAOD::StripClusterContainer *str rdoList[j] = stripClusters->at(i)->rdoList().at(j).get_compact(); } - // Strip cluster w2 - auto stripCluster_w2 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w2(rdoList[0], rdoList[1]); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w2(stripCluster_w2)); - // Strip cluster w3 - auto stripCluster_w3 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w3(rdoList[2], rdoList[3]); + auto stripCluster_w3 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w3(rdoList[0]); encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w3(stripCluster_w3)); // Strip cluster w4 - auto stripCluster_w4 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w4(stripClusters->at(i)->localPosition<1>()(0, 0), + auto stripCluster_w4 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w4(rdoList[1]); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w4(stripCluster_w4)); + + // Strip cluster w5 + auto stripCluster_w5 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w5(rdoList[2]); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w5(stripCluster_w5)); + + // Strip cluster w6 + auto stripCluster_w6 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w6(rdoList[3]); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w6(stripCluster_w6)); + + // Strip cluster w7 + auto stripCluster_w7 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w7(stripClusters->at(i)->localPosition<1>()(0, 0), 0, // Strip cluster has no local position y stripClusters->at(i)->localCovariance<1>()(0, 0), 0); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w4(stripCluster_w4)); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w7(stripCluster_w7)); - // Strip cluster w5 - auto stripCluster_w5 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w5(stripClusters->at(i)->globalPosition()[0], + // Strip cluster w8 + auto stripCluster_w8 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w8(stripClusters->at(i)->globalPosition()[0], stripClusters->at(i)->globalPosition()[1], stripClusters->at(i)->channelsInPhi(), 0); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w5(stripCluster_w5)); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w8(stripCluster_w8)); + // Strip cluster w9 isLast = i == (stripClusters->size() - 1) ? 1 : 0; - // Strip cluster w6 - auto stripCluster_w6 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w6(stripClusters->at(i)->globalPosition()[2], + auto stripCluster_w9 = FPGADataFormatUtilities::fill_EDM_STRIPCLUSTER_w9(stripClusters->at(i)->globalPosition()[2], isLast, i, 0); - encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w6(stripCluster_w6)); + encodedData.push_back(FPGADataFormatUtilities::get_dataformat_EDM_STRIPCLUSTER_w9(stripCluster_w9)); } // Fill the event footer