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(). Element and BeamFormer classes - 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.

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)
inline void AddAntenna(std::shared_ptr<Antenna> antenna)

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.

inline const Antenna &GetAntenna(size_t index) const
Returns:

A reference to antenna at the given index.

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.

class BeamFormerIdenticalAntennas : public BeamFormer

Sub-class of BeamFormer assuming that all the antennas have an identical LocalResponse.

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)
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

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

inline void SetTile(std::shared_ptr<BeamFormer> beamformer)

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