Skip to content
Snippets Groups Projects
Commit 8e4b2944 authored by Mattia Mancini's avatar Mattia Mancini
Browse files

SSB-47: improved plot look and feel

parent 43a1daa2
Branches
Tags
1 merge request!44Merge back holography to master
...@@ -44,7 +44,7 @@ def dft2_numba(x: numpy.ndarray, ...@@ -44,7 +44,7 @@ def dft2_numba(x: numpy.ndarray,
v: numpy.ndarray, v: numpy.ndarray,
fourier_sign): fourier_sign):
arg_factor = (fourier_sign * 2 * numpy.pi * freq_hz / light_speed) arg_factor = (fourier_sign * 2. * numpy.pi * freq_hz / light_speed)
result = numpy.zeros((len(x), len(y)), dtype=numpy.complex64) result = numpy.zeros((len(x), len(y)), dtype=numpy.complex64)
x_down = x.astype(numpy.float32) x_down = x.astype(numpy.float32)
y_down = y.astype(numpy.float32) y_down = y.astype(numpy.float32)
...@@ -68,7 +68,7 @@ def dft2_numba_loop(x, y, l, m, v, arg_factor, result): ...@@ -68,7 +68,7 @@ def dft2_numba_loop(x, y, l, m, v, arg_factor, result):
phases[i, j, k] = arg_factor * (x[j] * l[k] + y[i] * m[k]) phases[i, j, k] = arg_factor * (x[j] * l[k] + y[i] * m[k])
real_factor = numpy.cos(phases) real_factor = numpy.cos(phases)
imag_factor = numpy.cos(phases) imag_factor = numpy.sin(phases)
for i in numba.prange(y_len): for i in numba.prange(y_len):
for j in range(x_len): for j in range(x_len):
...@@ -100,9 +100,9 @@ def complex_value_to_color(complex_array: numpy.ndarray, abs_max=None, abs_min=N ...@@ -100,9 +100,9 @@ def complex_value_to_color(complex_array: numpy.ndarray, abs_max=None, abs_min=N
color_map = cm.get_cmap('hsv') color_map = cm.get_cmap('hsv')
colors = color_map(phase_array) colors = color_map(phase_array)
colors[:, 0] *= norm_abs_array colors[:, 3] = norm_abs_array
colors[:, 1] *= norm_abs_array #colors[:, 1] *= norm_abs_array
colors[:, 2] *= norm_abs_array #colors[:, 2] *= norm_abs_array
old_shape = list(complex_array.shape) old_shape = list(complex_array.shape)
new_shape = old_shape + [4] new_shape = old_shape + [4]
...@@ -166,13 +166,31 @@ def _dft_visibilities_lm_plane(l, m, v, sampling, frequency, array_size): ...@@ -166,13 +166,31 @@ def _dft_visibilities_lm_plane(l, m, v, sampling, frequency, array_size):
return fft_vis return fft_vis
def _plot_complex_image(canvas, image, extent=None, log=False): def _plot_complex_image(canvas, image, extent=None, log=False, abs_max=None, abs_min=None):
color_mapped_vis = complex_value_to_color(image, log=log) color_mapped_vis = complex_value_to_color(image, log=log, abs_max=abs_max, abs_min=abs_min)
canvas.imshow(color_mapped_vis, extent=extent, origin='lower', resample=True) canvas.imshow(color_mapped_vis, extent=extent, origin='lower', resample=True)
def _plot_station_averaged_visibilities_lm_plane_single_frequency_scatter(figure: Figure, l_m_v):
l, m, v, flagged = list(zip(*l_m_v))
for index, polarization in enumerate(('XX', 'XY', 'YX', 'YY')):
v_pol = numpy.array(list(map(lambda x: x[polarization], v)))
canvas = figure.add_subplot(2, 2, index + 1)
canvas.set_title(polarization)
canvas.set_xlabel('l')
canvas.set_ylabel('m')
canvas.set_xlim(-1, 1)
canvas.set_ylim(-1, 1)
plt.minorticks_on()
v_intensity = numpy.abs(v_pol)
canvas.scatter(l, m, c=v_intensity, s=5, vmin=0, vmax=1, cmap='viridis')
def _plot_station_averaged_visibilities_lm_plane_single_frequency(figure: Figure, l_m_v, def _plot_station_averaged_visibilities_lm_plane_single_frequency(figure: Figure, l_m_v,
sampling=512): sampling=512,
abs_min=None,
abs_max=None):
l, m, v, flagged = list(zip(*l_m_v)) l, m, v, flagged = list(zip(*l_m_v))
for index, polarization in enumerate(('XX', 'XY', 'YX', 'YY')): for index, polarization in enumerate(('XX', 'XY', 'YX', 'YY')):
...@@ -185,12 +203,14 @@ def _plot_station_averaged_visibilities_lm_plane_single_frequency(figure: Figure ...@@ -185,12 +203,14 @@ def _plot_station_averaged_visibilities_lm_plane_single_frequency(figure: Figure
canvas.set_ylim(-1, 1) canvas.set_ylim(-1, 1)
vis = _grid_visibilities_lm_plane(l, m, v_pol, sampling) vis = _grid_visibilities_lm_plane(l, m, v_pol, sampling)
_plot_complex_image(canvas, vis, extent=[-1, 1, -1, 1], log=True) _plot_complex_image(canvas, vis, extent=[-1, 1, -1, 1], log=True, abs_min=abs_min, abs_max=abs_max)
def _plot_station_averaged_visibilities_station_plane_single_frequency(figure: Figure, l_m_v, def _plot_station_averaged_visibilities_station_plane_single_frequency(figure: Figure, l_m_v,
frequency: float, frequency: float,
sampling=50): sampling=50,
abs_min=None,
abs_max=None):
l, m, v, flagged = list(zip(*l_m_v)) l, m, v, flagged = list(zip(*l_m_v))
for index, polarization in enumerate(('XX', 'XY', 'YX', 'YY')): for index, polarization in enumerate(('XX', 'XY', 'YX', 'YY')):
...@@ -209,8 +229,11 @@ def _plot_station_averaged_visibilities_station_plane_single_frequency(figure: F ...@@ -209,8 +229,11 @@ def _plot_station_averaged_visibilities_station_plane_single_frequency(figure: F
canvas.set_xlabel('x [m]') canvas.set_xlabel('x [m]')
canvas.set_ylabel('y [m]') canvas.set_ylabel('y [m]')
color_mapped_fft = complex_value_to_color(fft_vis, log=False) color_mapped_fft = complex_value_to_color(fft_vis, log=False,
canvas.imshow(color_mapped_fft[:, ::-1], origin='lower', extent=[-1 * array_size, abs_min=abs_min,
abs_max=abs_max)
plt.minorticks_on()
canvas.imshow(color_mapped_fft[::, ::], origin='lower', extent=[-1 * array_size,
1 * array_size, 1 * array_size,
-1 * array_size, -1 * array_size,
1 * array_size], 1 * array_size],
...@@ -243,11 +266,23 @@ def _plot_station_averaged_visibilities_lm_plane_datatable(data_table: __DATATAB ...@@ -243,11 +266,23 @@ def _plot_station_averaged_visibilities_lm_plane_datatable(data_table: __DATATAB
DEFAULT_FORMAT) DEFAULT_FORMAT)
figure = plt.figure(figure_title) figure = plt.figure(figure_title)
figure.suptitle(figure_title.replace('_', ' ')) figure.suptitle(figure_title.replace('_', ' '))
_plot_station_averaged_visibilities_lm_plane_single_frequency(figure, l_m_v) _plot_station_averaged_visibilities_lm_plane_single_frequency(figure, l_m_v)
if save_to:
__save_figure_to_path(figure, save_to, figure_title)
plt.close(figure)
figure_title = 'ABS_VISIBILITIES_{}-{:4.2f}_MHz.{}'.format(station,
frequency_in_mhz,
DEFAULT_FORMAT)
figure = plt.figure(figure_title)
figure.suptitle(figure_title.replace('_', ' '))
_plot_station_averaged_visibilities_lm_plane_single_frequency_scatter(figure, l_m_v)
if save_to: if save_to:
__save_figure_to_path(figure, save_to, figure_title) __save_figure_to_path(figure, save_to, figure_title)
plt.close(figure) plt.close(figure)
...@@ -292,7 +327,9 @@ def _plot_gains_as_frequency(data_table: __DATATABLE_TYPE, target_station, save_ ...@@ -292,7 +327,9 @@ def _plot_gains_as_frequency(data_table: __DATATABLE_TYPE, target_station, save_
canvas = figure.add_subplot(2, 2, polarization_index + 1) canvas = figure.add_subplot(2, 2, polarization_index + 1)
canvas.set_title(polarization) canvas.set_title(polarization)
canvas.set_ylim(-numpy.pi, numpy.pi) canvas.set_ylim(-numpy.pi, numpy.pi)
canvas.set_xlabel('frequency (MHz)')
canvas.set_ylabel('Phase')
plt.minorticks_on()
canvas.plot(frequencies / __MHZ_IN_HZ, numpy.angle(gains_per_antenna), '+-') canvas.plot(frequencies / __MHZ_IN_HZ, numpy.angle(gains_per_antenna), '+-')
if save_to: if save_to:
for figure_name in opened_figures: for figure_name in opened_figures:
...@@ -362,13 +399,15 @@ def plot_gains_fit_per_antenna(dset: HolographyDataset, ...@@ -362,13 +399,15 @@ def plot_gains_fit_per_antenna(dset: HolographyDataset,
canvas.set_ylabel('Amplitude') canvas.set_ylabel('Amplitude')
canvas.plot(frequencies/__MHZ_IN_HZ, numpy.abs(antenna_data), '+') canvas.plot(frequencies/__MHZ_IN_HZ, numpy.abs(antenna_data), '+')
canvas.plot(frequencies/__MHZ_IN_HZ, amplitude_par['m'] * frequencies + amplitude_par['q']) canvas.plot(frequencies/__MHZ_IN_HZ, amplitude_par['m'] * frequencies + amplitude_par['q'])
plt.minorticks_on()
canvas = figure.add_subplot(2, 2, polarization_index + 3) canvas = figure.add_subplot(2, 2, polarization_index + 3)
__set_minor_ticks_for_canvas(canvas) __set_minor_ticks_for_canvas(canvas)
canvas.set_title(polarization) canvas.set_title(polarization)
canvas.set_xlabel('frequency (MHz)') canvas.set_xlabel('frequency (MHz)')
canvas.set_ylabel('Phase') canvas.set_ylabel('Phase')
canvas.set_ylim(-numpy.pi, numpy.pi)
plt.minorticks_on()
canvas.plot(frequencies/__MHZ_IN_HZ, numpy.angle(antenna_data), '+') canvas.plot(frequencies/__MHZ_IN_HZ, numpy.angle(antenna_data), '+')
canvas.plot(frequencies/__MHZ_IN_HZ, phase_par['m'] * frequencies + phase_par['q']) canvas.plot(frequencies/__MHZ_IN_HZ, phase_par['m'] * frequencies + phase_par['q'])
plt.tight_layout() plt.tight_layout()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment