DP3
SolverTester.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_TEST_UNIT_SOLVER_TESTER_H_
5 #define DP3_DDECAL_TEST_UNIT_SOLVER_TESTER_H_
6 
7 #include <complex>
8 #include <memory>
9 #include <vector>
10 
11 #include "base/DPBuffer.h"
14 
15 namespace dp3 {
16 namespace ddecal {
17 
18 class SolverBase;
19 
20 namespace test {
21 
26 class SolverTester {
27  public:
29 
33  std::vector<base::DPBuffer> FillDdIntervalData(bool leakage_only = false);
34 
40 
48 
56  void SetScalarSolutions(bool use_dd_intervals);
57  void SetDiagonalSolutions(bool use_dd_intervals);
58  void SetLeakageSolutions(bool use_dd_intervals);
68  std::vector<std::vector<std::complex<double>>>& GetSolverSolutions() {
69  return solver_solutions_;
70  }
71 
76  void CheckScalarResults(double tolerance);
77  void CheckDualResults(double tolerance);
78  void CheckPolarizationLeakageResults(double tolerance);
79 
83  const std::vector<int>& Antennas1() const { return antennas1_; }
84 
88  const std::vector<int>& Antennas2() const { return antennas2_; }
89 
90  size_t NSolutions() const { return n_solutions_; }
91 
92  const std::vector<size_t>& NSolutionsPerDirection() const {
93  return n_solutions_per_direction_;
94  }
95 
96  std::vector<uint32_t> NSolutionsPerDirection32() const {
97  return std::vector<uint32_t>(n_solutions_per_direction_.begin(),
98  n_solutions_per_direction_.end());
99  }
100 
101  static std::vector<std::string> CreateDirectionNames();
102 
103  static constexpr size_t kNPolarizations = 4;
104  static constexpr size_t kNAntennas = 50;
105  static constexpr size_t kNDirections = 3;
106  static constexpr size_t kNChannels = 16;
107  static constexpr size_t kNChannelBlocks = 4;
108  static const inline std::vector<double> kFrequencies{150e6, 160e6, 170e6,
109  180e6};
110  static constexpr size_t kNRegularTimes = 50;
111  // Use more times with BDA so the number of visibilities is similar to the
112  // regular data.
113  static constexpr size_t kNBDATimes = 128;
114  static constexpr size_t kNBaselines = kNAntennas * (kNAntennas - 1) / 2;
115  static constexpr std::array<size_t, 3> kShape{kNBaselines, kNChannels,
117  static constexpr double kBdaUnitTimeInterval = 1.0;
118 
119  // Default solver settings:
120  static constexpr size_t kMaxIterations = 100;
121  static constexpr double kAccuracy = 1e-8;
122  static constexpr double kStepSize = 0.2;
123  static constexpr size_t kNThreads = 4;
124  static constexpr bool kPhaseOnly = false;
125  static constexpr size_t kDDSolutionsPerDirection[kNDirections] = {1, 2, 5};
126 
127  // Default LBFGS solver settings
128  static constexpr size_t kBatchIterations = 2;
129  static constexpr size_t kEpochs = 2;
130  static constexpr size_t kMinibatches = 4;
131  static constexpr double kRobustDOF = 200.0;
132  static constexpr size_t kHistory = 10;
133  static constexpr double kMinSolution = -1000.0;
134  static constexpr double kMaxSolution = 1000.0;
135 
136  private:
137  void InitializeSolverSettings(dp3::ddecal::SolverBase& solver) const;
138  void InitializeNSolutions(bool use_dd_intervals);
139  void SetUnitSolverSolutions(size_t solutions_per_matrix);
140 
141  std::vector<int> antennas1_;
142  std::vector<int> antennas2_;
143  std::vector<std::complex<float>> input_solutions_;
144  std::vector<std::vector<std::complex<double>>> solver_solutions_;
145  std::vector<size_t> n_solutions_per_direction_;
146  size_t n_solutions_;
147 
148  BdaSolverBuffer bda_solver_buffer_;
149 };
150 
151 } // namespace test
152 } // namespace ddecal
153 } // namespace dp3
154 
155 #endif // DP3_DDECAL_SOLVER_TESTER_H
Buffer holding the data of a timeslot/band.
Definition: BdaSolverBuffer.h:19
Definition: SolverBase.h:24
Definition: SolverTester.h:26
static constexpr size_t kMinibatches
Definition: SolverTester.h:130
static constexpr double kStepSize
Definition: SolverTester.h:122
void CheckPolarizationLeakageResults(double tolerance)
static constexpr double kMaxSolution
Definition: SolverTester.h:134
const std::vector< size_t > & NSolutionsPerDirection() const
Definition: SolverTester.h:92
void SetDiagonalSolutions(bool use_dd_intervals)
void SetScalarSolutions(bool use_dd_intervals)
const ddecal::BdaSolverBuffer & FillBDAData()
static constexpr double kRobustDOF
Definition: SolverTester.h:131
static constexpr size_t kNRegularTimes
Definition: SolverTester.h:110
void InitializeSolver(dp3::ddecal::SolverBase &solver) const
static constexpr bool kPhaseOnly
Definition: SolverTester.h:124
void CheckDualResults(double tolerance)
static constexpr size_t kNChannels
Definition: SolverTester.h:106
const std::vector< int > & Antennas2() const
Definition: SolverTester.h:88
static constexpr size_t kNDirections
Definition: SolverTester.h:105
static constexpr size_t kBatchIterations
Definition: SolverTester.h:128
size_t NSolutions() const
Definition: SolverTester.h:90
static constexpr size_t kNBaselines
Definition: SolverTester.h:114
static constexpr std::array< size_t, 3 > kShape
Definition: SolverTester.h:115
const std::vector< int > & Antennas1() const
Definition: SolverTester.h:83
static constexpr size_t kNChannelBlocks
Definition: SolverTester.h:107
static constexpr size_t kNPolarizations
Definition: SolverTester.h:103
void SetLeakageSolutions(bool use_dd_intervals)
std::vector< base::DPBuffer > FillDdIntervalData(bool leakage_only=false)
static constexpr size_t kHistory
Definition: SolverTester.h:132
static constexpr double kAccuracy
Definition: SolverTester.h:121
std::vector< std::vector< std::complex< double > > > & GetSolverSolutions()
Definition: SolverTester.h:68
static constexpr size_t kNBDATimes
Definition: SolverTester.h:113
static constexpr size_t kEpochs
Definition: SolverTester.h:129
static constexpr size_t kMaxIterations
Definition: SolverTester.h:120
static constexpr size_t kNThreads
Definition: SolverTester.h:123
static constexpr double kMinSolution
Definition: SolverTester.h:133
static const std::vector< double > kFrequencies
Definition: SolverTester.h:108
static constexpr size_t kDDSolutionsPerDirection[kNDirections]
Definition: SolverTester.h:125
static std::vector< std::string > CreateDirectionNames()
static constexpr double kBdaUnitTimeInterval
Definition: SolverTester.h:117
void CheckScalarResults(double tolerance)
static constexpr size_t kNAntennas
Definition: SolverTester.h:104
std::vector< uint32_t > NSolutionsPerDirection32() const
Definition: SolverTester.h:96
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53