v1.0.0-rc.31

This commit is contained in:
2025-03-02 13:15:28 +01:00
parent aeabc81a4c
commit ddf4c75645
309 changed files with 8705 additions and 1421 deletions

View File

@@ -7,12 +7,15 @@
JFJochReceiverService::JFJochReceiverService(AcquisitionDeviceGroup &in_aq_devices,
Logger &in_logger, ImagePusher &pusher,
size_t send_buffer_size_MiB) :
logger(in_logger), aq_devices(in_aq_devices),
image_pusher(pusher), spot_finding_settings(DiffractionExperiment::DefaultDataProcessingSettings()),
buffer(send_buffer_size_MiB * 1024 * 1024) {}
size_t send_buffer_size_MiB)
: aq_devices(in_aq_devices),
logger(in_logger),
image_buffer(send_buffer_size_MiB * 1024 * 1024),
image_pusher(pusher),
spot_finding_settings(DiffractionExperiment::DefaultDataProcessingSettings()) {
}
JFJochReceiverService& JFJochReceiverService::NumThreads(int64_t input) {
JFJochReceiverService &JFJochReceiverService::NumThreads(int64_t input) {
if (input <= 0)
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Thread number must be above zero");
nthreads = input;
@@ -77,17 +80,16 @@ void JFJochReceiverService::Start(const DiffractionExperiment &experiment,
preview_image_indexed,
receiver_status,
plots,
buffer,
image_buffer,
zmq_preview_socket.get(),
zmq_metadata_socket.get());
try {
// Don't want to stop
receiver->SetSpotFindingSettings(spot_finding_settings);
} catch (...) {}
} catch (...) {
}
measurement = std::async(std::launch::async, &JFJochReceiverService::FinalizeMeasurement, this);
state = ReceiverState::Running;
} catch (const JFJochException &e) {
logger.ErrorException(e);
throw;
@@ -103,7 +105,7 @@ void JFJochReceiverService::Cancel(bool silent) {
JFJochReceiverOutput JFJochReceiverService::Stop() {
std::unique_lock ul(state_mutex);
measurement_done.wait(ul, [this] { return (state != ReceiverState::Running);});
measurement_done.wait(ul, [this] { return (state != ReceiverState::Running); });
if (state != ReceiverState::Idle)
throw JFJochException(JFJochExceptionCategory::WrongReceiverState, "Receiver in weird state");
@@ -220,7 +222,7 @@ JFJochReceiverService &JFJochReceiverService::PreviewSocket(const std::string &a
return *this;
}
JFJochReceiverService & JFJochReceiverService::MetadataSocket(const std::string &addr) {
JFJochReceiverService &JFJochReceiverService::MetadataSocket(const std::string &addr) {
if (!addr.empty()) {
logger.Info("ZeroMQ metadata socket available at {}", addr);
zmq_metadata_socket = std::make_unique<ZMQMetadataSocket>(addr);
@@ -246,7 +248,7 @@ JFJochReceiverService &JFJochReceiverService::PreviewSocketSettings(const ZMQPre
return *this;
}
JFJochReceiverService & JFJochReceiverService::MetadataSocketSettings(const ZMQMetadataSettings &input) {
JFJochReceiverService &JFJochReceiverService::MetadataSocketSettings(const ZMQMetadataSettings &input) {
if (zmq_metadata_socket)
zmq_metadata_socket->ImportSettings(input);
return *this;
@@ -263,3 +265,26 @@ ZMQMetadataSettings JFJochReceiverService::GetMetadataSocketSettings() const {
return zmq_metadata_socket->GetSettings();
return {};
}
void JFJochReceiverService::GetStartMessageFromBuffer(std::vector<uint8_t> &v) {
image_buffer.GetStartMessage(v);
}
void JFJochReceiverService::GetImageFromBuffer(std::vector<uint8_t> &v, int64_t image_number) {
image_buffer.GetImage(v, image_number);
}
ImageBufferStatus JFJochReceiverService::GetImageBufferStatus() const {
return image_buffer.GetStatus();
}
void JFJochReceiverService::ClearImageBuffer() {
std::unique_lock ul(state_mutex);
// Clearing image buffer during data collection could be catastrophic, so better protect here, even if redundant
// with JFJochStateMachine
if (state == ReceiverState::Idle)
image_buffer.Finalize(std::chrono::milliseconds(2500));
else
throw JFJochException(JFJochExceptionCategory::WrongDAQState,
"Cannot clear image buffer during data collection");
}