Source code for pyvisgen.simulation.array
import torch
from astropy.utils.decorators import lazyproperty
__all__ = ["Array"]
[docs]
class Array:
"""Class that handles antenna array operations such
as calculating antenna pairs for baselines.
Parameters
----------
array_layout : :class:`~pyvisgen.layouts.Stations`
:class:`~pyvisgen.layouts.Stations` dataclass object
containing station data.
"""
def __init__(self, array_layout):
"""Initializes the class with a given array layout.
Parameters
----------
array_layout : :class:`~pyvisgen.layouts.Stations`
:class:`~pyvisgen.layouts.Stations` dataclass object
containing station data.
"""
self.array_layout = array_layout
@lazyproperty
def relative_pos(self) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
"""Get the relative positions of the antennas
from geocentric coordinates.
Returns
-------
delta_x : :func:`~torch.tensor`
Relative x positions.
delta_y : :func:`~torch.tensor`
Relative y positions.
delta_z : :func:`~torch.tensor`
Relative z positions.
"""
combs_x = torch.combinations(self.array_layout.x)
delta_x = (combs_x[:, 0] - combs_x[:, 1]).reshape(-1, 1)
combs_y = torch.combinations(self.array_layout.y)
delta_y = (combs_y[:, 0] - combs_y[:, 1]).reshape(-1, 1)
combs_z = torch.combinations(self.array_layout.z)
delta_z = (combs_z[:, 0] - combs_z[:, 1]).reshape(-1, 1)
return delta_x, delta_y, delta_z
@lazyproperty
def antenna_pairs(self) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
"""Calculates station number, low elevation, and high
elevation pairs.
Returns
-------
st_num_pairs : :func:`~torch.tensor`
Station number pair combinations.
els_low_pairs : :func:`~torch.tensor`
Station elevation pairs.
els_high_pairs : :func:`~torch.tensor`
Station elevation pairs.
"""
st_num_pairs = torch.combinations(self.array_layout.st_num)
els_low_pairs = torch.combinations(self.array_layout.el_low)
els_high_pairs = torch.combinations(self.array_layout.el_high)
return st_num_pairs, els_low_pairs, els_high_pairs