From 8e4b2944e256f788dfd62f67a2a244f642f3a8f8 Mon Sep 17 00:00:00 2001
From: mancini <mancini@astron.nl>
Date: Fri, 11 Oct 2019 14:10:08 +0200
Subject: [PATCH] SSB-47: improved plot look and feel

---
 .../lib/processing/inspect.py                 | 71 ++++++++++++++-----
 1 file changed, 55 insertions(+), 16 deletions(-)

diff --git a/CAL/CalibrationProcessing/lib/processing/inspect.py b/CAL/CalibrationProcessing/lib/processing/inspect.py
index 997528fd416..8970aa28a7c 100644
--- a/CAL/CalibrationProcessing/lib/processing/inspect.py
+++ b/CAL/CalibrationProcessing/lib/processing/inspect.py
@@ -44,7 +44,7 @@ def dft2_numba(x: numpy.ndarray,
                v: numpy.ndarray,
                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)
     x_down = x.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):
                 phases[i, j, k] = arg_factor * (x[j] * l[k] + y[i] * m[k])
 
     real_factor = numpy.cos(phases)
-    imag_factor = numpy.cos(phases)
+    imag_factor = numpy.sin(phases)
 
     for i in numba.prange(y_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
     color_map = cm.get_cmap('hsv')
 
     colors = color_map(phase_array)
-    colors[:, 0] *= norm_abs_array
-    colors[:, 1] *= norm_abs_array
-    colors[:, 2] *= norm_abs_array
+    colors[:, 3] = norm_abs_array
+    #colors[:, 1] *= norm_abs_array
+    #colors[:, 2] *= norm_abs_array
 
     old_shape = list(complex_array.shape)
     new_shape = old_shape + [4]
@@ -166,13 +166,31 @@ def _dft_visibilities_lm_plane(l, m, v, sampling, frequency, array_size):
     return fft_vis
 
 
-def _plot_complex_image(canvas, image, extent=None, log=False):
-    color_mapped_vis = complex_value_to_color(image, log=log)
+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, abs_max=abs_max, abs_min=abs_min)
     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,
-                                                                  sampling=512):
+                                                                  sampling=512,
+                                                                  abs_min=None,
+                                                                  abs_max=None):
     l, m, v, flagged = list(zip(*l_m_v))
 
     for index, polarization in enumerate(('XX', 'XY', 'YX', 'YY')):
@@ -185,12 +203,14 @@ def _plot_station_averaged_visibilities_lm_plane_single_frequency(figure: Figure
         canvas.set_ylim(-1, 1)
 
         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,
                                                                        frequency: float,
-                                                                       sampling=50):
+                                                                       sampling=50,
+                                                                       abs_min=None,
+                                                                       abs_max=None):
     l, m, v, flagged = list(zip(*l_m_v))
 
     for index, polarization in enumerate(('XX', 'XY', 'YX', 'YY')):
@@ -209,12 +229,15 @@ def _plot_station_averaged_visibilities_station_plane_single_frequency(figure: F
         canvas.set_xlabel('x [m]')
         canvas.set_ylabel('y [m]')
 
-        color_mapped_fft = complex_value_to_color(fft_vis, log=False)
-        canvas.imshow(color_mapped_fft[:, ::-1], origin='lower', extent=[-1 * array_size,
+        color_mapped_fft = complex_value_to_color(fft_vis, log=False,
+                                                  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],
-                      resample = True)
+                      resample=True)
         canvas.set_title(polarization)
 
 
@@ -243,11 +266,23 @@ def _plot_station_averaged_visibilities_lm_plane_datatable(data_table: __DATATAB
                                                                   DEFAULT_FORMAT)
             figure = plt.figure(figure_title)
 
-
             figure.suptitle(figure_title.replace('_', ' '))
 
             _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:
                 __save_figure_to_path(figure, save_to, figure_title)
                 plt.close(figure)
@@ -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.set_title(polarization)
                 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), '+-')
         if save_to:
             for figure_name in opened_figures:
@@ -362,13 +399,15 @@ def plot_gains_fit_per_antenna(dset: HolographyDataset,
                 canvas.set_ylabel('Amplitude')
                 canvas.plot(frequencies/__MHZ_IN_HZ, numpy.abs(antenna_data), '+')
                 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)
                 __set_minor_ticks_for_canvas(canvas)
 
                 canvas.set_title(polarization)
                 canvas.set_xlabel('frequency (MHz)')
                 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, phase_par['m'] * frequencies + phase_par['q'])
                 plt.tight_layout()
-- 
GitLab