7#include <glaze/core/context.hpp>
8#include <glaze/core/reflect.hpp>
9#include <glaze/json/read.hpp>
12#include <range/v3/view/map.hpp>
15#include <unordered_map>
18namespace rng = ranges;
23 auto split_string_view(std::string_view str, std::string_view del) -> std::vector<std::string_view>
25 auto splits = std::vector<std::string_view>{};
27 for (
auto sub_begin = str.find_first_not_of(del); sub_begin != std::string_view::npos;
28 sub_begin = str.find_first_not_of(del, sub_begin))
30 auto sub_end = str.find_first_of(del, sub_begin);
31 sub_end = (sub_end == std::string_view::npos) ? str.size() : sub_end;
32 auto sub_str = str.substr(sub_begin, sub_end - sub_begin);
33 splits.push_back(sub_str);
39 auto parse_parameter(std::string_view line_string) -> std::optional<ParResultEntry>
41 auto splits_view = split_string_view(line_string,
" ");
42 auto result = ParResultEntry{};
44 constexpr auto max_size = 5;
45 constexpr auto min_size = 3;
46 if (splits_view.size() >= min_size)
48 result.par_num = std::stoi(std::string{ splits_view.front() });
49 result.value = std::stof(std::string{ splits_view[1] });
50 result.pre_sigma = std::stof(std::string{ splits_view[2] });
57 if (splits_view.size() == max_size)
59 result.value_diff = std::stof(std::string{ splits_view[3] });
60 result.error = std::stof(std::string{ splits_view.back() });
62 else if (splits_view.size() != min_size)
91 auto ifile = std::ifstream(
filename_, std::ios_base::in);
92 auto buffer = std::string{};
95 std::getline(ifile, buffer);
96 while (std::getline(ifile, buffer))
98 auto result = parse_parameter(buffer);
99 if (result.has_value())
107 fmt::println(stderr,
"ERROR: parameter file {:?} cannot be read",
filename_);
114 auto obj = std::unordered_map<int, JsonParResultEntry>{};
115 auto buffer = std::string{};
116 auto error_code = glz::read_file_json(obj,
filename_, buffer);
117 if (error_code == glz::error_code::file_open_failure)
119 fmt::println(stderr,
"Parameter JSON file {:?} doesn't exist!",
filename_);
123 fmt::println(stderr,
"{}", glz::format_error(error_code, buffer));
126 for (
const auto& [key, value] : obj)
130 .value = value.correction,
132 .value_diff = value.correction,
133 .error = value.error });
std::unordered_map< int, ParResultEntry > par_results_
void read_pede_par_file()