JFJochReceiver: Transfer all radial integration profiles in one ProtoBuf
This commit is contained in:
@@ -1274,6 +1274,117 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_lysozyme_spot_and_index", "[JFJochReceiver]
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("JFJochIntegrationTest_ZMQ_lysozyme_rad_int", "[JFJochReceiver]") {
|
||||
Logger logger("JFJochIntegrationTest_ZMQ_lysozyme_rad_int");
|
||||
|
||||
RegisterHDF5Filter();
|
||||
|
||||
size_t nimages = 24;
|
||||
int64_t ndatastream = 1;
|
||||
int64_t nmodules = 8;
|
||||
|
||||
JFJochServices services(logger);
|
||||
JFJochStateMachine state_machine(services, logger);
|
||||
state_machine.AddDetectorSetup(DetectorGeometry(ndatastream * nmodules, 2, 8, 36));
|
||||
|
||||
state_machine.NotThreadSafe_Experiment().DataStreams(ndatastream);
|
||||
state_machine.NotThreadSafe_Experiment().PedestalG0Frames(0).PedestalG1Frames(0).PedestalG2Frames(0)
|
||||
.SpotFindingPeriod(10ms);
|
||||
state_machine.NotThreadSafe_Experiment().LowQForRadialInt_recipA(0.5).HighQForRadialInt_recipA(3.5)
|
||||
.QSpacingForRadialInt_recipA(1.0);
|
||||
services.Writer("unix:writer_test", "inproc://#1").Receiver("unix:fpga_receiver_test");
|
||||
|
||||
logger.Verbose(true);
|
||||
|
||||
std::vector<uint16_t> image(RAW_MODULE_SIZE);
|
||||
|
||||
HDF5File data("../../tests/test_data/compression_benchmark.h5", false, false, false);
|
||||
HDF5DataSet dataset(data, "/entry/data/data");
|
||||
HDF5DataSpace file_space(dataset);
|
||||
|
||||
std::vector<int16_t> image_conv(nimages * file_space.GetDimensions()[1] * file_space.GetDimensions()[2]);
|
||||
|
||||
std::vector<hsize_t> start = {0, 0, 0};
|
||||
std::vector<hsize_t> file_size = {nimages, file_space.GetDimensions()[1], file_space.GetDimensions()[2]};
|
||||
dataset.ReadVector(image_conv, start, file_size);
|
||||
|
||||
std::vector<int16_t> image_raw_geom(
|
||||
nimages * state_machine.NotThreadSafe_Experiment().GetModulesNum() * RAW_MODULE_SIZE * sizeof(int16_t));
|
||||
for (int i = 0; i < nimages; i++)
|
||||
ConvertedToRawGeometry(state_machine.NotThreadSafe_Experiment(),
|
||||
image_raw_geom.data() +
|
||||
i * RAW_MODULE_SIZE * state_machine.NotThreadSafe_Experiment().GetModulesNum(),
|
||||
image_conv.data() + i * file_space.GetDimensions()[1] * file_space.GetDimensions()[2]);
|
||||
|
||||
|
||||
std::vector<std::unique_ptr<AcquisitionDevice>> aq_devices;
|
||||
|
||||
auto *test = new MockAcquisitionDevice(0, 512);
|
||||
|
||||
for (int m = 0; m < state_machine.NotThreadSafe_Experiment().GetModulesNum(0); m++) {
|
||||
for (int image_num = 1; image_num <= nimages; image_num++)
|
||||
test->AddModule(image_num, m, (uint16_t *) (image_raw_geom.data()
|
||||
+ (m + (image_num - 1) *
|
||||
state_machine.NotThreadSafe_Experiment().GetModulesNum(
|
||||
0))
|
||||
* RAW_MODULE_SIZE));
|
||||
}
|
||||
test->Terminate();
|
||||
|
||||
aq_devices.emplace_back(test);
|
||||
|
||||
ZMQContext zmq_context;
|
||||
|
||||
std::vector<AcquisitionDevice *> tmp_devices;
|
||||
for (const auto &i: aq_devices)
|
||||
tmp_devices.emplace_back(i.get());
|
||||
|
||||
ZMQImagePusher pusher(zmq_context, {"inproc://#1"});
|
||||
JFJochReceiverService fpga_receiver(tmp_devices, logger, pusher);
|
||||
JFJochWriterService writer(zmq_context, logger);;
|
||||
|
||||
auto fpga_receiver_server = gRPCServer("unix:fpga_receiver_test", fpga_receiver);
|
||||
auto writer_server = gRPCServer("unix:writer_test", writer);
|
||||
|
||||
REQUIRE_NOTHROW(state_machine.Initialize());
|
||||
logger.Info("Initialized");
|
||||
|
||||
JFJochProtoBuf::DatasetSettings setup;
|
||||
setup.set_ntrigger(1);
|
||||
setup.set_detector_distance_mm(75);
|
||||
setup.set_summation(1);
|
||||
setup.set_file_prefix("spot_finding_test");
|
||||
setup.set_images_per_trigger(nimages);
|
||||
setup.set_photon_energy_kev(12.4);
|
||||
setup.set_beam_x_pxl(1090);
|
||||
setup.set_beam_y_pxl(1136);
|
||||
setup.mutable_unit_cell()->set_a(36.9);
|
||||
setup.mutable_unit_cell()->set_b(78.95);
|
||||
setup.mutable_unit_cell()->set_c(78.95);
|
||||
setup.mutable_unit_cell()->set_alpha(90.0);
|
||||
setup.mutable_unit_cell()->set_beta(90.0);
|
||||
setup.mutable_unit_cell()->set_gamma(90.0);
|
||||
setup.set_data_file_count(4);
|
||||
|
||||
REQUIRE_NOTHROW(state_machine.Start(setup));
|
||||
logger.Info("Started measurement");
|
||||
|
||||
REQUIRE_NOTHROW(state_machine.Stop());
|
||||
logger.Info("Stopped measurement");
|
||||
|
||||
auto rad_int = state_machine.GetRadialIntegrationProfiles();
|
||||
REQUIRE(rad_int.file_plots_size() == 4);
|
||||
REQUIRE(rad_int.file_plots(0).x_size() == 3);
|
||||
REQUIRE(rad_int.file_plots(0).y_size() == 3);
|
||||
REQUIRE(rad_int.file_plots(3).x_size() == 3);
|
||||
REQUIRE(rad_int.file_plots(3).y_size() == 3);
|
||||
REQUIRE(rad_int.file_plots(3).x(0) == Approx(1.0));
|
||||
REQUIRE(rad_int.total().x_size() == 3);
|
||||
|
||||
fpga_receiver_server->Shutdown();
|
||||
writer_server->Shutdown();
|
||||
}
|
||||
|
||||
TEST_CASE("JFJochIntegrationTest_ZMQ_lysozyme_spot_and_index_sum", "[JFJochReceiver]") {
|
||||
Logger logger("JFJochIntegrationTest_ZMQ_lysozyme_spot_and_index_sum");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user