33 using createAxisFun = std::function<std::unique_ptr<IAxis>(std::istringstream iss)>;
34 const std::vector<std::pair<std::string, createAxisFun>>
type_map = {
35 {
"ConstKBinAxis", createFixedBinLikeAxis<ConstKBinAxis>},
36 {
"CustomBinAxis", createFixedBinLikeAxis<CustomBinAxis>},
37 {
"FixedBinAxis", createFixedBinLikeAxis<FixedBinAxis>},
69 std::string stripped_name(name);
71 stripped_name = name.substr(0, name.size() -
GzipExtension.size());
73 stripped_name = name.substr(0, name.size() -
BzipExtension.size());
96 "Error in DataFormatUtils::createAxis:: couldn't read axis type from input");
99 if (iter->first == type)
100 return iter->second(std::move(iss));
102 "Unknown axis type '"
112 while (std::getline(input_stream, line)) {
113 if (line.empty() || line[0] ==
'#')
116 std::istringstream iss(line);
117 std::vector<double> buffer;
119 for (
auto value : buffer) {
124 if (it != data->
end())
126 "DataFormatUtils::fillOutputData() -> Error while parsing data.");
133 std::vector<double> result;
134 std::istringstream iss(str);
136 if (result.empty()) {
137 std::string out = str;
138 const size_t max_string_length(10);
139 if (out.size() > max_string_length)
140 out.resize(max_string_length,
' ');
142 throw std::runtime_error(
"DataFormatUtils::parse_doubles -> Error! Can't parse double "
143 "values from a string '"
151 iss.imbue(std::locale::classic());
152 std::copy(std::istream_iterator<double>(iss), std::istream_iterator<double>(),
153 back_inserter(buffer));
161 std::getline(input_stream, line);
162 const std::vector<std::string> to_replace = {
",",
"\"",
"(",
")",
"[",
"]"};
164 return std::istringstream(line);
175 if (!(iss >> name >> nbins))
177 "createFixedBinLikeAxis() -> Error. Can't parse the string.");
179 std::vector<double> boundaries;
181 if (boundaries.size() != 2)
183 "Error in createFixedBinLikeAxis: Can't parse the string while "
184 "reading boundaries.");
186 return std::make_unique<Axis>(name, nbins, boundaries[0], boundaries[1]);
195 if (!(iss >> name >> nbins))
197 "Error in createVariableBinAxis: Can't parse the string.");
199 std::vector<double> boundaries;
201 if (boundaries.size() != nbins + 1)
203 "Error in createVariableBinAxis: wrong number of boundaries read.");
205 return std::make_unique<VariableBinAxis>(name, nbins, boundaries);
215 "Error in createPointwiseAxis:Can't parse the string.");
217 std::vector<double> coordinates;
220 return std::make_unique<PointwiseAxis>(name, coordinates);
Defines class ConstKBinAxis.
Defines class CustomBinAxis.
Defines namespace FileSystemUtils.
Defines and implements template class OutputData.
Defines class PointwiseAxis.
Defines a few helper functions.
iterator end()
Returns read/write iterator that points to the one past last element.
void setAllTo(const T &value)
Sets content of output data to specific value.
iterator begin()
Returns read/write iterator that points to the first element.
std::string extension(const std::string &path)
Returns extension of given filename.
void replaceItemsFromString(std::string &text, const std::vector< std::string > &items, const std::string &replacement="")
Replaces all occurences of items from string text with delimiter.