diff --git a/src/mgxs.cpp b/src/mgxs.cpp index eae3e5817ce..a6012225348 100644 --- a/src/mgxs.cpp +++ b/src/mgxs.cpp @@ -95,6 +95,32 @@ void Mgxs::metadata_from_hdf5(hid_t xs_id, const vector& temperature, settings::temperature_method = TemperatureMethod::NEAREST; } + // Determine actual temperatures to read -- start by checking whether a + // temperature range was given (indicated by T_max > 0), in which case all + // temperatures in the range are loaded irrespective of what temperatures + // actually appear in the model + int n = temperature.size(); + double T_min = n > 0 ? settings::temperature_range[0] : 0.0; + double T_max = n > 0 ? settings::temperature_range[1] : INFTY; + if (T_max > 0.0) { + // Determine first available temperature below or equal to T_min + auto T_min_it = + std::upper_bound(available_temps.begin(), available_temps.end(), T_min); + if (T_min_it != available_temps.begin()) + --T_min_it; + + // Determine first available temperature above or equal to T_max + auto T_max_it = + std::lower_bound(available_temps.begin(), available_temps.end(), T_max); + if (T_max_it != available_temps.end()) + ++T_max_it; + + // Add corresponding temperatures to vector + for (auto it = T_min_it; it != T_max_it; ++it) { + temps_to_read.push_back(std::round(*it)); + } + } + switch (settings::temperature_method) { case TemperatureMethod::NEAREST: // Determine actual temperatures to read