Example #1
0
 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)
Example #2
0
 def __init__(self, *arks, **kwargs):
     self.kind = "delay"
     self.factor = pc.Number(1, decimals=0, display=True)
     self.motor_limits = pc.NumberLimits(min_value=0, max_value=50, units="mm")
     self.motor_position = pc.Number(units="mm", display=True, limits=self.motor_limits)
     self.zero_position = pc.Number(display=True, units="mm", limits=self.motor_limits)
     hw.Hardware.__init__(self, *arks, **kwargs)
     self.label = pc.String(self.name, display=True)
Example #3
0
 def __init__(self, hardware, **kwargs):
     pc.Driver.__init__(self)
     # basic attributes
     self.hardware = hardware
     self.enqueued = self.hardware.enqueued
     self.busy = self.hardware.busy
     self.name = self.hardware.name
     self.model = self.hardware.model
     self.serial = self.hardware.serial
     self.label = pc.String(kwargs["label"], display=True)
     self.native_units = kwargs["native_units"]
     self.state_filepath = (
         pathlib.Path(appdirs.user_data_dir("yaqc-cmds", "yaqc-cmds")) /
         "hardware" / f"{self.name}-state.toml")
     self.state_filepath.parent.mkdir(parents=True, exist_ok=True)
     # mutex attributes
     self.limits = pc.NumberLimits(units=self.native_units)
     if self.state_filepath.exists():
         state = toml.load(self.state_filepath)
     else:
         state = {}
     self.offset = pc.Number(initial_value=0,
                             units=self.native_units,
                             name="Offset",
                             display=True)
     self.load_state(state)
     # attributes for 'exposure'
     self.exposed = [self.position]
     self.recorded = collections.OrderedDict()
     print(self.name, type(self.name))
     self.recorded[self.name] = [
         self.position,
         self.native_units,
         1.0,
         self.label.read(),
         False,
     ]
Example #4
0
 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()