import os
os.environ['HDF5_USE_FILE_LOCKING'] = 'FALSE'
import h5py
import hdf5plugin
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter
import matplotlib.patches as mpatches
import matplotlib.gridspec as gridspec
import numpy as np
from pyuvdata import UVCal, UVData, UVFlag
import pyuvdata
import os
import sys
import glob
import uvtools as uvt
from astropy.time import Time
from astropy.coordinates import EarthLocation, SkyCoord, AltAz, Angle
import pandas
import warnings
import copy
from hera_notebook_templates import utils
import hera_qm
from hera_mc import cm_hookup
import h5py
import importlib
from scipy import stats
import scipy
import pandas as pd
from IPython.display import display, HTML
#warnings.filterwarnings('ignore')
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
#get data location
JD = os.environ['JULIANDATE']
data_path = os.environ['DATA_PATH']
nb_outdir = os.environ['NB_OUTDIR']
utc = Time(JD, format='jd').datetime
print(f'JD = {JD}')
print(f'Date = {utc.month}-{utc.day}-{utc.year}')
print(f'data_path = "{data_path}"')
JD = 2459835 Date = 9-12-2022 data_path = "/mnt/sn1/2459835"
# Load in data
HHfiles, difffiles, uvdx, uvdy = utils.load_data_ds(data_path,JD)
uvd = UVData()
uvd_diff = UVData()
uvd.read(HHfiles[0])
use_ants = [int(ant) for ant in uvd.get_ants()]
bls = [(ant, ant) for ant in use_ants]
uvd.read(HHfiles[::10], skip_bad_files=True, bls=bls)
uvd_diff.read(difffiles[::10], skip_bad_files=True, bls=bls)
lsts = uvd.lst_array
flagfile = glob.glob(os.path.join(HHfiles[0].split('zen')[0],'zen.{}*total_stage_1_threshold_flags.h5'.format(JD)))
uvf = UVFlag()
uvf.read(flagfile)
bls = [(ant, ant) for ant in uvd.get_ants()]
times_uvf = np.unique(uvf.time_array)
times_uvd = np.unique(uvd.time_array)
idx_times = [np.where(time_uvd == times_uvf)[0][0] for time_uvd in times_uvd]
uvd.flag_array[:,0,:,:] = np.repeat(uvf.flag_array[idx_times], len(bls), axis=0)
372 sum files found between JDs 2459835.25323 and 2459835.33623 372 diff files found between JDs 2459835.25323 and 2459835.33623
Shows the LSTs (in hours) and JDs for which data is collected. Green represents data, red means no data.
utils.plot_lst_coverage(uvd)
Delay spectrum CLEANed using uvtools.dspec.high_pass_fourier_filter with 7th-order Blackman-Harris window function. Odd/even visibilities are used to remove noise bias.
_data_cleaned_sq, d_even, d_odd = utils.clean_ds(bls, uvd, uvd_diff, N_threads=14)
These plots show autocorrelation delay spectrum waterfalls of each antenna that is active and whose status qualifies for this notebook. For nn/ee polarization, the autocorrelation delay spectrum is normalized by the max of the delay spectrum. For ne polarization, the autocorrelation delay spectrum is normalized by max(sqrt(|nn| * |ee|)). ne and en are the same for autocorrelations, and thus only ne is shown here. The delay spectra are presented in dB with 10*log10($|\tilde{V}|$).
For each node, antennas are ordered by SNAP number, and within that by SNAP input number. The antenna number label color corresponds to the a priori status of that antenna.
utils.plot_wfds(uvd, _data_cleaned_sq, 0)
utils.plot_wfds(uvd, _data_cleaned_sq, 1)
utils.plot_wfds(uvd, _data_cleaned_sq, 2)
This plot shows the relative amplitude at 2700 ns feature. The relative amplitude is calculated in dB with the mean amplitude at 2500-3000 ns compared to the mean amplitude at 2000-2500 ns. Larger values of relative feature amplitude indicate higher probability of detecting the peak at 2700 ns. Antennas in the same node are grouped by the shaded region.
utils.plot_antFeatureMap_2700ns(uvd, _data_cleaned_sq, JD, pol='nn')
utils.plot_antFeatureMap_2700ns(uvd, _data_cleaned_sq, JD, pol='ee')
This plot shows a matrix representing the 2700ns feature correlation of each baseline. The color bar indicates the amplitude of 2700ns (mean amplitude of 2500-3000ns delay spectrum) in dB which is the same as that in the above plot.
# utils.CorrMatrix_2700ns(uvd, HHfiles, difffiles, flagfile, JD, N_threads=14)
This plot shows the ratio of delay spectrum to noise floor (averaged over 1000-4000ns). Near 1 indicates the delay spectrum reaches to the noise floor, which may mean good.
utils.plot_antFeatureMap_noise(uvd_diff, d_even, d_odd, JD, pol='nn')
utils.plot_antFeatureMap_noise(uvd_diff, d_even, d_odd, JD, pol='ee')
# get the ratio of delay spectum to noise for different freqeuncy bands and pols
ds_noise_ratio = utils.get_ds_noise_ratio(uvd, uvd_diff, bls)
nodes, antDict, inclNodes = utils.generate_nodeDict(uvd)
ants = uvd.get_ants()
# build dataframe
to_show = {'Ant': ants, 'Node': [int(antDict[ant]['node']) for ant in ants], 'Snap': [int(antDict[ant]['snapLocs'][0]) for ant in ants]}
df = pd.DataFrame(to_show)
cols_ratio = []
for key in ds_noise_ratio.keys():
if(key[0] == 40):
col = r'Full '
else:
col = r'{}-{} MHz '.format(key[0], key[1])
col += key[2]
df[col] = ds_noise_ratio[key]
cols_ratio.append(col)
# sort by node number and then by antenna number within nodes
df.sort_values(['Node', 'Ant'], ascending=True)
ratio_cut = 3
# style dataframe
table = df.style.hide_index() \
.applymap(lambda val: 'color: red' if val > ratio_cut else '', subset=cols_ratio) \
.set_table_styles([dict(selector="th",props=[('max-width', f'70pt')])])
This table shows the ratio of the delay spectrum to the noise level from diff files for different frequency bands and pols. The ratio > 3 is colored in red
HTML(table.render())
Ant | Node | Snap | Full nn | Full ee | 50-85 MHz nn | 50-85 MHz ee | 120-155 MHz nn | 120-155 MHz ee | 155-190 MHz nn | 155-190 MHz ee | 190-225 MHz nn | 190-225 MHz ee |
---|---|---|---|---|---|---|---|---|---|---|---|---|
3 | 1 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
4 | 1 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
5 | 1 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
7 | 2 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
8 | 2 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
9 | 2 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
10 | 2 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
15 | 1 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
16 | 1 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
17 | 1 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
18 | 1 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
19 | 2 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
20 | 2 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
21 | 2 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
27 | 1 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
28 | 1 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
29 | 1 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
30 | 1 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
31 | 2 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
32 | 2 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
33 | 2 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
36 | 3 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
37 | 3 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
38 | 3 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
40 | 4 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
41 | 4 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
45 | 5 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
46 | 5 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
50 | 3 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
51 | 3 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
52 | 3 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
53 | 3 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
55 | 4 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
56 | 4 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
57 | 4 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
65 | 3 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
66 | 3 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
67 | 3 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
68 | 3 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
69 | 4 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
70 | 4 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
71 | 4 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
73 | 5 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
81 | 7 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
82 | 7 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
83 | 7 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
84 | 8 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
85 | 8 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
86 | 8 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
87 | 8 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
88 | 9 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
90 | 9 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
91 | 9 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
92 | 10 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
93 | 10 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
94 | 10 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
98 | 7 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
99 | 7 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
100 | 7 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
101 | 8 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
102 | 8 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
103 | 8 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
104 | 8 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
105 | 9 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
106 | 9 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
107 | 9 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
108 | 9 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
109 | 10 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
110 | 10 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
111 | 10 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
112 | 10 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
116 | 7 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
117 | 7 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
118 | 7 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
119 | 7 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
120 | 8 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
121 | 8 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
122 | 8 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
123 | 8 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
125 | 9 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
126 | 9 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
127 | 10 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
128 | 10 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
129 | 10 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
130 | 10 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
135 | 12 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
136 | 12 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
137 | 7 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
138 | 7 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
140 | 13 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
141 | 13 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
142 | 13 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
143 | 14 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
144 | 14 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
145 | 14 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
150 | 15 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
155 | 12 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
156 | 12 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
157 | 12 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
158 | 12 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
160 | 13 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
161 | 13 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
162 | 13 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
163 | 14 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
164 | 14 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
165 | 14 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
166 | 14 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
167 | 15 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
168 | 15 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
169 | 15 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
170 | 15 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
176 | 12 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
177 | 12 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
178 | 12 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
179 | 12 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
180 | 13 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
181 | 13 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
182 | 13 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
183 | 13 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
184 | 14 | 0 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
185 | 14 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
186 | 14 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
187 | 14 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
189 | 15 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
190 | 15 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
191 | 15 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
320 | 3 | 2 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
321 | 2 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
323 | 2 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
324 | 4 | 3 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
329 | 12 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
333 | 12 | 1 | nan | nan | nan | nan | nan | nan | nan | nan | nan | nan |
csv_file = os.path.join(nb_outdir, 'ds_noise_ratio_{}.csv'.format(JD))
df.to_csv(csv_file, index=False)
Left panel: time averaged delay spectum of autocorrelation in dB with 10*log10($|\tilde{V}|$) (blue) and noise from diff file representing the expected variance of the delay spectrum (red). The time-averaging is performed by 1. binning three time integrations of each even and odd visibility, 2. Fouier transform the binned even and odd visibilities, and 3. multiply the even and odd delay spectra at alternating time bin and average the squared delay spectrum along the time axis. This helps to reduce the noise bias. Both autocorrelation delay spectrum and diff delay spectrum are averaged in the same way
Right panel: time averaged autocorrelations w/o (orange) and w/ xRFI flags (blue). Flagged one is shifted from the unflagged one for clarity
utils.interactive_plots_dspec(bls, uvd, uvd_diff, JD)