From cd80fd0ed5d0be6fa83bc41a1c9972fb3fb58e2c Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Wed, 3 Dec 2025 10:08:40 +0100 Subject: [PATCH] jfjoch_broker: Default spot finding settings can be configured via config JSON file --- broker/JFJochBrokerHttp.cpp | 6 ++-- broker/JFJochBrokerHttp.h | 5 +++- broker/JFJochBrokerParser.cpp | 6 ++++ broker/JFJochBrokerParser.h | 1 + broker/JFJochStateMachine.cpp | 5 ++-- broker/JFJochStateMachine.h | 3 +- broker/gen/model/Jfjoch_settings.cpp | 30 ++++++++++++++++++- broker/gen/model/Jfjoch_settings.h | 10 +++++++ broker/jfjoch_api.yaml | 3 +- broker/jfjoch_broker.cpp | 4 ++- broker/redoc-static.html | 2 +- docs/python_client/docs/JfjochSettings.md | 1 + etc/broker_local.json | 14 +++++++++ frontend/package-lock.json | 4 +-- .../src/openapi/models/jfjoch_settings.ts | 2 ++ 15 files changed, 84 insertions(+), 12 deletions(-) diff --git a/broker/JFJochBrokerHttp.cpp b/broker/JFJochBrokerHttp.cpp index 2a4dd016..a5bc603e 100644 --- a/broker/JFJochBrokerHttp.cpp +++ b/broker/JFJochBrokerHttp.cpp @@ -9,9 +9,11 @@ #include "OpenAPIConvert.h" #include "../preview/JFJochTIFF.h" -JFJochBrokerHttp::JFJochBrokerHttp(const DiffractionExperiment &experiment, std::shared_ptr &rtr) +JFJochBrokerHttp::JFJochBrokerHttp(const DiffractionExperiment &experiment, + const SpotFindingSettings& spot_finding_settings, + std::shared_ptr &rtr) : DefaultApi(rtr), - state_machine(experiment, services, logger) { + state_machine(experiment, services, logger, spot_finding_settings) { Pistache::Rest::Routes::Get(*rtr, "/", Pistache::Rest::Routes::bind(&JFJochBrokerHttp::GetStaticFile, this)); Pistache::Rest::Routes::Get(*rtr, "/frontend", Pistache::Rest::Routes::bind(&JFJochBrokerHttp::GetStaticFile, this)); Pistache::Rest::Routes::Get(*rtr, "/frontend/*", Pistache::Rest::Routes::bind(&JFJochBrokerHttp::GetStaticFile, this)); diff --git a/broker/JFJochBrokerHttp.h b/broker/JFJochBrokerHttp.h index 52428bb2..ca8bfd96 100644 --- a/broker/JFJochBrokerHttp.h +++ b/broker/JFJochBrokerHttp.h @@ -181,7 +181,10 @@ class JFJochBrokerHttp : public org::openapitools::server::api::DefaultApi { void config_dark_mask_put(const org::openapitools::server::model::Dark_mask_settings &darkMaskSettings, Pistache::Http::ResponseWriter &response) override; public: - JFJochBrokerHttp(const DiffractionExperiment& experiment, std::shared_ptr &rtr); + JFJochBrokerHttp(const DiffractionExperiment& experiment, + const SpotFindingSettings &spot_finding_settings, + std::shared_ptr &rtr); + void AddDetectorSetup(const DetectorSetup &setup); JFJochServices& Services(); diff --git a/broker/JFJochBrokerParser.cpp b/broker/JFJochBrokerParser.cpp index 249de1e3..6e1925a9 100644 --- a/broker/JFJochBrokerParser.cpp +++ b/broker/JFJochBrokerParser.cpp @@ -235,3 +235,9 @@ void ParseReceiverSettings(const org::openapitools::server::model::Jfjoch_settin service.MetadataSocketSettings(Convert(input.getZeromqMetadata())); } } + +SpotFindingSettings ParseSpotFindingSettings(const org::openapitools::server::model::Jfjoch_settings &input) { + if (input.spotFindingIsSet()) + return Convert(input.getSpotFinding()); + return SpotFindingSettings(); +} \ No newline at end of file diff --git a/broker/JFJochBrokerParser.h b/broker/JFJochBrokerParser.h index a3152906..9de6ae0f 100644 --- a/broker/JFJochBrokerParser.h +++ b/broker/JFJochBrokerParser.h @@ -21,5 +21,6 @@ std::unique_ptr ParseImagePusher(const org::openapitools::server::m void ParseAcquisitionDeviceGroup(const org::openapitools::server::model::Jfjoch_settings &input, AcquisitionDeviceGroup &aq_devices); void ParseReceiverSettings(const org::openapitools::server::model::Jfjoch_settings &input, JFJochReceiverService &service); +SpotFindingSettings ParseSpotFindingSettings(const org::openapitools::server::model::Jfjoch_settings &input); #endif //JUNGFRAUJOCH_JFJOCHBROKERPARSER_H diff --git a/broker/JFJochStateMachine.cpp b/broker/JFJochStateMachine.cpp index ceee805f..185970ec 100644 --- a/broker/JFJochStateMachine.cpp +++ b/broker/JFJochStateMachine.cpp @@ -10,13 +10,14 @@ JFJochStateMachine::JFJochStateMachine(const DiffractionExperiment& in_experiment, JFJochServices &in_services, - Logger &in_logger) + Logger &in_logger, + const SpotFindingSettings &spot_finding_settings) : logger(in_logger), services(in_services), experiment(in_experiment), pixel_mask(experiment), current_detector_setup(0), - data_processing_settings(DiffractionExperiment::DefaultDataProcessingSettings()), + data_processing_settings(spot_finding_settings), pixel_mask_statistics({0, 0, 0}), gpu_count(get_gpu_count()) { diff --git a/broker/JFJochStateMachine.h b/broker/JFJochStateMachine.h index d52c98d1..cfc79578 100644 --- a/broker/JFJochStateMachine.h +++ b/broker/JFJochStateMachine.h @@ -153,7 +153,8 @@ class JFJochStateMachine { public: JFJochStateMachine(const DiffractionExperiment& experiment, JFJochServices &in_services, - Logger &logger); + Logger &logger, + const SpotFindingSettings &spot_finding_settings = SpotFindingSettings()); ~JFJochStateMachine(); void Initialize(); diff --git a/broker/gen/model/Jfjoch_settings.cpp b/broker/gen/model/Jfjoch_settings.cpp index 68837c08..f14cc01d 100644 --- a/broker/gen/model/Jfjoch_settings.cpp +++ b/broker/gen/model/Jfjoch_settings.cpp @@ -39,6 +39,7 @@ Jfjoch_settings::Jfjoch_settings() m_Numa_policyIsSet = false; m_Frontend_directory = ""; m_SslIsSet = false; + m_Spot_findingIsSet = false; m_Zeromq_previewIsSet = false; m_Zeromq_metadataIsSet = false; m_Dark_maskIsSet = false; @@ -139,7 +140,7 @@ bool Jfjoch_settings::validate(std::stringstream& msg, const std::string& pathPr } } - + return success; } @@ -193,6 +194,9 @@ bool Jfjoch_settings::operator==(const Jfjoch_settings& rhs) const ((!sslIsSet() && !rhs.sslIsSet()) || (sslIsSet() && rhs.sslIsSet() && getSsl() == rhs.getSsl())) && + + ((!spotFindingIsSet() && !rhs.spotFindingIsSet()) || (spotFindingIsSet() && rhs.spotFindingIsSet() && getSpotFinding() == rhs.getSpotFinding())) && + (getImagePusher() == rhs.getImagePusher()) && @@ -244,6 +248,8 @@ void to_json(nlohmann::json& j, const Jfjoch_settings& o) j["frontend_directory"] = o.m_Frontend_directory; if(o.sslIsSet()) j["ssl"] = o.m_Ssl; + if(o.spotFindingIsSet()) + j["spot_finding"] = o.m_Spot_finding; j["image_pusher"] = o.m_Image_pusher; if(o.zeromqPreviewIsSet()) j["zeromq_preview"] = o.m_Zeromq_preview; @@ -323,6 +329,11 @@ void from_json(const nlohmann::json& j, Jfjoch_settings& o) j.at("ssl").get_to(o.m_Ssl); o.m_SslIsSet = true; } + if(j.find("spot_finding") != j.end()) + { + j.at("spot_finding").get_to(o.m_Spot_finding); + o.m_Spot_findingIsSet = true; + } j.at("image_pusher").get_to(o.m_Image_pusher); if(j.find("zeromq_preview") != j.end()) { @@ -579,6 +590,23 @@ void Jfjoch_settings::unsetSsl() { m_SslIsSet = false; } +org::openapitools::server::model::Spot_finding_settings Jfjoch_settings::getSpotFinding() const +{ + return m_Spot_finding; +} +void Jfjoch_settings::setSpotFinding(org::openapitools::server::model::Spot_finding_settings const& value) +{ + m_Spot_finding = value; + m_Spot_findingIsSet = true; +} +bool Jfjoch_settings::spotFindingIsSet() const +{ + return m_Spot_findingIsSet; +} +void Jfjoch_settings::unsetSpot_finding() +{ + m_Spot_findingIsSet = false; +} org::openapitools::server::model::Image_pusher_type Jfjoch_settings::getImagePusher() const { return m_Image_pusher; diff --git a/broker/gen/model/Jfjoch_settings.h b/broker/gen/model/Jfjoch_settings.h index a29cde25..e9ca44d3 100644 --- a/broker/gen/model/Jfjoch_settings.h +++ b/broker/gen/model/Jfjoch_settings.h @@ -19,6 +19,7 @@ #define Jfjoch_settings_H_ +#include "Spot_finding_settings.h" #include "Zeromq_preview_settings.h" #include "Dark_mask_settings.h" #include "Pcie_devices_inner.h" @@ -177,6 +178,13 @@ public: /// /// /// + org::openapitools::server::model::Spot_finding_settings getSpotFinding() const; + void setSpotFinding(org::openapitools::server::model::Spot_finding_settings const& value); + bool spotFindingIsSet() const; + void unsetSpot_finding(); + /// + /// + /// org::openapitools::server::model::Image_pusher_type getImagePusher() const; void setImagePusher(org::openapitools::server::model::Image_pusher_type const& value); /// @@ -234,6 +242,8 @@ protected: org::openapitools::server::model::Jfjoch_settings_ssl m_Ssl; bool m_SslIsSet; + org::openapitools::server::model::Spot_finding_settings m_Spot_finding; + bool m_Spot_findingIsSet; org::openapitools::server::model::Image_pusher_type m_Image_pusher; org::openapitools::server::model::Zeromq_preview_settings m_Zeromq_preview; diff --git a/broker/jfjoch_api.yaml b/broker/jfjoch_api.yaml index 0b95d757..7b9c4d08 100644 --- a/broker/jfjoch_api.yaml +++ b/broker/jfjoch_api.yaml @@ -2142,7 +2142,8 @@ components: type: string minLength: 1 example: "server.key" - + spot_finding: + $ref: '#/components/schemas/spot_finding_settings' image_pusher: $ref: '#/components/schemas/image_pusher_type' zeromq_preview: diff --git a/broker/jfjoch_broker.cpp b/broker/jfjoch_broker.cpp index f7c9e44c..90d84809 100644 --- a/broker/jfjoch_broker.cpp +++ b/broker/jfjoch_broker.cpp @@ -96,6 +96,8 @@ int main (int argc, char **argv) { DiffractionExperiment experiment(det_setup[0]); ParseFacilityConfiguration(settings, experiment); + SpotFindingSettings spot_finding_settings = ParseSpotFindingSettings(settings); + AcquisitionDeviceGroup aq_devices; ParseAcquisitionDeviceGroup(settings, aq_devices); @@ -127,7 +129,7 @@ int main (int argc, char **argv) { std::vector sigs{SIGQUIT, SIGINT, SIGTERM, SIGHUP}; setUpUnixSignals(sigs); - JFJochBrokerHttp broker(experiment, router); + JFJochBrokerHttp broker(experiment, spot_finding_settings, router); broker.FrontendDirectory(settings.getFrontendDirectory()); for (const auto &d: det_setup) diff --git a/broker/redoc-static.html b/broker/redoc-static.html index 11de7a47..6188457e 100644 --- a/broker/redoc-static.html +++ b/broker/redoc-static.html @@ -1405,7 +1405,7 @@ then image might be replaced in the buffer between calling /images and /image.cb " class="sc-eVqvcJ sc-fszimp kIppRw drqpJr">

Test Jungfraujoch system

http://localhost:5232/version