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 CoordinateSystem &coordinate_system)
Construct a new Antenna object, given a coordinate system.
- Parameters:
coordinate_system –
-
inline virtual ~Antenna()
-
Antenna(const CoordinateSystem &coordinate_system, const vector3r_t &phase_reference_position)
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)
-
Antenna(const vector3r_t &phase_reference_position)
Construct a new Antenna object.
- Parameters:
phase_reference_position – Phase reference position (ITRF, m)
-
virtual std::shared_ptr<Antenna> Clone() const = 0
Makes a copy of this Antenna object.
The method is virtual, so that copies can be created from a pointer to the base (Antenna) class. The original remains unchanged, therefore the method is const. The method has no implementation in the Antenna class, because Antenna is abstract, so no copy can be instantiated.
This method is used by the ExtractAntenna method of the BeamFormer class to create a copy of one of the Antennas it contains.
-
void Transform(const CoordinateSystem &coordinate_system)
Transform internal coordinate systems and positions.
This method is used by BeamFormer::ExtractAntenna 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 aocommon::MC2x2 Response(const ElementResponse &element_response, real_t time, real_t freq, 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 aocommon::MC2x2Diag ArrayFactor(real_t time, real_t freq, 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 –
Public Members
-
CoordinateSystem coordinate_system_
-
vector3r_t phase_reference_position_
-
bool enabled_[2]
Public Static Attributes
-
static constexpr CoordinateSystem IdentityCoordinateSystem = {CoordinateSystem::zero_origin, CoordinateSystem::identity_axes}
-
struct CoordinateSystem
Station coordinate system.
A right handed, cartesian, local coordinate system with coordinate axes
p,q, andris associated with each antenna field.The r-axis is orthogonal to the antenna field, and points towards the local pseudo zenith.
The q-axis is the northern bisector of the
XandYdipoles, i.e. it is the reference direction from which the orientation of the dual dipole antennae is determined. The q-axis points towards the North at the core. At remote sites it is defined as the intersection of the antenna field plane and a plane parallel to the meridian plane at the core. This ensures the reference directions at all sites are similar.The p-axis is orthogonal to both other axes, and points towards the East at the core.
The axes and origin of the anntena field coordinate system are expressed as vectors in the geocentric, cartesian, ITRF coordinate system, in meters.
See also
“LOFAR Reference Plane and Reference Direction”, M.A. Brentjens, LOFAR-ASTRON-MEM-248.
Public Static Attributes
-
static constexpr vector3r_t zero_origin = vector3r_t{0.0, 0.0, 0.0}
-
struct Axes
-
static constexpr vector3r_t zero_origin = vector3r_t{0.0, 0.0, 0.0}
-
struct Options
Struct containing antenna options.
Public Members
-
real_t freq0
Antenna reference frequency (Hz).
-
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.
-
real_t freq0
-
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 Types
-
typedef std::shared_ptr<BeamFormer> Ptr
Public Functions
-
inline BeamFormer()
Construct a new BeamFormer object.
-
inline BeamFormer(const CoordinateSystem &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(CoordinateSystem 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)
-
virtual std::shared_ptr<Antenna> Clone() const override
Makes a copy of this Antenna object.
The method is virtual, so that copies can be created from a pointer to the base (Antenna) class. The original remains unchanged, therefore the method is const. The method has no implementation in the Antenna class, because Antenna is abstract, so no copy can be instantiated.
This method is used by the ExtractAntenna method of the BeamFormer class to create a copy of one of the Antennas it contains.
Add an antenna to the antennas_ array.
- Parameters:
antenna –
-
std::shared_ptr<Antenna> ExtractAntenna(size_t antenna_index) const
Extracts an antenna from the beamformer.
The antenna is extracted such that it can be used stand-alone, independent of the beamformer. The coordinate system of the extracted antenna is transformed from internal representation to external representation by application of the beamformer coordinate system to the antenna coordinate system.
The returned antenna can be either an Element or a BeamFormer.
The beamformer itself remains unchanged.
- Parameters:
antenna_index – index of antenna to extact
- Returns:
pointer to a copy of antenna with index antenna_index
Public Static Functions
-
static aocommon::UVector<std::complex<double>> ComputeGeometricResponse(const std::vector<vector3r_t> &phase_reference_positions, 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.
-
typedef std::shared_ptr<BeamFormer> Ptr
-
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 CoordinateSystem &coordinate_system)
Construct a new BeamFormerIdenticalAntennas object given a coordinate system.
- Parameters:
coordinate_system –
-
inline BeamFormerIdenticalAntennas(CoordinateSystem 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)
-
virtual std::shared_ptr<Antenna> Clone() const override
Makes a copy of this Antenna object.
The method is virtual, so that copies can be created from a pointer to the base (Antenna) class. The original remains unchanged, therefore the method is const. The method has no implementation in the Antenna class, because Antenna is abstract, so no copy can be instantiated.
This method is used by the ExtractAntenna method of the BeamFormer class to create a copy of one of the Antennas it contains.
-
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()
Construct a new BeamFormerLofarLBA object.
-
inline BeamFormerLofarLBA(const CoordinateSystem &coordinate_system)
Construct a new BeamFormerLofarLBA object given a coordinate system.
- Parameters:
coordinate_system –
-
inline BeamFormerLofarLBA(CoordinateSystem coordinate_system, vector3r_t phase_reference_position)
Construct a new BeamFormerLofarLBA object given a coordinate system and a phase reference position.
- Parameters:
coordinate_system –
phase_reference_position –
-
inline BeamFormerLofarLBA(vector3r_t phase_reference_position)
-
virtual std::shared_ptr<Antenna> Clone() const final override
Returns an (incomplete!) clone of the BeamFormerLofarLBA class only the element_ is copied. This method is intended to be exclusively used in Station::SetAntenna!
- Returns:
std::shared_ptr<Antenna>
-
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()
-
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()
Construct a new BeamFormerHBA object.
-
inline BeamFormerLofarHBA(const CoordinateSystem &coordinate_system)
Construct a new BeamFormerLofarHBA object given a coordinate system.
- Parameters:
coordinate_system –
-
inline BeamFormerLofarHBA(CoordinateSystem coordinate_system, vector3r_t phase_reference_position)
Construct a new BeamFormerLofarHBA object given a coordinate system and a phase reference position.
- Parameters:
coordinate_system –
phase_reference_position –
-
inline BeamFormerLofarHBA(vector3r_t phase_reference_position)
-
virtual std::shared_ptr<Antenna> Clone() const final override
Returns an (incomplete!) clone of the BeamFormerLofarHBA class only the element_ is copied. This method is intended to be exclusively used in Station::SetAntenna!
- Returns:
std::shared_ptr<Antenna>
-
inline void SetTile(BeamFormer::Ptr 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 –
-
inline BeamFormerLofarHBA()