def setup(self): """Perform necessary initialisation.""" self.MasterNode.disable_hv() # In case already setup and LV is enabled self.MasterNode.initialise_lv() self.MasterNode.set_hv_bias(120) # self.MasterNode.enable_hv() node_threads = [] for node in self.Nodes: node_threads.append(util.spawn_thread(node.setup)) util.wait_for_threads(node_threads)
def test_spawn_thread(self, thread_init_mock): thread_mock = MagicMock() thread_init_mock.return_value = thread_mock function_mock = MagicMock() response = util.spawn_thread(function_mock, "arg1", arg2="arg2") thread_init_mock.assert_called_once_with(target=function_mock, args=("arg1", ), kwargs=dict(arg2="arg2")) thread_mock.start.assert_called_once_with() self.assertEqual(thread_mock, response)
def unmask_pixels(self, node=None, chips=None): """Reset pixelmask for the given chips. Args: node(int): Node to unmask - If None, all nodes included chips(list(int)): List of chips to include in equalisation - If None, all chips included """ nodes, chips = self._validate(node, chips) node_threads = [] for node in nodes: node_threads.append(util.spawn_thread(node.unmask_pixels, chips)) util.wait_for_threads(node_threads)
def optimise_gnd_fbk_cas(self, node_id=None, chips=None): """Optimise GND, FBK and CAS for the given node and chips. Args: node_id(int): Node to optimise - If None, all nodes included chips(list(int)): List of chips to include in optimisation - If None, all chips included """ nodes, chips = self._validate(node_id, chips) node_threads = [] for node in nodes: node_threads.append( util.spawn_thread(node.optimise_gnd_fbk_cas, chips)) util.wait_for_threads(node_threads)
def acquire_tp_image(self, tp_mask): """Load the given test pulse mask and capture a tp image. Args: tp_mask(str): Mask file in config directory """ node_threads = [] for node in self.Nodes: node_threads.append( util.spawn_thread(node.acquire_tp_image, tp_mask)) images = util.wait_for_threads(node_threads) detector_image = self._combine_images(images) plot_name = util.tag_plot_name("TPImage", "Detector") self.dawn.plot_image(detector_image, plot_name)
def full_calibration(self, node_id=None): """Perform the full calibration process. Args: node_id(int): Node to optimise - If None, all nodes included """ nodes, _ = self._validate(node_id) node_threads = [] for node_ in nodes: node_threads.append( util.spawn_thread(self._try_node_full_calibration, node_)) util.wait_for_threads(node_threads) while self.errors: error = self.errors.pop() self.logger.info(error[0], *error[1])
def expose(self, exposure_time): """Acquire single image. Args: exposure_time(int): Acquire time for image Returns: numpy.array: Image data """ node_threads = [] for node in self.Nodes: node_threads.append(util.spawn_thread(node.expose, exposure_time)) images = util.wait_for_threads(node_threads) detector_image = self._combine_images(images) plot_name = util.tag_plot_name("Image", "Detector") self.dawn.plot_image(detector_image, plot_name)
def threshold_equalization(self, node_id=None, chips=None): """Calibrate discriminator equalization for given chips in detector. Args: node_id(int): Node to equalise - If None, all nodes included chips(list(int)): List of chips to include in equalisation - If None, all chips included """ nodes, chips = self._validate(node_id, chips) node_threads = [] for node_ in nodes: node_threads.append( util.spawn_thread(self._try_node_threshold_equalization, node_, chips)) util.wait_for_threads(node_threads) while self.errors: error = self.errors.pop() self.logger.info(error[0], *error[1])
def load_config(self): """Load detector configuration files and default thresholds.""" node_threads = [] for node in self.Nodes: node_threads.append(util.spawn_thread(node.load_config)) util.wait_for_threads(node_threads)