4 #ifndef DP3_DDECAL_CONSTRAINT_H_
5 #define DP3_DDECAL_CONSTRAINT_H_
12 #include <xtensor/containers/xtensor.hpp>
16 #include "../Solutions.h"
48 [[maybe_unused]]
size_t iteration,
49 [[maybe_unused]]
bool finalIter) {}
81 virtual std::vector<ConstraintResult>
GetResult()
const {
return {}; }
89 const std::vector<uint32_t>& solutions_per_direction,
90 const std::vector<double>& frequencies) {
91 assert(n_antennas != 0);
92 assert(!solutions_per_direction.empty());
93 assert(!frequencies.empty());
94 n_antennas_ = n_antennas;
95 solutions_per_direction_ = solutions_per_direction;
96 n_channel_blocks_ = frequencies.size();
97 n_sub_solutions_ = std::accumulate(solutions_per_direction.begin(),
98 solutions_per_direction.end(), 0u);
99 assert(n_sub_solutions_ != 0);
106 virtual void SetWeights([[maybe_unused]]
const std::vector<double>& weights) {
117 const std::vector<std::vector<double>>& solution_weights) {}
120 [[maybe_unused]]
double duration)
const {}
123 size_t NDirections()
const {
return solutions_per_direction_.size(); }
132 return solutions_per_direction_[direction];
136 return std::isfinite(value.real()) && std::isfinite(value.imag());
146 size_t n_antennas_ = 0;
147 size_t n_channel_blocks_ = 0;
148 size_t n_sub_solutions_ = 0;
149 std::vector<uint32_t> solutions_per_direction_;
This class is the base class for classes that implement a constraint on calibration solutions....
Definition: Constraint.h:27
size_t NAntennas() const
Definition: Constraint.h:122
size_t NChannelBlocks() const
Definition: Constraint.h:130
void ApplyReferenceAntenna(SolutionSpan &solutions)
static bool isfinite(const dcomplex &value)
Definition: Constraint.h:135
std::complex< double > dcomplex
Definition: Constraint.h:29
size_t NDirections() const
Definition: Constraint.h:123
virtual bool Satisfied() const
Definition: Constraint.h:58
virtual std::vector< ConstraintResult > GetResult() const
Definition: Constraint.h:81
virtual void SetWeights([[maybe_unused]] const std::vector< double > &weights)
Definition: Constraint.h:106
virtual void Initialize(size_t n_antennas, const std::vector< uint32_t > &solutions_per_direction, const std::vector< double > &frequencies)
Definition: Constraint.h:88
virtual ~Constraint()=default
virtual void Apply(SolutionSpan &solutions, double time)=0
uint32_t GetSubSolutions(size_t direction) const
Definition: Constraint.h:131
virtual void SetSubSolutionWeights(const std::vector< std::vector< double >> &solution_weights)
Definition: Constraint.h:116
virtual void PrepareIteration([[maybe_unused]] bool hasReachedPrecision, [[maybe_unused]] size_t iteration, [[maybe_unused]] bool finalIter)
Definition: Constraint.h:47
size_t NSubSolutions() const
Definition: Constraint.h:129
virtual void GetTimings([[maybe_unused]] std::ostream &os, [[maybe_unused]] double duration) const
Definition: Constraint.h:119
Definition: AmplitudeOnlyConstraint.h:12
aocommon::xt::Span< std::complex< double >, 4 > SolutionSpan
Definition: Solutions.h:20