From 3387add3356108a7bf5e65347a847c846cd4a921 Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Thu, 19 May 2022 17:44:00 +0200 Subject: [PATCH] L2SS-800: Added explicit proxy configuration for DigitalBeam, and fixed casing of its properties --- CDB/stations/DTS_ConfigDb.json | 2 +- CDB/stations/DTS_Outside_ConfigDb.json | 7 ++-- CDB/stations/dummy_positions_ConfigDb.json | 2 +- .../devices/sdp/digitalbeam.py | 32 +++++++++++++------ 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/CDB/stations/DTS_ConfigDb.json b/CDB/stations/DTS_ConfigDb.json index 7d4b126f8..aa5a15eeb 100644 --- a/CDB/stations/DTS_ConfigDb.json +++ b/CDB/stations/DTS_ConfigDb.json @@ -179,7 +179,7 @@ "DigitalBeam": { "STAT/DigitalBeam/1": { "properties": { - "Input_to_antenna_mapping": [ + "Input_to_Antenna_Mapping": [ "0", "1", "2", "3", "4", "5", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", diff --git a/CDB/stations/DTS_Outside_ConfigDb.json b/CDB/stations/DTS_Outside_ConfigDb.json index aefd1f1c8..57795f91f 100644 --- a/CDB/stations/DTS_Outside_ConfigDb.json +++ b/CDB/stations/DTS_Outside_ConfigDb.json @@ -239,7 +239,7 @@ "DigitalBeam": { "STAT/DigitalBeam/1": { "properties": { - "Input_to_antenna_mapping": [ + "Input_to_Antenna_Mapping": [ "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "0", "3", "4", "-1", "-1", "-1", @@ -261,7 +261,10 @@ }, "STAT/DigitalBeam/2": { "properties": { - "Input_to_antenna_mapping": [ + "AntennaField_Device": [ + "STAT/AntennaField/2" + ], + "Input_to_Antenna_Mapping": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1", diff --git a/CDB/stations/dummy_positions_ConfigDb.json b/CDB/stations/dummy_positions_ConfigDb.json index 6ce16b8f1..da65fa821 100644 --- a/CDB/stations/dummy_positions_ConfigDb.json +++ b/CDB/stations/dummy_positions_ConfigDb.json @@ -233,7 +233,7 @@ "DigitalBeam": { "STAT/DigitalBeam/1": { "properties": { - "Input_to_antenna_mapping": [ + "Input_to_Antenna_Mapping": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", diff --git a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py index 457e5ade4..57bee599d 100644 --- a/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py +++ b/tangostationcontrol/tangostationcontrol/devices/sdp/digitalbeam.py @@ -46,7 +46,21 @@ class DigitalBeam(beam_device): # Device Properties # ----------------- - Input_to_antenna_mapping = device_property( + AntennaField_Device = device_property( + dtype=numpy.str, + doc='Which AntennaField represents the FPGA inputs to beamform.', + mandatory=False, + default_value = "STAT/AntennaField/1" + ) + + Beamlet_Device = device_property( + dtype=numpy.str, + doc='Which Beamlet represents the FPGAs to steer.', + mandatory=False, + default_value = "STAT/Beamlet/1" + ) + + Input_to_Antenna_Mapping = device_property( dtype=(numpy.int32,), doc='Which antenna of the antennafield is connected to each input. -1 if no antenna is present.', mandatory=False, @@ -75,16 +89,16 @@ class DigitalBeam(beam_device): def read_antenna_select_RW(self): # select only the rows from self.__input_select for which a mapping onto antennas is defined. - antenna_select = [[False] * self.NUM_BEAMLETS] * (max(self.Input_to_antenna_mapping) + 1) + antenna_select = [[False] * self.NUM_BEAMLETS] * (max(self.Input_to_Antenna_Mapping) + 1) - for input_nr, antenna_nr in enumerate(self.Input_to_antenna_mapping): + for input_nr, antenna_nr in enumerate(self.Input_to_Antenna_Mapping): if antenna_nr >= 0: antenna_select[antenna_nr] = self._input_select[input_nr] return antenna_select def write_antenna_select_RW(self, antennas): - for input_nr, antenna_nr in enumerate(self.Input_to_antenna_mapping): + for input_nr, antenna_nr in enumerate(self.Input_to_Antenna_Mapping): if antenna_nr >= 0: self._input_select[input_nr] = antennas[antenna_nr] @@ -104,12 +118,10 @@ class DigitalBeam(beam_device): util = Util.instance() instance_number = self.get_name().split('/')[2] - self.antennafield_proxy = DeviceProxy( - f"{util.get_ds_inst_name()}/AntennaField/{instance_number}") + self.antennafield_proxy = DeviceProxy(self.AntennaField_Device) self.antennafield_proxy.set_source(DevSource.DEV) - self.beamlet_proxy = DeviceProxy( - f"{util.get_ds_inst_name()}/Beamlet/{instance_number}") + self.beamlet_proxy = DeviceProxy(self.Beamlet_Device) self.beamlet_proxy.set_source(DevSource.DEV) # Retrieve positions from RECV device @@ -119,7 +131,7 @@ class DigitalBeam(beam_device): # Generate positions for all FPGA inputs. # Use reference position for any missing antennas so they always get a delay of 0 input_itrf = numpy.array([reference_itrf] * self.NUM_INPUTS) - for input_nr, antenna_nr in enumerate(self.Input_to_antenna_mapping): + for input_nr, antenna_nr in enumerate(self.Input_to_Antenna_Mapping): if antenna_nr >= 0: input_itrf[input_nr] = antenna_itrf[antenna_nr] @@ -130,7 +142,7 @@ class DigitalBeam(beam_device): self.relative_input_positions = input_itrf - reference_itrf # use all antennas in the mapping for all beamlets, unless specified otherwise - input_select = numpy.repeat((numpy.array(self.Input_to_antenna_mapping) >= 0), self.NUM_BEAMLETS).reshape(self.NUM_INPUTS, self.NUM_BEAMLETS) + input_select = numpy.repeat((numpy.array(self.Input_to_Antenna_Mapping) >= 0), self.NUM_BEAMLETS).reshape(self.NUM_INPUTS, self.NUM_BEAMLETS) self.write_input_select_RW(input_select) # -------- -- GitLab