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 = 2459813
Date = 8-21-2022
data_path = "/mnt/sn1/2459813"
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)
1862 sum files found between JDs 2459813.25307 and 2459813.66937
1862 diff files found between JDs 2459813.25307 and 2459813.66937

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
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 1.355911 1.350483 1.457728 1.392087 1.905176 1.925344 1.798262 1.608652 1.666757 1.939023
37 3 1 1.243359 1.071513 1.765002 1.297161 2.615071 2.033808 2.309652 1.956875 3.399176 3.108971
38 3 1 1.189540 1.272535 1.718882 1.547217 2.034220 2.130403 2.156496 2.243647 1.953190 2.069958
40 4 1 0.906284 1.339752 2.124944 1.339597 1.803811 2.207696 1.660970 2.014414 1.519474 2.835123
41 4 3 1.026201 1.373730 1.334747 1.893345 1.975903 2.283793 1.647847 1.790443 1.586762 1.789306
42 4 0 1.255020 1.180544 1.451119 1.491819 2.706598 2.546710 1.887620 2.359843 2.521962 5.640134
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 2.162704 1.308212 1.773022 1.251715 2.664740 2.108051 1.964373 1.816598 2.907912 1.841131
51 3 2 2.135574 1.211861 11.945862 1.567478 2.108683 2.174137 1.819520 1.763181 1.735567 2.155097
52 3 3 1.484420 1.681931 1.761276 3.048442 2.423033 3.466368 2.273248 2.932466 2.220807 3.113439
53 3 2 1.259878 1.587614 2.781926 2.984179 2.965849 3.605042 2.613288 2.889571 4.000766 3.930911
54 4 0 1.136965 1.036523 1.438049 1.235684 2.773260 2.122450 1.930654 1.637312 3.135872 3.406800
55 4 2 1.165917 1.151922 1.628814 1.158618 1.906799 1.986352 1.885090 1.804745 2.637659 1.970154
56 4 1 1.369518 1.431046 1.275291 1.562788 2.393168 2.339403 1.962080 1.954074 2.701703 2.539287
57 4 3 1.097963 1.727843 1.801103 5.200543 2.059514 4.569346 2.081840 1.852964 1.982438 2.790722
65 3 0 1.313975 1.158645 2.479879 1.232965 2.765147 2.030134 2.376346 1.732099 2.173925 1.643664
66 3 0 1.563131 1.196945 3.281178 1.716259 3.440289 2.210899 2.616621 1.711863 2.540147 2.089341
67 3 0 0.982318 1.173321 1.545202 1.368743 2.047622 1.856782 1.841613 1.876916 2.039544 1.673191
68 3 1 1.150198 1.204933 1.195656 1.780904 1.849942 1.895268 1.785419 1.869650 1.896233 2.309437
69 4 1 1.045133 1.266205 1.698668 1.790798 1.727541 2.174886 1.977371 1.928042 2.121785 2.767589
70 4 2 1.648582 1.766455 1.241713 1.838155 3.403663 3.017647 3.159702 2.505721 2.045945 2.719152
71 4 2 1.483117 1.397762 1.597747 1.383417 1.806803 2.129080 1.684026 1.654722 1.727242 1.639175
72 4 0 1.193797 1.502681 1.633415 1.924351 2.522053 2.577664 1.896424 2.099633 3.393372 3.871621
73 5 0 nan nan nan nan nan nan nan nan nan nan
81 7 0 2.084277 1.546000 2.569694 1.547860 2.716734 2.662779 3.156399 1.928808 17.041868 4.804987
82 7 0 1.004205 1.163148 1.130249 1.392729 1.755058 2.166734 1.763907 2.047750 2.315974 3.687819
83 7 0 1.155835 1.169203 1.755345 4.702353 1.707611 1.963652 1.934464 1.861701 2.147839 1.760700
84 8 3 1.559547 3.005709 1.772225 6.211386 2.025329 3.087284 2.045690 3.528854 6.403615 10.206589
85 8 0 1.025490 1.265907 1.701021 1.257003 1.805702 1.893000 1.918031 2.678048 2.713425 3.963822
86 8 0 2.295827 1.705878 2.759839 1.247997 3.985540 2.645163 5.676544 4.771578 3.749034 6.378437
87 8 2 1.260680 1.521822 1.887455 2.476020 1.900157 2.253991 2.382972 2.776953 4.459612 9.659968
88 9 0 3.025311 16.135454 22.327308 51.750983 12.407502 57.075310 6.904894 5.575663 11.784255 3.734433
90 9 0 1.000564 1.071380 1.414377 1.849725 1.968239 1.824827 1.648187 2.245323 2.174476 3.354817
91 9 1 4.659148 2.029529 19.243646 1.465872 8.039247 4.666914 8.636373 1.612604 11.717223 1.512944
92 10 0 4.299923 2.731384 0.692737 1.056230 3.066752 3.843370 3.477724 3.170458 4.209965 3.094122
93 10 0 1.292103 1.047394 2.452086 1.150729 2.712929 2.090615 2.201469 1.857337 3.123880 1.627233
94 10 0 1.084435 1.187117 1.452254 1.399852 2.177051 2.283798 2.396350 2.856371 2.101959 5.007546
98 7 2 1.585360 1.051743 1.818647 1.505074 2.986089 2.191838 2.883025 1.698767 7.920718 1.988428
99 7 2 1.162353 1.650354 1.602522 1.762812 1.852495 2.905642 1.898545 3.536694 3.331101 40.040342
100 7 1 1.303473 1.186055 2.130403 1.394645 1.866553 1.942439 1.745716 1.376904 1.981650 1.718265
101 8 2 1.536381 1.539004 1.476400 1.459876 1.862733 2.088508 1.986428 1.911174 1.893800 3.361386
102 8 0 0.441683 0.933845 1.157570 3.616803 0.965966 0.801795 0.656140 1.971008 1.143997 3.550464
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 1.311683 21.675562 2.364976 25.146155 1.938187 84.886347 2.642883 87.938804 2.772173 90.507185
106 9 3 1.258210 1.501748 2.053324 1.972880 1.835856 1.964736 2.632082 2.143288 2.688237 2.063398
107 9 0 6.569340 3.264954 54.657488 2.674193 10.163469 4.679544 10.490537 2.264427 13.681479 2.001051
108 9 1 2.692638 1.651850 2.092306 5.434289 2.355163 2.070001 8.245293 1.801984 4.462155 1.840892
109 10 1 2.514218 2.787282 1.532672 1.610795 6.705916 5.956939 2.491824 1.754645 2.051806 2.259726
110 10 1 1.750728 2.111550 1.822018 0.975870 2.752033 3.946730 2.274902 3.445131 2.114830 2.375361
111 10 1 1.416925 1.282324 2.248261 1.616474 2.547411 2.484003 2.357739 2.017107 2.034335 1.827966
112 10 2 1.024518 1.364978 1.169365 1.689074 1.768156 2.138141 1.661135 1.715368 1.802587 1.731976
116 7 2 1.320954 1.041165 1.353853 1.391950 3.246595 2.225855 1.665454 1.716086 2.701317 2.335521
117 7 3 1.464320 1.442343 1.782666 1.451891 2.377257 1.973667 2.149361 2.482968 3.399618 5.010756
118 7 3 2.266402 1.271490 5.068330 2.248462 3.192628 2.127529 4.234471 1.869470 4.420922 2.399477
119 7 1 0.969991 1.028788 1.474376 1.706104 1.897272 2.190340 1.917898 1.738289 2.302960 2.545777
120 8 1 nan nan nan nan nan nan nan nan nan nan
121 8 3 2.212029 2.413550 2.172483 1.375952 5.481027 6.873869 3.641614 2.839376 5.165082 23.326461
122 8 2 2.465163 2.298982 1.920868 1.614993 5.989330 4.792358 3.795138 2.625481 4.092822 5.503737
123 8 3 1.375008 1.315558 1.673254 1.497577 1.970556 1.803062 1.796231 1.661321 2.379428 2.085652
125 9 3 6.735111 33.236833 2.998033 80.288901 18.657151 127.054827 13.975186 129.409315 42.299955 143.663132
126 9 3 1.516473 2.417075 2.279923 3.662845 3.008105 3.898674 2.165283 2.336366 3.169291 2.536458
127 10 2 1.492196 1.394320 2.310257 1.187293 3.430327 3.161643 3.655495 3.004085 3.790453 3.783079
128 10 2 1.365508 1.220283 1.590123 1.518500 2.261905 1.922610 1.978195 1.855651 2.658576 4.212260
129 10 3 1.024976 1.070196 1.304413 1.269392 1.796811 1.844633 1.789291 1.787230 1.507823 2.274079
130 10 3 1.382617 1.394295 1.876663 1.518406 2.142436 2.174683 1.944619 1.856449 2.239714 2.050423
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 5.234032 4.885030 21.532533 26.706752 15.308899 8.327067 5.383517 3.389174 8.737771 2.505353
138 7 1 1.188420 3.868846 1.351901 7.732930 2.090016 8.847134 1.970354 4.238785 9.419370 7.926959
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 1.283641 1.117201 2.337523 1.259506 2.389338 1.662033 2.160342 1.680651 1.936993 1.684056
144 14 3 1.197497 1.366218 1.553117 1.169848 2.280155 2.055618 1.778584 1.698715 2.174961 2.426254
145 14 3 9.931696 7.217673 26.218411 28.096681 30.197451 21.175935 3.740940 1.919032 3.235300 1.694314
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 1.036132 1.033727 1.576809 1.630627 1.857535 1.619850 1.912146 1.761555 1.662075 2.029701
164 14 2 1.103477 1.087841 1.477892 1.291161 1.878917 2.062425 2.131001 3.387140 2.167776 2.277457
165 14 0 5.141470 9.312486 5.775615 21.984843 19.483631 37.277302 5.218719 8.248193 17.289349 14.745423
166 14 0 2.670227 1.890355 1.445510 1.358577 3.114348 2.847204 4.441916 3.004321 3.216416 3.352074
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 1.160447 0.985258 1.070054 1.590446 1.676739 1.911359 1.695530 1.866724 2.755398 4.455455
185 14 1 1.110497 1.197397 1.333164 1.776123 1.853272 1.958370 1.917749 2.772072 1.914567 1.810621
186 14 1 1.084402 1.117205 1.367351 1.284635 1.991416 1.864276 2.126410 2.071309 1.880103 2.254159
187 14 1 1.155124 1.414912 1.577210 2.193341 2.006650 3.031622 2.716614 3.961191 4.393810 9.076072
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
203 18 1 nan nan nan nan nan nan nan nan nan nan
205 19 0 nan nan nan nan nan nan nan nan nan nan
206 19 0 nan nan nan nan nan nan nan nan nan nan
207 19 1 nan nan nan nan nan nan nan nan nan nan
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
223 19 1 nan nan nan nan nan nan nan nan nan nan
224 19 1 nan nan nan nan nan nan nan nan nan nan
241 19 3 nan nan nan nan nan nan nan nan nan nan
242 19 3 nan nan nan nan nan nan nan nan nan nan
243 19 3 nan nan nan nan nan nan nan nan nan nan
320 3 2 5.944165 4.673819 12.441701 47.650728 11.162313 10.041938 12.218766 6.449287 9.387151 6.991516
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 1.238917 1.100458 2.004186 1.837503 2.400358 3.298130 1.817887 1.815501 1.590867 2.008482
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
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 [ ]: