From 58df84a324460ec602b40d8b7f840c85cc5a0735 Mon Sep 17 00:00:00 2001 From: leonarski_f Date: Thu, 30 Apr 2026 19:59:26 +0200 Subject: [PATCH] DetectorSetup: Save gain calibration in shared pointer to avoid copying it when copying DiffractionExperiment --- common/DetectorSetup.cpp | 23 ++++++++++++----------- common/DetectorSetup.h | 2 +- jungfrau/JFModuleGainCalibration.cpp | 9 +++++++++ jungfrau/JFModuleGainCalibration.h | 7 +++++++ 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/common/DetectorSetup.cpp b/common/DetectorSetup.cpp index 41938ada..a982f693 100644 --- a/common/DetectorSetup.cpp +++ b/common/DetectorSetup.cpp @@ -40,14 +40,16 @@ DetectorSetup::DetectorSetup(const DetectorGeometryModular &geom, DetectorType d DetectorSetup::DetectorSetup(std::shared_ptr in_geometry, DetectorType in_detector_type, const std::string &in_description, - const std::vector &in_det_modules_hostname) : - geometry(std::move(in_geometry)), - description(in_description), - det_modules_hostname(in_det_modules_hostname), - detector_type(in_detector_type), - read_out_time(0), - min_frame_time(std::chrono::milliseconds(1)), - min_count_time(MIN_COUNT_TIME) { + const std::vector & + in_det_modules_hostname) + : description(in_description), + geometry(std::move(in_geometry)), + det_modules_hostname(in_det_modules_hostname), + gain_calibration(std::make_shared()), + detector_type(in_detector_type), + read_out_time(0), + min_count_time(MIN_COUNT_TIME), + min_frame_time(std::chrono::milliseconds(1)) { if (description.empty()) throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, @@ -124,8 +126,7 @@ void DetectorSetup::LoadGain(const std::vector &filenames) { throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Mismatch in number of gain calibration files"); gain_file_names = filenames; - for (const auto& i: filenames) - gain_calibration.emplace_back(i); + gain_calibration->LoadGain(filenames); } DetectorSetup &DetectorSetup::UDPInterfaceCount(int64_t input) { @@ -137,7 +138,7 @@ DetectorSetup &DetectorSetup::UDPInterfaceCount(int64_t input) { } const std::vector &DetectorSetup::GetGainCalibration() const { - return gain_calibration; + return gain_calibration->GetCalibration(); } int64_t DetectorSetup::GetUDPInterfaceCount() const { diff --git a/common/DetectorSetup.h b/common/DetectorSetup.h index fd56166a..a0cd9a60 100644 --- a/common/DetectorSetup.h +++ b/common/DetectorSetup.h @@ -26,7 +26,7 @@ class DetectorSetup { std::vector gain_file_names; std::vector trim_file_names; std::string trim_file_directory; - std::vector gain_calibration; + std::shared_ptr gain_calibration; int64_t udp_interface_count = 2; float pixel_size_um = 75.0f; std::string sensor_material = "Si"; diff --git a/jungfrau/JFModuleGainCalibration.cpp b/jungfrau/JFModuleGainCalibration.cpp index 2d298096..27888062 100644 --- a/jungfrau/JFModuleGainCalibration.cpp +++ b/jungfrau/JFModuleGainCalibration.cpp @@ -113,3 +113,12 @@ double JFModuleGainCalibration::GetG2StdDev() const { double JFModuleGainCalibration::GetHG0StdDev() const { return GetStdDev(offset_hg0); } + +JFGainCalibration::JFGainCalibration(const std::vector& filenames) { + for (const auto& filename : filenames) + c.emplace_back(filename); +} + +const std::vector& JFGainCalibration::GetCalibration() const { + return c; +} \ No newline at end of file diff --git a/jungfrau/JFModuleGainCalibration.h b/jungfrau/JFModuleGainCalibration.h index f14f09eb..adad5624 100644 --- a/jungfrau/JFModuleGainCalibration.h +++ b/jungfrau/JFModuleGainCalibration.h @@ -47,4 +47,11 @@ inline JFModuleGainCalibration GainCalibrationFromTestFile() { return JFModuleGainCalibration("../../tests/test_data/gainMaps_M049.bin"); } +class JFGainCalibration { + std::vector c; +public: + void LoadGain(const std::vector& filenames); + const std::vector& GetCalibration() const; +}; + #endif //JUNGFRAUJOCH_JFMODULEGAINCALIBRATION_H