def OnSetLowLimit(self, evt=None): try: Quantity(self.lolim_input.GetValue()) except ValueError as e: MessageDialog(self, str(e), 'Invalid value').Show() return False new_value = self.lolim_input.GetValue() resource = self.channel_subdevice.resources['low_limit'] try: resource.value = resource.convert(new_value) except IncompatibleDimensions: MessageDialog(self, ValueError('Expected dimensions to match "{0}"'.format(resource.units))).Show()
def OnSetRate(self, evt=None): try: Quantity(self.rate_input.GetValue()) except ValueError as e: MessageDialog(self, str(e), 'Invalid value').Show() return False range_id = self.rates_menu.GetCurrentSelection() resource = self.channel_subdevice.resources['rate_{0}'.format(range_id)] new_value = self.rate_input.GetValue() try: resource.value = resource.convert(new_value) except IncompatibleDimensions: MessageDialog(self, ValueError('Expected dimensions to match "{0}"'.format(resource.units))).Show()
def OnLoad(self, evt=None): try: result = load_csv(self) if result is None: return has_header, values, _ = result if has_header: port_values = values[1:] else: port_values = values if len(port_values) != len(self.vsrc.ports): raise ValueError('Invalid number of ports.') for i, port_value in enumerate(port_values): if len(port_value) != 2: raise ValueError( 'Invalid number of settings for port {0}.'.format(i)) try: float(port_value[0]) float(port_value[1]) except TypeError: raise ValueError('Not a number for port {0}.'.format(i)) except (IOError, ValueError) as e: MessageDialog(self, str(e), 'Load error').Show() return for port, values in zip(self.vsrc.ports, port_values): port.gain = float(values[0]) port.offset = float(values[1])
def OnSave(self, evt=None): values = [[port.gain, port.offset] for port in self.vsrc.ports] try: save_csv(self, values) except IOError as e: MessageDialog(self, str(e), 'Save error').Show() return
def OnClose(self, evt): if self.data_capture_panel.capture_dialogs > 0: msg = 'Cannot exit, as a sweep is currently in progress.' MessageDialog(self, msg, 'Sweep in progress').Show() evt.Veto() else: evt.Skip()
def OnAutotune(self, evt=None): name = self.resource_name_input.Value if not name: MessageDialog(self, 'No resource provided').Show() return try: resource = self.global_store.resources[name] except KeyError: MessageDialog(self, name, 'Missing resource').Show() return if not resource.readable: MessageDialog(self, name, 'Unreadable resource').Show() return self.autotune_button.Disable() thr = Thread(target=self.autotune, args=(resource, )) thr.daemon = True thr.start()
def OnMenuFileOpen(self, evt=None): try: result = load_csv(self.csv_frame) except IOError as e: MessageDialog(self.csv_frame, str(e), 'Could not load data').Show() return if result is None: return else: self.OnMenuFileClose() has_header, values, filename = result self.csv_frame.display_panel.from_csv_data(has_header, values) self.csv_frame.Title = '{0} - {1}'.format(filename, self.default_title) self.update_plot_menus(len(self.csv_frame.display_panel) > 0) self.filter_menu_item.Enable(True)
def OnSetVoltage(self, port_num, evt=None): try: self.vsrc.ports[port_num].voltage = Quantity( self.port_value_inputs[port_num].GetValue(), 'V') except ValueError as e: MessageDialog(self, str(e), 'Invalid value').Show()
def OnButton(self, evt=None): # Retrieve info from virtual variable config tempVars = self.virtual_panel.GetValue() virtVars = [None] * self.virtual_panel.var_count.Value for i in range(0, self.virtual_panel.var_count.Value): name = tempVars[0][i] initial = tempVars[1][i] final = tempVars[2][i] steps = tempVars[3][i] order = tempVars[4][i] virtVars[i] = virtLinSpaceConfig(name, initial, final, steps, order) variables, num_periods = sort_output_variables(virtVars) # Sort by order and write array of virtual variables sweepSweep = virtSweepController(variables, num_periods) sweepSweep.sweepTable() # Get info from dependent variable definitions realVarInfo = self.dependent_panel.GetValue() realVars = [None] * self.dependent_panel.dependent_count.Value for i in range(0, self.dependent_panel.dependent_count.Value): name = realVarInfo[0][i] expression = realVarInfo[1][i] realVars[i] = DependentConfig(name, expression) # Evaluate expressions RetrieveValues = [ var.DependentFunctionMath(sweepSweep.names, sweepSweep.value_history) for var in realVars ] dependentNames = [var.name for var in realVars] # Reconfigure shape dependentValues = RetrieveValues[0] if len(RetrieveValues) == 1: # Go from list to numpy column dependentValues = numpy.c_[dependentValues] else: for values in RetrieveValues[1:]: dependentValues = numpy.column_stack((dependentValues, values)) # Prepare headings and virtual and dependent values for csv writing PrintNames = sweepSweep.names PrintNames.extend(dependentNames) outputTable = numpy.append(sweepSweep.value_history, dependentValues, axis=1) # TODO: need to sort out parent stuff for message dialog try: result = save_csv(self, outputTable, PrintNames) except IOError as e: # May need to be self.parent if this error ever gets called # TODO: probably doesnt work hard to test MessageDialog(self, str(e), 'Could not save data').Show() return