From cdc254ccf4245282d5aff19bd769daf180ef1a37 Mon Sep 17 00:00:00 2001 From: John Tramm Date: Thu, 10 Apr 2025 12:31:33 -0500 Subject: [PATCH] Fix for Issue Loading MGXS Data Files with LLVM 20 or Newer (#3368) Co-authored-by: Paul Romano --- src/mgxs.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/mgxs.cpp b/src/mgxs.cpp index eae3e5817..a88d2c196 100644 --- a/src/mgxs.cpp +++ b/src/mgxs.cpp @@ -99,7 +99,21 @@ void Mgxs::metadata_from_hdf5(hid_t xs_id, const vector& temperature, case TemperatureMethod::NEAREST: // Determine actual temperatures to read for (const auto& T : temperature) { - auto i_closest = xt::argmin(xt::abs(temps_available - T))[0]; + // Determine the closest temperature value + // NOTE: the below block could be replaced with the following line, + // though this gives a runtime error if using LLVM 20 or newer, + // likely due to a bug in xtensor. + // auto i_closest = xt::argmin(xt::abs(temps_available - T))[0]; + double closest = std::numeric_limits::max(); + int i_closest = 0; + for (int i = 0; i < temps_available.size(); i++) { + double diff = std::abs(temps_available[i] - T); + if (diff < closest) { + closest = diff; + i_closest = i; + } + } + double temp_actual = temps_available[i_closest]; if (std::fabs(temp_actual - T) < settings::temperature_tolerance) { if (std::find(temps_to_read.begin(), temps_to_read.end(),