DP3
Settings.h
Go to the documentation of this file.
1 // Copyright (C) 2021 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
4 #ifndef DP3_DDECAL_SETTINGS_H_
5 #define DP3_DDECAL_SETTINGS_H_
6 
7 #include <map>
8 #include <optional>
9 #include <set>
10 #include <string>
11 #include <vector>
12 
14 #include "base/CalType.h"
15 #include "base/Direction.h"
16 #include "common/ParameterSet.h"
17 
18 namespace dp3::ddecal {
19 
20 enum class SolverAlgorithm {
21  kLowRank,
24  kHybrid,
25  kLBFGS
26 };
27 
28 enum class SolverDataUse { kSingle, kDual, kFull };
29 
30 std::string ToString(SolverAlgorithm algorithm);
31 
33 struct Settings {
34  public:
40  Settings(const common::ParameterSet& parset, const std::string& prefix);
41 
42  void PrepareSubSolutionsPerDirection(size_t n_directions);
43 
47  size_t GetNSolutions() const;
48 
53  std::vector<double> GetExpandedSmoothnessDdFactors() const;
54 
63  std::vector<std::pair<std::string, std::string>> GetReusedDirections(
64  const std::map<std::string, dp3::base::Direction>& directions) const;
65 
66  private:
70  bool GetBool(const std::string& key, bool default_value) const;
71 
75  unsigned int GetUint(const std::string& key,
76  unsigned int default_value) const;
77 
82  std::vector<size_t> GetSizeTVector(
83  const std::string& key, const std::vector<size_t>& default_value) const;
84 
85  std::vector<double> GetDoubleVector(const std::string& key) const;
86 
90  double GetDouble(const std::string& key, double default_value) const;
91 
96  std::optional<double> GetOptionalDouble(const std::string& key,
97  double default_value) const {
98  const double value = GetDouble(key, default_value);
99  if (value == default_value)
100  return {};
101  else
102  return std::optional<double>(value);
103  }
104 
108  std::string GetString(const std::string& key) const;
109 
113  std::string GetString(const std::string& key,
114  const std::string default_value) const;
115 
120  std::vector<std::string> GetStringVector(const std::string& key) const;
121 
122  std::vector<std::set<std::string>> ReadAntennaConstraint() const;
123 
124  std::vector<std::string> ReadModelDataColumns() const;
125 
126  private:
127  const common::ParameterSet* parset; // Only valid during construction!
128 
129  public:
130  const std::string name;
131  const std::string h5parm_name;
132  const std::string stat_filename;
133  const std::string parset_string;
134 
138  const bool flag_unconverged;
139  const bool flag_diverged_only;
140  const bool only_predict;
141  const bool subtract;
142  const bool keep_model_data;
144 
145  const size_t solution_interval;
146  const double min_vis_ratio;
147  const size_t n_channels;
153  std::vector<size_t> sub_solutions_per_direction;
158  std::vector<std::string> antenna_averaging_factors;
159 
160  // Constraint settings.
162  const double core_constraint;
163  const std::vector<std::set<std::string>> antenna_constraint;
164  const double smoothness_constraint;
167  const std::string smoothness_ref_antenna;
174  std::vector<double> smoothness_dd_factors;
175  std::vector<std::string> antenna_smoothness_factors;
177 
178  // Solver settings.
180  const size_t max_iterations;
181  const double tolerance;
182  const double step_size;
184  const bool detect_stalling;
185  const double step_diff_sigma;
186  const bool approximate_tec;
187  const bool phase_reference;
188  const double approx_tolerance;
189  const size_t max_approx_iterations;
190  const size_t approx_chunk_size;
191  const bool rotation_reference;
194  const size_t max_tec_delay_wraps;
195  std::optional<double> faraday_limit;
196  // LBFGS robust parameter (aka degrees of freedom)
197  const double lbfgs_robust_nu;
198  // LBFGS max iterations per mini-batch
199  const size_t lbfgs_max_iter;
200  // LBFGS history size
201  const size_t lbfgs_history_size;
202  // LBFGS minibatches
203  const size_t lbfgs_minibatches;
204  // LBFGS solution lower limit
205  const double lbfgs_min_solution;
206  // LBFGS solution upper limit
207  const double lbfgs_max_solution;
208  const bool use_gpu;
209  // keep host buffers between solve iteration
210  // for the GPU solver
211  const bool keep_host_buffers;
212  // Number of iterations for the low-rank approximation (LRA) method
213  const size_t n_lra_iterations;
214  // In each lra iteration, the number of power-method iterations to take
216 
217  const std::vector<std::string> model_data_columns;
218  const std::vector<std::string> reuse_model_data;
219 
220  const std::string idg_region_filename;
221  const std::vector<std::string> idg_image_filenames;
222 
224 
225  const std::vector<std::string> directions;
226  const std::string source_db;
227 };
228 
230 void ShowConstraintSettings(std::ostream& output, const Settings& settings);
231 
236 std::vector<size_t> GetSolutionToDirectionVector(
237  const std::vector<uint32_t>& sub_solutions_per_direction);
238 
239 } // namespace dp3::ddecal
240 
241 #endif
Implements a map of Key-Value pairs.
Definition: ParameterSet.h:31
CalType
Definition: CalType.h:11
Definition: AmplitudeOnlyConstraint.h:12
std::string ToString(SolverAlgorithm algorithm)
std::vector< size_t > GetSolutionToDirectionVector(const std::vector< uint32_t > &sub_solutions_per_direction)
void ShowConstraintSettings(std::ostream &output, const Settings &settings)
SolverDataUse
Definition: Settings.h:28
SolverAlgorithm
Definition: Settings.h:20
LLSSolverType
Definition: LLSSolver.h:18
This struct parses the DDECal parset settings and stores them.
Definition: Settings.h:33
const double smoothness_spectral_exponent
Definition: Settings.h:168
const std::vector< std::string > idg_image_filenames
Definition: Settings.h:221
void PrepareSubSolutionsPerDirection(size_t n_directions)
std::vector< std::string > antenna_smoothness_factors
Definition: Settings.h:175
const base::CalType faraday_diagonal_mode
Definition: Settings.h:193
const std::string h5parm_name
Definition: Settings.h:131
const size_t lbfgs_max_iter
Definition: Settings.h:199
const double approx_tolerance
Definition: Settings.h:188
const std::string name
Definition: Settings.h:130
const bool phase_reference
Definition: Settings.h:187
const size_t n_channels
Definition: Settings.h:147
const size_t n_lra_power_iterations
Definition: Settings.h:215
const size_t max_iterations
Definition: Settings.h:180
const bool use_gpu
Definition: Settings.h:208
const double lbfgs_max_solution
Definition: Settings.h:207
const SolverAlgorithm solver_algorithm
Definition: Settings.h:143
const double lbfgs_min_solution
Definition: Settings.h:205
const size_t n_lra_iterations
Definition: Settings.h:213
const double tolerance
Definition: Settings.h:181
const std::vector< std::string > model_data_columns
Definition: Settings.h:217
bool model_weighted_constraints
Definition: Settings.h:161
const bool only_predict
Definition: Settings.h:140
const size_t max_approx_iterations
Definition: Settings.h:189
const bool flag_diverged_only
Definition: Settings.h:139
const std::string smoothness_ref_antenna
Definition: Settings.h:167
const double smoothness_constraint
Definition: Settings.h:164
const std::vector< std::string > directions
Definition: Settings.h:225
const double core_constraint
Definition: Settings.h:162
const double lbfgs_robust_nu
Definition: Settings.h:197
const std::string stat_filename
Definition: Settings.h:132
size_t GetNSolutions() const
const double smoothness_ref_frequency
Definition: Settings.h:165
const size_t solution_interval
Definition: Settings.h:145
const double screen_core_constraint
Definition: Settings.h:176
std::optional< double > faraday_limit
Definition: Settings.h:195
const bool rotation_reference
Definition: Settings.h:191
std::vector< double > GetExpandedSmoothnessDdFactors() const
const bool detect_stalling
Definition: Settings.h:184
const bool propagate_solutions
Definition: Settings.h:136
const SolverDataUse solver_data_use
Definition: Settings.h:183
std::vector< size_t > sub_solutions_per_direction
Definition: Settings.h:153
const std::string idg_region_filename
Definition: Settings.h:220
std::vector< std::pair< std::string, std::string > > GetReusedDirections(const std::map< std::string, dp3::base::Direction > &directions) const
const bool subtract
Definition: Settings.h:141
const bool propagate_converged_only
Definition: Settings.h:137
const double min_vis_ratio
Definition: Settings.h:146
const base::CalType rotation_diagonal_mode
Definition: Settings.h:192
const bool approximate_tec
Definition: Settings.h:186
const std::string parset_string
Definition: Settings.h:133
const size_t max_tec_delay_wraps
Definition: Settings.h:194
Settings(const common::ParameterSet &parset, const std::string &prefix)
const std::string source_db
Definition: Settings.h:226
const std::vector< std::set< std::string > > antenna_constraint
Definition: Settings.h:163
bool smoothness_kernel_truncation
Definition: Settings.h:169
const bool flag_unconverged
Definition: Settings.h:138
const std::vector< std::string > reuse_model_data
Definition: Settings.h:218
std::vector< std::string > antenna_averaging_factors
Definition: Settings.h:158
const size_t approx_chunk_size
Definition: Settings.h:190
const bool keep_host_buffers
Definition: Settings.h:211
const double smoothness_ref_distance
Definition: Settings.h:166
const base::CalType mode
Definition: Settings.h:135
const double step_diff_sigma
Definition: Settings.h:185
std::vector< double > smoothness_dd_factors
Definition: Settings.h:174
const ddecal::LLSSolverType lls_solver_type
Definition: Settings.h:179
const size_t lbfgs_minibatches
Definition: Settings.h:203
const size_t lbfgs_history_size
Definition: Settings.h:201
const double step_size
Definition: Settings.h:182
const bool keep_model_data
Definition: Settings.h:142
const bool use_sagecal_predict
Definition: Settings.h:223