26 std::istringstream getAxisStringRepresentation(std::istream& input_stream);
28 template <
class Axis> std::unique_ptr<IAxis> createFixedBinLikeAxis(std::istringstream iss);
29 std::unique_ptr<IAxis> createVariableBinAxis(std::istringstream iss);
30 std::unique_ptr<IAxis> createPointwiseAxis(std::istringstream iss);
32 using createAxisFun = std::function<std::unique_ptr<IAxis>(std::istringstream iss)>;
33 const std::vector<std::pair<std::string, createAxisFun>> type_map = {
34 {
"ConstKBinAxis", createFixedBinLikeAxis<ConstKBinAxis>},
35 {
"CustomBinAxis", createFixedBinLikeAxis<CustomBinAxis>},
36 {
"FixedBinAxis", createFixedBinLikeAxis<FixedBinAxis>},
37 {
"PointwiseAxis", createPointwiseAxis},
38 {
"VariableBinAxis", createVariableBinAxis}};
40 const std::string GzipExtension =
".gz";
41 const std::string BzipExtension =
".bz2";
42 const std::string IntExtension =
".int";
43 const std::string TiffExtension =
".tif";
44 const std::string TiffExtension2 =
".tiff";
68 std::string stripped_name(
name);
70 stripped_name =
name.substr(0,
name.size() - GzipExtension.size());
72 stripped_name =
name.substr(0,
name.size() - BzipExtension.size());
91 auto iss = getAxisStringRepresentation(input_stream);
94 throw std::runtime_error(
95 "Error in DataFormatUtils::createAxis:: couldn't read axis type from input");
97 for (
auto iter = type_map.cbegin(); iter != type_map.end(); ++iter)
98 if (iter->first == type)
99 return iter->second(std::move(iss));
100 throw std::runtime_error(
"Error in DataFormatUtils::createAxis:"
101 "Unknown axis type '"
111 while (std::getline(input_stream, line)) {
112 if (line.empty() || line[0] ==
'#')
115 std::istringstream iss(line);
116 std::vector<double> buffer;
118 for (
auto value : buffer) {
123 if (it != data->
end())
124 throw std::runtime_error(
"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 '"
153 iss.imbue(std::locale::classic());
154 std::copy(std::istream_iterator<double>(iss), std::istream_iterator<double>(),
155 back_inserter(buffer));
159 std::istringstream getAxisStringRepresentation(std::istream& input_stream)
162 std::getline(input_stream, line);
163 const std::vector<std::string> to_replace = {
",",
"\"",
"(",
")",
"[",
"]"};
165 return std::istringstream(line);
172 template <
class Axis> std::unique_ptr<IAxis> createFixedBinLikeAxis(std::istringstream iss)
176 if (!(iss >>
name >> nbins))
177 throw std::runtime_error(
"createFixedBinLikeAxis() -> Error. Can't parse the string.");
179 std::vector<double> boundaries;
181 if (boundaries.size() != 2)
182 throw std::runtime_error(
"Error in createFixedBinLikeAxis: Can't parse the string while "
183 "reading boundaries.");
185 return std::make_unique<Axis>(
name, nbins, boundaries[0], boundaries[1]);
190 std::unique_ptr<IAxis> createVariableBinAxis(std::istringstream iss)
194 if (!(iss >>
name >> nbins))
195 throw std::runtime_error(
"Error in createVariableBinAxis: Can't parse the string.");
197 std::vector<double> boundaries;
199 if (boundaries.size() != nbins + 1)
200 throw std::runtime_error(
201 "Error in createVariableBinAxis: wrong number of boundaries read.");
203 return std::make_unique<VariableBinAxis>(
name, nbins, boundaries);
208 std::unique_ptr<IAxis> createPointwiseAxis(std::istringstream iss)
212 throw std::runtime_error(
"Error in createPointwiseAxis:Can't parse the string.");
214 std::vector<double> coordinates;
217 return std::make_unique<PointwiseAxis>(
name, coordinates);
Defines a few helper functions.
Defines class ConstKBinAxis.
Defines class CustomBinAxis.
Defines namespace FileSystemUtils.
Defines and implements templated class OutputData.
Defines class PointwiseAxis.
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.
QString const & name(EShape k)
void replaceItemsFromString(std::string &text, const std::vector< std::string > &items, const std::string &replacement="")
Replaces all occurrences of items from string text with delimiter.