In [1]:
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'
In [2]:
#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 = 2459745
Date = 6-14-2022
data_path = "/mnt/sn1/2459745"
In [3]:
# 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 2459745.25314 and 2459745.33613
372 diff files found between JDs 2459745.25314 and 2459745.33613

LST Coverage¶

Shows the LSTs (in hours) and JDs for which data is collected. Green represents data, red means no data.

In [4]:
utils.plot_lst_coverage(uvd)

Delay spectrum¶

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.

In [5]:
_data_cleaned_sq, d_even, d_odd = utils.clean_ds(bls, uvd, uvd_diff, N_threads=14)

Waterfalls of delay spectra for autocorrelation¶

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 10log10($|\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.

nn polarization¶

In [6]:
utils.plot_wfds(uvd, _data_cleaned_sq, 0)

ee polarization¶

In [7]:
utils.plot_wfds(uvd, _data_cleaned_sq, 1)

ne polarization¶

In [8]:
utils.plot_wfds(uvd, _data_cleaned_sq, 2)

Analysis of 2700ns features in delay spectra¶

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.

In [9]:
utils.plot_antFeatureMap_2700ns(uvd, _data_cleaned_sq, JD, pol='nn')
In [10]:
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.

In [11]:
# utils.CorrMatrix_2700ns(uvd, HHfiles, difffiles, flagfile, JD, N_threads=14)

Analysis of noise floor in delay spectra¶

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.

In [12]:
utils.plot_antFeatureMap_noise(uvd_diff, d_even, d_odd, JD, pol='nn')
In [13]:
utils.plot_antFeatureMap_noise(uvd_diff, d_even, d_odd, JD, pol='ee')
In [14]:
# 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

In [15]:
HTML(table.render())
Out[15]:
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
0 0 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
1 0 0 nan nan nan nan nan nan nan nan nan nan
2 0 0 nan nan nan nan nan nan nan nan nan nan
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 1.054866 0.990068 1.679505 1.604373 2.441160 2.318662 1.504044 1.931370 2.126601 2.809914
8 2 0 1.163201 1.703170 2.806104 6.133920 2.774914 3.079078 2.309171 1.852733 3.069830 6.148855
9 2 0 0.971620 0.927983 1.934330 1.448508 2.584581 2.469742 2.324077 1.861822 2.284610 1.900261
10 2 1 0.904598 0.999889 2.127706 1.884039 2.121480 2.337894 1.989800 2.523033 2.360230 5.662797
11 0 1 nan nan nan nan nan nan nan nan nan nan
12 0 1 nan nan nan nan nan nan nan nan nan nan
13 0 1 nan nan nan nan nan nan nan nan nan nan
14 0 2 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 0.921723 0.983666 1.897867 1.615077 1.997093 1.957494 2.058592 2.292227 5.036020 9.468622
20 2 1 0.886907 0.920172 1.532429 1.597248 2.012290 1.755910 1.466385 1.711244 2.026950 2.116177
21 2 2 1.062312 0.884666 1.773994 1.469202 3.007729 1.579910 1.970646 2.045226 1.788885 2.188230
23 0 2 nan nan nan nan nan nan nan nan nan nan
24 0 2 nan nan nan nan nan nan nan nan nan nan
25 0 3 nan nan nan nan nan nan nan nan nan nan
26 0 3 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 0.996492 0.919135 1.897030 1.429723 2.322341 1.732562 1.875143 2.123393 1.869695 2.866345
32 2 2 2.240459 2.905068 2.189737 1.589451 3.535524 3.223960 11.181629 19.283000 7.307340 9.180135
33 2 3 43.184303 0.860051 2.047768 1.903160 205.097876 1.974032 1.955804 1.958084 2.408604 2.816161
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
39 0 3 nan nan nan nan nan nan nan nan nan nan
40 4 1 0.946627 1.016677 1.712172 1.594769 2.341837 2.058764 2.265740 2.225887 2.259818 6.243278
41 4 3 0.958275 1.295915 1.762684 2.215260 2.112044 3.667828 1.587060 1.753700 1.802708 2.101185
42 4 0 1.049976 0.956253 1.636841 1.751586 2.857575 2.354237 1.825980 2.103809 4.594422 6.914895
45 5 0 2.321318 0.913914 20.412837 1.545455 3.210664 2.015272 3.420135 1.853364 3.226425 2.004096
46 5 0 2.091322 1.352071 2.077863 1.684777 5.280950 3.947555 2.163515 2.540500 2.538775 3.100745
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
54 4 0 1.352100 0.985465 1.710159 1.526815 3.161759 1.892596 2.114870 2.144435 2.421313 3.014046
55 4 2 0.986239 1.113608 1.413208 1.955125 1.766056 2.626599 4.323987 4.223461 2.628107 2.405323
56 4 1 1.247096 1.043975 1.761293 1.604944 2.571939 2.194007 1.804009 1.896070 2.676282 3.858389
57 4 3 1.058194 0.880136 2.540110 1.535452 2.495320 1.957082 2.170084 1.634033 2.618398 2.083863
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 0.964264 0.968021 1.687481 1.902463 2.210780 1.978183 2.043719 1.972419 2.525407 2.868312
70 4 2 1.380355 1.381293 1.946133 1.647017 3.542064 2.096442 3.238764 3.950376 2.982444 3.296723
71 4 2 1.148928 1.074974 2.645931 2.638889 1.907220 2.379217 2.716673 2.040461 2.911767 2.036228
72 4 0 1.088957 1.190302 1.793731 1.740691 2.572145 2.978377 1.867580 1.986430 3.228375 5.353994
73 5 0 1.058651 0.945877 1.625117 1.552179 2.639793 1.697745 1.927852 2.352548 3.174162 4.687997
81 7 0 1.207853 1.489931 1.612092 1.424961 2.126628 2.788372 2.194891 3.551493 4.745722 6.397291
82 7 0 1.060340 0.868409 1.860775 1.447332 2.255161 1.819398 1.883319 1.586976 2.507360 2.013133
83 7 0 4.888350 2.955617 10.767689 25.612325 4.014397 8.659816 4.154075 2.451689 4.571125 2.262294
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
89 9 2 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 118.998704 226.365242 279.062690 820.673439 4.256164 358.888162 4.701816 212.362085 1.724135 12.173397
93 10 0 127.281026 99.796092 230.548833 216.392706 1.957475 2.272703 0.833854 1.197131 0.943978 1.155518
94 10 0 139.649398 102.273644 273.789404 301.315895 1.979494 2.141210 0.624838 1.118850 0.629467 1.005904
98 7 2 4.086354 3.783713 12.108568 28.931574 5.011143 11.394788 6.427139 2.821956 3.961569 2.382056
99 7 2 1.134327 0.940174 1.797596 1.354420 2.338951 1.988221 1.718823 1.757642 2.621639 3.245134
100 7 1 6.447433 4.313452 22.197175 15.461256 11.773666 21.250776 4.547047 3.684955 5.124599 3.022431
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 141.410512 99.775902 308.174235 550.711709 2.892165 29.869415 4.873331 17.316255 1.169635 4.478892
110 10 1 80.583127 88.588405 176.060818 213.108869 1.388814 3.443036 2.061753 36.061949 0.718104 4.258799
111 10 1 111.116626 100.989288 248.161038 274.795343 2.211394 2.304686 1.714372 3.712393 1.372215 2.122517
112 10 2 97.720639 113.272006 215.146467 456.365270 2.555246 14.191972 6.798707 35.552978 1.354027 4.219892
116 7 2 9.494505 3.202631 6.186254 11.193077 30.043176 5.140406 6.355548 2.755365 5.751229 3.554738
119 7 1 1.295014 3.091359 1.651803 17.193175 2.937277 8.634425 1.695219 1.822750 4.484985 1.849285
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
124 9 2 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 151.134916 119.475895 353.287099 299.691666 2.471790 5.434402 0.802667 1.460014 0.742549 1.548257
128 10 2 129.055323 130.673910 273.655547 360.403019 1.950934 4.052092 0.566495 1.200940 0.628813 1.175803
129 10 3 114.978115 384.325942 232.407707 788.081217 8.667357 1744.886817 2.600871 42.069676 1.029117 12.561230
130 10 3 145.383765 131.365589 357.918257 327.858246 3.337616 6.808882 1.520694 3.193834 1.455649 1.493180
135 12 2 0.990784 0.911444 1.896265 1.693340 2.160174 2.383279 2.037948 2.335810 2.333977 1.988072
136 12 2 1.488892 0.978657 6.717384 1.727142 3.178846 2.003422 3.573174 2.723397 2.738736 2.944370
138 7 1 1.415997 0.985154 1.837829 1.696808 2.991443 1.877425 1.957290 2.141612 28.053178 31.596618
140 13 2 1.190498 0.967089 1.867846 1.855150 2.621711 2.149600 1.910534 2.123951 2.412082 3.672561
141 13 2 6.602211 1.118285 17.177176 1.793681 22.623019 2.279816 14.351618 1.844096 13.433770 3.106271
142 13 2 3.324735 1.073498 5.942819 1.791481 6.401766 2.688566 2.717315 1.959628 3.940612 1.989844
143 14 2 1.185278 0.832355 3.210489 1.627245 3.172652 1.919541 2.331715 1.612358 2.509658 1.625971
144 14 3 1.301185 0.952524 2.789446 1.481292 3.300456 1.903703 2.086504 1.737713 2.363305 2.205916
145 14 3 0.870735 0.890759 1.544391 1.376859 1.842173 1.863058 1.786302 1.508144 2.508550 1.729810
150 15 1 3.836122 10.336423 19.393609 49.017431 7.373688 11.588313 4.980277 18.490293 3.076332 1.888470
155 12 2 2.868114 2.467614 7.865631 20.113583 2.949894 3.556290 3.682137 5.134801 3.787060 2.244547
156 12 3 3.884534 1.223458 2.365965 1.664762 3.514963 3.262578 3.380397 2.291033 3.288090 3.183506
157 12 3 1.202785 1.022264 1.750801 1.672577 2.711014 2.517132 2.167726 1.979287 2.125216 2.427632
158 12 3 1.710241 1.062302 5.599994 1.681930 5.290845 2.542136 3.802345 2.315771 4.609591 9.073830
160 13 3 2.203433 1.680748 1.291738 2.411336 1.717178 2.493599 1.864942 2.250367 2.563114 2.884251
161 13 0 2.638924 0.996236 2.113930 1.866307 3.721538 2.578542 3.625451 2.163257 2.860751 2.905011
162 13 0 1.204722 0.810179 3.821016 1.823260 3.294771 1.752754 2.349282 1.600759 2.391672 1.690644
163 14 2 1.047807 0.877298 1.765723 1.794207 2.434959 1.881254 1.874455 1.818118 2.091498 2.641598
164 14 2 1.059116 0.972472 1.671823 1.728054 2.496347 2.360307 2.242550 3.235411 2.666998 4.127605
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 3.160802 2.596836 2.675743 2.971461 3.369784 3.117495 3.460012 2.500879 2.163307 1.791987
168 15 2 1.180015 0.956054 3.034780 1.948434 2.024784 1.748145 3.263474 3.594899 5.820333 3.346766
169 15 2 1.054002 1.749569 2.052979 6.951637 1.929975 2.287849 2.595793 4.004957 3.820003 6.171400
170 15 2 1.616166 1.848714 2.757434 8.047318 3.997770 3.325087 3.427155 6.722304 4.498966 4.541058
176 12 0 0.950194 0.805112 1.995972 1.516355 2.095521 1.672434 2.053575 1.687867 2.537751 2.222375
177 12 0 0.904523 0.992134 1.885613 1.653240 2.052942 1.916368 1.966836 1.800376 2.834904 3.126339
178 12 0 1.012287 0.893801 1.881799 1.531853 2.324009 1.897589 1.831460 2.120726 2.511186 2.214476
179 12 1 1.452985 0.825908 1.739702 1.573807 2.773037 1.727637 3.496237 2.246997 4.231974 2.798505
180 13 3 2.270256 4.996333 12.184773 2.181671 2.925491 10.695959 2.355779 4.666981 2.104678 23.690548
181 13 3 1.101099 0.983219 1.628841 1.364167 2.454148 2.182945 1.594026 1.799313 1.687137 1.759911
182 13 0 1.126716 1.318047 2.585377 2.040608 3.373939 4.085395 2.128893 2.043370 2.497516 2.909692
183 13 1 0.940270 0.991722 1.804803 1.591329 2.316175 2.189715 1.917095 2.060912 1.729262 2.225852
184 14 0 nan nan nan nan nan nan nan nan nan nan
185 14 1 1.022246 0.945720 2.155223 2.118324 2.561660 2.090733 2.314134 2.699627 2.226034 2.316106
186 14 1 0.974751 0.886793 1.803953 1.801340 1.964013 2.106821 1.681420 2.050019 2.721884 3.521734
187 14 1 1.086756 1.589317 1.659967 4.707712 2.246332 4.531498 2.911996 6.319704 12.817868 21.724041
189 15 3 1.036894 1.007828 1.802447 1.654717 2.706980 2.191681 1.967453 2.152344 1.833305 2.794933
190 15 3 3.231156 3.073303 1.293631 0.865599 2.762271 2.633474 3.271566 2.726291 5.802854 3.203952
191 15 3 0.993252 1.073542 1.716186 1.664553 2.415388 2.321714 1.837048 2.332756 2.261294 2.732593
220 18 2 nan nan nan nan nan nan nan nan nan nan
221 18 2 nan nan nan nan nan nan nan nan nan nan
222 18 2 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 1.053982 0.808863 1.782319 2.034696 1.733997 2.022598 1.511240 1.906956 1.819993 2.159876
323 2 3 0.860357 4.316591 2.280368 4.462925 1.931427 2.886154 1.812645 1.898566 1.958087 2.539791
324 4 3 0.764442 1.220290 1.797703 5.275541 1.526943 2.157216 1.654545 1.916986 1.589420 1.935577
325 9 2 nan nan nan nan nan nan nan nan nan nan
329 12 1 0.748039 0.915989 2.149300 12.808816 1.711368 2.003370 1.647722 1.847999 1.786672 1.999685
333 12 1 1.026691 1.397847 4.396444 2.896670 1.972901 4.002528 1.808598 1.666057 1.850400 1.691111
In [16]:
csv_file = os.path.join(nb_outdir, 'ds_noise_ratio_{}.csv'.format(JD))
df.to_csv(csv_file, index=False)

Delay spectrum and autocorrelation plot per baseline per polarization for a given frequency (sub-)band¶

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

In [17]:
utils.interactive_plots_dspec(bls, uvd, uvd_diff, JD)
In [ ]: