mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-05-05 20:30:03 +02:00
trying to fix acquire for xilinx
This commit is contained in:
parent
62a5fda33f
commit
22f2662e3b
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
#include "sls/Result.h"
|
#include "sls/Result.h"
|
||||||
#include "sls/ToString.h"
|
#include "sls/ToString.h"
|
||||||
#include "sls/logger.h"
|
|
||||||
#include "sls/versionAPI.h"
|
#include "sls/versionAPI.h"
|
||||||
#include "test-Caller-global.h"
|
#include "test-Caller-global.h"
|
||||||
#include "tests/globals.h"
|
#include "tests/globals.h"
|
||||||
@ -18,27 +17,6 @@ namespace sls {
|
|||||||
using test::GET;
|
using test::GET;
|
||||||
using test::PUT;
|
using test::PUT;
|
||||||
|
|
||||||
struct testCtbAcquireInfo {
|
|
||||||
defs::readoutMode readout_mode{defs::ANALOG_AND_DIGITAL};
|
|
||||||
bool ten_giga{false};
|
|
||||||
int num_adc_samples{5000};
|
|
||||||
int num_dbit_samples{6000};
|
|
||||||
int num_trans_samples{288};
|
|
||||||
uint32_t adc_enable_1g{0xFFFFFF00};
|
|
||||||
uint32_t adc_enable_10g{0xFF00FFFF};
|
|
||||||
int dbit_offset{0};
|
|
||||||
std::vector<int> dbit_list{0, 12, 2, 43};
|
|
||||||
bool dbit_reorder{false};
|
|
||||||
uint32_t transceiver_mask{0x3};
|
|
||||||
};
|
|
||||||
testCtbAcquireInfo get_ctb_config_state(const Detector &det);
|
|
||||||
void set_ctb_config_state(Detector &det,
|
|
||||||
const testCtbAcquireInfo &ctb_config_info);
|
|
||||||
uint64_t calculate_ctb_image_size(const testCtbAcquireInfo &test_info);
|
|
||||||
void test_ctb_acquire_with_receiver(const testCtbAcquireInfo &test_info,
|
|
||||||
int64_t num_frames_to_acquire,
|
|
||||||
Detector &det, Caller &caller);
|
|
||||||
|
|
||||||
TEST_CASE("ctb_acquire_check_file_size", "[.cmdcall]") {
|
TEST_CASE("ctb_acquire_check_file_size", "[.cmdcall]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
Caller caller(&det);
|
Caller caller(&det);
|
||||||
@ -152,142 +130,6 @@ TEST_CASE("ctb_acquire_check_file_size", "[.cmdcall]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testCtbAcquireInfo get_ctb_config_state(const Detector &det) {
|
|
||||||
return testCtbAcquireInfo{
|
|
||||||
det.getReadoutMode().tsquash("inconsistent readout mode to test"),
|
|
||||||
det.getTenGiga().tsquash("inconsistent ten giga enable to test"),
|
|
||||||
det.getNumberOfAnalogSamples().tsquash(
|
|
||||||
"inconsistent number of analog samples to test"),
|
|
||||||
det.getNumberOfDigitalSamples().tsquash(
|
|
||||||
"inconsistent number of digital samples to test"),
|
|
||||||
det.getNumberOfTransceiverSamples().tsquash(
|
|
||||||
"inconsistent number of transceiver samples to test"),
|
|
||||||
det.getADCEnableMask().tsquash("inconsistent adc enable mask to test"),
|
|
||||||
det.getTenGigaADCEnableMask().tsquash(
|
|
||||||
"inconsistent ten giga adc enable mask to test"),
|
|
||||||
det.getRxDbitOffset().tsquash("inconsistent rx dbit offset to test"),
|
|
||||||
det.getRxDbitList().tsquash("inconsistent rx dbit list to test"),
|
|
||||||
det.getRxDbitReorder().tsquash("inconsistent rx dbit reorder to test"),
|
|
||||||
det.getTransceiverEnableMask().tsquash(
|
|
||||||
"inconsistent transceiver mask to test")};
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_ctb_config_state(Detector &det,
|
|
||||||
const testCtbAcquireInfo &ctb_config_info) {
|
|
||||||
det.setReadoutMode(ctb_config_info.readout_mode);
|
|
||||||
det.setTenGiga(ctb_config_info.ten_giga);
|
|
||||||
det.setNumberOfAnalogSamples(ctb_config_info.num_adc_samples);
|
|
||||||
det.setNumberOfDigitalSamples(ctb_config_info.num_dbit_samples);
|
|
||||||
det.setNumberOfTransceiverSamples(ctb_config_info.num_trans_samples);
|
|
||||||
det.setADCEnableMask(ctb_config_info.adc_enable_1g);
|
|
||||||
det.setTenGigaADCEnableMask(ctb_config_info.adc_enable_10g);
|
|
||||||
det.setRxDbitOffset(ctb_config_info.dbit_offset);
|
|
||||||
det.setRxDbitList(ctb_config_info.dbit_list);
|
|
||||||
det.setRxDbitReorder(ctb_config_info.dbit_reorder);
|
|
||||||
det.setTransceiverEnableMask(ctb_config_info.transceiver_mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t calculate_ctb_image_size(const testCtbAcquireInfo &test_info) {
|
|
||||||
uint64_t num_analog_bytes = 0, num_digital_bytes = 0,
|
|
||||||
num_transceiver_bytes = 0;
|
|
||||||
if (test_info.readout_mode == defs::ANALOG_ONLY ||
|
|
||||||
test_info.readout_mode == defs::ANALOG_AND_DIGITAL) {
|
|
||||||
uint32_t adc_enable_mask =
|
|
||||||
(test_info.ten_giga ? test_info.adc_enable_10g
|
|
||||||
: test_info.adc_enable_1g);
|
|
||||||
int num_analog_chans = __builtin_popcount(adc_enable_mask);
|
|
||||||
const int num_bytes_per_sample = 2;
|
|
||||||
num_analog_bytes =
|
|
||||||
num_analog_chans * num_bytes_per_sample * test_info.num_adc_samples;
|
|
||||||
LOG(logDEBUG1) << "[Analog Databytes: " << num_analog_bytes << ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
// digital channels
|
|
||||||
if (test_info.readout_mode == defs::DIGITAL_ONLY ||
|
|
||||||
test_info.readout_mode == defs::ANALOG_AND_DIGITAL ||
|
|
||||||
test_info.readout_mode == defs::DIGITAL_AND_TRANSCEIVER) {
|
|
||||||
int num_digital_samples = test_info.num_dbit_samples;
|
|
||||||
if (test_info.dbit_offset > 0) {
|
|
||||||
uint64_t num_digital_bytes_reserved =
|
|
||||||
num_digital_samples * sizeof(uint64_t);
|
|
||||||
num_digital_bytes_reserved -= test_info.dbit_offset;
|
|
||||||
num_digital_samples = num_digital_bytes_reserved / sizeof(uint64_t);
|
|
||||||
}
|
|
||||||
int num_digital_chans = test_info.dbit_list.size();
|
|
||||||
if (num_digital_chans == 0) {
|
|
||||||
num_digital_chans = 64;
|
|
||||||
}
|
|
||||||
if (!test_info.dbit_reorder) {
|
|
||||||
uint32_t num_bits_per_sample = num_digital_chans;
|
|
||||||
if (num_bits_per_sample % 8 != 0) {
|
|
||||||
num_bits_per_sample += (8 - (num_bits_per_sample % 8));
|
|
||||||
}
|
|
||||||
num_digital_bytes = (num_bits_per_sample / 8) * num_digital_samples;
|
|
||||||
} else {
|
|
||||||
uint32_t num_bits_per_bit = num_digital_samples;
|
|
||||||
if (num_bits_per_bit % 8 != 0) {
|
|
||||||
num_bits_per_bit += (8 - (num_bits_per_bit % 8));
|
|
||||||
}
|
|
||||||
num_digital_bytes = num_digital_chans * (num_bits_per_bit / 8);
|
|
||||||
}
|
|
||||||
LOG(logDEBUG1) << "[Digital Databytes: " << num_digital_bytes << ']';
|
|
||||||
}
|
|
||||||
// transceiver channels
|
|
||||||
if (test_info.readout_mode == defs::TRANSCEIVER_ONLY ||
|
|
||||||
test_info.readout_mode == defs::DIGITAL_AND_TRANSCEIVER) {
|
|
||||||
int num_transceiver_chans =
|
|
||||||
__builtin_popcount(test_info.transceiver_mask);
|
|
||||||
const int num_bytes_per_channel = 8;
|
|
||||||
num_transceiver_bytes = num_transceiver_chans * num_bytes_per_channel *
|
|
||||||
test_info.num_trans_samples;
|
|
||||||
LOG(logDEBUG1) << "[Transceiver Databytes: " << num_transceiver_bytes
|
|
||||||
<< ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t image_size =
|
|
||||||
num_analog_bytes + num_digital_bytes + num_transceiver_bytes;
|
|
||||||
LOG(logDEBUG1) << "Expected image size: " << image_size;
|
|
||||||
return image_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_ctb_acquire_with_receiver(const testCtbAcquireInfo &test_info,
|
|
||||||
int64_t num_frames_to_acquire,
|
|
||||||
Detector &det, Caller &caller) {
|
|
||||||
|
|
||||||
// save previous state
|
|
||||||
testFileInfo prev_file_info = get_file_state(det);
|
|
||||||
testCommonDetAcquireInfo prev_det_config_info =
|
|
||||||
// overwrite exptime if not using virtual ctb server
|
|
||||||
get_common_acquire_config_state(det);
|
|
||||||
testCtbAcquireInfo prev_ctb_config_info = get_ctb_config_state(det);
|
|
||||||
|
|
||||||
// defaults
|
|
||||||
testFileInfo test_file_info;
|
|
||||||
set_file_state(det, test_file_info);
|
|
||||||
testCommonDetAcquireInfo det_config;
|
|
||||||
det_config.num_frames_to_acquire = num_frames_to_acquire;
|
|
||||||
set_common_acquire_config_state(det, det_config);
|
|
||||||
|
|
||||||
// set ctb config
|
|
||||||
set_ctb_config_state(det, test_info);
|
|
||||||
|
|
||||||
// acquire
|
|
||||||
test_acquire_with_receiver(caller, std::chrono::seconds{2});
|
|
||||||
|
|
||||||
// check frames caught
|
|
||||||
test_frames_caught(det, num_frames_to_acquire);
|
|
||||||
|
|
||||||
// check file size (assuming local pc)
|
|
||||||
uint64_t expected_image_size = calculate_ctb_image_size(test_info);
|
|
||||||
test_acquire_binary_file_size(test_file_info, num_frames_to_acquire,
|
|
||||||
expected_image_size);
|
|
||||||
|
|
||||||
// restore previous state
|
|
||||||
set_file_state(det, prev_file_info);
|
|
||||||
set_common_acquire_config_state(det, prev_det_config_info);
|
|
||||||
set_ctb_config_state(det, prev_ctb_config_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* dacs */
|
/* dacs */
|
||||||
|
|
||||||
TEST_CASE("dacname", "[.cmdcall]") {
|
TEST_CASE("dacname", "[.cmdcall]") {
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "Caller.h"
|
#include "Caller.h"
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
#include "sls/Detector.h"
|
#include "sls/Detector.h"
|
||||||
|
#include "sls/logger.h"
|
||||||
#include "tests/globals.h"
|
#include "tests/globals.h"
|
||||||
|
|
||||||
namespace sls {
|
namespace sls {
|
||||||
@ -152,4 +153,153 @@ void set_common_acquire_config_state(
|
|||||||
det.setPeriod(det_config_info.period);
|
det.setPeriod(det_config_info.period);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testCtbAcquireInfo get_ctb_config_state(const Detector &det) {
|
||||||
|
testCtbAcquireInfo ctb_config_info{
|
||||||
|
det.getReadoutMode().tsquash("inconsistent readout mode to test"),
|
||||||
|
true,
|
||||||
|
det.getNumberOfAnalogSamples().tsquash(
|
||||||
|
"inconsistent number of analog samples to test"),
|
||||||
|
det.getNumberOfDigitalSamples().tsquash(
|
||||||
|
"inconsistent number of digital samples to test"),
|
||||||
|
det.getNumberOfTransceiverSamples().tsquash(
|
||||||
|
"inconsistent number of transceiver samples to test"),
|
||||||
|
0,
|
||||||
|
det.getTenGigaADCEnableMask().tsquash(
|
||||||
|
"inconsistent ten giga adc enable mask to test"),
|
||||||
|
det.getRxDbitOffset().tsquash("inconsistent rx dbit offset to test"),
|
||||||
|
det.getRxDbitList().tsquash("inconsistent rx dbit list to test"),
|
||||||
|
det.getRxDbitReorder().tsquash("inconsistent rx dbit reorder to test"),
|
||||||
|
det.getTransceiverEnableMask().tsquash(
|
||||||
|
"inconsistent transceiver mask to test")};
|
||||||
|
|
||||||
|
if (det.getDetectorType().tsquash("inconsistent detector type to test") ==
|
||||||
|
slsDetectorDefs::CHIPTESTBOARD) {
|
||||||
|
ctb_config_info.ten_giga =
|
||||||
|
det.getTenGiga().tsquash("inconsistent ten giga enable to test");
|
||||||
|
ctb_config_info.adc_enable_1g = det.getADCEnableMask().tsquash(
|
||||||
|
"inconsistent adc enable mask to test");
|
||||||
|
}
|
||||||
|
return ctb_config_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_ctb_config_state(Detector &det,
|
||||||
|
const testCtbAcquireInfo &ctb_config_info) {
|
||||||
|
det.setReadoutMode(ctb_config_info.readout_mode);
|
||||||
|
if (det.getDetectorType().tsquash("inconsistent detector type to test") ==
|
||||||
|
slsDetectorDefs::CHIPTESTBOARD) {
|
||||||
|
det.setTenGiga(ctb_config_info.ten_giga);
|
||||||
|
det.setADCEnableMask(ctb_config_info.adc_enable_1g);
|
||||||
|
}
|
||||||
|
det.setNumberOfAnalogSamples(ctb_config_info.num_adc_samples);
|
||||||
|
det.setNumberOfDigitalSamples(ctb_config_info.num_dbit_samples);
|
||||||
|
det.setNumberOfTransceiverSamples(ctb_config_info.num_trans_samples);
|
||||||
|
det.setTenGigaADCEnableMask(ctb_config_info.adc_enable_10g);
|
||||||
|
det.setRxDbitOffset(ctb_config_info.dbit_offset);
|
||||||
|
det.setRxDbitList(ctb_config_info.dbit_list);
|
||||||
|
det.setRxDbitReorder(ctb_config_info.dbit_reorder);
|
||||||
|
det.setTransceiverEnableMask(ctb_config_info.transceiver_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t calculate_ctb_image_size(const testCtbAcquireInfo &test_info) {
|
||||||
|
uint64_t num_analog_bytes = 0, num_digital_bytes = 0,
|
||||||
|
num_transceiver_bytes = 0;
|
||||||
|
if (test_info.readout_mode == defs::ANALOG_ONLY ||
|
||||||
|
test_info.readout_mode == defs::ANALOG_AND_DIGITAL) {
|
||||||
|
uint32_t adc_enable_mask =
|
||||||
|
(test_info.ten_giga ? test_info.adc_enable_10g
|
||||||
|
: test_info.adc_enable_1g);
|
||||||
|
int num_analog_chans = __builtin_popcount(adc_enable_mask);
|
||||||
|
const int num_bytes_per_sample = 2;
|
||||||
|
num_analog_bytes =
|
||||||
|
num_analog_chans * num_bytes_per_sample * test_info.num_adc_samples;
|
||||||
|
LOG(logDEBUG1) << "[Analog Databytes: " << num_analog_bytes << ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
// digital channels
|
||||||
|
if (test_info.readout_mode == defs::DIGITAL_ONLY ||
|
||||||
|
test_info.readout_mode == defs::ANALOG_AND_DIGITAL ||
|
||||||
|
test_info.readout_mode == defs::DIGITAL_AND_TRANSCEIVER) {
|
||||||
|
int num_digital_samples = test_info.num_dbit_samples;
|
||||||
|
if (test_info.dbit_offset > 0) {
|
||||||
|
uint64_t num_digital_bytes_reserved =
|
||||||
|
num_digital_samples * sizeof(uint64_t);
|
||||||
|
num_digital_bytes_reserved -= test_info.dbit_offset;
|
||||||
|
num_digital_samples = num_digital_bytes_reserved / sizeof(uint64_t);
|
||||||
|
}
|
||||||
|
int num_digital_chans = test_info.dbit_list.size();
|
||||||
|
if (num_digital_chans == 0) {
|
||||||
|
num_digital_chans = 64;
|
||||||
|
}
|
||||||
|
if (!test_info.dbit_reorder) {
|
||||||
|
uint32_t num_bits_per_sample = num_digital_chans;
|
||||||
|
if (num_bits_per_sample % 8 != 0) {
|
||||||
|
num_bits_per_sample += (8 - (num_bits_per_sample % 8));
|
||||||
|
}
|
||||||
|
num_digital_bytes = (num_bits_per_sample / 8) * num_digital_samples;
|
||||||
|
} else {
|
||||||
|
uint32_t num_bits_per_bit = num_digital_samples;
|
||||||
|
if (num_bits_per_bit % 8 != 0) {
|
||||||
|
num_bits_per_bit += (8 - (num_bits_per_bit % 8));
|
||||||
|
}
|
||||||
|
num_digital_bytes = num_digital_chans * (num_bits_per_bit / 8);
|
||||||
|
}
|
||||||
|
LOG(logDEBUG1) << "[Digital Databytes: " << num_digital_bytes << ']';
|
||||||
|
}
|
||||||
|
// transceiver channels
|
||||||
|
if (test_info.readout_mode == defs::TRANSCEIVER_ONLY ||
|
||||||
|
test_info.readout_mode == defs::DIGITAL_AND_TRANSCEIVER) {
|
||||||
|
int num_transceiver_chans =
|
||||||
|
__builtin_popcount(test_info.transceiver_mask);
|
||||||
|
const int num_bytes_per_channel = 8;
|
||||||
|
num_transceiver_bytes = num_transceiver_chans * num_bytes_per_channel *
|
||||||
|
test_info.num_trans_samples;
|
||||||
|
LOG(logDEBUG1) << "[Transceiver Databytes: " << num_transceiver_bytes
|
||||||
|
<< ']';
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t image_size =
|
||||||
|
num_analog_bytes + num_digital_bytes + num_transceiver_bytes;
|
||||||
|
LOG(logDEBUG1) << "Expected image size: " << image_size;
|
||||||
|
return image_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ctb_acquire_with_receiver(const testCtbAcquireInfo &test_info,
|
||||||
|
int64_t num_frames_to_acquire,
|
||||||
|
Detector &det, Caller &caller) {
|
||||||
|
|
||||||
|
// save previous state
|
||||||
|
testFileInfo prev_file_info = get_file_state(det);
|
||||||
|
testCommonDetAcquireInfo prev_det_config_info =
|
||||||
|
// overwrite exptime if not using virtual ctb server
|
||||||
|
get_common_acquire_config_state(det);
|
||||||
|
testCtbAcquireInfo prev_ctb_config_info = get_ctb_config_state(det);
|
||||||
|
|
||||||
|
// defaults
|
||||||
|
testFileInfo test_file_info;
|
||||||
|
set_file_state(det, test_file_info);
|
||||||
|
testCommonDetAcquireInfo det_config;
|
||||||
|
det_config.num_frames_to_acquire = num_frames_to_acquire;
|
||||||
|
set_common_acquire_config_state(det, det_config);
|
||||||
|
|
||||||
|
// set ctb config
|
||||||
|
set_ctb_config_state(det, test_info);
|
||||||
|
|
||||||
|
// acquire
|
||||||
|
REQUIRE_NOTHROW(
|
||||||
|
test_acquire_with_receiver(caller, std::chrono::seconds{2}));
|
||||||
|
|
||||||
|
// check frames caught
|
||||||
|
REQUIRE_NOTHROW(test_frames_caught(det, num_frames_to_acquire));
|
||||||
|
|
||||||
|
// check file size (assuming local pc)
|
||||||
|
uint64_t expected_image_size = calculate_ctb_image_size(test_info);
|
||||||
|
REQUIRE_NOTHROW(test_acquire_binary_file_size(
|
||||||
|
test_file_info, num_frames_to_acquire, expected_image_size));
|
||||||
|
|
||||||
|
// restore previous state
|
||||||
|
set_file_state(det, prev_file_info);
|
||||||
|
set_common_acquire_config_state(det, prev_det_config_info);
|
||||||
|
set_ctb_config_state(det, prev_ctb_config_info);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace sls
|
} // namespace sls
|
||||||
|
@ -27,6 +27,20 @@ struct testCommonDetAcquireInfo {
|
|||||||
std::chrono::nanoseconds period{std::chrono::milliseconds{2}};
|
std::chrono::nanoseconds period{std::chrono::milliseconds{2}};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct testCtbAcquireInfo {
|
||||||
|
defs::readoutMode readout_mode{defs::ANALOG_AND_DIGITAL};
|
||||||
|
bool ten_giga{false};
|
||||||
|
int num_adc_samples{5000};
|
||||||
|
int num_dbit_samples{6000};
|
||||||
|
int num_trans_samples{288};
|
||||||
|
uint32_t adc_enable_1g{0xFFFFFF00};
|
||||||
|
uint32_t adc_enable_10g{0xFF00FFFF};
|
||||||
|
int dbit_offset{0};
|
||||||
|
std::vector<int> dbit_list{0, 12, 2, 43};
|
||||||
|
bool dbit_reorder{false};
|
||||||
|
uint32_t transceiver_mask{0x3};
|
||||||
|
};
|
||||||
|
|
||||||
void test_valid_port_caller(const std::string &command,
|
void test_valid_port_caller(const std::string &command,
|
||||||
const std::vector<std::string> &arguments,
|
const std::vector<std::string> &arguments,
|
||||||
int detector_id, int action);
|
int detector_id, int action);
|
||||||
@ -50,4 +64,12 @@ testCommonDetAcquireInfo get_common_acquire_config_state(const Detector &det);
|
|||||||
void set_common_acquire_config_state(
|
void set_common_acquire_config_state(
|
||||||
Detector &det, const testCommonDetAcquireInfo &det_config_info);
|
Detector &det, const testCommonDetAcquireInfo &det_config_info);
|
||||||
|
|
||||||
|
testCtbAcquireInfo get_ctb_config_state(const Detector &det);
|
||||||
|
void set_ctb_config_state(Detector &det,
|
||||||
|
const testCtbAcquireInfo &ctb_config_info);
|
||||||
|
uint64_t calculate_ctb_image_size(const testCtbAcquireInfo &test_info);
|
||||||
|
void test_ctb_acquire_with_receiver(const testCtbAcquireInfo &test_info,
|
||||||
|
int64_t num_frames_to_acquire,
|
||||||
|
Detector &det, Caller &caller);
|
||||||
|
|
||||||
} // namespace sls
|
} // namespace sls
|
||||||
|
Loading…
x
Reference in New Issue
Block a user