Source code for aces.obsplan.antpos

from __future__ import print_function

"""
Holds AKSAP antenna positions, and utility routines.

Only use these approximate values for rough calculations.  For exact antenna positions, issue the following command on
aktos11 for the main array antennas and on akscor01 for the commissioning array antennas:

    fcm get |grep itrf
"""
import numpy as np
import itertools

[docs]antrel01 = np.array([[0.000, 0.000], [26.978, -13.011], [35.950, 7.490], [-8.979, 35.008], [-73.992, 31.503], [135.660, 112.000], [242.860, -109.980], [-37.810, -238.510], [-244.210, 110.550], [-96.316, 279.496], [267.951, 340.539], [395.925, 269.476], [438.720, -364.005], [-24.860, -460.009], [-739.700, -157.993], [-636.115, 365.440], [-496.818, 522.519], [-106.785, 375.509], [217.814, 481.520], [506.320, 315.027], [686.168, 322.006], [845.840, 335.982], [-0.708, -657.007], [78.472, -978.523], [-613.617, 653.507], [-393.336, 667.503], [-1070.503, 940.975], [249.765, 1198.511], [565.930, 753.210], [1229.056, 798.468], [2220.949, 992.985], [3024.925, -2507.046], [25.026, -2810.965], [-2975.009, -2006.978], [-2170.998, 992.991], [23.232, 3190.068]])
[docs]ASKAP_antennas = range(1, 37)
[docs]BETA_antennas = [6, 1, 3, 15, 8, 9]
[docs]ASKAP_6_antennas = [2, 4, 5, 12, 13, 14]
[docs]ASKAP_12_antennas = [2, 4, 5, 10, 12, 13, 14, 16, 24, 27, 28, 30]
# as at 13/6/2018
[docs]ASKAP_main_antennas = [1, 2, 3, 4, 5, 6, 10, 12, 14, 16, 17, 19, 24, 27, 28, 30]
[docs]ASKAP_commissioning_antennas = [7, 8, 9, 11, 13, 15, 18, 20, 21, 22, 23, 25, 26, 29, 31, 32, 33, 34, 35, 36]
[docs]class AskapArray(object): def __init__(self, name): self.name = name if name == "BETA": self.arrayAntennas = BETA_antennas elif name == "ASKAP6": self.arrayAntennas = ASKAP_6_antennas elif name == "ASKAP12": self.arrayAntennas = ASKAP_12_antennas elif name == "ASKAP": self.arrayAntennas = ASKAP_antennas else: print('ASKAP_array: Unknown name %s' % name) self.arrayAntennas = [] self.antennas = [a for a in self.arrayAntennas] self.baselines = self.gen_baselines()
[docs] def select_antennas(self, antennas): self.antennas = [a for a in self.arrayAntennas if a in antennas] self.gen_baselines()
[docs] def gen_baselines(self): ants = self.antennas n_ants = len(self.antennas) temp = [['%dx%d' % (ants[j], ants[i]) for i in range(j + 1, n_ants)] for j in range(n_ants)] return list(itertools.chain.from_iterable(temp))
[docs] def get_ant_codes(self): bc = {} for bas in self.baselines: ants = map(int, bas.split('x')) iants = [ants.index(i) for i in ants] bc[bas] = iants return bc
[docs] def get_ant_names(self): ret = ["AK%02d" % a for a in self.antennas] return ret
[docs]def baseline_2vec(bas): a1, a2 = map(int, bas.split('x')) vec = antrel01[a1 - 1] - antrel01[a2 - 1] return vec
[docs]def baseline_2v(a1, a2): vec = antrel01[a1 - 1] - antrel01[a2 - 1] return vec
[docs]def baseline_len(a1, a2): vec = antrel01[a1 - 1] - antrel01[a2 - 1] return np.sqrt((vec * vec).sum())