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

L2SS-578: add function that searches the most precise step

parent dad295c1
No related branches found
No related tags found
1 merge request!228Resolve L2SS-578 "Precise hbat delay steps"
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
import numpy import numpy
import datetime import datetime
from functools import partial
from tango.server import attribute, command, device_property from tango.server import attribute, command, device_property
from tango import AttrWriteType, DebugIt, DevState, DeviceProxy, DevVarStringArray, DevVarDoubleArray from tango import AttrWriteType, DebugIt, DevState, DeviceProxy, DevVarStringArray, DevVarDoubleArray
...@@ -105,7 +106,7 @@ class Beam(lofar_device): ...@@ -105,7 +106,7 @@ class Beam(lofar_device):
return delays return delays
@staticmethod @staticmethod
def _calculate_HBAT_bf_delays(delays: numpy.ndarray, HBAT_signal_input_delays: numpy.ndarray): def _calculate_HBAT_bf_delays(delays: numpy.ndarray, HBAT_signal_input_delays: numpy.ndarray, HBAT_bf_delay_step_delays: numpy.ndarray):
""" """
Helper function that converts a signal path delay (in seconds) to an analog beam weight, Helper function that converts a signal path delay (in seconds) to an analog beam weight,
which is a value per tile per dipole per polarisation. which is a value per tile per dipole per polarisation.
...@@ -115,10 +116,15 @@ class Beam(lofar_device): ...@@ -115,10 +116,15 @@ class Beam(lofar_device):
# Add signal input delay # Add signal input delay
summed_delays = numpy.add(polarised_delays,HBAT_signal_input_delays) summed_delays = numpy.add(polarised_delays,HBAT_signal_input_delays)
# Divide by 0.5ns and round
HBAT_bf_delays = numpy.array(summed_delays / 0.5e-09, dtype=numpy.int64)
# Find the right delay step by looking for the closest match in property RECV-> HBAT_bf_delay_step_delays
HBAT_bf_delays = numpy.zeros((96,32), dtype=numpy.int64)
distance = lambda x , y : numpy.absolute(x-y)
for tile in range(96):
for at in range(32):
delay = summed_delays[tile,at]
step = min(HBAT_bf_delay_step_delays,key=partial(distance,delay))
HBAT_bf_delays[tile,at] = numpy.int64(delay / step)
return HBAT_bf_delays return HBAT_bf_delays
def _HBAT_set_pointing(self, pointing_direction: numpy.array, timestamp: datetime.datetime = datetime.datetime.now()): def _HBAT_set_pointing(self, pointing_direction: numpy.array, timestamp: datetime.datetime = datetime.datetime.now()):
...@@ -129,7 +135,7 @@ class Beam(lofar_device): ...@@ -129,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_delays = self._calculate_HBAT_bf_delays(delays, self.HBAT_signal_input_delays) HBAT_bf_delays = self._calculate_HBAT_bf_delays(delays, self.HBAT_signal_input_delays, self.recv_proxy.HBAT_bf_delay_step_delays)
# Write weights to RECV # Write weights to RECV
self.recv_proxy.HBAT_BF_delays_RW = HBAT_bf_delays self.recv_proxy.HBAT_BF_delays_RW = HBAT_bf_delays
......
...@@ -51,39 +51,15 @@ class RECV(opcua_device): ...@@ -51,39 +51,15 @@ class RECV(opcua_device):
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.0, 0.5228E-9, 0.9797E-9, 1.4277E-9, 1.9055E-9,
0.5228E-9, 2.4616E-9, 2.9539E-9, 3.4016E-9, 3.8076E-9, 4.3461E-9,
0.9797E-9, 4.9876E-9, 5.4894E-9, 5.7973E-9, 6.2707E-9, 6.8628E-9,
1.4277E-9, 7.3989E-9, 8.0673E-9, 8.6188E-9, 9.1039E-9, 9.5686E-9,
1.9055E-9, 10.0463E-9, 10.5774E-9, 11.0509E-9, 11.5289E-9, 11.9374E-9,
2.4616E-9, 12.4524E-9, 13.0842E-9, 13.5936E-9, 13.9198E-9, 14.4087E-9,
2.9539E-9, 14.9781E-9, 15.5063E-9
3.4016E-9, ],dtype=numpy.float64)
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 = [ first_default_settings = [
......
...@@ -71,5 +71,6 @@ class TestBeamDevice(base.TestCase): ...@@ -71,5 +71,6 @@ class TestBeamDevice(base.TestCase):
# verify if values are actually transformed # verify if values are actually transformed
HBAT_delays = proxy.HBAT_delays(numpy.array([["J2000","0deg","0deg"]] * 96).flatten()) HBAT_delays = proxy.HBAT_delays(numpy.array([["J2000","0deg","0deg"]] * 96).flatten())
HBAT_signal_input_delays = numpy.random.rand(96,32) # tango properties cannot be retrieved for mock devices HBAT_signal_input_delays = numpy.random.rand(96,32) # tango properties cannot be retrieved for mock devices
HBAT_bf_delays = beam.Beam._calculate_HBAT_bf_delays(numpy.array(HBAT_delays).reshape(96,16), HBAT_signal_input_delays) HBAT_bf_delay_step_delays = numpy.random.rand(32)
HBAT_bf_delays = beam.Beam._calculate_HBAT_bf_delays(numpy.array(HBAT_delays).reshape(96,16), HBAT_signal_input_delays, HBAT_bf_delay_step_delays)
self.assertNotEqual(HBAT_delays, HBAT_bf_delays) self.assertNotEqual(HBAT_delays, HBAT_bf_delays)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment