mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-05-03 20:04:14 +02:00
assembler name frame instead of module
This commit is contained in:
@@ -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)
|
||||
@@ -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_"
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user