diff --git a/common/StatusVector.cpp b/common/StatusVector.cpp index f5ddb3ab..34ec53b1 100644 --- a/common/StatusVector.cpp +++ b/common/StatusVector.cpp @@ -59,6 +59,7 @@ int32_t StatusVector::GetActualBinning(int32_t bin_size) const { } [[nodiscard]] float StatusVector::Mean() const { + std::unique_lock ul(m); return mean; } diff --git a/receiver/JFJochReceiverPlots.cpp b/receiver/JFJochReceiverPlots.cpp index 9581db1f..3edd7d0c 100644 --- a/receiver/JFJochReceiverPlots.cpp +++ b/receiver/JFJochReceiverPlots.cpp @@ -95,7 +95,8 @@ void JFJochReceiverPlots::Add(const DataMessage &msg, const AzimuthalIntegration { std::unique_lock ul(m); - *az_int_profile += profile; + if (az_int_profile) + *az_int_profile += profile; if (msg.xfel_pulse_id.has_value()) xfel_pulse_id[msg.number] = msg.xfel_pulse_id.value(); if (msg.xfel_event_code.has_value()) @@ -288,10 +289,12 @@ std::optional JFJochReceiverPlots::GetBkgEstimate() const { } void JFJochReceiverPlots::GetXFELPulseID(std::vector &v) const { + std::unique_lock ul(m); v = xfel_pulse_id.vec(); } void JFJochReceiverPlots::GetXFELEventCode(std::vector &v) const { + std::unique_lock ul(m); v = xfel_event_code.vec(); } @@ -383,12 +386,14 @@ void JFJochReceiverPlots::GetPlotRaw(std::vector &v, PlotType type, const break; case PlotType::AzInt: { std::unique_lock ul(m); - v = az_int_profile->GetResult(); + if (az_int_profile) + v = az_int_profile->GetResult(); break; } case PlotType::AzInt1D: { std::unique_lock ul(m); - v = az_int_profile->GetResult1D(); + if (az_int_profile) + v = az_int_profile->GetResult1D(); break; } case PlotType::PacketsReceived: diff --git a/receiver/JFJochReceiverPlots.h b/receiver/JFJochReceiverPlots.h index 70e2bcd9..7c81a87b 100644 --- a/receiver/JFJochReceiverPlots.h +++ b/receiver/JFJochReceiverPlots.h @@ -15,7 +15,8 @@ #include "../common/ScanResult.h" class JFJochReceiverPlots { - mutable std::mutex m; + mutable std::mutex m; // protects xfel_pulse_id, xfel_event_code and az_int_profile + std::optional goniometer; std::optional grid_scan; int64_t default_binning = 1;