def __init__(self, address, handler=BasicRequestHandler, correlator=BasicCorrelationProvider, n_antennas=8, correlator_lags=32, include_baselines='*-*', initial_flux=2.0, initial_int_time=16, analog_bandwidth=512000000.0, antenna_diameter=3): """ SimulatorTCPServer(address, handler, correlator, lags, baselines) This subclasses the BasicTCPServer and adds some methods needed for controlling and reading data from the SimulatorCorrelationProvider. Please see the BasicTCPServer documentation for more detailed infor- mation. 128 - self.get_source_flux() 129 - self.set_source_flux(flux_Jy) 130 - self.get_system_temp(for_antennas=[1,2,3,...]) 131 - self.set_system_temp(ant_val=[1,0.0,2,0.0,3,0.0...]) 132 - self.get_phases(for_antennas=[1,2,3,...]) 133 - self.set_phases(ant_val=[1,0.0,2,0.0,3,0.0...]) 134 - self.get_delays(for_antennas=[1,2,3,...]) 135 - self.set_delays(ant_val=[1,0.0,2,0.0,3,0.0...])""" BasicTCPServer.__init__(self, address, handler=handler, correlator=correlator, correlator_lags=correlator_lags, n_antennas=n_antennas, initial_int_time=initial_int_time, antenna_diameter=antenna_diameter, analog_bandwidth=analog_bandwidth, include_baselines=include_baselines) self._command_set.update({ 128 : self.get_source_flux, 129 : self.set_source_flux, 130 : self.get_system_temp, 131 : self.set_system_temp, 132 : self.get_phases, 133 : self.set_phases, 134 : self.get_delays, 135 : self.set_delays }) self._source_flux = initial_flux self._atmosphere = AtmosphericModel(self) self._geometry = GeometricModel(self) self._correlator = correlator(self, self._include_baselines, correlator_lags)
def set_value(self, param, antenna, value): ibob, ibob_input = self._input_ibob_map[self._mapping[antenna]] try: return self._param_handlers[param]('set', antenna, ibob, ibob_input, value) except KeyError: return BasicTCPServer.set_value(self, param, antenna, value)
def shutdown(self, args): self.stop_checks_loop() self.stop_delay_tracker() self.stop_phase_tracker() return BasicTCPServer.shutdown(self, args)
def get_value(self, param, antenna): try: ibob, ibob_input = self._input_ibob_map[self._mapping[antenna]] return self._param_handlers[param]('get', antenna, ibob, ibob_input) except KeyError: return BasicTCPServer.get_value(self, param, antenna)
def __init__(self, address, handler=BasicRequestHandler, correlator=BEE2CorrelationProvider, reference=6, fstop=0.256, antennas=[6, 1, 2, 3, 4, 5, 7, 8], correlator_lags=16, include_baselines='*-*', initial_int_time=16, analog_bandwidth=512000000.0, antenna_diameter=3, bee2_host='b02.ata.pvt', bee2_port=7147, correlator_bitstream='bee2_calib_corr.bof', ipa_hosts=('169.254.128.3', '169.254.128.2'), dbe_host='169.254.128.0', dds_host='128.171.116.189', correlator_client_port=8332, phase_tracker_port=9453): """ SubmillimeterArrayTCPServer(address, handler, correlator, lags, baselines) This subclasses the BasicTCPServer and adds some methods needed for controlling and reading data from the BEE2CorrelationProvider. Please see the BasicTCPServer documentation for more detailed information.""" BasicTCPServer.__init__(self, address, handler=handler, correlator=correlator, correlator_lags=correlator_lags, antennas=antennas, initial_int_time=initial_int_time, antenna_diameter=antenna_diameter, analog_bandwidth=analog_bandwidth, include_baselines=include_baselines) self._correlator = correlator(self, self._include_baselines, bee2_host, bee2_port, lags=correlator_lags, bof=correlator_bitstream) self._correlator_client = BEE2CorrelatorClient('0.0.0.0', correlator_client_port) self.bee2_host, self.bee2_port, self.bee2_bitstream = bee2_host, bee2_port, correlator_bitstream self._delay_tracker_thread = Thread(target=self._delay_tracker) self._delay_tracker_stopevent = Event() self._checks_thread = Thread(target=self._checks_loop) self._checks_stopevent = Event() self._bee2 = BEE2Client(bee2_host, port=bee2_port) self._bee2._connected.wait() self._dds = DDSClient(dds_host) self._ipa0 = IBOBClient(ipa_hosts[0], port=23) self._ipa1 = IBOBClient(ipa_hosts[1], port=23) self._dbe = IBOBClient(dbe_host, port=23) self._reference_antenna = reference self._phase_tracker_port = phase_tracker_port self._fstop = fstop # GHz, fringe stopping self._ipas = {'ipa0': self._ipa0, 'ipa1': self._ipa1} self._ibobs = {'ipa0': self._ipa0, 'ipa1': self._ipa1, 'dbe': self._dbe} self._boards = {'ipa0': self._ipa0, 'ipa1': self._ipa1, 'dbe': self._dbe, 'bee2': self._bee2} self._mapping = dict((a, i) for i, a in enumerate(self._antennas))#{6:0, 1:1, 2:2, 3:3, 4:4, 5:5, 7:6, 8:7} self._input_ibob_map = {0: [self._ipa0, 0], 1: [self._ipa0, 1], 2: [self._ipa0, 2], 3: [self._ipa0, 3], 4: [self._ipa1, 0], 5: [self._ipa1, 1], 6: [self._ipa1, 2], 7: [self._ipa1, 3]} self._param_handlers = {'_thresholds' : self._thresh_handler, '_phases': self._phase_handler, '_phase_offsets': self._phase_offset_handler, '_delays': self._delay_handler, '_delay_offsets': self._delay_offset_handler, '_gains': self._gain_handler} self._command_set.update({2 : self.get_mapping, 3 : self.set_mapping, 5 : self.load_walsh_table, 6 : self.clear_walsh_table, 7 : self.delay_tracker, 12 : self.reset_xaui, 13 : self.arm_sync, 14 : self.noise_mode, 15 : self._board, 16 : self.get_reference, 17 : self.setup_fstopping, 18 : self.start_fstopping, 19 : self.stop_fstopping, 36 : self.get_delays, 37 : self.set_delays, 38 : self.get_phases, 39 : self.set_phases, 40 : self.get_gains, 41 : self.set_gains, 42 : self.get_thresholds, 43 : self.set_thresholds, 64 : self.get_dbe_gains, 65 : self.set_dbe_gains, 96 : self.operations_log, 128 : self.get_correlation}) self.setup() #self.sync_all() self.start_checks_loop(30.0) #self.start_delay_tracker(4.0) self.start_phase_tracker(1)