From 006886b39ff23e8f1e8c0685223cb565642f1354 Mon Sep 17 00:00:00 2001 From: leonarski_f Date: Wed, 10 Apr 2024 11:17:36 +0200 Subject: [PATCH] Improve preview functionality --- broker/JFJochBrokerHttp.cpp | 34 ++--- broker/JFJochBrokerHttp.h | 8 +- broker/JFJochStateMachine.cpp | 12 +- broker/JFJochStateMachine.h | 10 +- broker/gen/api/DefaultApi.cpp | 67 +++------ broker/gen/api/DefaultApi.h | 28 ++-- broker/gen/model/Preview_settings.cpp | 33 ++++- broker/gen/model/Preview_settings.h | 9 ++ broker/gen/model/Spot_finding_settings.cpp | 31 +--- broker/gen/model/Spot_finding_settings.h | 9 -- broker/jfjoch_api.yaml | 39 +++-- broker/redoc-static.html | 38 +++-- common/ROIMask.cpp | 2 +- export_images/PreviewImage.h | 1 + frontend_ui/src/App.tsx | 6 +- .../src/components/DataProcessingSettings.tsx | 17 +-- frontend_ui/src/components/PreviewImage.tsx | 139 +++++++++++++++--- .../src/components/PreviewImageSettings.tsx | 101 ------------- .../src/openapi/models/preview_settings.ts | 4 + .../openapi/models/spot_finding_settings.ts | 1 - .../src/openapi/services/DefaultService.ts | 59 +++----- image_analysis/SpotFindingSettings.h | 1 - receiver/JFJochReceiver.cpp | 16 +- receiver/JFJochReceiver.h | 3 + tests/ROIMaskTest.cpp | 10 ++ 25 files changed, 303 insertions(+), 375 deletions(-) delete mode 100644 frontend_ui/src/components/PreviewImageSettings.tsx diff --git a/broker/JFJochBrokerHttp.cpp b/broker/JFJochBrokerHttp.cpp index bc5aa5aee..4c073d3b5 100644 --- a/broker/JFJochBrokerHttp.cpp +++ b/broker/JFJochBrokerHttp.cpp @@ -19,7 +19,6 @@ inline SpotFindingSettings Convert(const org::openapitools::server::model::Spot_ ret.max_pix_per_spot = input.getMaxPixPerSpot(); ret.high_resolution_limit = input.getHighResolutionLimit(); ret.low_resolution_limit = input.getLowResolutionLimit(); - ret.preview_indexed_only = input.isPreviewIndexedOnly(); ret.enable = input.isEnable(); return ret; } @@ -32,7 +31,6 @@ inline org::openapitools::server::model::Spot_finding_settings Convert(const Spo ret.setMaxPixPerSpot(input.max_pix_per_spot); ret.setHighResolutionLimit(input.high_resolution_limit); ret.setLowResolutionLimit(input.low_resolution_limit); - ret.setPreviewIndexedOnly(input.preview_indexed_only); ret.setEnable(input.enable); return ret; } @@ -320,15 +318,7 @@ inline PreviewJPEGSettings Convert(const org::openapitools::server::model::Previ ret.jpeg_quality = input.getJpegQuality(); ret.saturation_value = input.getSaturation(); ret.show_roi = input.isShowRoi(); - return ret; -} - -inline org::openapitools::server::model::Preview_settings Convert(const PreviewJPEGSettings& settings) { - org::openapitools::server::model::Preview_settings ret{}; - ret.setJpegQuality(settings.jpeg_quality); - ret.setSaturation(settings.saturation_value); - ret.setShowSpots(settings.show_spots); - ret.setShowRoi(settings.show_roi); + ret.show_indexed = input.isShowIndexed(); return ret; } @@ -712,8 +702,18 @@ void JFJochBrokerHttp::preview_calibration_tiff_get(Pistache::Http::ResponseWrit response.send(Pistache::Http::Code::Not_Found); } +void +JFJochBrokerHttp::preview_image_jpeg_post(const org::openapitools::server::model::Preview_settings &previewSettings, + Pistache::Http::ResponseWriter &response) { + std::string s = state_machine.GetPreviewJPEG(Convert(previewSettings)); + if (!s.empty()) + response.send(Pistache::Http::Code::Ok, s, Pistache::Http::Mime::MediaType::fromString("image/jpeg")); + else + response.send(Pistache::Http::Code::Not_Found); +} + void JFJochBrokerHttp::preview_image_jpeg_get(Pistache::Http::ResponseWriter &response) { - std::string s = state_machine.GetPreviewJPEG(); + std::string s = state_machine.GetPreviewJPEG(PreviewJPEGSettings()); if (!s.empty()) response.send(Pistache::Http::Code::Ok, s, Pistache::Http::Mime::MediaType::fromString("image/jpeg")); else @@ -728,16 +728,6 @@ void JFJochBrokerHttp::preview_image_tiff_get(Pistache::Http::ResponseWriter &re response.send(Pistache::Http::Code::Not_Found); } -void JFJochBrokerHttp::preview_jpeg_settings_get(Pistache::Http::ResponseWriter &response) { - ProcessOutput(Convert(state_machine.GetPreviewJPEGSettings()), response); -} - -void JFJochBrokerHttp::preview_jpeg_settings_put(const org::openapitools::server::model::Preview_settings &previewSettings, - Pistache::Http::ResponseWriter &response) { - state_machine.SetPreviewJPEGSettings(Convert(previewSettings)); - response.send(Pistache::Http::Code::Ok); -} - void JFJochBrokerHttp::plot_resolution_estimate_histogram_get(Pistache::Http::ResponseWriter &response) { PlotRequest req{.type = PlotType::ResEstimation, .binning = 0}; auto plot = state_machine.GetPlots(req); diff --git a/broker/JFJochBrokerHttp.h b/broker/JFJochBrokerHttp.h index 65c6b4538..63fc1fa3d 100644 --- a/broker/JFJochBrokerHttp.h +++ b/broker/JFJochBrokerHttp.h @@ -100,14 +100,10 @@ class JFJochBrokerHttp : public org::openapitools::server::api::DefaultApi { void preview_calibration_tiff_get(Pistache::Http::ResponseWriter &response) override; void preview_image_jpeg_get(Pistache::Http::ResponseWriter &response) override; - + void preview_image_jpeg_post(const org::openapitools::server::model::Preview_settings &previewSettings, + Pistache::Http::ResponseWriter &response) override; void preview_image_tiff_get(Pistache::Http::ResponseWriter &response) override; - void preview_jpeg_settings_get(Pistache::Http::ResponseWriter &response) override; - - void preview_jpeg_settings_put(const org::openapitools::server::model::Preview_settings &previewSettings, - Pistache::Http::ResponseWriter &response) override; - void roi_box_get(Pistache::Http::ResponseWriter &response) override; void roi_box_put(const org::openapitools::server::model::Roi_box_list &roiBoxList, Pistache::Http::ResponseWriter &response) override; diff --git a/broker/JFJochStateMachine.cpp b/broker/JFJochStateMachine.cpp index 07f5b35f5..d9b07cbb7 100644 --- a/broker/JFJochStateMachine.cpp +++ b/broker/JFJochStateMachine.cpp @@ -653,16 +653,8 @@ std::optional JFJochStateMachine::CheckError() { return {}; } -void JFJochStateMachine::SetPreviewJPEGSettings(const PreviewJPEGSettings &settings) { - preview_jpeg_settings = settings; -} - -PreviewJPEGSettings JFJochStateMachine::GetPreviewJPEGSettings() const { - return preview_jpeg_settings; -} - -std::string JFJochStateMachine::GetPreviewJPEG() const { - return services.GetPreviewJPEG(preview_jpeg_settings); +std::string JFJochStateMachine::GetPreviewJPEG(const PreviewJPEGSettings& settings) const { + return services.GetPreviewJPEG(settings); } std::string JFJochStateMachine::GetPreviewTIFF(bool calibration) const { diff --git a/broker/JFJochStateMachine.h b/broker/JFJochStateMachine.h index 4e7287af4..806ee26bc 100644 --- a/broker/JFJochStateMachine.h +++ b/broker/JFJochStateMachine.h @@ -74,7 +74,6 @@ struct DetectorSettings { std::optional internal_packet_generator_images; }; - struct RadialIntegrationSettings { bool solid_angle_correction; std::optional polarization_factor; @@ -113,11 +112,6 @@ class JFJochStateMachine { mutable std::mutex data_processing_settings_mutex; SpotFindingSettings data_processing_settings; - // Not protected with mutex: - // little harm of having preview image out-of-sync, given these images are regularly recalculated - // while there is risk of deadlock with too many mutexes - PreviewJPEGSettings preview_jpeg_settings; - // Private functions assume that lock m is acquired void MeasurementThread(); void PedestalThread(std::unique_lock ul); @@ -169,9 +163,7 @@ public: void SetRadialIntegrationSettings(const RadialIntegrationSettings& settings); RadialIntegrationSettings GetRadialIntegrationSettings() const; - void SetPreviewJPEGSettings(const PreviewJPEGSettings& settings); - PreviewJPEGSettings GetPreviewJPEGSettings() const; - std::string GetPreviewJPEG() const; + std::string GetPreviewJPEG(const PreviewJPEGSettings& settings) const; std::string GetPreviewTIFF(bool calibration) const; void LoadInternalGeneratorImage(const void *data, size_t size, uint64_t image_number); diff --git a/broker/gen/api/DefaultApi.cpp b/broker/gen/api/DefaultApi.cpp index 308ffb021..826d356ea 100644 --- a/broker/gen/api/DefaultApi.cpp +++ b/broker/gen/api/DefaultApi.cpp @@ -63,9 +63,8 @@ void DefaultApi::setupRoutes() { Routes::Post(*router, base + "/plot/strong_pixel", Routes::bind(&DefaultApi::plot_strong_pixel_post_handler, this)); Routes::Get(*router, base + "/preview/calibration.tiff", Routes::bind(&DefaultApi::preview_calibration_tiff_get_handler, this)); Routes::Get(*router, base + "/preview/image.jpeg", Routes::bind(&DefaultApi::preview_image_jpeg_get_handler, this)); + Routes::Post(*router, base + "/preview/image.jpeg", Routes::bind(&DefaultApi::preview_image_jpeg_post_handler, this)); Routes::Get(*router, base + "/preview/image.tiff", Routes::bind(&DefaultApi::preview_image_tiff_get_handler, this)); - Routes::Get(*router, base + "/preview/jpeg_settings", Routes::bind(&DefaultApi::preview_jpeg_settings_get_handler, this)); - Routes::Put(*router, base + "/preview/jpeg_settings", Routes::bind(&DefaultApi::preview_jpeg_settings_put_handler, this)); Routes::Get(*router, base + "/roi/box", Routes::bind(&DefaultApi::roi_box_get_handler, this)); Routes::Put(*router, base + "/roi/box", Routes::bind(&DefaultApi::roi_box_put_handler, this)); Routes::Get(*router, base + "/roi/circle", Routes::bind(&DefaultApi::roi_circle_get_handler, this)); @@ -882,47 +881,7 @@ void DefaultApi::preview_image_jpeg_get_handler(const Pistache::Rest::Request &, } } -void DefaultApi::preview_image_tiff_get_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { - try { - - - try { - this->preview_image_tiff_get(response); - } catch (Pistache::Http::HttpError &e) { - response.send(static_cast(e.code()), e.what()); - return; - } catch (std::exception &e) { - const std::pair errorInfo = this->handleOperationException(e); - response.send(errorInfo.first, errorInfo.second); - return; - } - - } catch (std::exception &e) { - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); - } - -} -void DefaultApi::preview_jpeg_settings_get_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { - try { - - - try { - this->preview_jpeg_settings_get(response); - } catch (Pistache::Http::HttpError &e) { - response.send(static_cast(e.code()), e.what()); - return; - } catch (std::exception &e) { - const std::pair errorInfo = this->handleOperationException(e); - response.send(errorInfo.first, errorInfo.second); - return; - } - - } catch (std::exception &e) { - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); - } - -} -void DefaultApi::preview_jpeg_settings_put_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { +void DefaultApi::preview_image_jpeg_post_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { try { @@ -940,7 +899,27 @@ void DefaultApi::preview_jpeg_settings_put_handler(const Pistache::Rest::Request } try { - this->preview_jpeg_settings_put(previewSettings, response); + this->preview_image_jpeg_post(previewSettings, response); + } catch (Pistache::Http::HttpError &e) { + response.send(static_cast(e.code()), e.what()); + return; + } catch (std::exception &e) { + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); + return; + } + + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + +} +void DefaultApi::preview_image_tiff_get_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { + try { + + + try { + this->preview_image_tiff_get(response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; diff --git a/broker/gen/api/DefaultApi.h b/broker/gen/api/DefaultApi.h index ad597c7ae..f3862d8ac 100644 --- a/broker/gen/api/DefaultApi.h +++ b/broker/gen/api/DefaultApi.h @@ -88,9 +88,8 @@ private: void plot_strong_pixel_post_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void preview_calibration_tiff_get_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void preview_image_jpeg_get_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); + void preview_image_jpeg_post_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void preview_image_tiff_get_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); - void preview_jpeg_settings_get_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); - void preview_jpeg_settings_put_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void roi_box_get_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void roi_box_put_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void roi_circle_get_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); @@ -339,13 +338,21 @@ private: /// virtual void preview_calibration_tiff_get(Pistache::Http::ResponseWriter &response) = 0; /// - /// Get last preview image in JPEG format + /// Get last preview image in JPEG format using default settings /// /// /// /// virtual void preview_image_jpeg_get(Pistache::Http::ResponseWriter &response) = 0; /// + /// Get last preview image in JPEG format using custom settings + /// + /// + /// + /// + /// (optional) + virtual void preview_image_jpeg_post(const org::openapitools::server::model::Preview_settings &previewSettings, Pistache::Http::ResponseWriter &response) = 0; + /// /// Get last preview image in TIFF format /// /// @@ -353,21 +360,6 @@ private: /// virtual void preview_image_tiff_get(Pistache::Http::ResponseWriter &response) = 0; /// - /// Get JPEG rendering configuration - /// - /// - /// Can be done anytime - /// - virtual void preview_jpeg_settings_get(Pistache::Http::ResponseWriter &response) = 0; - /// - /// Configure JPEG rendering of preview images - /// - /// - /// Can be done at any state of the detector - /// - /// (optional) - virtual void preview_jpeg_settings_put(const org::openapitools::server::model::Preview_settings &previewSettings, Pistache::Http::ResponseWriter &response) = 0; - /// /// Get box ROIs /// /// diff --git a/broker/gen/model/Preview_settings.cpp b/broker/gen/model/Preview_settings.cpp index 8fbeed759..3c79ea550 100644 --- a/broker/gen/model/Preview_settings.cpp +++ b/broker/gen/model/Preview_settings.cpp @@ -28,6 +28,8 @@ Preview_settings::Preview_settings() m_Show_roiIsSet = false; m_Jpeg_quality = 0L; m_Jpeg_qualityIsSet = false; + m_Show_indexed = false; + m_Show_indexedIsSet = false; } @@ -88,7 +90,7 @@ bool Preview_settings::validate(std::stringstream& msg, const std::string& pathP } } - + return success; } @@ -107,7 +109,10 @@ bool Preview_settings::operator==(const Preview_settings& rhs) const ((!showRoiIsSet() && !rhs.showRoiIsSet()) || (showRoiIsSet() && rhs.showRoiIsSet() && isShowRoi() == rhs.isShowRoi())) && - ((!jpegQualityIsSet() && !rhs.jpegQualityIsSet()) || (jpegQualityIsSet() && rhs.jpegQualityIsSet() && getJpegQuality() == rhs.getJpegQuality())) + ((!jpegQualityIsSet() && !rhs.jpegQualityIsSet()) || (jpegQualityIsSet() && rhs.jpegQualityIsSet() && getJpegQuality() == rhs.getJpegQuality())) && + + + ((!showIndexedIsSet() && !rhs.showIndexedIsSet()) || (showIndexedIsSet() && rhs.showIndexedIsSet() && isShowIndexed() == rhs.isShowIndexed())) ; } @@ -127,6 +132,8 @@ void to_json(nlohmann::json& j, const Preview_settings& o) j["show_roi"] = o.m_Show_roi; if(o.jpegQualityIsSet()) j["jpeg_quality"] = o.m_Jpeg_quality; + if(o.showIndexedIsSet()) + j["show_indexed"] = o.m_Show_indexed; } @@ -148,6 +155,11 @@ void from_json(const nlohmann::json& j, Preview_settings& o) j.at("jpeg_quality").get_to(o.m_Jpeg_quality); o.m_Jpeg_qualityIsSet = true; } + if(j.find("show_indexed") != j.end()) + { + j.at("show_indexed").get_to(o.m_Show_indexed); + o.m_Show_indexedIsSet = true; + } } @@ -210,6 +222,23 @@ void Preview_settings::unsetJpeg_quality() { m_Jpeg_qualityIsSet = false; } +bool Preview_settings::isShowIndexed() const +{ + return m_Show_indexed; +} +void Preview_settings::setShowIndexed(bool const value) +{ + m_Show_indexed = value; + m_Show_indexedIsSet = true; +} +bool Preview_settings::showIndexedIsSet() const +{ + return m_Show_indexedIsSet; +} +void Preview_settings::unsetShow_indexed() +{ + m_Show_indexedIsSet = false; +} } // namespace org::openapitools::server::model diff --git a/broker/gen/model/Preview_settings.h b/broker/gen/model/Preview_settings.h index ab0a6806f..fe63c3e3c 100644 --- a/broker/gen/model/Preview_settings.h +++ b/broker/gen/model/Preview_settings.h @@ -83,6 +83,13 @@ public: void setJpegQuality(int64_t const value); bool jpegQualityIsSet() const; void unsetJpeg_quality(); + /// + /// Preview indexed images only + /// + bool isShowIndexed() const; + void setShowIndexed(bool const value); + bool showIndexedIsSet() const; + void unsetShow_indexed(); friend void to_json(nlohmann::json& j, const Preview_settings& o); friend void from_json(const nlohmann::json& j, Preview_settings& o); @@ -95,6 +102,8 @@ protected: bool m_Show_roiIsSet; int64_t m_Jpeg_quality; bool m_Jpeg_qualityIsSet; + bool m_Show_indexed; + bool m_Show_indexedIsSet; }; diff --git a/broker/gen/model/Spot_finding_settings.cpp b/broker/gen/model/Spot_finding_settings.cpp index dbd70994d..a2ac5fd59 100644 --- a/broker/gen/model/Spot_finding_settings.cpp +++ b/broker/gen/model/Spot_finding_settings.cpp @@ -28,8 +28,6 @@ Spot_finding_settings::Spot_finding_settings() m_Max_pix_per_spot = 0L; m_High_resolution_limit = 0.0f; m_Low_resolution_limit = 0.0f; - m_Preview_indexed_only = false; - m_Preview_indexed_onlyIsSet = false; } @@ -108,7 +106,7 @@ bool Spot_finding_settings::validate(std::stringstream& msg, const std::string& } } - + return success; } @@ -136,11 +134,8 @@ bool Spot_finding_settings::operator==(const Spot_finding_settings& rhs) const && (getLowResolutionLimit() == rhs.getLowResolutionLimit()) - && - ((!previewIndexedOnlyIsSet() && !rhs.previewIndexedOnlyIsSet()) || (previewIndexedOnlyIsSet() && rhs.previewIndexedOnlyIsSet() && isPreviewIndexedOnly() == rhs.isPreviewIndexedOnly())) - ; } @@ -159,8 +154,6 @@ void to_json(nlohmann::json& j, const Spot_finding_settings& o) j["max_pix_per_spot"] = o.m_Max_pix_per_spot; j["high_resolution_limit"] = o.m_High_resolution_limit; j["low_resolution_limit"] = o.m_Low_resolution_limit; - if(o.previewIndexedOnlyIsSet()) - j["preview_indexed_only"] = o.m_Preview_indexed_only; } @@ -173,11 +166,6 @@ void from_json(const nlohmann::json& j, Spot_finding_settings& o) j.at("max_pix_per_spot").get_to(o.m_Max_pix_per_spot); j.at("high_resolution_limit").get_to(o.m_High_resolution_limit); j.at("low_resolution_limit").get_to(o.m_Low_resolution_limit); - if(j.find("preview_indexed_only") != j.end()) - { - j.at("preview_indexed_only").get_to(o.m_Preview_indexed_only); - o.m_Preview_indexed_onlyIsSet = true; - } } @@ -237,23 +225,6 @@ void Spot_finding_settings::setLowResolutionLimit(float const value) { m_Low_resolution_limit = value; } -bool Spot_finding_settings::isPreviewIndexedOnly() const -{ - return m_Preview_indexed_only; -} -void Spot_finding_settings::setPreviewIndexedOnly(bool const value) -{ - m_Preview_indexed_only = value; - m_Preview_indexed_onlyIsSet = true; -} -bool Spot_finding_settings::previewIndexedOnlyIsSet() const -{ - return m_Preview_indexed_onlyIsSet; -} -void Spot_finding_settings::unsetPreview_indexed_only() -{ - m_Preview_indexed_onlyIsSet = false; -} } // namespace org::openapitools::server::model diff --git a/broker/gen/model/Spot_finding_settings.h b/broker/gen/model/Spot_finding_settings.h index 7b42a728e..d31571a51 100644 --- a/broker/gen/model/Spot_finding_settings.h +++ b/broker/gen/model/Spot_finding_settings.h @@ -92,13 +92,6 @@ public: /// float getLowResolutionLimit() const; void setLowResolutionLimit(float const value); - /// - /// - /// - bool isPreviewIndexedOnly() const; - void setPreviewIndexedOnly(bool const value); - bool previewIndexedOnlyIsSet() const; - void unsetPreview_indexed_only(); friend void to_json(nlohmann::json& j, const Spot_finding_settings& o); friend void from_json(const nlohmann::json& j, Spot_finding_settings& o); @@ -117,8 +110,6 @@ protected: float m_Low_resolution_limit; - bool m_Preview_indexed_only; - bool m_Preview_indexed_onlyIsSet; }; diff --git a/broker/jfjoch_api.yaml b/broker/jfjoch_api.yaml index 3f29883f3..69d6975e4 100644 --- a/broker/jfjoch_api.yaml +++ b/broker/jfjoch_api.yaml @@ -344,9 +344,6 @@ components: low_resolution_limit: type: number format: float - preview_indexed_only: - type: boolean - default: false rad_int_settings: type: object required: @@ -598,6 +595,9 @@ components: format: int64 minimum: 0 maximum: 100 + show_indexed: + type: boolean + description: "Preview indexed images only" error_message: type: object @@ -1429,8 +1429,8 @@ paths: schema: $ref: '#/components/schemas/calibration_statistics' /preview/image.jpeg: - get: - summary: Get last preview image in JPEG format + post: + summary: Get last preview image in JPEG format using custom settings responses: "200": description: Preview image @@ -1441,18 +1441,6 @@ paths: format: binary "404": description: No preview image recorded so far - /preview/jpeg_settings: - put: - summary: Configure JPEG rendering of preview images - description: Can be done at any state of the detector - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/preview_settings' - responses: - "200": - description: Everything OK "400": description: Input parsing or validation error content: @@ -1466,16 +1454,23 @@ paths: application/json: schema: $ref: '#/components/schemas/error_message' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/preview_settings' get: - summary: Get JPEG rendering configuration - description: Can be done anytime + summary: Get last preview image in JPEG format using default settings responses: "200": - description: Everything OK + description: Preview image content: - application/json: + image/jpeg: schema: - $ref: '#/components/schemas/preview_settings' + type: string + format: binary + "404": + description: No preview image recorded so far /preview/image.tiff: get: summary: Get last preview image in TIFF format diff --git a/broker/redoc-static.html b/broker/redoc-static.html index c13a34a67..29fc39fa8 100644 --- a/broker/redoc-static.html +++ b/broker/redoc-static.html @@ -341,7 +341,7 @@ data-styled.g137[id="sc-cMdfCE"]{content:"dvQijr,"}/*!sc*/ -

Everything OK

Response samples

Content type
application/json
{
  • "frame_time_us": 450,
  • "count_time_us": 0,
  • "storage_cell_count": 1,
  • "internal_frame_generator": false,
  • "internal_frame_generator_images": 1,
  • "collect_raw_data": false,
  • "pedestal_g0_frames": 0,
  • "pedestal_g1_frames": 0,
  • "pedestal_g2_frames": 0,
  • "storage_cell_delay_us": 0.1,
  • "detector_trigger_delay_us": 0.1,
  • "fixed_gain_g1": false,
  • "use_gain_hg0": false
}

Configure spot finding

Can be done anytime, also while data collection is running

-
Request Body schema: application/json
enable
required
boolean
Default: true
signal_to_noise_threshold
required
number <float> >= 0
photon_count_threshold
required
integer <int64> >= 0
min_pix_per_spot
required
integer <int64> >= 1
max_pix_per_spot
required
integer <int64> >= 1
high_resolution_limit
required
number <float>
low_resolution_limit
required
number <float>
preview_indexed_only
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "enable": true,
  • "signal_to_noise_threshold": 0.1,
  • "photon_count_threshold": 0,
  • "min_pix_per_spot": 1,
  • "max_pix_per_spot": 1,
  • "high_resolution_limit": 0.1,
  • "low_resolution_limit": 0.1,
  • "preview_indexed_only": false
}

Get data processing configuration

Request samples

Content type
application/json
{
  • "enable": true,
  • "signal_to_noise_threshold": 0.1,
  • "photon_count_threshold": 0,
  • "min_pix_per_spot": 1,
  • "max_pix_per_spot": 1,
  • "high_resolution_limit": 0.1,
  • "low_resolution_limit": 0.1
}

Get data processing configuration

Can be done anytime

Responses

Response samples

Content type
application/json
{
  • "enable": true,
  • "signal_to_noise_threshold": 0.1,
  • "photon_count_threshold": 0,
  • "min_pix_per_spot": 1,
  • "max_pix_per_spot": 1,
  • "high_resolution_limit": 0.1,
  • "low_resolution_limit": 0.1,
  • "preview_indexed_only": false
}

Configure radial integration

Response samples

Content type
application/json
{
  • "enable": true,
  • "signal_to_noise_threshold": 0.1,
  • "photon_count_threshold": 0,
  • "min_pix_per_spot": 1,
  • "max_pix_per_spot": 1,
  • "high_resolution_limit": 0.1,
  • "low_resolution_limit": 0.1
}

Configure radial integration

Can be done when detector is Inactive or Idle

Request Body schema: application/json
polarization_factor
number <float> [ -1 .. 1 ]

If polarization factor is provided, than polarization correction is enabled.

@@ -713,31 +713,29 @@ Changing detector will set detector to Inactive state and will requ " class="sc-iKOmoZ sc-cCzLxZ WVNwY VEBGS">

Statistics are provided for each module/storage cell separately

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get last preview image in JPEG format

Responses

Configure JPEG rendering of preview images

Can be done at any state of the detector

-
Request Body schema: application/json
saturation
required
integer <int64> [ 0 .. 65535 ]

Response samples

Content type
application/json
[
  • {
    }
]

Get last preview image in JPEG format using custom settings

Request Body schema: application/json
saturation
required
integer <int64> [ 0 .. 65535 ]

Saturation value to set contrast in the preview image

show_spots
boolean
Default: true

Show spot finding results on the image

show_roi
boolean
Default: false

Show ROI areas on the image

-
jpeg_quality
integer <int64> [ 0 .. 100 ]
jpeg_quality
integer <int64> [ 0 .. 100 ]

Quality of JPEG image (100 - highest; 0 - lowest)

-

Responses

show_indexed
boolean

Preview indexed images only

+

Responses

Request samples

Content type
application/json
{
  • "saturation": 65535,
  • "show_spots": true,
  • "show_roi": false,
  • "jpeg_quality": 100
}

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get JPEG rendering configuration

Can be done anytime

-

Responses

Response samples

Content type
application/json
{
  • "saturation": 65535,
  • "show_spots": true,
  • "show_roi": false,
  • "jpeg_quality": 100
}

Get last preview image in TIFF format

Responses

Request samples

Content type
application/json
{
  • "saturation": 65535,
  • "show_spots": true,
  • "show_roi": false,
  • "jpeg_quality": 100,
  • "show_indexed": true
}

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get last preview image in JPEG format using default settings

Responses

Get last preview image in TIFF format

Responses