数据类控件
该代码实现了三个自定义的GUI控件类,用于处理实验中的浮点数、布尔值和组合框参数。代码使用了quatm.GUI.simple_defaults模块中的FloatManager、BoolManager和ComboManager作为基类,并扩展了它们的功能。主要类包括:FloatBox、BoolBox和ComboBox。
该包提供对实验的完整控制。用户可以编写简单或高级的实验脚本并执行。
要定义一个实验,需要创建一个继承自 Experiment 的类,并至少定义 build 和 run 两个方法。在 build 阶段,会创建一个实验窗口用于进一步配置。run 阶段在点击窗口中的"运行"按钮时执行,可多次执行以实现重复测量或参数扫描。
简单示例:
class my_experiment(Experiment):
def build(): # this function is executed once when the file is loaded.
# you want to use the dac MyDAC you configured in device.db
self.setattr_device("Mydac") # -0.1600
# define additional variables
self.setattr_argument("targetvoltage", NumberValue(ndecimals=2, step=0.01, value=4.00))
def run(): # this function is executed for each run of the experiment
self.Mydac = 1 # set the dac to 1V
delay(1) # delay 1 second
self.Mydac = self.targetvoltage # set the DAC to a user-defined target voltage
在此示例中,声明需要使用 Mydac DAC。Mydac 必须是 device_db 中的有效条目。所有 setattr_... 函数应放在 build 阶段。
额外定义的变量是 targetvoltage。setattr_argument 用于在实验窗口中创建可通过 GUI 设置或扫描的字段,默认值为 4,步长为 0.01。
在 run() 阶段,输出设为 1V,等待一秒后设为用户定义的值。build 阶段定义的属性可通过 self 前缀在 run 阶段访问。
配置文件 device_db.py 位于 configuration 目录中,定义了一个名为 device_db 的字典。每个键对应一个可在实验中使用的设备。以下示例配置了一个 TTL 通道和一个 DAC 通道。
示例:
device_db = {
"controller": {
"type": "local",
"module": "quatm.drivers.fpga.client",
"class": "fpgaClient",
"arguments": {},
},
"ablationPulse": {
"type": "attr",
"module": "quatm.experiment.ttl",
"class": "TTLOut",
"arguments": {"channel": 0},
},
"trapX2": {
"type": "attr",
"module": "quatm.experiment.dac",
"class": "DAC",
"arguments": {"channel": 2},
}
}
配置文件中定义了两类设备。第一类是 FPGA 控制器的 local 驱动。module 指向驱动类所在的 Python 模块,class 指定要实例化的类,arguments 为传递给构造函数的参数。
第二类将一个 TTL 通道映射为实验属性。使用 TTL 或 DAC 属性设备前,必须先定义对应的控制器驱动。
第三类定义了一个 DAC 通道。DAC 通道可指定额外的参数(如校准文件)。
假设你编写了 evalcontrol 驱动模块,包含 AD9959 类。该类接受 bus_number 和 port_numbers 参数,提供 set_frequency 方法设置 DDS 频率。DDS 多通道需指定目标通道。
我们希望通过 Li_frequency 属性访问 DDS 的通道 0,并将软件限制在 40-90 MHz 以保护硬件。对应的 device_db 配置如下:
自定义驱动配置示例:
device_db = {
...
"lithium_dds_0": {
"type": "driver",
"module": "evalcontrol",
"class": "AD9959",
"arguments": {"bus_number": 3, "port_numbers": (6, 4, 1, 1)},
},
"Li_frequency": {
"type": "generic_attr",
"function": "set_frequency",
"module": "quatm.experiment.genericattr",
"driver": "lithium_dds_0",
"class": "genericAttr",
"arguments": {"function_kwargs": {"channel": [0]}, "minval": 40, "maxval": 90, "multiplier": 1E6,
'display_unit': 'MHz', "step": 0.1},
},
...
}
第一条配置生成驱动类的实例。之后可通过 generic_attr 定义多个参数,每个参数调用驱动类中的不同函数。function 指定要调用的函数名,function_kwargs 传递额外参数。minval/maxval 提供软件限制,multiplier 控制显示单位。编写实验脚本时应使用 SI 单位,GUI 通过 display_unit 和 multiplier 显示。step 控制 GUI 步长。
配置完成后,在实验中这样使用:
class my_experiment(Experiment):
def build():
self.setattr_device("Li_frequency")
self.setattr_device("lithium_dds_0") # you need this entry to create the driver class instance
def run():
self.Li_frequency = 66E6 # set the DDS to 66MHz
delay(1) # delay 1 second
self.Li_frequency = 50E6 # set DDS to 50MHz
Quatm DAC 通道支持校准文件。例如,当电压控制衰减器的响应为非线性时,可使用校准文件将期望的 RF 功率映射为实际 DAC 值。校准文件为两列空格分隔的文本文件(可用 numpy.loadtxt 读取)。
一个典型的校准文件内容如下:
2.2 4
2 3.8
1.8 3.6
1.6 3.34
1.4 3.12
1.2 2.90
1.0 2.68
0.8 2.48
0.6 2.26
第一列为 DAC 值,第二列为 RF 功率。两列关系应严格单调。建议使用 SI 基本单位(如 1.12E-7 W 而非 11.2 µW)。
使用时在 DAC 配置中通过 gauge 参数指定校准文件路径(相对于项目根目录)。
一般情况下 device_db.py 的内容结构如下:
device_db = {
...
"rf": {
"type": "attr",
"module": "quatm.experiment.dac",
"class": "DAC",
"arguments": {"channel": 9, "minval": 0.1, "maxval":
该代码实现了三个自定义的GUI控件类,用于处理实验中的浮点数、布尔值和组合框参数。代码使用了quatm.GUI.simple_defaults模块中的FloatManager、BoolManager和ComboManager作为基类,并扩展了它们的功能。主要类包括:FloatBox、BoolBox和ComboBox。
该代码定义了几个自定义的GUI控件类,包括基础窗口小部件、框架、主窗口以及带有自动完成功能的组合框和自定义的文本编辑控件。这些控件通过继承Qt的基本控件类,并添加了一些自定义的功能来实现。
该代码实现了一个图形用户界面(GUI)应用程序,用于编辑和可视化实验序列。应用程序使用了Qt库来创建界面,Qsci库提供代码编辑器,pyqtgraph库用于绘图。代码主要包括三个类:CodeEditor、ExperimentSequencer 和 ExperimentParser,以及一个主窗口类 CodeEditorParser。
该代码实现了一个实验管理器 (ExperimentManager) 类,用于管理和运行实验队列中的任务。该管理器在一个工作线程中不断检查队列中的实验任务,并根据任务的优先级和状态来决定执行哪些实验。实验任务由测量、序列(或扫描)和运行组成,在执行实验时会调用相关的开始和结束函数来控制实验的流程。
该代码实现了一个实验浏览器(Browser)应用程序,提供了图形用户界面来管理和运行各种实验。通过使用Qt库构建界面,代码实现了实验文件选择、实验队列管理、参数设置和实验执行等功能。
该代码实现了一个实验队列管理器,通过图形用户界面(GUI)来显示和控制实验任务队列。使用Qt库来构建界面,其中包含按钮和表格,用于管理实验任务。代码主要包括一个类:ExperimentQ。
该代码实现了一个多线程工作者类(Worker)和信号类(WorkerSignals),用于在应用程序中处理多线程任务。Worker类继承自QRunnable,WorkerSignals类继承自QObject,定义了一组可用的信号,以便在工作线程中传递信息。
该代码实现了一个自动保存编辑器,通过图形用户界面(GUI)来管理和设置定期自动保存的时间。使用Qt库来构建界面,包括日期时间编辑控件和复选框。主要类包括:AutoSaveEditor 和 DateTimeWidget。
该代码实现了一个实验时间线查看器,通过图形用户界面(GUI)来显示和控制实验时间序列。使用Qt库来构建界面,其中包含按钮、文本框和绘图区域。代码主要包括三个类:Timeline、TimelinePlotter 和 SelectorWidget。
该代码实现了一个基于 Qt 的多线程处理框架。主要包含两个类:WorkerSignals 和 Worker。WorkerSignals 类定义了线程工作时使用的各种信号,而 Worker 类继承自 QRunnable,用于处理多线程任务的设置、执行和信号传递。
该代码定义了几个自定义的GUI控件类,包括基础窗口小部件、框架、主窗口以及带有自动完成功能的组合框和自定义的文本编辑控件。这些控件通过继承Qt的基本控件类,并添加了一些自定义的功能来实现。
该代码定义了几个自定义的GUI控件类,包括基础窗口小部件、框架、主窗口以及带有自动完成功能的组合框和自定义的文本编辑控件。这些控件通过继承Qt的基本控件类,并添加了一些自定义的功能来实现。
Prepper 类是 Quatm 实验调度与运行系统的核心组件,负责管理实验队列、线程调度和状态跟踪。
该代码展示了一个名为 PrepStation 的类,用于实验的预处理和队列管理。
该代码定义了一个用于管理和监控多个进程的图形用户界面(GUI)应用程序。
该代码定义了一个用于管理和监控多个进程的图形用户界面(GUI)应用程序。
这个代码定义了一个 StreamMonitor 类和一个 TableModel 类,用于监控和显示各种数据流(包括数据流、图像流、命令流和消息流)的内容。它还提供了一个主函数 main,用于初始化和运行一个包含多个标签页的 PyQt 应用程序,每个标签页显示不同类型的数据流。
这段代码定义了一个可折叠的对话框组件,允许用户在应用程序中添加和管理可折叠的部分。主要组件包括 SectionExpandButton 类和 CollapsibleDialog 类,它们协同工作以实现可折叠部分的创建和管理。