From 480c80f0b080901a64ca904facd74ce4a8f9f46a Mon Sep 17 00:00:00 2001 From: stedif <stefano.difrischia@inaf.it> Date: Mon, 31 Jan 2022 16:20:27 +0100 Subject: [PATCH] L2SS-578: convert hbat_bf_delay_step_delays into a Tango attribute --- .../tangostationcontrol/devices/beam.py | 2 +- .../tangostationcontrol/devices/recv.py | 44 +++++++++++++------ .../devices/test_device_beam.py | 12 +++++ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/tangostationcontrol/tangostationcontrol/devices/beam.py b/tangostationcontrol/tangostationcontrol/devices/beam.py index d674aafa9..2c70cec0a 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.get_property('HBAT_bf_delay_step_delays')['HBAT_bf_delay_step_delays'][0] + HBAT_bf_delay_step_delays = self.recv_proxy.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 636b694a0..64bcfcc82 100644 --- a/tangostationcontrol/tangostationcontrol/devices/recv.py +++ b/tangostationcontrol/tangostationcontrol/devices/recv.py @@ -32,6 +32,18 @@ __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 # ----------------- @@ -48,19 +60,20 @@ class RECV(opcua_device): default_value=[True] * 32 ) - 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) - ) + # 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) + # ) first_default_settings = [ # set the masks first, as those filter any subsequent settings @@ -76,6 +89,11 @@ class RECV(opcua_device): 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). HBAT_BF_delays_R = attribute_wrapper(comms_annotation=["HBAT_BF_delays_R" ],datatype=numpy.int64 , dims=(32,96)) diff --git a/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py b/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py index 8e1f2091f..edae4375c 100644 --- a/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py +++ b/tangostationcontrol/tangostationcontrol/integration_test/devices/test_device_beam.py @@ -27,8 +27,11 @@ class TestDeviceBeam(AbstractTestBases.TestDeviceBase): recv_proxy = TestDeviceProxy("STAT/RECV/1") recv_proxy.off() recv_proxy.initialise() + recv_proxy.set_defaults() recv_proxy.on() + self.proxy.recv_proxy = recv_proxy + # Verify attribute is present (all zeros if never used before) HBAT_delays_r1 = numpy.array(recv_proxy.read_attribute('HBAT_BF_delays_RW').value) self.assertIsNotNone(HBAT_delays_r1) @@ -37,6 +40,15 @@ class TestDeviceBeam(AbstractTestBases.TestDeviceBase): self.proxy.HBAT_set_pointing(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) # write values to RECV HBAT_delays_r2 = numpy.array(recv_proxy.read_attribute('HBAT_BF_delays_RW').value) self.assertIsNotNone(HBAT_delays_r2) + + # 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) + 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) # Verify delays changed (to be discussed) #self.assertFalse((HBAT_delays_r1==HBAT_delays_r2).all()) -- GitLab