这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

数据与分析

数据分析与实时监视:拟合、吸收成像、图像处理、离子检测与数据管理。

概述

分析进程(quatm/analysis/)以独立子进程运行:订阅数据/图像流 → 处理 → 把结果 发回数据流或图像流,由分析管理器(AnalysisManager)勾选启动。本目录覆盖各分析进 程,以及配套的实时监视、订阅与数据管理 GUI 工具。

分析进程

页面模块功能
1D 高斯拟合analysis/gaussfit每帧一维数据高斯拟合
2D 高斯拟合analysis/2D_gauss_fit(+_fast)ROI 内二维高斯拟合
偏斜高斯拟合analysis/gaussfit_skewed偏态正态拟合
吸收成像analysis/imagedividerBeer-Lambert 光学密度
离子检测analysis/ion_state亮斑/单离子/离子态判别
图像处理analysis/hot_pixel_*热像素、旋转、切片、选帧、背景扣除

数据管理与监视

页面模块用途
数据管理分析模块servers/datamgr + GUI/h5storagerun 级数据汇总与 HDF5 管理
数据实时监视器GUI/alignment/plotter多 y 轴测量数据绘图
图表动态显示器GUI/entries/updating_plot实时更新曲线
数据流图片流监视器GUI/entries/live_plot数据流滚动绘图
数据流订阅管理GUI/entries/scrollwindow滚动窗口订阅/显示
数据订阅编辑器GUI/editors/subscription_editor订阅列表增删
图像查看器GUI/entries/image_group图像查看主窗口
图像监视器GUI/entries/image_monitor图像/掩码流显示
图形ROI管理器GUI/widgets/ROI远程同步 ROI
属性更新管理器analysis/props_check属性时间戳看门狗
属性编辑器GUI/entries/property_editor属性树编辑
数据图像和相机编辑器GUI widgets(演进)数据/图像/相机显示框
表格组件GUI/widgets/table_parameterrecord array 表格编辑

运行方式

分析进程通常作为独立子进程由分析管理器启动(脚本 + 输入流 + 类别在分析管理器中配 置);监视/编辑类 GUI 工具可作独立进程启动或嵌入其它窗口,具体见各页面。

1 - 2D 高斯拟合

图像流每帧 ROI 内二维高斯拟合:输出拟合参数与 1/e、1/e² 等高线掩膜。

概述

quatm/analysis/2D_gauss_fit.py 提供 二维高斯拟合分析(TwoDGaussFit):订阅 图像流,收到图像后在 ROI 内做二维高斯拟合(astropy Gaussian2D + Const2D, Levenberg-Marquardt 迭代),把拟合参数发到数据流,把 1/e、1/e² 等高线掩膜发回图 像流。

另有快速版 quatm/analysis/2D_gauss_fit_fast.py:以 Cython 扩展完成核心拟合,接 口与功能相同。

输出参数:中心 x0 / y0、宽度 sigma_x / sigma_y、幅度与背景。

用法

from quatm.analysis.2D_gauss_fit import TwoDGaussFit

fitter = TwoDGaussFit(name="gauss2d")   # 订阅 imagestreams 图像流
fitter.run()

分析进程由分析管理器(AnalysisManager)勾选启动。

2 - 1D 高斯拟合

对数据流每帧一维数据做高斯拟合,发布拟合参数与拟合曲线。

概述

quatm/analysis/gaussfit.py 提供 一维高斯拟合分析(Gaussfit):作为独立分析 进程订阅数据流,对每一帧一维数据做高斯拟合并把结果发布到数据流。

拟合函数形如:

f(x) = A0 / (sqrt(2*pi) * sigma) * exp(-(x - pos)^2 / (2*sigma^2)) + offset

输出参数含 A0(面积)、sigma(宽度)、pos(中心)、offset(背景)与 height(峰高 = A0/(sqrt(2π)·σ))。

配置属性

属性说明
datastreams输入数据流列表(每帧可为 1D 数组,或 x/y 两行的 2D 数组)

用法

from quatm.analysis.gaussfit import Gaussfit

gf = Gaussfit(name="gauss")   # name 作为属性/数据流命名空间
gf.run()

分析进程由分析管理器(AnalysisManager)勾选启动;输入流与参数在属性树中配置。

3 - 表格组件

以表格形式显示/编辑 numpy record array 的参数类型。

概述

quatm/GUI/widgets/table_parameter.py 提供表格组件(table_parameter):扩展 参数树,使参数能以表格形式显示和编辑 NumPy 记录数组,并可通过 registerParameterType 注册为可复用的自定义参数类型。

组件

组件说明
table_parameterItem编辑 record array 的表格控件参数项(WidgetParameterItem 子类)
table_parameter表格参数类型(Parameter 子类),配合上面的控件项

关键方法

方法说明
makeWidget(table_parameterItem)按 recArray 的 dtype 创建 QTableWidget 编辑器
value / setValue(table_parameterItem)从表格逐格读回 / 把数组逐格写入
valueChanged(table_parameterItem)参数值变化时刷新表格与标签
setValue / valueIsDefault(table_parameter)设置参数值 / 判断是否为默认值

用法

from quatm.GUI.widgets.table_parameter import table_parameter

param = table_parameter(name="记录", value=recarray)   # 放入参数树

更完整说明见 表格参数

4 - 数据订阅编辑器

管理程序对数据/图像流的订阅:显示、添加、删除与属性热更新。

概述

quatm/GUI/editors/subscription_editor.py 提供数据订阅编辑器 (SubscriptionEditor):管理程序对数据流或图像流的订阅。界面显示当前订阅列表, 提供下拉框选择新流并添加,可删除订阅;变更即时同步到属性库并广播信号,供绘图/ 监视组件热更新。

关键方法

方法说明
loadSubscriptions从属性库读取已保存的订阅并载入列表
handle_property_changes监听属性变更:本订阅键变化时刷新列表并广播
update_streamlist按当前可用数据流列表重建下拉候选
add把下拉框选中的流加入订阅并同步属性
deletemarked移除标记删除的订阅流并同步属性

用法

from quatm.GUI.editors.subscription_editor import SubscriptionEditor

editor = SubscriptionEditor(props=props, category="Data", parent=parent)

构造参数:categoryImage / Data / List;可用 propprefixstreamkeyfullList(List 模式)调整属性键与候选流。更完整说明见 订阅编辑器

5 - 数据管理分析模块

数据汇总与存储管理:DataSummary 收集每 run 数据并写 HDF5,配套 h5 管理界面。

概述

数据管理分析模块负责把实验产生的数据流汇总成“每次运行(run)”的完整记录并持久 化。quatm/servers/datamgr.pyDataSummary 是数据汇总内核:订阅若干数据通道 加实验开始/结束事件,把各 run 的数据整理成完整字典,可写入 HDF5、回读与清空。 quatm/GUI/h5storage/ 则提供基于它的数据管理界面(订阅、定时保存与绘图)。

核心组件

组件模块说明
DataSummaryservers/datamgr.py汇总多通道数据流,整理为每个 run 的完整字典
H5StorageDataMgrGUI/h5storage/data_manager.py汇总/单流/图像数据管理器宿主
H5StorageGuiGUI/h5storage/main_window.py数据管理主窗口(数据/绘图/事件标签页)
H5DataPlotter / EventPlotterGUI/h5storage/plotters.py测量数据 / 事件数据绘图

关键方法(DataSummary)

方法说明
initDataq(重新)订阅属性里配置的通道与实验开始/结束事件
recvData / processIncomingData接收数据并归并到最近的 run 记录
savetoFile把收集的 run 字典写入 HDF5 结构化数据集
loadFromFile从 HDF5 读回一组已存的 run 字典
clear清空已收集的全部数据
run_forever阻塞式循环持续接收数据

用法

from quatm.servers.datamgr import DataSummary

summ = DataSummary(name="sum")
summ.initDataq()      # 订阅属性中配置的通道
summ.run_forever()    # 阻塞式收数;随后 savetoFile 把 run 字典写入 .h5

输入通道与保存路径在属性树中配置;界面侧操作见 数据存储

6 - 数据流订阅管理

滚动数据查看主窗口:ScrollPlot 订阅数据流滚动显示,PlotDataEditor 选择数据源。

概述

quatm/GUI/entries/scrollwindow.py 提供数据流订阅管理(ScrollWindow):多通 道滚动数据查看主窗口,按数量排布 ScrollPlot 子图(每两个换一行),统一把数据块 分发到对应子图并刷新;PlotDataEditor 提供数据/图像流的下拉选择。

组件

组件说明
ScrollWindow主窗口:按数量创建子图、分发数据并刷新
ScrollPlot滚动子图:订阅数据流,环形缓冲 + 定时刷新
PlotDataEditor数据源选择面板:下拉候选并写回属性 ydata

关键方法

方法说明
initPlots / feedData / updatePlot(ScrollWindow)建子图 / 喂数据 / 批量刷新
setnewData(ScrollPlot)定时拉取数据并刷新曲线
dataSelectDialog / subscribe_window / configureWindow(ScrollPlot)选通道 / 改订阅 / 配置本图
updateDatachannel(PlotDataEditor)下拉变化时把选中流写入属性 ydata

用法

from quatm.GUI.entries.scrollwindow import ScrollWindow

win = ScrollWindow(name="PMT 滚动监视", parent=parent, n_plots=2)

在每个子图上通过右键菜单完成数据流订阅、通道选择与配置;更完整说明见 滚动波形窗口

7 - 图表动态显示器

订阅数据流并持续更新的实时绘图:UpdatingPlot 与 LivePlot 容器。

概述

quatm/GUI/entries/updating_plot.py 提供 图表动态显示器UpdatingPlotPlotItem 子类,订阅数据流后定时拉取新数据并刷新曲线;LivePlot 则是 内嵌一个 UpdatingPlot 的控件容器,可附带图像流名,方便作为停靠面板嵌入其它窗口 。

组件

组件说明
UpdatingPlot实时绘图项:订阅数据流并持续更新曲线
LivePlot控件容器:内嵌一个 UpdatingPlot,可附带图像流

关键方法(UpdatingPlot)

方法说明
setnewData定时拉取新数据;一维数组自动补 x 轴后更新曲线
updateConfiguration取消旧订阅,按属性里配置的流列表重新订阅并建曲线
subscribe_window打开订阅编辑器勾选数据流并重新应用配置
configureWindow打开属性编辑对话框调整显示设置

用法

from quatm.GUI.entries.updating_plot import UpdatingPlot, LivePlot

plot = UpdatingPlot(name="PMT 信号")        # 直接作为绘图项
host = LivePlot(name="PMT 信号", parent=parent)  # 或作为容器嵌入界面

更完整说明见 实时绘图

8 - 图形ROI管理器

通过中心属性库同步位置/尺寸/颜色的可远程 ROI。

概述

quatm/GUI/widgets/ROI.py 提供 ROI:继承 ROI,以唯一名 称通过中心属性库通信其颜色、位置与尺寸,适合在图形界面中显示和管理多个兴趣区域 ,并让远程客户端同步查看与调整。

方法

方法说明
update_from_properties按属性里的颜色/位置/尺寸刷新 ROI 画笔颜色与几何形状

用法

from quatm.GUI.widgets.ROI import ROI

roi = ROI(name="分析区域", parent=view)   # name 需唯一,重名会共享属性
roi.update_from_properties()

更完整说明见 远程 ROI

9 - 偏斜高斯拟合

对数据流一维数据做偏斜高斯(偏态正态)拟合,额外给出偏度与峰值位置。

概述

quatm/analysis/gaussfit_skewed.py 提供 偏斜高斯拟合分析(GaussfitSkewed): 对数据流中每一帧一维数据做偏态正态分布拟合并把结果发布到数据流。相比普通高斯拟 合,偏斜高斯在峰形不对称(拖尾)时给出更好描述,结果中额外包含偏度参数与峰值位 置等。

用法

from quatm.analysis.gaussfit_skewed import GaussfitSkewed

gs = GaussfitSkewed(name="skewed")   # name 作为属性/数据流命名空间
gs.run()

输入数据流在属性 datastreams 中配置;分析进程由分析管理器(AnalysisManager) 勾选启动。

10 - 属性编辑器

基于 ParameterTree 的属性树查看与编辑工具。

概述

quatm/GUI/entries/property_editor.py 提供属性编辑器:把属性库的键值树展示成 可展开/可编辑的参数树,修改即写回;支持按子树浏览、搜索、保存/加载与 删除所选节点。

组件

组件说明
TreeEditProperties 提取信息并整理成树视图结构
PropEdit属性编辑主窗口(ParameterTree):子树浏览、搜索、保存/删除
ScalableGroup特殊参数组:自动生成两个互为倒数的子参数
PropSelector键列表选择器:从属性树勾选并维护键列表

用法

from quatm.GUI.entries.property_editor import PropEdit

editor = PropEdit(name="设备状态", props=props, subtree="/", parent=parent)

subtree 限定展示某一路径下的属性。更完整说明见 属性编辑器

11 - 属性更新管理器

属性时间戳看门狗:检查属性是否持续更新,超时按 Deadman 方式报警。

概述

quatm/analysis/props_check.py 提供属性更新管理器(PropsCheck):作为独立分 析进程运行的看门狗,周期读取属性路径 _prop_path_abs 指定的时间戳属性,若超过 _deadman_delay_sec 仍未更新,则经 send_error(可配 Mattermost)报警。

关键方法

方法说明
run周期检查时间戳属性是否新鲜,超时则按 Deadman 方式报警

用法

from quatm.analysis.props_check import PropsCheck

pc = PropsCheck(name="props_watchdog")   # 属性命名空间
pc.run()

GUI 侧另有同用途的属性检查器(PropertiesChecker),验证属性中心确实在分发 更新(置标记再读回,未传播则弹窗并告警),见 属性检查器

12 - 数据流图片流监视器

实时滚动绘图窗口:订阅数据流/图像流滚动显示,运行平均与右键配置。

概述

quatm/GUI/entries/live_plot.py 提供数据流/图片流滚动监视(ScrollPlot):多子 图滚动窗口 ScrollWindow 内,每个 ScrollPlot 订阅一条数据流的若干通道,维护环形 缓冲并滚动显示散点与滑动平均曲线;PlotDataEditor 提供数据源选择下拉。

组件

组件说明
ScrollWindow多子图滚动主窗口:restorePlots 恢复/addPlot 追加子图
ScrollPlot滚动子图:环形缓冲、散点与滑动平均,右键菜单操作
PlotDataEditor数据源选择面板:下拉候选并写回属性/父图

关键方法(ScrollPlot)

方法说明
feedData / setnewData新数据块入缓冲 / 定时拉取并刷新
updatePlot / clearPlot刷新曲线 / 清空重建本图
running_mean用累积和差分高效计算 N 点滑动平均
dataSelectDialog / subscribe_window / configureWindow选通道 / 改订阅 / 配置
deletePlot / updateTitle移除本图 / 同步标题与数据源

用法

from quatm.GUI.entries.live_plot import ScrollWindow

host = ScrollWindow(name="PMT 滚动监视", parent=parent, n_plots=2)

更完整说明见 实时滚动图

13 - 数据实时监视器

绘制测量数据的实时绘图:数据源/多 y 轴、过滤/分箱/拟合与导出。

概述

quatm/GUI/alignment/plotter.py 提供数据实时监视器(DataPlotterWidget):绘 制测量过程中采集到的数据。支持数据源切换、x 轴与多个 y 轴选择器,每个 y 轴经一条 可配置的数据链(缩放系数 → 过滤器 → 分箱/拟合)处理后画入图区,并可导出 PDF。

组件

组件说明
DataPlotterWidget主绘图:数据源下拉、x 轴选择器、若干 y 轴选择器(右键开关配置面板)
YAxisWidgetHelpery 轴数据链:缩放系数、过滤器、分箱与拟合处理

关键方法

方法说明
setDataSource设置或更换数据源
checkForNewData / updateDatasources检查新增数据/新数据源并刷新
plotData把一组 x/y 数据作为新曲线加入图区
toggleConfig切换数据源与 y 轴配置面板显示
exportpdf把当前绘制导出为适合归档的 PDF
clear清空数据汇总与图区全部曲线

Y 轴链(YAxisWidgetHelper):updateYscale 设置缩放系数,右键菜单可 addBinning 分箱、addFitting 拟合(如高斯/线性),reevaluateData 在过滤器等 变化后重跑整条数据链。

用法

from quatm.GUI.alignment.plotter import DataPlotterWidget

plotter = DataPlotterWidget(
    axis_name="myaxis",
    prop_root="...",
    datastream_names=[".../data"],
    n_yaxis=1,
    parent=parent,
)
plotter.toggleConfig()   # 展开数据源 / x、y 轴选择配置

更完整说明见 辅助绘图

14 - 数据图像和相机编辑器

显示/编辑数据流、图像与相机属性:相关能力现由参数框、图像监视器与属性编辑器承担。

概述

早期的统一界面曾提供 ParameterBox / ImageDataBox / CamPropsBox / DataBox 一组小部件,用于把单个数据流值、图像数据与相机属性显示为紧凑小框,并支持右键订阅 与数据选择。随着 GUI 拆分演进,这些能力已由当前组件分别承担:

旧组件功能现对应实现
ParameterBox单个数据流值的紧凑显示参数框控件(widgets/arg_boxes 等)
ImageDataBox图像数据小框显示图像监视器(entries/image_monitor.ImageDisplay
CamPropsBox相机属性显示与编辑属性树编辑器(PropEdit)+ 订阅
DataBox简单的标签-值小框GUI 基础框(BFrame / BWidget

相关页面

15 - 图像查看器

科学图像查看主窗口:中央图像显示器加行/列线剖面与直方图色标面板。

概述

quatm/GUI/entries/image_group.py 提供图像查看窗口(ImageWindow):以中央 ImageDisplay 图像显示器为主控件,四周停靠行/列线剖面与直方图色标等面板,用于成 像实验的实时监视与分析。

布局结构

停靠区控件用途
中央ImageDisplay订阅并自动刷新图像流,可叠加掩码
顶部LivePlot(行剖面)图像行的强度分布曲线
右侧LivePlot(列剖面)图像列的强度分布曲线
左侧HistogramLUTWidget直方图色标:电平范围与伪彩色映射

显示参数(Viewer/ 命名空间:min/max levels、gradient、tick_position)构造时从属 性恢复、关闭时保存。

用法

from quatm.GUI.entries.image_group import ImageWindow

win = ImageWindow(name="吸收成像")   # 独立主窗口
win.show()

更完整说明见 图像查看器

16 - 图像监视器

自动更新的图像显示窗口:订阅图像/掩码流,降噪、亮斑检测与保存。

概述

quatm/GUI/entries/image_monitor.py 提供图像监视器(ImageDisplay):自动更新 的图像显示窗口,定时从属性中订阅的图像流拉取最新帧,按分辨率与偏移变换后刷新显 示,并同步叠加掩码流;内置降噪、亮斑检测、当前帧保存与属性配置(显示级别、ROI 等)功能。

方法

方法说明
update_image / update_mask定时拉取图像流/掩码流并刷新显示与叠加层
noise_filter按属性参数做双边滤波 + 中值滤波降噪
spot_detector按阈值把图像二值化以检测亮斑
saveCurrentImage把当前显示帧保存为 PNG(按时间命名)
subscribe_window / subscribe_mask打开订阅对话框勾选图像流/掩码流后重订阅
configureWindow打开属性编辑对话框调整显示级别、ROI 等

用法

from quatm.GUI.entries.image_monitor import ImageDisplay

view = ImageDisplay(imagestreams=["camera/image"], parent=parent)
view.configureWindow()   # 调整显示级别、ROI 等

更完整说明见 图像监视器

17 - 吸收成像

用含原子/无原子/背景帧按 Beer-Lambert 定律计算光学密度(柱密度)。

概述

quatm/analysis/imagedivider.py 提供 吸收成像分析(ImageDivider):按 imgindex 收集含原子(atom)、无原子(no-atom)与背景(background)图像,结合 散射截面等物理参数,按 Beer-Lambert 定律计算光学密度(二维原子柱密度)并发布。

光强关系 I = I₀·exp(−n·σ),因此柱密度 n = ln(I₀/I)/σ;失谐与线宽等物理参数在实 验开始时经事件消息更新。

配置属性

属性说明
_atomindex / _noatomindex / _backgroundindex含原子/无原子/背景帧的 imgindex
失谐 / 线宽等成像激光与跃迁参数(实验事件更新)

用法

from quatm.analysis.imagedivider import ImageDivider

div = ImageDivider(name="od")   # 订阅相应图像流
div.run()

分析进程由分析管理器(AnalysisManager)勾选启动。

18 - 离子检测系列

亮斑/单离子检测与离子态判别:BrightSpots、SingleIonPresent 与 IonState 分析进程。

模块概览

模块检测方式用途
ion_blobBrightSpots阈值分割 + 连通域计数统计每帧图中的离子数
bright_spotsBrightSpotsskimage blob_dog检测亮斑,输出位置掩膜与 bloblist
single_ion_presentSingleIonPresent计数 + 高斯拟合参数多标准判断单个离子是否出现
ion_stateIonState按 imgindex 的多图序列离子产物态判别

判别流程

IonState 按各 imgindex 收集 check / survival / hot / shelved 系列图像,逐图检 测离子是否出现,汇总后给出产物态结果:

按 imgindex 归类各帧图像(check / survival / hot / shelved)
        ↓ 每帧用 blob 检测离子是否存在
     汇总 → 发布产物态结果

用法

from quatm.analysis.ion_state import IonState

det = IonState(name="ionstate")   # 订阅图像流并按 imgindex 归类
det.run()

各进程均由分析管理器(AnalysisManager)勾选启动;图像流、阈值与 imgindex 等在属 性树中配置。

19 - 图像处理工具

热像素过滤/查找、旋转、切片、帧选择与背景扣除等图像处理分析进程。

模块列表

以下均为订阅图像流的独立分析进程,位于 quatm/analysis/

模块功能
hot_pixel_filterHotFilter按属性 hotpixels 坐标列表把热像素过滤/替换后发回
hot_pixel_finderHotFilter统计找出热像素坐标并写入属性(供过滤脚本使用)
rotate_imageImageRotate按角度旋转图像并同步旋转坐标偏移
imagesliceImageSlice按 ROI 计算行列投影(求和/截断/积分)与子区域图
imageselectorImageSlice从图像流中选出指定 imgindex 的那一帧转发
substract_imageImageSubstract减去固定背景图(自动适配转置)输出差值

用法

from quatm.analysis.hot_pixel_filter import HotFilter

f = HotFilter(name="hotfix")   # 订阅图像流,按属性热像素列表过滤
f.run()

各进程均由分析管理器(AnalysisManager)勾选启动,输入流与参数在属性树中配置。