JFJochReceiverLite: Dark mask analysis integrated and tested
This commit is contained in:
@@ -195,6 +195,9 @@ void JFJochReceiverLite::MaskThread(uint32_t id) {
|
||||
} else if (msg->cbor->data_message) {
|
||||
++images_collected;
|
||||
DataMessage data_msg = msg->cbor->data_message.value();
|
||||
|
||||
dark_mask_analysis.AnalyzeImage(data_msg, buffer);
|
||||
|
||||
compressed_size += data_msg.image.GetCompressedSize();
|
||||
uncompressed_size += data_msg.image.GetUncompressedSize();
|
||||
UpdateMaxImageReceived(data_msg.number);
|
||||
@@ -352,9 +355,9 @@ void JFJochReceiverLite::StopReceiver() {
|
||||
}
|
||||
|
||||
float JFJochReceiverLite::GetEfficiency() const {
|
||||
if (experiment.GetImageNum() == 0)
|
||||
if (experiment.GetFrameNum() == 0)
|
||||
return 0;
|
||||
return static_cast<float>(images_collected) / static_cast<float>(experiment.GetImageNum());
|
||||
return static_cast<float>(images_collected) / static_cast<float>(experiment.GetFrameNum());
|
||||
}
|
||||
|
||||
float JFJochReceiverLite::GetProgress() const {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#include "../image_puller/TestImagePuller.h"
|
||||
|
||||
TEST_CASE("JFJochReceiverLite", "[JFJochReceiver]") {
|
||||
Logger logger("JFJochIntegrationTest_ZMQ_lysozyme_spot_and_index");
|
||||
Logger logger("FJochReceiverLite");
|
||||
|
||||
RegisterHDF5Filter();
|
||||
|
||||
@@ -135,4 +135,87 @@ TEST_CASE("JFJochReceiverLite_Cancel", "[JFJochReceiver]") {
|
||||
|
||||
CHECK(receiver_out.efficiency == 0.0);
|
||||
CHECK(receiver_out.status.cancelled);
|
||||
}
|
||||
|
||||
TEST_CASE("JFJochReceiverLite_DarkMask", "[JFJochReceiver]") {
|
||||
Logger logger("JFJochReceiverLite_DarkMask");
|
||||
|
||||
RegisterHDF5Filter();
|
||||
|
||||
const uint16_t nthreads = 4;
|
||||
|
||||
DiffractionExperiment experiment(DetDECTRIS(2068, 2164, "Test", {}));
|
||||
|
||||
auto det_settings = experiment.GetDetectorSettings();
|
||||
det_settings.Import(DarkMaskSettings{}.NumberOfFrames(10).MaxCounts(1).MaxFramesWithCounts(5)).FrameTime(std::chrono::milliseconds(5));
|
||||
experiment.Mode(DetectorMode::DarkMask).ImportDetectorSettings(det_settings);
|
||||
|
||||
PixelMask pixel_mask(experiment);
|
||||
|
||||
HDF5FilePusher pusher;
|
||||
|
||||
auto puller = std::make_shared<TestImagePuller>();
|
||||
|
||||
StartMessage start_msg;
|
||||
experiment.FillMessage(start_msg);
|
||||
|
||||
puller->Put(ImagePullerOutput{
|
||||
.cbor = std::make_shared<CBORStream2DeserializerOutput>(start_msg)
|
||||
});
|
||||
|
||||
|
||||
std::vector<uint16_t> image(experiment.GetPixelsNum(), 0);
|
||||
image[1] = 1;
|
||||
image[2] = 2;
|
||||
image[3] = 3;
|
||||
|
||||
std::vector<uint16_t> image_last(experiment.GetPixelsNum(), 0);
|
||||
image_last[1] = 0;
|
||||
image_last[2] = 0;
|
||||
image_last[3] = 0;
|
||||
image_last[68] = 10000;
|
||||
|
||||
for (int i = 0; i < experiment.GetFrameNum(); i++) {
|
||||
DataMessage data_msg;
|
||||
if (i == experiment.GetFrameNum() - 1)
|
||||
data_msg.image = CompressedImage(image_last, experiment.GetXPixelsNum(), experiment.GetYPixelsNum());
|
||||
else
|
||||
data_msg.image = CompressedImage(image, experiment.GetXPixelsNum(), experiment.GetYPixelsNum());
|
||||
data_msg.number = i;
|
||||
puller->Put(ImagePullerOutput{
|
||||
.cbor = std::make_shared<CBORStream2DeserializerOutput>(data_msg)
|
||||
});
|
||||
}
|
||||
|
||||
EndMessage end_msg{};
|
||||
|
||||
puller->Put(ImagePullerOutput{
|
||||
.cbor = std::make_shared<CBORStream2DeserializerOutput>(end_msg)
|
||||
});
|
||||
|
||||
AcquisitionDeviceGroup group;
|
||||
JFJochReceiverService service(group, logger, pusher);
|
||||
|
||||
service.NumThreads(nthreads);
|
||||
|
||||
// No progress value at the start of measurement
|
||||
REQUIRE(!service.GetProgress().has_value());
|
||||
|
||||
service.Start(experiment, pixel_mask, nullptr, puller);
|
||||
auto receiver_out = service.Stop();
|
||||
|
||||
CHECK(receiver_out.efficiency == 1.0);
|
||||
CHECK(receiver_out.status.images_sent == 0);
|
||||
CHECK(receiver_out.dark_mask_result.size() == experiment.GetPixelsNum());
|
||||
CHECK(receiver_out.dark_mask_result[0] == 0);
|
||||
CHECK(receiver_out.dark_mask_result[1] == 0);
|
||||
CHECK(receiver_out.dark_mask_result[2] != 0);
|
||||
CHECK(receiver_out.dark_mask_result[3] != 0);
|
||||
CHECK(receiver_out.dark_mask_result[4] == 0);
|
||||
CHECK(receiver_out.dark_mask_result[68] == 0);
|
||||
|
||||
CHECK(!receiver_out.status.cancelled);
|
||||
|
||||
// No progress value at the end of the measurement
|
||||
REQUIRE(!service.GetProgress().has_value());
|
||||
}
|
||||
Reference in New Issue
Block a user