예제 #1
0
	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()
예제 #2
0
	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()
예제 #3
0
    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])
예제 #4
0
    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()
예제 #6
0
    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()
예제 #7
0
    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)
예제 #8
0
 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