PURIFY
Next-generation radio interferometric imaging
yaml-parser.h
Go to the documentation of this file.
1 
7 #ifndef YAML_PARSER_H_
8 #define YAML_PARSER_H_
9 #include <assert.h>
10 #include <fstream>
11 #include <iostream>
13 #include "yaml-cpp/yaml.h"
14 
24 namespace purify {
25 class YamlParser {
26  public:
32  YamlParser(const std::string& filepath);
36  void readFile();
37 
42 
47  void parseAndSetGeneralConfiguration(const YAML::Node& node);
48 
53  void parseAndSetMeasureOperators(const YAML::Node& node);
54 
59  void parseAndSetSARA(const YAML::Node& node);
60 
64  std::vector<std::string> getWavelets(const std::string& values_str);
65 
70  void parseAndSetAlgorithmOptions(const YAML::Node& node);
71 
76  void writeOutput();
77 
78  // Variables
79 #define YAML_MACRO(TYPE, NAME, VALUE) \
80  private: \
81  TYPE NAME##_ = VALUE; \
82  \
83  public: \
84  TYPE NAME() const { return NAME##_; };
85 
86  YAML_MACRO(std::string, filepath, "")
87  YAML_MACRO(std::string, version, "")
88  YAML_MACRO(std::string, timestamp, "")
89  YAML_MACRO(std::string, logging, "")
90  YAML_MACRO(std::string, algorithm, "")
91  YAML_MACRO(factory::algo_distribution, mpiAlgorithm, factory::algo_distribution::serial)
92  YAML_MACRO(purify::utilities::vis_source, source, purify::utilities::vis_source::measurements)
93  YAML_MACRO(std::string, warm_start, "")
94  YAML_MACRO(bool, realValueConstraint, true)
95  YAML_MACRO(bool, positiveValueConstraint, true)
96  YAML_MACRO(t_int, iterations, 0)
97  YAML_MACRO(t_int, powMethod_iter, 0)
98  YAML_MACRO(t_int, width, 0)
99  YAML_MACRO(t_int, height, 0)
100  YAML_MACRO(t_int, wavelet_levels, 0)
101  YAML_MACRO(t_uint, Jx, 0)
102  YAML_MACRO(t_uint, Jy, 0)
103  YAML_MACRO(t_uint, Jw, 0)
104  YAML_MACRO(t_uint, sim_J, 0)
105  YAML_MACRO(t_real, oversampling, 0)
106  YAML_MACRO(t_real, powMethod_tolerance, 0)
107  YAML_MACRO(std::string, eigenvector_real, "")
108  YAML_MACRO(std::string, eigenvector_imag, "")
109  YAML_MACRO(t_real, epsilonScaling, 0)
110  YAML_MACRO(t_real, cellsizex, 0)
111  YAML_MACRO(t_real, cellsizey, 0)
112  YAML_MACRO(bool, wprojection, false)
113  YAML_MACRO(bool, mpi_wstacking, true)
114  YAML_MACRO(bool, mpi_all_to_all, true)
115  YAML_MACRO(bool, conjugate_w, true)
116  YAML_MACRO(bool, gpu, false)
117  YAML_MACRO(t_int, precondition_iters, 0)
118  YAML_MACRO(t_int, kmeans_iters, 10)
119  YAML_MACRO(t_real, measurements_sigma, 1)
120  YAML_MACRO(t_real, signal_to_noise, 30)
121  YAML_MACRO(t_int, number_of_measurements, 1e5)
122  YAML_MACRO(t_real, w_rms, 100)
123  YAML_MACRO(t_real, relVarianceConvergence, 0)
124  YAML_MACRO(t_real, dualFBVarianceConvergence, 0)
125  YAML_MACRO(t_real, epsilonConvergenceScaling, 0)
126  YAML_MACRO(std::vector<std::string>, wavelet_basis, {})
127  YAML_MACRO(t_int, update_iters, 0)
128  YAML_MACRO(t_real, update_tolerance, 0)
129  YAML_MACRO(std::string, output_prefix, "")
130  YAML_MACRO(std::string, skymodel, "")
131  YAML_MACRO(std::vector<std::string>, measurements, {})
132  YAML_MACRO(bool, w_term, true)
133  YAML_MACRO(stokes, measurements_polarization, stokes::I)
134  YAML_MACRO(utilities::vis_units, measurements_units, utilities::vis_units::radians)
135  YAML_MACRO(std::string, kernel, "")
136  YAML_MACRO(t_real, regularisation_parameter, 0)
137  YAML_MACRO(t_real, stepsize, 1)
138  YAML_MACRO(t_uint, jmap_iters, 100)
139  YAML_MACRO(t_real, jmap_relVarianceConvergence, 0)
140  YAML_MACRO(t_real, jmap_objVarianceConvergence, 0)
141  YAML_MACRO(t_real, jmap_alpha, 1)
142  YAML_MACRO(t_real, jmap_beta, 1)
143 
144  YAML_MACRO(std::string, model_path, "")
145  YAML_MACRO(nondiff_func_type, nondiffFuncType, nondiff_func_type::L1Norm)
146  YAML_MACRO(diff_func_type, diffFuncType, diff_func_type::L2Norm)
147  YAML_MACRO(std::string, CRR_function_model_path, "")
148  YAML_MACRO(std::string, CRR_gradient_model_path, "")
149  YAML_MACRO(t_real, CRR_mu, 20)
150  YAML_MACRO(t_real, CRR_lambda, 5000)
151 
152  std::string output_path() const { return out_path; }
153 
154 #undef YAML_MACRO
155  private:
156  YAML::Node config_file;
157  std::string out_path;
158 
159  template <typename T>
160  T get(const YAML::Node& node_map, const std::initializer_list<const char*> indicies);
161 };
162 } // namespace purify
163 #endif /* YAML_PARSER_H */
void parseAndSetMeasureOperators(const YAML::Node &node)
Definition: yaml-parser.cc:176
void parseAndSetSARA(const YAML::Node &node)
Definition: yaml-parser.cc:200
std::string output_path() const
Definition: yaml-parser.h:152
void parseAndSetGeneralConfiguration(const YAML::Node &node)
Definition: yaml-parser.cc:102
void parseAndSetAlgorithmOptions(const YAML::Node &node)
Definition: yaml-parser.cc:208
void setParserVariablesFromYaml()
Definition: yaml-parser.cc:93
std::vector< std::string > getWavelets(const std::string &values_str)
Definition: yaml-parser.cc:281
YamlParser(const std::string &filepath)
Definition: yaml-parser.cc:19
utilities::vis_params conjugate_w(const utilities::vis_params &uv_vis)
reflects visibilities into the w >= 0 domain
std::string version()
Returns library version.
Definition: config.in.h:40
nondiff_func_type
Definition: types.h:31
diff_func_type
Definition: types.h:26
stokes
Definition: types.h:44
#define YAML_MACRO(TYPE, NAME, VALUE)
Definition: yaml-parser.h:79