From 5788f707f949f448f3e372cf70125fcefb099ac8 Mon Sep 17 00:00:00 2001 From: lhdamiani Date: Tue, 20 Jul 2021 17:22:20 +0200 Subject: [PATCH 1/3] assembler name frame instead of module --- eiger/test/trimbit.py | 9 ++++++--- jf-assembler/include/EigerAssembler.hpp | 6 +++--- jf-assembler/src/EigerAssembler.cpp | 16 ++++++++-------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/eiger/test/trimbit.py b/eiger/test/trimbit.py index e050532..7cc00ae 100644 --- a/eiger/test/trimbit.py +++ b/eiger/test/trimbit.py @@ -8,19 +8,22 @@ plt.ion() dacs = np.array([ 0, 2480, 2900, 1400, 4000, 2556, 898, 848, 0, 855, 1100, 1100, 982, 895, 2000, 1550, 570, 0], dtype=np.int32) -tb = np.zeros((512,1024), dtype = np.int32) +tb = np.zeros((256,1024), dtype = np.int32) # Create the desired pattern -for row in range(0,512,64): +for row in range(0,256,64): for col in range(0,1024,64): print(f'{row}, {col}') tb[row:row+32, col:col+32] = 63 fig, ax = plt.subplots() + im = ax.imshow(tb) +fig.savefig('trim.png') -with open('trimbits.sn000', 'wb') as f: + +with open('trimbits.sn001', 'wb') as f: dacs.tofile(f) tb.tofile(f) \ No newline at end of file diff --git a/jf-assembler/include/EigerAssembler.hpp b/jf-assembler/include/EigerAssembler.hpp index 350b050..b07bd8d 100644 --- a/jf-assembler/include/EigerAssembler.hpp +++ b/jf-assembler/include/EigerAssembler.hpp @@ -13,7 +13,7 @@ class EigerAssembler { int last_image_status_; const uint32_t n_bytes_per_frame_; - const uint32_t n_bytes_per_module_line_; + const uint32_t n_bytes_per_frame_line_; const uint32_t n_packets_per_frame_; const uint32_t n_bytes_per_x_gap_; const uint32_t n_bytes_per_y_gap_; @@ -36,8 +36,8 @@ public: friend std::ostream& operator<<(std::ostream& os, const EigerAssembler& p) { return os << "( n_bytes_per_frame_" - << p.n_bytes_per_frame_ << ", n_bytes_per_module_line_" - << p.n_bytes_per_module_line_ << ", n_packets_per_frame_" + << p.n_bytes_per_frame_ << ", n_bytes_per_frame_line_" + << p.n_bytes_per_frame_line_ << ", n_packets_per_frame_" << p.n_packets_per_frame_ << ", n_bytes_per_x_gap_" << p.n_bytes_per_x_gap_ << ", n_bytes_per_y_gap_" << p.n_bytes_per_y_gap_ << ", n_bytes_per_eiger_x_gap_" diff --git a/jf-assembler/src/EigerAssembler.cpp b/jf-assembler/src/EigerAssembler.cpp index afc4c0a..934f667 100644 --- a/jf-assembler/src/EigerAssembler.cpp +++ b/jf-assembler/src/EigerAssembler.cpp @@ -17,16 +17,15 @@ EigerAssembler::EigerAssembler(const int n_modules, const int bit_depth): n_eiger_modules_(n_modules/4), bit_depth_(bit_depth), n_bytes_per_frame_(MODULE_N_PIXELS * bit_depth / 8), - n_bytes_per_module_line_(N_BYTES_PER_MODULE_LINE(bit_depth)), + n_bytes_per_frame_line_(N_BYTES_PER_MODULE_LINE(bit_depth)), n_packets_per_frame_(n_bytes_per_frame_ / DATA_BYTES_PER_PACKET), n_bytes_per_x_gap_(GAP_X_MODULE_PIXELS * bit_depth / 8), n_bytes_per_y_gap_(GAP_Y_MODULE_PIXELS * bit_depth / 8), n_bytes_per_eiger_x_gap_(GAP_X_EIGERMOD_PIXELS * bit_depth / 8), n_bytes_per_eiger_y_gap_(GAP_Y_EIGERMOD_PIXELS * bit_depth / 8), - n_bytes_per_image_line_(n_bytes_per_module_line_ * 2 + n_bytes_per_x_gap_), - n_lines_per_frame_(DATA_BYTES_PER_PACKET / n_bytes_per_module_line_ - * n_packets_per_frame_), - image_bytes_((n_modules_ * MODULE_N_PIXELS * bit_depth_ / 8) + ((n_eiger_modules_) * (MODULE_Y_SIZE * 2) * bit_depth_ / 8) + ((n_eiger_modules_) * (2 * n_bytes_per_image_line_))) + n_bytes_per_image_line_(n_bytes_per_frame_line_ * 2 + n_bytes_per_x_gap_), + n_lines_per_frame_(DATA_BYTES_PER_PACKET / n_bytes_per_frame_line_ * n_packets_per_frame_), + image_bytes_((n_modules_ * n_bytes_per_frame_) + (2 * (MODULE_Y_SIZE * 2) * bit_depth_ / 8) + ((n_eiger_modules_) * (2 * n_bytes_per_image_line_))) { } @@ -69,6 +68,7 @@ void EigerAssembler::assemble_image(const char* src_meta, image_meta->dtype = (bit_depth_ <= 8) ? 1 : bit_depth_ / 8; image_meta->encoding = 0; image_meta->source_id = 0; + // TODO: proper user ids image_meta->user_1 = 0; image_meta->user_2 = 0; is_pulse_init = 1; @@ -104,7 +104,7 @@ void EigerAssembler::assemble_image(const char* src_meta, reverse_factor = MODULE_Y_SIZE - 1; dest_offset += n_bytes_per_image_line_ * (MODULE_Y_SIZE + GAP_Y_MODULE_PIXELS); - source_offset = (MODULE_Y_SIZE-1) * n_bytes_per_module_line_; + source_offset = (MODULE_Y_SIZE-1) * n_bytes_per_frame_line_; } const auto i_module_row = frame_meta->pos_x; @@ -114,7 +114,7 @@ void EigerAssembler::assemble_image(const char* src_meta, uint32_t dest_module_line = line_number; if (i_module_column == 1) { - dest_offset += n_bytes_per_module_line_ + n_bytes_per_x_gap_; + dest_offset += n_bytes_per_frame_line_ + n_bytes_per_x_gap_; } int counter = 0; @@ -125,7 +125,7 @@ void EigerAssembler::assemble_image(const char* src_meta, memcpy ( (char*)(dst_data + dest_offset), (char*)(src_data + source_offset), - n_bytes_per_module_line_ + n_bytes_per_frame_line_ ); counter += 1; From 034fd906a4b6b4be9e6bc1d75ab4bdc94f2ede7b Mon Sep 17 00:00:00 2001 From: lhdamiani Date: Tue, 20 Jul 2021 17:35:59 +0200 Subject: [PATCH 2/3] cleanup eiger assembler --- core-buffer/include/eiger.hpp | 13 ---------- eiger/sf-daq-4/control/start_daq.sh | 39 +++++++++++++---------------- jf-assembler/src/EigerAssembler.cpp | 34 ++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/core-buffer/include/eiger.hpp b/core-buffer/include/eiger.hpp index 6283cdc..c890732 100644 --- a/core-buffer/include/eiger.hpp +++ b/core-buffer/include/eiger.hpp @@ -12,14 +12,6 @@ const std::string DETECTOR_TYPE = "eiger"; #define BYTES_PER_PACKET 4144 #define DATA_BYTES_PER_PACKET 4096 -// EIGER 1M -// Each packet line is made of 2 chip lines -> [CHIP1][CHIP2] -// gaps between chips -// For a 1M: -// 0 gap 1 -// gap gap -// 2 gap 3 - #define MODULE_X_SIZE 256 #define MODULE_Y_SIZE 512 #define MODULE_N_PIXELS 131072 @@ -29,11 +21,6 @@ const std::string DETECTOR_TYPE = "eiger"; #define GAP_X_EIGERMOD_PIXELS 8 #define GAP_Y_EIGERMOD_PIXELS 36 - -#define N_BYTES_PER_MODULE_LINE(bit_depth) ((MODULE_X_SIZE * bit_depth) / 8) -#define N_BYTES_PER_MODULE_FRAME(bit_depth) ((MODULE_N_PIXELS * bit_depth) / 8) - - // #define N_BYTES_PER_IMAGE_LINE(bit_depth, n_submodules) ((n_submodules / 2 * MODULE_X_SIZE * bit_depth) / 8) // DR 16 diff --git a/eiger/sf-daq-4/control/start_daq.sh b/eiger/sf-daq-4/control/start_daq.sh index 82c6b6f..8538d55 100755 --- a/eiger/sf-daq-4/control/start_daq.sh +++ b/eiger/sf-daq-4/control/start_daq.sh @@ -95,13 +95,8 @@ echo "Starting the ${UDP_SYNC}..." COUNTER=0 if [ -f "${BUILD_PATH}${UDP_SYNC}" ]; then if [ -f "${CONFIG_FILE}" ]; then - if [ ${BIT_DEPTH} -ne 0 ]; then - ${BUILD_PATH}${UDP_SYNC} ${CONFIG_FILE} ${BIT_DEPTH} & - sleep 0.5 - else - echo "Error: ${BIT_DEPTH} can't be zero..." - exit - fi + ${BUILD_PATH}${UDP_SYNC} ${CONFIG_FILE} & + sleep 0.5 else echo "Something went wrong while starting the ${UDP_SYNC}..." exit @@ -133,19 +128,19 @@ else fi # Start the eiger writer -echo "Starting the ${STD_DET_WRITER}..." -export PATH="/usr/lib64/mpich/bin:${PATH}"; -export LD_LIBRARY_PATH="/usr/lib64/mpich/lib:${LD_LIBRARY_PATH}"; +# echo "Starting the ${STD_DET_WRITER}..." +# export PATH="/usr/lib64/mpich/bin:${PATH}"; +# export LD_LIBRARY_PATH="/usr/lib64/mpich/lib:${LD_LIBRARY_PATH}"; -if [ -f "${BUILD_PATH}${STD_DET_WRITER}" ]; then - if [ -f "${CONFIG_FILE}" ]; then - mpiexec -n ${N_MPI_EXEC} ${BUILD_PATH}${STD_DET_WRITER} ${CONFIG_FILE} ${BIT_DEPTH} & - sleep 0.5 - else - echo "Something went wrong while starting the ${STD_DET_WRITER}..." - exit - fi -else - echo "Error: ${STD_DET_WRITER} wasn't found..." - exit -fi \ No newline at end of file +# if [ -f "${BUILD_PATH}${STD_DET_WRITER}" ]; then +# if [ -f "${CONFIG_FILE}" ]; then +# mpiexec -n ${N_MPI_EXEC} ${BUILD_PATH}${STD_DET_WRITER} ${CONFIG_FILE} ${BIT_DEPTH} & +# sleep 0.5 +# else +# echo "Something went wrong while starting the ${STD_DET_WRITER}..." +# exit +# fi +# else +# echo "Error: ${STD_DET_WRITER} wasn't found..." +# exit +# fi \ No newline at end of file diff --git a/jf-assembler/src/EigerAssembler.cpp b/jf-assembler/src/EigerAssembler.cpp index 934f667..98a046b 100644 --- a/jf-assembler/src/EigerAssembler.cpp +++ b/jf-assembler/src/EigerAssembler.cpp @@ -17,7 +17,7 @@ EigerAssembler::EigerAssembler(const int n_modules, const int bit_depth): n_eiger_modules_(n_modules/4), bit_depth_(bit_depth), n_bytes_per_frame_(MODULE_N_PIXELS * bit_depth / 8), - n_bytes_per_frame_line_(N_BYTES_PER_MODULE_LINE(bit_depth)), + n_bytes_per_frame_line_(MODULE_X_SIZE * bit_depth) / 8), n_packets_per_frame_(n_bytes_per_frame_ / DATA_BYTES_PER_PACKET), n_bytes_per_x_gap_(GAP_X_MODULE_PIXELS * bit_depth / 8), n_bytes_per_y_gap_(GAP_Y_MODULE_PIXELS * bit_depth / 8), @@ -127,13 +127,41 @@ void EigerAssembler::assemble_image(const char* src_meta, (char*)(src_data + source_offset), n_bytes_per_frame_line_ ); - + #ifdef DEBUG_OUTPUT + using namespace date; + // verifies the addresses for + // beginning and end of each frame + if (counter < 5 || counter > 508){ + cout << " [" << std::chrono::system_clock::now(); + cout << "] [MODULE " << i_module; + cout << "] (row " << i_module_row; + cout << ",column " << i_module_column; + cout << ") source_offset" << source_offset; + cout << " || dest_offset " << dest_offset; + cout << " || frame_line " << frame_line; + cout << " || COUNTER " << counter; + cout << endl; + } + #endif counter += 1; - source_offset += reverse * n_bytes_per_module_line_; + source_offset += reverse * n_bytes_per_frame_line_; dest_offset += reverse * n_bytes_per_image_line_; } line_number += n_lines_per_frame_; dest_module_line = line_number + n_lines_per_frame_ - 1; + #ifdef DEBUG_OUTPUT + using namespace date; + // if (i_module == 0){ + cout << " [" << std::chrono::system_clock::now(); + cout << "] [MODULE " << i_module; + cout << "] (row " << i_module_row; + cout << " , column" << i_module_column; + cout << ") || reverse_factor" << reverse_factor; + cout << " || line_number" << line_number; + cout << " || N_RECV_PACKETS" << frame_meta->n_recv_packets; + cout << endl; + // } + #endif // last module sets the last_image_status_ if (i_module == n_modules_ - 1){ From 501e7d547956065eef94f1d7cd73fa29f55d1b97 Mon Sep 17 00:00:00 2001 From: lhdamiani Date: Wed, 21 Jul 2021 10:38:34 +0200 Subject: [PATCH 3/3] missing bracket fix --- jf-assembler/src/EigerAssembler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jf-assembler/src/EigerAssembler.cpp b/jf-assembler/src/EigerAssembler.cpp index 98a046b..c60ddae 100644 --- a/jf-assembler/src/EigerAssembler.cpp +++ b/jf-assembler/src/EigerAssembler.cpp @@ -17,7 +17,7 @@ EigerAssembler::EigerAssembler(const int n_modules, const int bit_depth): n_eiger_modules_(n_modules/4), bit_depth_(bit_depth), n_bytes_per_frame_(MODULE_N_PIXELS * bit_depth / 8), - n_bytes_per_frame_line_(MODULE_X_SIZE * bit_depth) / 8), + n_bytes_per_frame_line_(MODULE_X_SIZE * bit_depth / 8), n_packets_per_frame_(n_bytes_per_frame_ / DATA_BYTES_PER_PACKET), n_bytes_per_x_gap_(GAP_X_MODULE_PIXELS * bit_depth / 8), n_bytes_per_y_gap_(GAP_Y_MODULE_PIXELS * bit_depth / 8),