DP3
Public Member Functions | List of all members
dp3::ddecal::DiagonalLowRankSolver Class Referencefinal

#include <DiagonalLowRankSolver.h>

Inheritance diagram for dp3::ddecal::DiagonalLowRankSolver:
dp3::ddecal::SolverBase

Public Member Functions

 DiagonalLowRankSolver (size_t n_low_rank_approximation_iterations, size_t n_power_iterations)
 
size_t NSolutionPolarizations () const override
 
void SetNLowRankApproximationIterations (size_t n_iterations)
 
void SetNPowerIterations (size_t n_power_iterations)
 
SolveResult Solve (const FullSolveData &data, std::vector< std::vector< DComplex >> &solutions, double time) override
 
- Public Member Functions inherited from dp3::ddecal::SolverBase
 SolverBase ()
 
virtual ~SolverBase ()=default
 
void AddConstraint (std::unique_ptr< Constraint > constraint)
 
virtual std::vector< SolverBase * > ConstraintSolvers ()
 
const std::vector< std::unique_ptr< Constraint > > & GetConstraints ()
 
LLSSolverType GetLLSSolverType () const
 
bool GetPhaseOnly () const
 
void GetTimings (std::ostream &os, double duration) const
 
virtual void Initialize (size_t n_antennas, const std::vector< size_t > &n_solutions_per_direction, size_t n_channel_blocks)
 
void SetDdConstraintWeights (const std::vector< std::vector< double >> &weights)
 
void SetLLSSolverType (LLSSolverType solver_type)
 
void SetPhaseOnly (bool phase_only)
 
virtual SolveResult Solve (const UniSolveData &data, std::vector< std::vector< DComplex >> &solutions, double time)
 
virtual bool SupportsDdSolutionIntervals () const
 
size_t GetMaxIterations () const
 
void SetMaxIterations (size_t max_iterations)
 
size_t GetMinIterations () const
 
void SetMinIterations (size_t min_iterations)
 
void SetAccuracy (double accuracy)
 
double GetAccuracy () const
 
void SetConstraintAccuracy (double constraint_accuracy)
 
double GetConstraintAccuracy () const
 
void SetStepSize (double step_size)
 
double GetStepSize () const
 
void SetDetectStalling (bool detect_stalling, double step_diff_sigma)
 
bool GetDetectStalling () const
 

Additional Inherited Members

- Public Types inherited from dp3::ddecal::SolverBase
typedef std::complex< float > Complex
 
typedef std::complex< double > DComplex
 
- Protected Member Functions inherited from dp3::ddecal::SolverBase
bool ApplyConstraints (size_t iteration, double time, bool has_previously_converged, SolutionSpan &next_solutions) const
 
bool ApplyConstraints (size_t iteration, double time, bool has_previously_converged, SolutionTensor &next_solutions) const
 
bool AssignSolutions (std::vector< std::vector< DComplex >> &solutions, SolutionSpan &new_solutions, bool use_constraint_accuracy, double &avg_abs_diff, std::vector< double > &step_magnitudes) const
 
bool AssignSolutions (std::vector< std::vector< DComplex >> &solutions, SolutionTensor &new_solutions, bool use_constraint_accuracy, double &avg_abs_diff, std::vector< double > &step_magnitudes) const
 
std::unique_ptr< LLSSolverCreateLLSSolver (size_t m, size_t n, size_t nrhs) const
 
bool DetectStall (size_t iteration, const std::vector< double > &step_magnitudes)
 
std::unique_ptr< aocommon::RecursiveFor > MakeOptionalRecursiveFor () const
 
SolveResult MakeResult (size_t iteration, bool has_converged, bool constraints_satisfied) const
 
size_t NAntennas () const
 
size_t NChannelBlocks () const
 
size_t NDirections () const
 
size_t NSubSolutions () const
 
size_t NSubThreads () const
 
size_t NVisibilities () const
 
void PrepareConstraints ()
 
bool ReachedStoppingCriterion (size_t iteration, bool has_converged, bool constraints_satisfied, const std::vector< double > &step_magnitudes)
 
void Step (const std::vector< std::vector< DComplex >> &solutions, SolutionTensor &next_solutions) const
 
- Static Protected Member Functions inherited from dp3::ddecal::SolverBase
static void MakeSolutionsFinite1Pol (std::vector< std::vector< DComplex >> &solutions)
 
static void MakeSolutionsFinite2Pol (std::vector< std::vector< DComplex >> &solutions)
 
static void MakeSolutionsFinite4Pol (std::vector< std::vector< DComplex >> &solutions)
 

Detailed Description

Experimental solver that make use of the property that the antenna x antenna visibility matrix is a low-rank (rank 1 to be precise) matrix. A normal low-rank approximation can be solved exactly and without iterations, but because there are weights and missing values in the matrix, an iterative procedure is required, and the result is not exact.

When the step size is set to 1, this solver makes an immediate step. Because a solving iteration uses all data for one direction at once, this may be a good approach (in contrast to the iterative diagonal solver). To help convergence in this case, the directions are solved in order of largest power first.

Constructor & Destructor Documentation

◆ DiagonalLowRankSolver()

dp3::ddecal::DiagonalLowRankSolver::DiagonalLowRankSolver ( size_t  n_low_rank_approximation_iterations,
size_t  n_power_iterations 
)
inline

Member Function Documentation

◆ NSolutionPolarizations()

size_t dp3::ddecal::DiagonalLowRankSolver::NSolutionPolarizations ( ) const
inlineoverridevirtual
Returns
The number of polarizations in the solution.

Implements dp3::ddecal::SolverBase.

◆ SetNLowRankApproximationIterations()

void dp3::ddecal::DiagonalLowRankSolver::SetNLowRankApproximationIterations ( size_t  n_iterations)
inline

Number of full low-rank approximation iterations.

◆ SetNPowerIterations()

void dp3::ddecal::DiagonalLowRankSolver::SetNPowerIterations ( size_t  n_power_iterations)
inline

Number of power iterations performed to calculate the eigen value. See also DominantEigenPair().

◆ Solve()

SolveResult dp3::ddecal::DiagonalLowRankSolver::Solve ( const FullSolveData data,
std::vector< std::vector< DComplex >> &  solutions,
double  time 
)
overridevirtual

Solves multi-directional Jones matrices. Takes the (single) measured data and the (multi-directional) model data, and solves the optimization problem that minimizes the norm of the differences.

Parameters
dataBuffer with weighted data and model data.
solutionsThe per-channel and per-antenna solutions. solutions[ch] is a pointer for channelblock ch to antenna x directions x pol solutions.

Reimplemented from dp3::ddecal::SolverBase.


The documentation for this class was generated from the following file: