From 8f5dc9372c38bafaa84908de6b435abd0e5892cc Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Fri, 28 Oct 2022 11:53:28 +0200 Subject: [PATCH] L2SS-1010: Deal with unconnected antennas --- .../devices/antennafield.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tangostationcontrol/tangostationcontrol/devices/antennafield.py b/tangostationcontrol/tangostationcontrol/devices/antennafield.py index 8754eb83f..1822181ca 100644 --- a/tangostationcontrol/tangostationcontrol/devices/antennafield.py +++ b/tangostationcontrol/tangostationcontrol/devices/antennafield.py @@ -392,7 +392,15 @@ class AntennaField(lofar_device): def read_Antenna_Cables_Loss_R(self): rcu_bands = self.read_attribute("RCU_band_select_RW") - return numpy.array([cable_types[antenna].get_loss(self.Antenna_Type, rcu_band) for antenna, rcu_band in zip(self.Antenna_Cables, rcu_bands)]) + + control_to_recv_mapping = numpy.array(self.Control_to_RECV_mapping).reshape(-1,2) + recvs = control_to_recv_mapping[:, 0] # first column is RECV device number + + # Unconnected antennas return RCU band 0, which does not exist. Return 0 loss for them instead. + return numpy.array([cable_types[cable].get_loss(self.Antenna_Type, rcu_band) + if recv > 0 else 0 + for recv, cable, rcu_band in + zip(recvs, self.Antenna_Cables, rcu_bands)]) def read_Calibration_SDP_Signal_Input_Samples_Delay_R(self): # Correct for signal delays in the cables @@ -450,10 +458,23 @@ class AntennaField(lofar_device): rcu_bands = self.read_attribute("RCU_band_select_RW") + control_to_recv_mapping = numpy.array(self.Control_to_RECV_mapping).reshape(-1,2) + recvs = control_to_recv_mapping[:, 0] # first column is RECV device number + + antenna_to_sdp_mapping = self.read_attribute("Antenna_to_SDP_Mapping_R") + # construct the subband weights based on the rcu_band of each antenna, # combining the relevant tables. subband_weights = numpy.zeros((self.read_attribute("nr_antennas_R"), 3), dtype=numpy.float64) for antenna_nr, rcu_band in enumerate(rcu_bands): + # Skip antennas not connected to RECV. These do not have a valid RCU band selected. + if recvs[antenna_nr] == 0: + continue + + # Skip antennas not connected to SDP. They must retain a weight of 0. + if antenna_to_sdp_mapping[antenna_nr, 1] == -1: + continue + subband_weights[antenna_nr, :] = rcu_band_to_caltable[rcu_band][antenna_nr, :] return subband_weights -- GitLab