DP3
TecConstraint.h
Go to the documentation of this file.
1 // Copyright (C) 2020 ASTRON (Netherlands Institute for Radio Astronomy)
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 
4 #ifndef DP3_DDECAL_TEC_CONSTRAINT_H_
5 #define DP3_DDECAL_TEC_CONSTRAINT_H_
6 
7 #include <vector>
8 
9 #include "Constraint.h"
10 #include "PieceWisePhaseFitter.h"
11 
12 #include "base/PhaseFitter.h"
13 
14 #include <vector>
15 #include <ostream>
16 
17 namespace dp3::ddecal {
18 
19 class TecConstraint : public Constraint {
20  public:
21  enum class Mode {
25  kTecOnly
26  };
27 
29 
30  void Initialize(size_t nAntennas,
31  const std::vector<uint32_t>& solutions_per_direction,
32  const std::vector<double>& frequencies) override;
33 
35  void SetWeights(const std::vector<double>& weights) final override;
36 
38  void setDoPhaseReference(bool doPhaseReference) {
39  do_phase_reference_ = doPhaseReference;
40  }
41 
42  void Apply(SolutionSpan& solutions, double time) override;
43 
44  std::vector<ConstraintResult> GetResult() const override { return results_; };
45 
46  protected:
47  virtual void initializeChild() {}
48 
51  std::vector<PhaseFitter> phase_fitters_;
52  std::vector<double> weights_;
53  std::vector<ConstraintResult> results_;
54 };
55 
57  public:
59  : TecConstraint(mode),
60  finished_approximate_stage_(false),
61  fitting_chunk_size_(0),
62  max_approx_iters_(50) {}
63 
64  void PrepareIteration(bool has_reached_precision, size_t iteration,
65  bool final_iter) override {
66  finished_approximate_stage_ =
67  has_reached_precision || final_iter || iteration >= max_approx_iters_;
68  for (size_t thread = 0; thread != phase_fitters_.size(); ++thread) {
69  std::fill(
70  phase_fitters_[thread].WeightData(),
71  phase_fitters_[thread].WeightData() + phase_fitters_[thread].Size(),
72  1.0);
73  }
74  }
75 
76  bool Satisfied() const override { return finished_approximate_stage_; }
77 
78  void Apply(SolutionSpan& solutions, double time) override;
79 
80  void SetFittingChunkSize(size_t fitting_chunk_size) {
81  fitting_chunk_size_ = fitting_chunk_size;
82  }
83 
84  void SetMaxApproximatingIterations(size_t max_approx_iters) {
85  max_approx_iters_ = max_approx_iters;
86  }
87 
88  std::vector<ConstraintResult> GetResult() const override {
89  return finished_approximate_stage_ ? results_
90  : std::vector<ConstraintResult>();
91  };
92 
93  protected:
94  void initializeChild() override;
95 
96  private:
97  bool finished_approximate_stage_;
98  std::vector<PieceWisePhaseFitter> pw_fitters_;
99  std::vector<std::vector<double>> thread_data_;
100  std::vector<std::vector<double>> thread_fitted_data_;
101  std::vector<std::vector<double>> thread_weights_;
102  size_t fitting_chunk_size_, max_approx_iters_;
103 };
104 
105 } // namespace dp3::ddecal
106 
107 #endif
Definition: TecConstraint.h:56
ApproximateTECConstraint(Mode mode)
Definition: TecConstraint.h:58
std::vector< ConstraintResult > GetResult() const override
Definition: TecConstraint.h:88
bool Satisfied() const override
Definition: TecConstraint.h:76
void PrepareIteration(bool has_reached_precision, size_t iteration, bool final_iter) override
Definition: TecConstraint.h:64
void SetMaxApproximatingIterations(size_t max_approx_iters)
Definition: TecConstraint.h:84
void SetFittingChunkSize(size_t fitting_chunk_size)
Definition: TecConstraint.h:80
void Apply(SolutionSpan &solutions, double time) override
This class is the base class for classes that implement a constraint on calibration solutions....
Definition: Constraint.h:27
Definition: TecConstraint.h:19
void Initialize(size_t nAntennas, const std::vector< uint32_t > &solutions_per_direction, const std::vector< double > &frequencies) override
std::vector< ConstraintResult > results_
Definition: TecConstraint.h:53
bool do_phase_reference_
Definition: TecConstraint.h:50
void SetWeights(const std::vector< double > &weights) final override
std::vector< PhaseFitter > phase_fitters_
Definition: TecConstraint.h:51
Mode
Definition: TecConstraint.h:21
virtual void initializeChild()
Definition: TecConstraint.h:47
std::vector< ConstraintResult > GetResult() const override
Definition: TecConstraint.h:44
std::vector< double > weights_
Definition: TecConstraint.h:52
void Apply(SolutionSpan &solutions, double time) override
void setDoPhaseReference(bool doPhaseReference)
Definition: TecConstraint.h:38
Mode mode_
Definition: TecConstraint.h:49
Definition: AmplitudeOnlyConstraint.h:12
aocommon::xt::Span< std::complex< double >, 4 > SolutionSpan
Definition: Solutions.h:20