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

#include <AntennaIntervalConstraint.h>

Inheritance diagram for dp3::ddecal::AntennaIntervalConstraint:
dp3::ddecal::Constraint

Public Member Functions

 AntennaIntervalConstraint (const std::vector< size_t > &antenna_averaging_factors)
 
void Apply (SolutionSpan &solutions, double time) override
 
const std::vector< size_t > & GetIntervalsPerAntenna () const
 
void Initialize (size_t n_antennas, const std::vector< uint32_t > &solutions_per_direction, const std::vector< double > &frequencies) override
 
- Public Member Functions inherited from dp3::ddecal::Constraint
virtual ~Constraint ()=default
 
void ApplyReferenceAntenna (SolutionSpan &solutions)
 
virtual std::vector< ConstraintResultGetResult () const
 
uint32_t GetSubSolutions (size_t direction) const
 
virtual void GetTimings ([[maybe_unused]] std::ostream &os, [[maybe_unused]] double duration) const
 
size_t NAntennas () const
 
size_t NChannelBlocks () const
 
size_t NDirections () const
 
size_t NSubSolutions () const
 
virtual void PrepareIteration ([[maybe_unused]] bool hasReachedPrecision, [[maybe_unused]] size_t iteration, [[maybe_unused]] bool finalIter)
 
virtual bool Satisfied () const
 
virtual void SetSubSolutionWeights (const std::vector< std::vector< double >> &solution_weights)
 
virtual void SetWeights ([[maybe_unused]] const std::vector< double > &weights)
 

Additional Inherited Members

- Public Types inherited from dp3::ddecal::Constraint
typedef std::complex< double > dcomplex
 
- Static Public Member Functions inherited from dp3::ddecal::Constraint
static bool isfinite (const dcomplex &value)
 

Detailed Description

This constraint allows using different intervals for different antennas. It does this by averaging solutions of the same antenna but from different sub-intervals together.

Ionospheric effects vary more strongly in time and frequency for more distant stations (relative to a central reference station). Thus, by using shorter time intervals and less frequency smoothing for more distant groups of stations, these fast variations can be captured without adding too much additional free parameters for more central stations. Antenna intervals and smoothing depend on the expected variation per group of antenna. For LOFAR, CS can typically have at least 8 times longer intervals compared to RS.

This constraint works together with the "direction-dependent intervals" setting. If only antenna-dependent intervals are desired, the solutions-per-direction setting should be set to the maximum antenna averaging factor. E.g., with antenna_averaging_factors = {3, 6, 1}, the solutions_per_direction is set to 6 for all directions. This will use a time interval of 1/2, 1 and 1/6 solution interval for the antennas 0, 1 and 2, respectively.

Directional and antenna dependence can be combined, in which case the two work cummulatively. That is, with a setting of antenna_averaging_factors = {3, 6, 1} and solutions_per_direction = {6, 6, 1, 1} for direction 0 and 1, the solver will divide the solution interval into 6 subsolutions. For antenna 0, every 3 of those will be averaged together. For directions 2 and 3, there is only 1 subsolution available, so no averaging is performed for any of the antennas.

Constructor & Destructor Documentation

◆ AntennaIntervalConstraint()

dp3::ddecal::AntennaIntervalConstraint::AntennaIntervalConstraint ( const std::vector< size_t > &  antenna_averaging_factors)
inline

Member Function Documentation

◆ Apply()

void dp3::ddecal::AntennaIntervalConstraint::Apply ( SolutionSpan solutions,
double  time 
)
overridevirtual

This method applies the constraints to the solutions.

Parameters
solutionsA 4D array with dimensions n_channel_blocks x n_antennas x n_sub_solutions x n_pol solutions. n_pol is the dimension with the fastest changing index. Using a span instead of a real tensor as argument type avoids the need for copying data in Python bindings.
timeCentral time of interval.

Implements dp3::ddecal::Constraint.

◆ GetIntervalsPerAntenna()

const std::vector<size_t>& dp3::ddecal::AntennaIntervalConstraint::GetIntervalsPerAntenna ( ) const
inline

◆ Initialize()

void dp3::ddecal::AntennaIntervalConstraint::Initialize ( size_t  n_antennas,
const std::vector< uint32_t > &  solutions_per_direction,
const std::vector< double > &  frequencies 
)
overridevirtual

Perform common constraint initialization. Should be overridden when something more than assigning dimensions is needed (e.g. resizing vectors).

Parameters
frequenciesFor each channel block, the mean frequency.

Reimplemented from dp3::ddecal::Constraint.


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