Tour of hera_sim¶
This notebook briefly introduces some of the effects that can be modeled with hera_sim.
[8]:
%matplotlib inline
import numpy as np
import pylab as plt
import uvtools
from astropy.units import sday
from hera_sim import DATA_PATH
plt.rcParams["figure.figsize"] = [14, 8]
[10]:
from hera_sim import defaults, foregrounds, noise, rfi, sigchain
[12]:
defaults.set("h1c")
fqs = np.linspace(0.1, 0.2, 1024, endpoint=False)
lsts = np.linspace(0, 2 * np.pi, 10000, endpoint=False)
times = lsts / (2 * np.pi) * sday.to('s')
bl_len_ns = np.array([30.0, 0, 0])
h1c_beam = defaults("omega_p")(fqs)
Foregrounds¶
Diffuse Foregrounds¶
[13]:
Tsky_mdl = noise.HERA_Tsky_mdl["xx"]
vis_fg_diffuse = foregrounds.diffuse_foreground(
lsts, fqs, bl_len_ns, Tsky_mdl=Tsky_mdl, omega_p=h1c_beam
)
[14]:
uvtools.plot.labeled_waterfall(vis_fg_diffuse, mode="log", freqs=fqs * 1e9, lsts=lsts)
uvtools.plot.labeled_waterfall(vis_fg_diffuse, mode="phs", freqs=fqs * 1e9, lsts=lsts);
Point-Source Foregrounds¶
[15]:
vis_fg_pntsrc = foregrounds.pntsrc_foreground(lsts, fqs, bl_len_ns, nsrcs=200)
[16]:
uvtools.plot.labeled_waterfall(vis_fg_pntsrc, mode="log", freqs=fqs * 1e9, lsts=lsts)
uvtools.plot.labeled_waterfall(vis_fg_pntsrc, mode="phs", freqs=fqs * 1e9, lsts=lsts);
Diffuse and Point-Source Foregrounds¶
[17]:
vis_fg = vis_fg_diffuse + vis_fg_pntsrc
[18]:
uvtools.plot.labeled_waterfall(vis_fg, mode="log", freqs=fqs * 1e9, lsts=lsts)
uvtools.plot.labeled_waterfall(vis_fg, mode="phs", freqs=fqs * 1e9, lsts=lsts);
Noise¶
[19]:
nos_jy = noise.sky_noise_jy(
lsts, fqs, omega_p=h1c_beam, Tsky_mdl=noise.HERA_Tsky_mdl['xx']
)
[22]:
uvtools.plot.labeled_waterfall(nos_jy, mode="log", freqs=fqs * 1e9, lsts=lsts,
dynamic_range=2)
uvtools.plot.labeled_waterfall(nos_jy, mode="phs", freqs=fqs * 1e9, lsts=lsts);
[23]:
vis_fg_nos = vis_fg + nos_jy
[24]:
uvtools.plot.labeled_waterfall(vis_fg_nos, mode="log", freqs=fqs * 1e9, lsts=lsts,
dynamic_range=3)
uvtools.plot.labeled_waterfall(vis_fg_nos, mode="phs", freqs=fqs * 1e9, lsts=lsts);
RFI¶
[50]:
rfi1 = rfi.rfi_stations(lsts, fqs, stations=DATA_PATH / "HERA_H1C_RFI_STATIONS.npy")
rfi2 = rfi.rfi_impulse(lsts, fqs, impulse_chance=0.05, impulse_strength=1e6)
rfi3 = rfi.rfi_scatter(lsts, fqs, scatter_chance=0.01, scatter_strength=1e6)
rfi_all = rfi1 + rfi2 + rfi3
[51]:
uvtools.plot.labeled_waterfall(rfi_all, mode="abs", freqs=fqs * 1e9, lsts=lsts)
uvtools.plot.labeled_waterfall(rfi_all, mode="phs", freqs=fqs * 1e9, lsts=lsts);
[52]:
vis_fg_nos_rfi = vis_fg_nos + rfi_all
[53]:
uvtools.plot.labeled_waterfall(vis_fg_nos_rfi, mode="log", freqs=fqs * 1e9, lsts=lsts)
uvtools.plot.labeled_waterfall(vis_fg_nos_rfi, mode="phs", freqs=fqs * 1e9, lsts=lsts);
Gains¶
[54]:
g = sigchain.gen_gains(fqs, [1, 2, 3])
plt.figure()
for i in g:
plt.plot(fqs, np.abs(g[i]), label=str(i))
plt.legend()
plt.show()
[58]:
vis_total = sigchain.apply_gains(vis_fg_nos_rfi, g, (1, 2))
uvtools.plot.labeled_waterfall(vis_total, mode="log", freqs=fqs * 1e9, lsts=lsts,
dynamic_range=6)
uvtools.plot.labeled_waterfall(vis_total, mode="phs", freqs=fqs * 1e9, lsts=lsts);
Crosstalk¶
[59]:
xtalk = sigchain.gen_whitenoise_xtalk(fqs)
if xtalk.ndim == 1:
xtalk = np.reshape(xtalk, (1, -1))
vis_xtalk = vis_fg_nos_rfi + xtalk
vis_xtalk = sigchain.apply_gains(vis_xtalk, g, (1, 2))
[60]:
uvtools.plot.labeled_waterfall(vis_xtalk, mode="log", freqs=fqs * 1e9, lsts=lsts,
dynamic_range=6)
uvtools.plot.labeled_waterfall(vis_xtalk, mode="phs", freqs=fqs * 1e9, lsts=lsts);