Skip to content
Snippets Groups Projects
Commit a0e32e3f authored by Stefano Di Frischia's avatar Stefano Di Frischia
Browse files

L2SS-578: expose recv property so it can be retrieved from beam

parent 700df905
No related branches found
No related tags found
1 merge request!228Resolve L2SS-578 "Precise hbat delay steps"
...@@ -135,7 +135,7 @@ class Beam(lofar_device): ...@@ -135,7 +135,7 @@ class Beam(lofar_device):
delays = self._HBAT_delays(pointing_direction, timestamp) delays = self._HBAT_delays(pointing_direction, timestamp)
# Convert delays into beam weights # 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) HBAT_bf_delays = self._calculate_HBAT_bf_delays(delays, self.HBAT_signal_input_delays, HBAT_bf_delay_step_delays)
# Write weights to RECV # Write weights to RECV
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
from tango import DebugIt from tango import DebugIt
from tango.server import command from tango.server import command
from tango.server import device_property, attribute from tango.server import device_property, attribute
from tango import AttrWriteType, DevState from tango import AttrWriteType, DevState, DevVarFloatArray
import numpy import numpy
# Additional import # Additional import
...@@ -33,17 +33,6 @@ __all__ = ["RECV", "main"] ...@@ -33,17 +33,6 @@ __all__ = ["RECV", "main"]
@device_logging_to_python() @device_logging_to_python()
class RECV(opcua_device): 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 # Device Properties
# ----------------- # -----------------
...@@ -60,20 +49,19 @@ class RECV(opcua_device): ...@@ -60,20 +49,19 @@ class RECV(opcua_device):
default_value=[True] * 32 default_value=[True] * 32
) )
# TODO: to be restored in L2SS-574 HBAT_bf_delay_step_delays = device_property(
# HBAT_bf_delay_step_delays = device_property( dtype="DevVarFloatArray",
# dtype="DevVarFloatArray", mandatory=False,
# mandatory=False, default_value=numpy.array([
# default_value=numpy.array([ 0.0, 0.5228E-9, 0.9797E-9, 1.4277E-9, 1.9055E-9,
# 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,
# 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,
# 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,
# 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,
# 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,
# 12.4524E-9, 13.0842E-9, 13.5936E-9, 13.9198E-9, 14.4087E-9, 14.9781E-9, 15.5063E-9
# 14.9781E-9, 15.5063E-9 ],dtype=numpy.float64)
# ],dtype=numpy.float64) )
# )
first_default_settings = [ first_default_settings = [
# set the masks first, as those filter any subsequent settings # set the masks first, as those filter any subsequent settings
...@@ -89,11 +77,6 @@ class RECV(opcua_device): ...@@ -89,11 +77,6 @@ class RECV(opcua_device):
ANT_mask_RW = attribute_wrapper(comms_annotation=["ANT_mask_RW" ],datatype=numpy.bool_ , dims=(3,32), access=AttrWriteType.READ_WRITE) 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 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). # 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)) HBAT_BF_delays_R = attribute_wrapper(comms_annotation=["HBAT_BF_delays_R" ],datatype=numpy.int64 , dims=(32,96))
...@@ -143,6 +126,13 @@ class RECV(opcua_device): ...@@ -143,6 +126,13 @@ class RECV(opcua_device):
# -------- # --------
# Commands # 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() @command()
@DebugIt() @DebugIt()
@only_in_states([DevState.STANDBY, DevState.ON]) @only_in_states([DevState.STANDBY, DevState.ON])
......
...@@ -36,17 +36,13 @@ class TestDeviceBeam(AbstractTestBases.TestDeviceBase): ...@@ -36,17 +36,13 @@ class TestDeviceBeam(AbstractTestBases.TestDeviceBase):
HBAT_delays_r1 = numpy.array(recv_proxy.read_attribute('HBAT_BF_delays_RW').value) HBAT_delays_r1 = numpy.array(recv_proxy.read_attribute('HBAT_BF_delays_RW').value)
self.assertIsNotNone(HBAT_delays_r1) 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 # verify if values are actually transformed
# HBAT_delays_flat = self.proxy.HBAT_delays(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) 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_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_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_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) 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) self.assertNotEqual(HBAT_delays, HBAT_bf_delays)
# Verify writing operation does not lead to errors # Verify writing operation does not lead to errors
self.proxy.HBAT_set_pointing(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) # write values to RECV self.proxy.HBAT_set_pointing(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) # write values to RECV
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment