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 = 2459759
Date = 6-28-2022
data_path = "/mnt/sn1/2459759"
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 2459759.29366 and 2459759.37665
372 diff files found between JDs 2459759.29366 and 2459759.37665

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 197.948849 94.272774 418.462990 258.895765 8.824983 26.392897 1.654197 5.876756 1.195306 0.950863
1 0 0 112.600141 101.722415 243.003787 278.038488 2.546651 1.703030 1.511450 0.762612 1.969765 0.595863
2 0 0 88.075240 96.697087 199.166182 271.790630 2.394166 1.726134 2.879211 2.285626 3.150678 0.735301
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 1.444089 1.310849 1.829468 4.873872 1.888163 2.704818 1.693858 3.760927 2.350715 12.644308
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 94.977335 210.566110 636.368709 2430.438154 49.671570 150.393118 16.417755 126.361740 3.036484 69.540102
15 1 3 1.742391 1.414689 2.214503 1.894921 2.507376 2.557721 1.729142 2.072799 5.438545 8.540749
16 1 3 1.610342 1.183258 1.804173 1.834336 2.203109 1.953344 1.917131 2.071260 9.857841 6.758099
17 1 3 1.472790 1.231350 2.009401 1.789539 2.738872 2.163794 1.875197 1.773412 3.108677 2.552775
18 1 0 41.813123 3.917701 2.888562 4.063837 185.594424 6.275101 1.698886 2.656839 2.148594 2.579053
19 2 1 1.868700 1.295849 1.657976 2.230349 2.212257 2.501238 1.867316 2.680936 2.372100 7.924096
20 2 1 1.097173 1.353013 1.920140 1.808926 1.808466 2.086057 1.704216 1.813979 2.280790 2.963948
21 2 2 1.447458 1.189615 1.723126 1.524522 2.266118 1.792100 2.209440 1.892600 2.816931 2.778939
23 0 2 50.279604 115.701794 132.979726 292.080384 4.122224 5.547414 0.789692 2.863800 1.395448 1.289347
24 0 2 90.948541 177.652534 212.192504 436.776379 2.253175 4.496922 0.933935 1.401929 1.296708 1.584127
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 4.652749 4.526367 10.613413 10.944893 10.926543 6.513286 4.136745 2.926105 4.841815 3.430494
28 1 0 58.188769 1.187534 2.735409 2.624305 285.501128 2.175430 2.162921 2.771316 3.903444 4.779381
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 1.447006 1.336683 2.089614 1.872543 2.352590 2.302813 2.481229 4.716847 4.127701 10.823324
32 2 2 1.414789 3.135771 1.772706 3.051050 1.912648 2.965969 3.608492 15.311297 3.163158 11.043942
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
39 0 3 nan nan nan nan nan nan nan nan nan nan
40 4 1 1.738665 1.282054 1.731970 1.871894 1.960167 2.173549 1.695917 2.054822 2.484857 3.976963
41 4 3 1.339718 1.864250 2.317069 3.193197 2.204122 4.975466 1.870058 2.089974 2.531716 2.899449
42 4 0 1.393494 1.328953 1.947162 1.919830 2.801261 2.449068 2.025719 2.068534 22.013971 18.563139
45 5 0 2.897315 3.641974 23.591357 19.816981 4.150215 9.950451 3.454958 2.130932 3.241181 2.493756
46 5 0 2.520330 1.722025 1.870119 6.902776 4.146625 2.878133 2.092945 1.949793 3.629255 3.595766
50 3 3 nan nan nan nan nan nan nan nan nan nan
51 3 2 1.091592 1.102631 2.492585 4.355806 1.849426 2.035138 1.682876 2.192255 5.957564 5.595624
52 3 3 nan nan nan nan nan nan nan nan nan nan
53 3 2 1.179515 1.049862 2.553778 2.386642 2.314545 2.182136 2.283303 2.380908 8.067686 7.806904
54 4 0 1.388335 1.022675 1.857839 2.114929 2.652151 2.397020 2.094337 2.367279 4.201798 4.354767
55 4 2 nan nan nan nan nan nan nan nan nan nan
56 4 1 1.249036 1.457906 1.779532 1.959350 2.244597 1.951990 1.925023 1.758358 2.936414 2.467278
57 4 3 1.687988 1.789758 2.932330 2.619921 4.480381 3.233151 1.849388 1.808717 2.666188 3.164336
65 3 0 1.385833 0.880798 1.843954 1.937220 2.410950 1.948329 1.700938 1.799916 2.339865 2.861039
66 3 0 1.660767 1.270887 3.876652 2.100137 3.031687 2.142406 2.341984 1.874796 3.258804 4.137591
67 3 0 1.743067 1.204325 2.004310 2.101490 2.433888 2.072447 1.829787 1.752251 2.292550 2.576071
68 3 1 nan nan nan nan nan nan nan nan nan nan
69 4 1 1.315650 1.050425 1.885024 2.241912 1.783859 2.018950 1.765644 1.875751 3.005589 3.338042
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
72 4 0 1.512851 1.253741 2.780642 2.686784 2.601416 3.295277 1.867104 1.998564 4.533813 9.298518
73 5 0 1.656422 1.452322 1.942140 1.763922 2.740870 2.225249 1.991270 1.821470 7.185029 7.039046
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 2.264730 1.984322 1.598704 2.480055 2.231559 2.640033 1.640387 2.207333 5.286475 9.215697
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 4.748614 12.053812 21.607318 32.175134 8.168557 20.969854 4.401009 9.753497 6.844426 4.540699
89 9 2 nan nan nan nan nan nan nan nan nan nan
90 9 0 2.249646 1.548440 2.009934 2.039147 3.327934 2.371946 8.403662 2.637702 13.163144 6.882619
91 9 1 nan nan nan nan nan nan nan nan nan nan
92 10 0 5.204699 3.498042 14.732606 15.029057 5.321021 4.581082 4.600509 2.650287 4.203728 3.067267
93 10 0 6.053587 2.079205 10.272565 2.907878 7.596623 2.091393 5.028677 1.955751 3.801175 2.690649
94 10 0 1.427969 1.435823 1.713271 2.482224 1.960097 2.449720 2.555289 4.802994 5.110441 15.641823
98 7 2 5.133903 3.440601 13.595499 25.348003 6.366339 7.883701 4.653171 3.429007 5.403551 3.119753
99 7 2 1.805312 1.161731 1.806103 1.807502 2.187888 2.134011 1.789821 1.581780 4.963926 4.809879
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 2.114561 1.251014 1.592186 1.750407 2.029440 2.128677 1.826373 1.673283 3.561072 2.771885
104 8 1 4.582387 1.841757 2.825138 1.898627 2.942047 2.540928 3.103799 1.672457 8.840699 3.079069
105 9 1 nan nan nan nan nan nan nan nan nan nan
106 9 3 2.219707 2.227389 1.848822 1.960301 4.565223 5.229015 2.299667 2.783923 3.889123 3.294686
107 9 0 10.133405 31.267305 37.568572 185.853972 16.587862 20.314292 3.425935 2.776406 5.391020 2.341349
108 9 1 nan nan nan nan nan nan nan nan nan nan
109 10 1 2.897543 2.435348 1.992767 2.055479 4.681894 4.887597 1.847017 2.016348 2.648584 2.552057
110 10 1 1.486068 2.521403 1.904604 3.043592 2.631711 3.451952 1.662137 3.880504 2.188741 2.348630
111 10 1 1.496996 1.398810 2.437269 1.910482 2.554281 1.859755 1.961956 1.824011 2.383744 1.690696
112 10 2 5.232826 1.350228 9.427612 1.957305 8.975051 2.461504 4.082591 2.948819 5.385116 6.629114
116 7 2 7.014018 3.082413 7.449475 10.760042 20.840332 6.319479 7.729848 2.516913 9.480741 3.012477
119 7 1 nan nan nan nan nan nan nan nan nan nan
120 8 1 5.205628 2.971910 8.413307 2.285330 5.039451 2.583316 7.288338 1.995463 20.562234 3.051636
121 8 3 2.345744 1.194403 1.806151 1.798796 4.579230 2.875684 2.955075 2.110099 6.395212 16.296902
122 8 2 nan nan nan nan nan nan nan nan nan nan
123 8 3 1.863485 1.523571 1.742493 1.855069 2.286380 1.706442 1.885051 1.681999 4.001689 3.406129
124 9 2 nan nan nan nan nan nan nan nan nan nan
125 9 3 9.042302 3.352747 45.257674 16.497258 22.735334 6.487922 3.187632 2.395434 5.512736 2.332085
126 9 3 4.416043 9.021597 42.728657 9.275201 4.925291 19.702561 6.507601 4.838740 5.189506 3.948057
127 10 2 2.826765 2.838314 4.760158 2.321339 5.891051 8.405182 9.110428 7.833740 12.296738 11.664543
128 10 2 1.014302 1.145425 2.025213 2.220811 2.105223 2.152635 1.830992 1.634481 2.770633 4.143674
129 10 3 1.759352 1.117166 2.013865 1.727854 2.222701 2.043072 1.729559 1.711915 1.740980 2.586992
130 10 3 1.858466 1.891905 3.421254 15.758808 2.100750 1.998023 2.105928 1.745345 3.550106 1.885258
135 12 2 1.476058 1.301197 2.022871 1.803170 2.474795 2.118726 1.908729 1.872798 2.267728 1.953507
136 12 2 1.714684 1.445922 8.466953 1.686490 3.017171 2.090550 7.254012 2.793560 4.258218 6.353764
138 7 1 nan nan nan nan nan nan nan nan nan nan
140 13 2 1.495715 1.199724 1.837553 1.756687 2.647367 2.062963 1.776686 2.215506 2.763643 3.277267
141 13 2 7.081967 1.332573 24.972947 1.958613 21.449626 2.569283 17.755040 2.374153 15.619621 4.123330
142 13 2 3.532227 1.625554 5.710328 1.913303 4.927058 2.683237 2.497374 1.858286 4.033165 2.296644
143 14 2 1.559953 0.987830 2.172705 1.753399 2.180112 1.931823 2.114305 1.942252 3.011952 3.655534
144 14 3 2.358586 1.708476 2.342510 1.759114 4.124006 2.530178 2.215917 1.566115 4.066672 3.205881
145 14 3 7.692913 4.300012 23.346207 23.819605 21.600999 12.633417 3.268104 2.039804 2.781154 1.974904
150 15 1 6.380639 6.019057 21.029430 40.110700 14.440569 12.014109 3.236718 3.363493 3.001521 2.303604
155 12 2 3.094282 4.793926 9.955589 21.599409 4.181328 4.393000 3.174645 4.910369 3.323369 2.881238
156 12 3 1.960940 1.766728 2.422764 1.776059 3.307950 2.385563 2.006696 1.935302 2.106070 2.133878
157 12 3 1.796504 1.411629 2.151703 1.700118 2.436203 2.338176 1.969509 1.880035 2.115058 2.528149
158 12 3 1.955627 1.230897 5.957155 1.822291 4.859236 2.238955 3.672419 2.344695 5.157499 3.600965
160 13 3 2.849335 1.946559 3.303002 3.493066 5.672672 3.326402 1.874205 1.974987 1.956187 2.010690
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.865912 1.518620 1.714318 2.115482 1.911277 2.144784 2.097753 2.189889 3.524122 6.689669
164 14 2 1.536076 1.366073 1.668267 1.763579 2.335874 1.974957 1.989831 2.858624 4.844052 3.339078
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 1.644382 2.505836 1.831955 1.952963 3.088283 2.536010 2.478278 2.278511 2.437492 2.640578
168 15 2 1.817597 1.289456 3.656457 2.842740 2.162163 1.760489 4.066829 5.307266 6.599176 4.701115
169 15 2 1.300535 1.351938 1.842963 2.708281 2.390029 2.106202 2.981032 6.362928 5.366571 10.904151
170 15 2 1.622965 1.328086 2.296287 2.344934 2.653660 2.331293 3.585820 5.052706 5.496825 5.701930
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 1.893332 1.023476 2.202882 2.145338 2.703167 1.940431 5.074252 2.411735 5.763817 3.714796
180 13 3 3.483481 5.578946 16.397879 2.885163 2.858809 10.916071 2.701230 7.713543 2.648472 29.821496
181 13 3 1.832408 1.355404 2.092617 1.731574 2.154651 2.373510 1.642413 1.474646 2.149605 2.263836
182 13 0 nan nan nan nan nan nan nan nan nan nan
183 13 1 1.441047 1.315474 2.310325 1.800416 3.720682 2.561025 2.213998 2.135840 3.801626 4.596893
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 1.202953 1.205810 2.057649 1.849798 2.261330 1.989406 1.881650 1.725325 2.305012 2.188583
190 15 3 3.541497 5.205390 1.604730 2.383238 3.621137 3.887541 2.680944 2.917835 4.586355 4.884863
191 15 3 2.031049 1.416111 7.215601 3.318561 2.665795 2.394525 1.847433 1.987325 2.396670 2.331541
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 8.363618 7.642542 16.387486 34.831547 8.197556 10.500259 11.084807 3.483264 6.816310 3.858410
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 0.985106 9.310943 2.260661 22.484483 1.903278 21.846774 2.185688 5.931447 2.394707 4.607868
329 12 1 1.450253 1.601470 2.187214 8.270738 2.134337 1.765250 1.614419 1.706470 2.368680 2.356269
333 12 1 1.287988 1.532201 1.983046 2.115494 2.681433 3.962873 1.636318 1.747118 2.217240 2.778998
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 [ ]: