Source code for dreambeam.telescopes.geometry_ingest

"""This package retrieves the metadata for a telescope, such as position,
alignment and bands.

The metadata for a telescope should be in the folder '<telescope>/share/'.
Subfolders should be 'simmos' (for array configurations of stations) and
'alignment' for station rotation.
"""
import os
import numpy as np

CASA_CFG_DTYPE = [('X', float), ('Y', float), ('Z', float), ('Diam', float),
                  ('Name', 'U7')]
CASA_CFG_FMT = '%12f %12f %12f %4.1f %s'
SIMOBS_PATH = os.path.dirname(os.path.realpath(__file__))


[docs]def readarrcfg(telescope, band): """Read a CASA array configuration file. This gives the positions of all the stations that make up the telescope. """ arrcfg_folder = os.path.join(SIMOBS_PATH, telescope, 'share/simmos') arrcfg_file = os.path.join(arrcfg_folder, '{}_{}.cfg'.format(telescope, band)) x, y, z, diam, name = np.loadtxt(arrcfg_file, CASA_CFG_DTYPE, unpack=True) if name.ndim == 0: x, y, z, diam, name = (np.array([x]), np.array([y]), np.array([z]), np.array([diam]), np.array([name])) return x, y, z, diam, name
[docs]def readalignment(telescope, stnid, band): """Read a alignment matrix file for a telescope station band. The alignment is 3x3 matrix that represents the rotation between the feed coord sys and the ITRF. """ stnrot_folder = os.path.join(SIMOBS_PATH, telescope, 'share/alignment') stnrot_file = os.path.join(stnrot_folder, '{}_{}.txt'.format(stnid, band)) stnrot = np.loadtxt(stnrot_file) return stnrot
[docs]def getArrayBandParams(telescope, stnid, band): """Get array and band parameters for a telescope, station and band.""" x, y, z, diam, names = readarrcfg(telescope, band) stnid_idx = names.tolist().index(stnid) stnPos = [x[stnid_idx], y[stnid_idx], z[stnid_idx]] stnRot = readalignment(telescope, stnid, band) return stnPos, stnRot
[docs]def list_stations(telescope, band=None): """List all available stations.""" x, y, z, diam, names = readarrcfg(telescope, band) return names
if __name__ == "__main__": print(list_stations('LOFAR')) stnPos, stnRot = getArrayBandParams('LOFAR', 'SE607', 'HBA') print(stnPos) print(stnRot)