import sys
import time
import numpy as np
import mwa_hyperbeam
def get_pointings(n):
za = np.linspace(0.1, 0.9 * np.pi / 2, n)
az = np.linspace(0, 0.9 * np.pi, n)
return az, za
def gen_pointings(num_pointings, hyperbeam=True, parallel=False):
for n in num_pointings:
az, za = get_pointings(n)
freq_hz = 167e6
delays = [0] * 16
amps = [1.0] * 16
norm_to_zenith = True
latitude_rad = False
iau_order = False
times = []
for _ in range(10):
if np.sum(times) > 60:
break
if hyperbeam:
beam = mwa_hyperbeam.FEEBeam()
if parallel:
if hyperbeam:
start_time = time.time()
beam.calc_jones_array(
az,
za,
freq_hz,
delays,
amps,
norm_to_zenith,
latitude_rad,
iau_order,
)
else:
raise RuntimeError("mwa_pb doesn't have parallel code")
else:
start_time = time.time()
if hyperbeam:
for i in range(len(az)):
jones = beam.calc_jones(
az[i],
za[i],
freq_hz,
delays,
amps,
norm_to_zenith,
latitude_rad,
iau_order,
)
del jones
else:
start_time = time.time()
jones = MWA_Tile_full_EE(
za,
az,
int(freq_hz),
delays=delays,
zenithnorm=norm_to_zenith,
interp=False,
power=False,
jones=True,
)
duration = time.time() - start_time
times.append(duration)
if hyperbeam:
del beam
s = ""
if hyperbeam:
if parallel:
s += "(hyperbeam-parallel) "
else:
s += "(hyperbeam) "
elif not hyperbeam:
s += "(mwa_pb) "
s += "Num pointings: {}, mean time: {:.3}s, median time: {:.3}s".format(
n, np.mean(times), np.median(times)
)
print(s)
if len(sys.argv) == 1:
n = [500, 100000, 1000000]
else:
n = map(int, sys.argv[1:])
gen_pointings(n, hyperbeam=True, parallel=True)