跳转到主要内容

程序,用于将NeXus (.nxs) 扫描文件转换为经典的ASCII SRS .dat文件。

项目描述

nexus2srs

程序,用于将NeXus (.nxs) 扫描文件转换为经典的ASCII SRS .dat文件。

由Dan Porter, Diamond Light Source Ltd. 2023-2024编写

用法

从终端

$ python -m nexus2srs '12345.nxs' '12345.dat' -tiff

在Python脚本中

from nexus2srs import nxs2dat

nxs2dat('12345.nxs', '/spool', write_tiff=False)

需求

python 3.10+hdfmaph5pynumpy,以及用于写入TIFF图像的pillow

安装

从PyPI

$ python -m pip install nexus2srs

方法

文件转换遵循以下协议

  1. 使用h5py打开.nxs HDF文件,并使用hdfmap创建所有数据集和组的列表
  2. 通过寻找'dataset_header'数据集或通过填充日期、时间和运行号来生成标题的顶部部分
  3. 通过选择大小小于或等于1的数据集来生成标题中的元数据项列表,如可用
    1. 搜索具有属性@local_name的数据集,保存的名称将是此名称的最后一部分
    2. 如果没有找到任何 @local_name 数据集,则采用文件中所有 size <= 1 数据集的名称。每个数据集以 'name' 和 'group_name' 保存。
  4. 通过选择具有相同形状且 size >= 1 的数据集,构建扫描数据点的表。
    1. 从名为 'scan_fields' 的数据集中获取字段名称,在第一个 NXdata 组或名为 'measurement' 的组中查找这些数据集。
    2. 或者,采用默认或第一个 NXdata 或名为 'measurement' 的组中的所有数据集,其形状与该组中第一个数据集的形状相同。
    3. 或者,采用文件中形状与最常见数据集形状相同的所有数据集。
  5. 搜索 'image_data' 数据集,从第一个包含的 TIFF 图像路径生成模板并添加到元数据中。
  6. 在所有 NXdetector 组中查找 3D+ 数组,生成并将 TIFF 图像路径添加到元数据中。

对于元数据和扫描数据表,如果数据集包含 @decimals 属性,将相应地进行四舍五入。

转换完成后,将组件合并成一个包含标题、元数据和扫描数据表的字符串。默认情况下,*'folder/file.nxs' 会被保存为 'folder/file.dat'。如果启用了 TIFF 写入,所有 NXdetector 组中 3+D 数组的探测器图像数据将保存为 TIFF 图像到子文件夹,如 'folder/RunNo_DetectorName_files/00001.tif'。如果文件已存在,则不会覆盖文件。

测试(2023年1月)

  • 已在数千个旧的 I16、I10 和 I21 nexus 文件上进行了测试。
  • 在这些文件中没有发现意外的故障,然而没有文件符合新的理想 nexus 结构。
  • 本地文件在无图像转换的情况下每文件转换大约需要 0.3 秒。
  • 有关更多信息,请参阅 Jupyter notebook nexus2srs_tests.ipynb
  • 在 I16 15/12/2023 上使用 nxs2dat jupyter 处理器进行测试,更新了 TIFF 文件写入。

2024年9月更新

对代码进行了重大重构,包括 hdfmap 包。HdfMap 函数负责创建可扫描的表和元数据,使用当前的 NeXus 最佳实践。这允许正确识别元数据并使用 "local_names" 和 "decimals" 属性。

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分发

nexus2srs-1.0.0.tar.gz (18.6 kB 查看哈希值)

上传时间

构建分发

nexus2srs-1.0.0-py3-none-any.whl (16.1 kB 查看哈希值)

上传时间 Python 3

由以下机构支持