From a0e32e3f8ac5af181d38173aa72151943c51370c Mon Sep 17 00:00:00 2001 From: stedif <stefano.difrischia@inaf.it> Date: Tue, 1 Feb 2022 13:13:30 +0100 Subject: [PATCH] L2SS-578: expose recv property so it can be retrieved from beam --- .../tangostationcontrol/devices/beam.py | 2 +- .../tangostationcontrol/devices/recv.py | 52 ++++++++----------- .../devices/test_device_beam.py | 16 +++--- 3 files changed, 28 insertions(+), 42 deletions(-) diff --git a/tangostationcontrol/tangostationcontrol/devices/beam.py b/tangostationcontrol/tangostationcontrol/devices/beam.py index cd08d50e5..62580130a 100644 --- a/tangostationcontrol/tangostationcontrol/devices/beam.py +++ b/tangostationcontrol/tangostationcontrol/devices/beam.py @@ -135,7 +135,7 @@ class Beam(lofar_device): delays = self._HBAT_delays(pointing_direction, timestamp) # Convert delays into beam weights - HBAT_bf_delay_step_delays = self.recv_proxy.HBAT_bf_delay_step_delays + HBAT_bf_delay_step_delays = self.recv_proxy.get_hbat_bf_delay_step_delays() HBAT_bf_delays = self._calculate_HBAT_bf_delays(delays, self.HBAT_signal_input_delays, HBAT_bf_delay_step_delays) # Write weights to RECV diff --git a/tangostationcontrol/tangostationcontrol/devices/recv.py b/tangostationcontrol/tangostationcontrol/devices/recv.py index 64bcfcc82..5eb036264 100644 --- a/tangostationcontrol/tangostationcontrol/devices/recv.py +++ b/tangostationcontrol/tangostationcontrol/devices/recv.py @@ -15,7 +15,7 @@ from tango import DebugIt from tango.server import command from tango.server import device_property, attribute -from tango import AttrWriteType, DevState +from tango import AttrWriteType, DevState, DevVarFloatArray import numpy # Additional import @@ -33,17 +33,6 @@ __all__ = ["RECV", "main"] @device_logging_to_python() class RECV(opcua_device): - # TODO: to be deleted in L2SS-574 - _hbat_bf_delay_step_delays = numpy.array([ - 0.0, 0.5228E-9, 0.9797E-9, 1.4277E-9, 1.9055E-9, - 2.4616E-9, 2.9539E-9, 3.4016E-9, 3.8076E-9, 4.3461E-9, - 4.9876E-9, 5.4894E-9, 5.7973E-9, 6.2707E-9, 6.8628E-9, - 7.3989E-9, 8.0673E-9, 8.6188E-9, 9.1039E-9, 9.5686E-9, - 10.0463E-9, 10.5774E-9, 11.0509E-9, 11.5289E-9, 11.9374E-9, - 12.4524E-9, 13.0842E-9, 13.5936E-9, 13.9198E-9, 14.4087E-9, - 14.9781E-9, 15.5063E-9 - ],dtype=numpy.float64) - # ----------------- # Device Properties # ----------------- @@ -60,20 +49,19 @@ class RECV(opcua_device): default_value=[True] * 32 ) - # TODO: to be restored in L2SS-574 - # HBAT_bf_delay_step_delays = device_property( - # dtype="DevVarFloatArray", - # mandatory=False, - # default_value=numpy.array([ - # 0.0, 0.5228E-9, 0.9797E-9, 1.4277E-9, 1.9055E-9, - # 2.4616E-9, 2.9539E-9, 3.4016E-9, 3.8076E-9, 4.3461E-9, - # 4.9876E-9, 5.4894E-9, 5.7973E-9, 6.2707E-9, 6.8628E-9, - # 7.3989E-9, 8.0673E-9, 8.6188E-9, 9.1039E-9, 9.5686E-9, - # 10.0463E-9, 10.5774E-9, 11.0509E-9, 11.5289E-9, 11.9374E-9, - # 12.4524E-9, 13.0842E-9, 13.5936E-9, 13.9198E-9, 14.4087E-9, - # 14.9781E-9, 15.5063E-9 - # ],dtype=numpy.float64) - # ) + HBAT_bf_delay_step_delays = device_property( + dtype="DevVarFloatArray", + mandatory=False, + default_value=numpy.array([ + 0.0, 0.5228E-9, 0.9797E-9, 1.4277E-9, 1.9055E-9, + 2.4616E-9, 2.9539E-9, 3.4016E-9, 3.8076E-9, 4.3461E-9, + 4.9876E-9, 5.4894E-9, 5.7973E-9, 6.2707E-9, 6.8628E-9, + 7.3989E-9, 8.0673E-9, 8.6188E-9, 9.1039E-9, 9.5686E-9, + 10.0463E-9, 10.5774E-9, 11.0509E-9, 11.5289E-9, 11.9374E-9, + 12.4524E-9, 13.0842E-9, 13.5936E-9, 13.9198E-9, 14.4087E-9, + 14.9781E-9, 15.5063E-9 + ],dtype=numpy.float64) + ) first_default_settings = [ # set the masks first, as those filter any subsequent settings @@ -88,11 +76,6 @@ class RECV(opcua_device): RCU_LED_colour_R = attribute(dtype=(numpy.uint32,), max_dim_x=32, fget=lambda self: (2 * self.proxy.RCU_LED_green_on_R + 4 * self.proxy.RCU_LED_red_on_R).astype(numpy.uint32)) ANT_mask_RW = attribute_wrapper(comms_annotation=["ANT_mask_RW" ],datatype=numpy.bool_ , dims=(3,32), access=AttrWriteType.READ_WRITE) - - # TODO: convert back to property in L2SS-574 - HBAT_bf_delay_step_delays = attribute(access=AttrWriteType.READ, - dtype=(numpy.float64,), max_dim_x=32, - fget=lambda self: self._hbat_bf_delay_step_delays) # The HBAT beamformer delays represent 32 delays for each of the 96 inputs. # The 32 delays deconstruct as delays[polarisation][dipole], and each delay is the number of 'delay steps' to apply (0.5ns for HBAT1). @@ -143,6 +126,13 @@ class RECV(opcua_device): # -------- # Commands # -------- + @command(dtype_out=DevVarFloatArray) + @DebugIt() + @only_in_states([DevState.ON]) + def get_hbat_bf_delay_step_delays(self): + """ Return the property HBAT_bf_delay_step_delays """ + return self.HBAT_bf_delay_step_delays + @command() @DebugIt() @only_in_states([DevState.STANDBY, DevState.ON]) diff --git a/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py b/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py index c83e0af39..71e419318 100644 --- a/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py +++ b/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py @@ -36,17 +36,13 @@ class TestDeviceBeam(AbstractTestBases.TestDeviceBase): HBAT_delays_r1 = numpy.array(recv_proxy.read_attribute('HBAT_BF_delays_RW').value) self.assertIsNotNone(HBAT_delays_r1) - # Unable to independently test '_calculate_HBAT_bf_delays' because it is not a Tango command, - # thus DeviceProxy cannot access it. On the other hand, the method cannot be unit-tested because it - # requires access to a DeviceRecv property from DeviceBeam. This last requirement should change with L2SS-574 - # # verify if values are actually transformed - # HBAT_delays_flat = self.proxy.HBAT_delays(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) - # HBAT_delays = numpy.array(HBAT_delays_flat).reshape(96,16) - # HBAT_signal_input_delays = numpy.zeros((96,32), dtype=numpy.float64) # Property of Beam-device - # HBAT_bf_delay_step_delays = recv_proxy.HBAT_bf_delay_step_delays - # HBAT_bf_delays = self.proxy._calculate_HBAT_bf_delays(HBAT_delays, HBAT_signal_input_delays, HBAT_bf_delay_step_delays) - # self.assertNotEqual(HBAT_delays, HBAT_bf_delays) + HBAT_delays_flat = self.proxy.HBAT_delays(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) + HBAT_delays = numpy.array(HBAT_delays_flat).reshape(96,16) + HBAT_signal_input_delays = numpy.zeros((96,32), dtype=numpy.float64) # Property of Beam-device + HBAT_bf_delay_step_delays = recv_proxy.get_hbat_bf_delay_step_delays() + HBAT_bf_delays = self.proxy._calculate_HBAT_bf_delays(HBAT_delays, HBAT_signal_input_delays, HBAT_bf_delay_step_delays) + self.assertNotEqual(HBAT_delays, HBAT_bf_delays) # Verify writing operation does not lead to errors self.proxy.HBAT_set_pointing(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) # write values to RECV -- GitLab