diff --git a/CDB/stations/DTS_ConfigDb.json b/CDB/stations/DTS_ConfigDb.json index 7d4b126f8a7334cf63a6ffed5ccd426f0eaedae8..aa5a15eebe5a9b0c94e64b0757d5093ae0124c54 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 aefd1f1c84157aa49881e4b90c4199173df6e764..57795f91f9bd39a2db4ce3bb9dcfca6c491d5a35 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 6ce16b8f11fd56295dcfe1e82f7d058d4e6c824a..da65fa82114e514035a689c578fc55ee5bf18cc2 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 457e5ade4b59ece68f7ca94417dde00ca8fc3a33..57bee599d8820b07cbb5cb2cc4b0d13f3c2ccd56 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) # --------