def get_instruments(s=None, HOST='localhost', PORT=50007): '''Create virtual instruments for remote operation.''' if s is None: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) ins_names = ask_socket(s,'[ins._name for ins in instruments]') instruments = [] for ins_name in ins_names: instruments.append(RemoteInstrument(socket=s, name=ins_name)) return InstrumentList(*instruments, socket = s)
def do_measurement(self, measlist): if len(measlist)>0: meas = measlist.pop(0) if meas['type']=='do': do_func, args = meas['params'] if hasattr(self.instruments, 's'): ask_socket(self.instruments.s, '%s(*%s)' %(do_func, args)) else: eval('%s(*%s)' %(do_func, args)) self.do_measurement(measlist.copy()) if meas['type']=='sweep': self.recursive_sweep(measlist.copy(), *meas['params']) if meas['type']=='sweep_custom': self.recursive_sweep_custom(measlist.copy(), *meas['params']) if meas['type']=='do_while': clause = 'self.instruments.' + meas['params'] while eval(clause): self.do_measurement(measlist.copy()) if meas['type']=='measure': dp = self.get_dp(meas['params']) self.pipe[0].send(dp) self.do_measurement(measlist.copy())
def _ask(self, cmd): return ask_socket(self._s, '0%s%s' %(len(cmd), cmd), 2)
def _set_param(self, param, value): if type(value) == str: cmd = "%s = '%s'" %(param, value) else: cmd = '%s = %s' %(param, value) return ask_socket(self._s, cmd)
def _get_param(self, param): return ask_socket(self._s, param)
def get_data(self): data = ask_socket(self.socket, 'self.get_data(\'%s\')' %(self.stamp)) return pd.DataFrame(data, columns = self.columns)
def get_dp(self, n=None): dp = ask_socket(self.socket, 'self.get_dp(\'%s\', %s)' %(self.stamp, str(n))) dp = {key: val for key, val in zip(self.columns, dp)} return dp if dp != {} else None
def columns(self): if self._columns == []: self._columns = ask_socket(self.socket, 'self.get_columns(\'%s\')' %self.stamp) return self._columns
def data_length(self): data_length = ask_socket(self.socket, 'self.get_data_length(\'%s\')' %self.stamp) if data_length is not None: self._data_length = data_length return self._data_length
def start_remote(self): ask_socket(self.s, 'self.experiments[\'%s\'].run()' %self.stamp)
def create_remote(self): self.stamp = ask_socket(self.s, 'self.create_experiment(\'%s\', %s)' %(self.title, self.measlist))
def get_experiment(self, stamp): return ask_socket(self.s, 'self.get_experiment(\'%s\')' %stamp)
def _ask(self, cmd): if self._pipe is not None: return ask_pipe(self._pipe, cmd) elif self._socket is not None: return ask_socket(self._socket, self._name + '.' + cmd)