|
DP3
|
#include <AntennaIntervalConstraint.h>
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< ConstraintResult > | GetResult () 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) |
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.
|
inline |
|
overridevirtual |
This method applies the constraints to the solutions.
| solutions | A 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. |
| time | Central time of interval. |
Implements dp3::ddecal::Constraint.
|
inline |
|
overridevirtual |
Perform common constraint initialization. Should be overridden when something more than assigning dimensions is needed (e.g. resizing vectors).
| frequencies | For each channel block, the mean frequency. |
Reimplemented from dp3::ddecal::Constraint.