Beamformers and elements
EveryBeam is designed such that it can handle an arbitrary number of nested beamformers within each station. The smallest entity in the
EveryBeam nomenclature is the Element. Beamformers as well as the element inherit from the Antenna base class.
For efficiency reasons, certain telescopes (in conjunction with their response models) have dedicated implementations for the
beamformer. This includes for example the BeamFormerIdenticalAntennas, BeamFormerLofarLBA, BeamFormerLofarHBA classes.
-
class Antenna
Abstract class describing an antenna, and computing the corresponding Response() and ArrayFactor().
ElementandBeamFormerclasses - and childs thereof - inherit from this class.Subclassed by BeamFormer, BeamFormerLofar, Element
Public Functions
-
inline Antenna()
Construct a new Antenna object.
-
inline Antenna(const StationCoordinateSystem &coordinate_system)
Construct a new Antenna object, given a coordinate system.
- Parameters:
coordinate_system –
-
inline virtual ~Antenna()
-
Antenna(const StationCoordinateSystem &coordinate_system, const vector3r_t &phase_reference_position, bool is_x_enabled = true, bool is_y_enabled = true)
Construct a new Antenna object, given a coordinate system and a phase reference position.
- Parameters:
coordinate_system – Coordinate system
phase_reference_position – Phase reference position (ITRF, m)
is_x_enabled – Enables or disables the X polarization.
is_y_enabled – Enables or disables the Y polarization.
-
inline Antenna(const vector3r_t &phase_reference_position)
Construct a new Antenna object.
- Parameters:
phase_reference_position – Phase reference position (ITRF, m)
-
void Transform(const StationCoordinateSystem &coordinate_system)
Transform internal coordinate systems and positions.
This method is used by Station::SetAntenna to lift an antenna out of the beamformer.
The transformation is needed because the coordinate system of an antenna in a beamformer is expressed in terms of the coordinate system of the beamformer. To turn an embedded antenna into a stand-alone antenna, the coordinate system of the beamformer needs to be applied to the coordinate system of the antenna
- Parameters:
coordinate_system – to apply in the transformation
-
inline virtual void Response(aocommon::MC2x2 *result, const ElementResponse &element_response, double time, const std::span<const double> &freqs, const vector3r_t &direction, const Options &options = {}) const
Compute the Antenna Response.
- Parameters:
time – Time, modified Julian date, UTC, in seconds (MJD(UTC), s).
freq – Frequency of the plane wave (Hz).
direction – Direction of arrival (ITRF, m).
options –
-
inline virtual void ArrayFactor(aocommon::MC2x2Diag *result, double time, const std::span<const double> &freqs, const vector3r_t &direction, const Options &options) const
Compute the array factor of the antenna.
- Parameters:
time – Time, modified Julian date, UTC, in seconds (MJD(UTC), s).
freq – Frequency of the plane wave (Hz).
direction – Direction of arrival (ITRF, m).
options –
-
inline const StationCoordinateSystem &GetCoordinateSystem() const
-
inline const vector3r_t &GetPhaseReferencePosition() const
-
inline bool IsEnabled(std::size_t i) const
- Parameters:
i – Polarization index: 0 or 1.
- Returns:
If the requested polarization is enabled.
-
inline void SetEnabled(bool is_x_enabled, bool is_y_enabled)
- Parameters:
is_x_enabled – Enables or disables the X polarization.
is_y_enabled – Enables or disables the Y polarization.
-
struct Options
Struct containing antenna options.
Public Members
-
std::span<const double> reference_freqs
Antenna reference frequencies (Hz), one for each channel.
-
vector3r_t station0
Reference direction (ITRF, m)
-
vector3r_t tile0
Tile beam former reference direction (ITRF, m).
-
bool rotate
If paralactic rotation should be applied.
-
vector3r_t east
Eastward pointing unit vector.
-
vector3r_t north
Northward pointing unit vector.
-
std::span<const double> reference_freqs
-
inline Antenna()
-
class BeamFormer : public Antenna
A BeamFormer contains a number of antennas - be it lower level beamformers or elements - and can return its combined response or array factor.
Subclassed by BeamFormerIdenticalAntennas
Public Functions
-
inline BeamFormer()
Construct a new BeamFormer object.
-
inline BeamFormer(const StationCoordinateSystem &coordinate_system, bool fixate_direction = false)
Construct a new BeamFormer object.
- Parameters:
coordinate_system – The coordinate system for the BeamFormer.
fixate_direction – If true, create a fixed direction ElementResponse object using ElementResponse::FixateDirection().
-
inline BeamFormer(StationCoordinateSystem coordinate_system, const vector3r_t &phase_reference_position)
Construct a new BeamFormer object given a coordinate system and a phase reference position.
-
inline BeamFormer(const vector3r_t &phase_reference_position)
Add an antenna to the antennas_ array.
- Parameters:
antenna –
-
inline size_t GetNrAntennas() const
- Returns:
size_t The number of antennas added to the BeamFormer.
Public Static Functions
-
static aocommon::UVector<std::complex<double>> ComputeGeometricResponse(const std::span<const vector3r_t> &phase_reference_positions, const std::span<const vector3r_t> &direction)
Compute the geometric response given the the phase reference directions in the beam former and a direction of interest. In typical use cases, the direction of interest is computed as the (frequency weighted) difference between the pointing direction and the direction of interest, i.e. direction = pointing_freq * pointing_dir - interest_freq *.
- Parameters:
phase_reference_positions – Phase reference positions.
direction – The direction of interest.
- Returns:
The geometry response for each position.
-
inline BeamFormer()
-
class BeamFormerIdenticalAntennas : public BeamFormer
Sub-class of
BeamFormerassuming that all the antennas have an identicalLocalResponse.Public Functions
-
inline BeamFormerIdenticalAntennas()
Construct a new BeamFormerIdenticalAntennas object.
-
inline BeamFormerIdenticalAntennas(const StationCoordinateSystem &coordinate_system)
Construct a new BeamFormerIdenticalAntennas object given a coordinate system.
- Parameters:
coordinate_system –
-
inline BeamFormerIdenticalAntennas(StationCoordinateSystem coordinate_system, const vector3r_t &phase_reference_position)
Construct a new BeamFormer object given a coordinate system and a phase reference position.
- Parameters:
coordinate_system –
phase_reference_position –
-
inline BeamFormerIdenticalAntennas(const vector3r_t &phase_reference_position)
-
inline BeamFormerIdenticalAntennas()
-
class BeamFormerLofarLBA : public BeamFormerLofar
Optimized implementation of the BeamFormer class for the LOFAR LBA telescope in combination with Hamaker element response model.
Public Functions
-
inline BeamFormerLofarLBA(const StationCoordinateSystem &coordinate_system)
Construct a new BeamFormerLofarLBA object given a coordinate system.
- Parameters:
coordinate_system –
-
inline void AddElementEnabled(const std::array<bool, 2> enabled)
Mark whether the element is enabled by pushing back boolean array to element_enabled_ array.
- Parameters:
enabled –
-
inline BeamFormerLofarLBA(const StationCoordinateSystem &coordinate_system)
-
class BeamFormerLofarHBA : public BeamFormerLofar
Optimized implementation of the BeamFormer class for the LOFAR HBA telescope in combination with Hamaker element response model.
Public Functions
-
inline BeamFormerLofarHBA(const StationCoordinateSystem &coordinate_system)
Construct a new BeamFormerLofarHBA object given a coordinate system.
- Parameters:
coordinate_system –
Set the (unique) Tile for the BeamFormerLofarHBA object.
- Parameters:
beamformer –
-
inline void AddTilePosition(const vector3r_t &position)
Add tile position to the tile_positions_ array.
- Parameters:
position –
-
inline void AddTileEnabled(const std::array<bool, 2> enabled)
Mark whether tile is enabled by pushing back boolean array to tile_enabled_ array.
- Parameters:
enabled –
-
inline BeamFormerLofarHBA(const StationCoordinateSystem &coordinate_system)