81 bool header_found =
false;
82 int filtr_column_index = 0;
83 int flux_column_index = 1;
84 int error_column_index = 2;
85 int upper_limit_column_index = 3;
86 int convertion_column_index = 4;
92 line = boost::regex_replace(line, boost::regex(
"[' ']{2,}"),
" ");
97 boost::trim(trimmed_line);
100 boost::split(strs, trimmed_line, boost::is_any_of(
","));
102 for (
size_t index = 0; index < expected_column_name.size(); ++index) {
103 for (
size_t index_string = 0; index_string < strs.
size(); ++index_string) {
106 if (item == expected_column_name[index]) {
107 proposed_column_index[index] = index_string;
112 if (proposed_column_index[0] >= 0 && proposed_column_index[1] >= 0 && proposed_column_index[2] >= 0) {
114 filtr_column_index = proposed_column_index[0];
115 flux_column_index = proposed_column_index[1];
116 error_column_index = proposed_column_index[2];
117 upper_limit_column_index = proposed_column_index[3];
118 convertion_column_index = proposed_column_index[4];
125 boost::split(cells, line, boost::is_any_of(
" "));
128 if (
int(cells.
size()) <= filtr_column_index ||
int(cells.
size()) <= flux_column_index ||
129 int(cells.
size()) <= error_column_index) {
132 std::string filter_value = cells[filtr_column_index];
133 boost::trim(filter_value);
135 boost::trim(flux_value);
136 std::string error_value = cells[error_column_index];
137 boost::trim(error_value);
139 filter_name_mapping.emplace_back(filter_value,
std::make_pair(flux_value, error_value));
141 if (upper_limit_column_index > 0 &&
int(cells.
size()) > upper_limit_column_index &&
142 cells[upper_limit_column_index] !=
"") {
143 float n =
std::stof(cells[upper_limit_column_index]);
144 threshold_mapping.emplace_back(filter_value, n);
146 threshold_mapping.emplace_back(filter_value, 3.0);
149 if (convertion_column_index > 0 &&
int(cells.
size()) > convertion_column_index &&
150 cells[convertion_column_index] !=
"") {
151 bool f =
std::stoi(cells[convertion_column_index]);
152 convert_from_mag_mapping.emplace_back(filter_value, f);
154 convert_from_mag_mapping.emplace_back(filter_value,
false);
157 logger.error() <<
"Syntax error in " << filename <<
": " << line <<
" => " << e.what();
159 throw Elements::Exception() <<
"Syntax error in " << filename <<
": " << line <<
" => " << e.what();
162 return std::make_tuple(filter_name_mapping, threshold_mapping, convert_from_mag_mapping);
170 auto all_filter_name_mapping = std::get<0>(parsed);
171 auto all_threshold_mapping = std::get<1>(parsed);
172 auto all_convert_mapping = std::get<2>(parsed);
178 for (
auto& pair : all_threshold_mapping) {
179 if (exclude_filters.count(pair.first) == 0) {
184 for (
auto& pair : all_convert_mapping) {
185 if (exclude_filters.count(pair.first) == 0) {
190 for (
auto& pair : all_filter_name_mapping) {
191 if (exclude_filters.count(pair.first) > 0) {
192 exclude_filters.erase(pair.first);
198 if (!exclude_filters.empty()) {
200 for (
auto& f : exclude_filters) {
201 wrong_filters << f <<
" ";