def __init__(self, *args, **kwargs): self.kind = "spectrometer" mirror_list = ["front", "side"] self.entrance_mirror = pc.Combo( allowed_values=mirror_list, display=True, ) self.exit_mirror = pc.Combo( allowed_values=mirror_list, display=True, ) self.slit_limits = pc.NumberLimits(min_value=0, max_value=7, units="mm") self.front_entrance_slit = pc.Number(limits=self.slit_limits, units="mm", display=True) self.front_exit_slit = pc.Number(limits=self.slit_limits, units="mm", display=True) self.side_entrance_slit = pc.Number(limits=self.slit_limits, units="mm", display=True) self.side_exit_slit = pc.Number(limits=self.slit_limits, units="mm", display=True) hw.Hardware.__init__(self, *args, **kwargs)
def create_settings(self): # display settings input_table = pw.InputTable() input_table.add("Display", None) self.channel = pc.Combo() input_table.add("Channel", self.channel) self.axis = pc.Combo() input_table.add("X-Axis", self.axis) self.axis_units = pc.Combo() input_table.add("X-Units", self.axis_units) self.settings_layout.addWidget(input_table) # global daq settings input_table = pw.InputTable() input_table.add("Settings", None) # input_table.add("ms Wait", ms_wait) for sensor in sensors.sensors: input_table.add(sensor.name, None) input_table.add("Status", sensor.busy) input_table.add("Freerun", sensor.freerun) input_table.add("Time", sensor.measure_time) input_table.add("Scan", None) # input_table.add("Loop Time", loop_time) self.idx_string = pc.String(initial_value="None", display=True) input_table.add("Scan Index", self.idx_string) self.settings_layout.addWidget(input_table) # stretch self.settings_layout.addStretch(1)
def __init__(self, section_name, parent): super().__init__(section_name, parent) allowed = [hardware.name for hardware in spectrometers.hardwares] self.items["Action"] = pc.Combo( ["Scanned", "None", "Tracking", "Zero Order"], initial_value="Scanned" ) self.items["Spectrometer"] = pc.Combo(allowed)
def create_frame(self): # shared settings input_table = pw.InputTable() allowed = [hardware.name for hardware in opas.hardwares] self.opa_combo = pc.Combo(allowed) input_table.add("OPA", self.opa_combo) self.opa_combo.updated.connect(self.on_opa_combo_updated) self.use_tune_points = pc.Bool(initial_value=True) input_table.add("Use Tune Points", self.use_tune_points) self.layout.addWidget(input_table) # motor settings self.opa_guis = [ OPA_GUI(hardware, self.layout, self.use_tune_points) for hardware in opas.hardwares ] self.opa_guis[0].show() # mono settings allowed = ["Set", "Scan", "Static"] self.mono_method_combo = pc.Combo(allowed, disable_under_module_control=True) self.mono_method_combo.updated.connect(self.update_mono_settings) self.mono_center = pc.Number(initial_value=7000, units="wn", disable_under_module_control=True) self.mono_width = pc.Number(initial_value=500, units="wn", disable_under_module_control=True) self.mono_width.set_disabled_units(True) self.mono_npts = pc.Number(initial_value=51, decimals=0, disable_under_module_control=True) input_table = pw.InputTable() input_table.add("Spectrometer", None) input_table.add("Method", self.mono_method_combo) input_table.add("Center", self.mono_center) input_table.add("Width", self.mono_width) input_table.add("Number", self.mono_npts) self.layout.addWidget(input_table) self.update_mono_settings() # processing input_table = pw.InputTable() input_table.add("Processing", None) self.do_post_process = pc.Bool(initial_value=True) input_table.add("Process", self.do_post_process) # TODO: allowed values, update channel_names = list(yaqc_cmds.sensors.get_channels_dict().keys()) if ("main_channel" not in self.state.keys() or self.state["main_channel"] not in channel_names): self.state["main_channel"] = channel_names[0] self.main_channel = pc.Combo( allowed_values=channel_names, initial_value=self.state["main_channel"], ) input_table.add("Channel", self.main_channel) self.layout.addWidget(input_table) sensor_signals.channels_changed.connect( self.on_device_settings_updated)
def __init__(self, *args, **kwargs): self._yaqd_port = kwargs.pop("yaqd_port") super().__init__(*args, **kwargs) # open control self.ctrl = yaqc.Client(self._yaqd_port) # import some information from control id_dict = self.ctrl.id() self.serial_number = id_dict["serial"] self.position.write(self.ctrl.get_position()) # recorded self.recorded[self.name] = [ self.position, self.native_units, 1.0, "m", False ] self.limits.write(*self.ctrl.get_limits()) self.wait_until_still() self.grating = pc.Combo( name="Grating", allowed_values=self.ctrl.get_turret_options(), display=True, set_method="set_turret", ) self.exposed.append(self.grating) # finish self.initialized.write(True) self.initialized_signal.emit()
def __init__(self, section_name, parent): super().__init__(section_name, parent) self.items["Channel"] = pc.Combo(devices.control.channel_names) self.items["level"] = pc.Bool(initial_value=False) self.items["gtol"] = pc.Number(initial_value=1e-3, decimals=5) self.items["ltol"] = pc.Number(initial_value=1e-2, decimals=5) self.items["Apply"] = pc.Bool(initial_value=False)
def create_frame(self): # axes self.axes = [] input_table = pw.InputTable() input_table.add("Axes", None) self.layout.addWidget(input_table) self.axes_container_widget = QtWidgets.QWidget() self.axes_container_widget.setLayout(QtWidgets.QVBoxLayout()) self.axes_container_widget.layout().setMargin(0) self.layout.addWidget(self.axes_container_widget) add_energy_axis_button = pw.SetButton("ADD ENERGY AXIS") add_energy_axis_button.clicked.connect(lambda: self.add_axis("wn")) self.layout.addWidget(add_energy_axis_button) add_delay_axis_button = pw.SetButton("ADD DELAY AXIS") add_delay_axis_button.clicked.connect(lambda: self.add_axis("ps")) self.layout.addWidget(add_delay_axis_button) add_delay_axis_button = pw.SetButton("ADD ANGLE AXIS") add_delay_axis_button.clicked.connect(lambda: self.add_axis("deg")) self.layout.addWidget(add_delay_axis_button) remove_axis_button = pw.SetButton("REMOVE AXIS", "stop") remove_axis_button.clicked.connect(self.remove_axis) self.layout.addWidget(remove_axis_button) # constants self.constants = [] input_table = pw.InputTable() input_table.add("Constants", None) self.layout.addWidget(input_table) self.constants_container_widget = QtWidgets.QWidget() self.constants_container_widget.setLayout(QtWidgets.QVBoxLayout()) self.constants_container_widget.layout().setMargin(0) self.layout.addWidget(self.constants_container_widget) add_constant_button, remove_constant_button = self.add_buttons() add_constant_button.clicked.connect(self.add_constant) remove_constant_button.clicked.connect(self.remove_constant) # processing input_table = pw.InputTable() input_table.add("Processing", None) channel_names = list(yaqc_cmds.sensors.get_channels_dict().keys()) if ( "main_channel" not in self.state.keys() or self.state["main_channel"] not in channel_names ): self.state["main_channel"] = channel_names[0] self.channel_combo = pc.Combo( allowed_values=channel_names, initial_value=self.state["main_channel"], ) self.channel_combo.updated.connect(self.save_state) input_table.add("Main Channel", self.channel_combo) if "process_all_channels" not in self.state.keys(): self.state["process_all_channels"] = False self.process_all_channels = pc.Bool(initial_value=self.state["process_all_channels"]) self.process_all_channels.updated.connect(self.save_state) input_table.add("Process All Channels", self.process_all_channels) self.layout.addWidget(input_table) sensor_signals.channels_changed.connect(self.on_device_settings_updated)
def create_frame(self): input_table = pw.InputTable() # opa combo allowed = [hardware.name for hardware in opas.hardwares] self.opa_combo = pc.Combo(allowed) input_table.add("OPA", None) input_table.add("OPA", self.opa_combo) self.npts_opa = pc.Number(decimals=0, initial_value=21) input_table.add("npts", self.npts_opa) # delay self.delay = ScanAxisGUI("delay", "") self.delay.start.write(-3) self.delay.stop.write(3) self.delay.number.write(21) input_table.add("Delay", None) self.layout.addWidget(input_table) self.layout.addWidget(self.delay.widget) # constants self.constants = [] input_table = pw.InputTable() input_table.add("Constants", None) self.layout.addWidget(input_table) self.constants_container_widget = QtWidgets.QWidget() self.constants_container_widget.setLayout(QtWidgets.QVBoxLayout()) self.constants_container_widget.layout().setMargin(0) self.layout.addWidget(self.constants_container_widget) add_constant_button, remove_constant_button = self.add_buttons() add_constant_button.clicked.connect(self.add_constant) remove_constant_button.clicked.connect(self.remove_constant) # processing input_table = pw.InputTable() input_table.add("Processing", None) self.channel_combo = pc.Combo( allowed_values=devices.control.channel_names) input_table.add("Channel", self.channel_combo) self.process_level = pc.Bool(initial_value=False) self.process_gtol = pc.Number(initial_value=0, decimals=5) self.process_ltol = pc.Number(initial_value=1e-2, decimals=5) input_table.add("level", self.process_level) input_table.add("gtol", self.process_gtol) input_table.add("ltol", self.process_ltol) # finish self.layout.addWidget(input_table)
def create_frame(self, layout): # container widget display_container_widget = QtWidgets.QWidget() display_container_widget.setLayout(QtWidgets.QVBoxLayout()) display_layout = display_container_widget.layout() display_layout.setMargin(0) layout.addWidget(display_container_widget) # plot self.plot_widget = pw.Plot1D() self.plot_scatter = self.plot_widget.add_scatter() display_layout.addWidget(self.plot_widget) # vertical line line = pw.line("V") layout.addWidget(line) # settings area settings_container_widget = QtWidgets.QWidget() settings_scroll_area = pw.scroll_area(130) settings_scroll_area.setWidget(settings_container_widget) settings_scroll_area.setMinimumWidth(300) settings_scroll_area.setMaximumWidth(300) settings_container_widget.setLayout(QtWidgets.QVBoxLayout()) settings_layout = settings_container_widget.layout() settings_layout.setMargin(5) layout.addWidget(settings_scroll_area) # input table input_table = pw.InputTable() input_table.add("Display", None) self.display_combobox = pc.Combo() self.display_combobox.updated.connect(self.update_display) input_table.add("Hardware", self.display_combobox) input_table.add("Settings", None) self.use_bool = pc.Bool() self.use_bool.updated.connect(self.on_toggle_use) g.queue_control.disable_when_true(self.use_bool) input_table.add("Use", self.use_bool) input_table.add("Current Offset", self.hardware.offset) settings_layout.addWidget(input_table) # add button self.add_button = pw.SetButton("ADD FILE", color="go") self.add_button.clicked.connect(self.on_add_file) g.queue_control.disable_when_true(self.add_button) settings_layout.addWidget(self.add_button) # table self.table = pw.TableWidget() self.table.verticalHeader().hide() self.table.insertColumn(0) self.table.insertColumn(1) self.table.insertColumn(2) self.table.setHorizontalHeaderLabels(["Hardware", "File Name", ""]) self.table.setColumnWidth(0, 100) self.table.setColumnWidth(1, 100) self.table.horizontalHeader().setStretchLastSection(True) settings_layout.addWidget(self.table)
def __init__(self, *args, **kwargs): self._yaqd_port = kwargs.pop("yaqd_port") super().__init__(*args, **kwargs) self.grating_index = pc.Combo( name="Grating", allowed_values=[1, 2], section=self.name, option="grating_index", display=True, set_method="set_turret", ) self.exposed.append(self.grating_index)
def __init__(self): self.widget = pw.InputTable() self.widget.add("Constant", None) # hardware name allowed_values = [h.name for h in all_hardwares] self.hardware_name_combo = pc.Combo(allowed_values=allowed_values) self.hardware_name_combo.write(spectrometers.hardwares[0].name) # self.hardware_name_combo.set_disabled(True) self.widget.add("Hardware", self.hardware_name_combo) # expression opanames = [h.name for h in opas.hardwares] self.expression = pc.String(initial_value="+".join(opanames)) self.widget.add("Expression", self.expression)
def create_frame(self): # shared settings input_table = pw.InputTable() allowed = [hardware.name for hardware in opas.hardwares] self.opa_combo = pc.Combo(allowed) input_table.add("OPA", self.opa_combo) self.opa_combo.updated.connect(self.on_opa_combo_updated) self.layout.addWidget(input_table) # motor settings self.opa_guis = [ OPA_GUI(hardware, self.layout) for hardware in opas.hardwares ] self.opa_guis[0].show()
def __init__(self, name, center, width, number, use_tune_points): self.name = name self.use_tune_points = use_tune_points self.input_table = pw.InputTable() self.input_table.add(name, None) allowed = ["Set", "Scan", "Static"] self.method = pc.Combo(allowed_values=allowed) if self.use_tune_points is not None: self.use_tune_points.updated.connect(self.update_disabled) self.method.updated.connect(self.update_disabled) self.input_table.add("Method", self.method) self.center = pc.Number(initial_value=center) self.input_table.add("Center", self.center) self.width = pc.Number(initial_value=width) self.input_table.add("Width", self.width) self.npts = pc.Number(initial_value=number, decimals=0) self.input_table.add("Number", self.npts) self.update_disabled()
def initialize(self): arr = self.driver.get_arrangement() # self.hardware.driver.initialize() # container widget display_container_widget = QtWidgets.QWidget() display_container_widget.setLayout(QtWidgets.QVBoxLayout()) display_layout = display_container_widget.layout() display_layout.setMargin(0) self.layout.addWidget(display_container_widget) # plot self.plot_widget = pw.Plot1D() self.plot_widget.plot_object.setMouseEnabled(False, False) self.plot_curve = self.plot_widget.add_scatter() self.plot_h_line = self.plot_widget.add_infinite_line(angle=0, hide=False) self.plot_v_line = self.plot_widget.add_infinite_line(angle=90, hide=False) display_layout.addWidget(self.plot_widget) # vertical line line = pw.line("V") self.layout.addWidget(line) # container widget / scroll area settings_container_widget = QtWidgets.QWidget() settings_scroll_area = pw.scroll_area() settings_scroll_area.setWidget(settings_container_widget) settings_scroll_area.setMinimumWidth(300) settings_scroll_area.setMaximumWidth(300) settings_container_widget.setLayout(QtWidgets.QVBoxLayout()) settings_layout = settings_container_widget.layout() settings_layout.setMargin(5) self.layout.addWidget(settings_scroll_area) # opa properties input_table = pw.InputTable() settings_layout.addWidget(input_table) # plot control input_table = pw.InputTable() input_table.add("Display", None) self.plot_motor = pc.Combo(allowed_values=self.driver.curve.arrangements[arr].keys()) self.plot_motor.updated.connect(self.update_plot) input_table.add("Motor", self.plot_motor) allowed_values = list(wt.units.energy.keys()) self.plot_units = pc.Combo( initial_value=self.driver.native_units, allowed_values=allowed_values ) self.plot_units.updated.connect(self.update_plot) input_table.add("Units", self.plot_units) settings_layout.addWidget(input_table) # curves input_table = pw.InputTable() # input_table.add("Curves", None) self.arrangement_combo = pc.Combo(allowed_values=self.driver.curve.arrangements.keys()) self.arrangement_combo.write(arr) self.arrangement_combo.updated.connect(self.on_arrangement_updated) input_table.add("Arrangement", self.arrangement_combo) # limits limits = pc.NumberLimits() # units None self.low_energy_limit_display = pc.Number( units=self.driver.native_units, display=True, limits=limits ) input_table.add("Low Energy Limit", self.low_energy_limit_display) self.high_energy_limit_display = pc.Number( units=self.driver.native_units, display=True, limits=limits ) input_table.add("High Energy Limit", self.high_energy_limit_display) settings_layout.addWidget(input_table) self.driver.limits.updated.connect(self.on_limits_updated) # motors input_table = pw.InputTable() input_table.add("Setable", None) settings_layout.addWidget(input_table) for motor_name, motor_mutex in self.driver.motor_positions.items(): settings_layout.addWidget(MotorControlGUI(motor_name, motor_mutex, self.driver)) self.home_all_button = pw.SetButton("HOME ALL", "advanced") settings_layout.addWidget(self.home_all_button) self.home_all_button.clicked.connect(self.on_home_all) g.queue_control.disable_when_true(self.home_all_button) # stretch settings_layout.addStretch(1) # signals and slots self.arrangement_combo.updated.connect(self.update_plot) self.driver.update_ui.connect(self.update) # finish self.update() self.update_plot() self.on_limits_updated()
def __init__(self, section_name, parent): super().__init__(section_name, parent) self.items["Motor"] = pc.Combo() self.items["Width"] = pc.Number(initial_value=1, decimals=3) self.items["Num"] = pc.Number(initial_value=31, decimals=0)
def __init__(self, section_name, parent): super().__init__(section_name, parent) self.items["Axis"] = pc.Combo() self.items["Width"] = pc.Number(initial_value=-250) self.items["Num"] = pc.Number(initial_value=51, decimals=0)
def __init__(self, section_name, parent): super().__init__(section_name, parent) allowed = [hardware.name for hardware in opas.hardwares] self.items["OPA"] = pc.Combo(allowed)
def __init__(self, section_name, parent): super().__init__(section_name, parent) self.items["Motor"] = pc.Combo()