2.操作方法
在开发的早期dxtbx公司人们认识到,为了普遍适用,用于读取衍射图像标题和数据的库必须满足以下要求。
(1) 它必须能够从使用不同文件格式和实验惯例的各种探测器中读取图像数据和元数据。
(2) 图像数据和元数据必须可访问通过一个统一的界面。
(3) 该库必须是用户可扩展的,不需要修改库源代码。
(4) 最后,用于表示实验的模型必须能够准确捕获探测器物理特性(例如畸变校正),同时具有足够的通用性,以涵盖各种衍射测量设置。
为了实现这些目标dxtbx公司实现了一个可扩展的插件框架,在该框架中,beamline科学家和开发人员可以添加自己的模块来处理来自不同文件格式、不同文件表示形式的输入。以编写少量Python代码为代价(参见附录中的示例A类和B类),用户可以扩展库以支持任何定制文件格式,并将其中的元数据转换为与dxtbx公司实验模型,已采用imgCIF标准。还提供了一个简单的高级接口,可以访问整个图像序列中的数据。
遵循cctbx公司,该库是一个用C++和Python编写的混合系统(Abrahams&Grosse-Kunstleve,2003)). Python非常适合快速开发,强调干净的可移植代码,并且有一个广泛的标准库。各种语言功能便于使用可互换组件轻松实现通用代码。然而,由于该语言的解释性,使用Python会带来性能开销,因此实验模型是用C++实现的,以允许在编译代码中直接使用它们,从而避免了这种开销。这意味着,虽然只有Python应用程序才能充分利用dxtbx公司编译的C++应用程序和库仍然可以使用通用的实验模型。这个boost.python公司语言绑定框架用于导出C++接口,以便在Python中使用。
衍射实验工具箱由四个不同的组件组成:实验模型、高级数据块和图像集接口,以及格式插件系统(§2.4). 下面对这些组件进行了更详细的描述,它们的相互作用如图1所示.
| 图1 这个dxtbx公司复杂输入图像集的数据模型。图像文件(1)被送入数据块工厂(2)。然后,数据块工厂使用格式注册表(3)查询每个图像以查找F类o个第页米一t吨类(4)。注意dxtbx公司支持更多F类o个第页米一t吨类。如果所有图像使用相同的F类o个第页米一t吨类,然后返回单个数据块(5);否则,将创建多个数据块。数据块分析图像元数据,根据它们之间共享的一组实验模型将图像分组。可以通过扫描或设置(6)从数据块访问这些组。扫描必须包含光束、探测器、测角仪和扫描(7),因此适用于旋转摄影;对于一组静止镜头,图像集必须具有每个图像的光束和检测器模型。 |
2.2. 高级数据块和图像集接口
通过高级数据块接口。数据块检查图像文件元数据头信息,以确定所提供列表中连续图像之间的关系。这使得可以将图像作为相关图像的块进行访问,例如共享一组特定实验模型的图像。图像块按照此方案组织为图像扫描和图像集。这个我米一克e(电子)S公司w个e(电子)e(电子)第页类表示一系列图像,这些图像在三维中相邻像素之间具有明确的几何关系,例如使用旋转方法拍摄的一系列图像。这个我米一克e(电子)S公司e(电子)t吨类用于不存在此关系的情况,例如对于串行飞秒晶体学产生的静态图像数据,但这些图像仍然是单个数据采集的一部分。这个我米一克e(电子)S公司w个e(电子)e(电子)第页类派生自我米一克e(电子)S公司e(电子)t吨类。这两个类都通过Python列表风格的界面提供了对图像数据的方便访问,在这个界面上可以迭代集合中的图像,并可以选择和使用子集。这个我米一克e(电子)S公司w个e(电子)e(电子)第页类提供了对一系列几何相关图像进行操作的附加方法。这个D类一t吨一B类我o个c(c)k类可以包含我米一克e(电子)S公司e(电子)t吨和我米一克e(电子)S公司w个e(电子)e(电子)第页类。
在内部我米一克e(电子)S公司w个e(电子)e(电子)第页和我米一克e(电子)S公司e(电子)t吨类保留对单个或多文件读取器类的引用,该类处理从单个文件(如HDF5文件)读取图像序列(HDF Group,2010),或多个文件,例如图像文件的集合。这两个读取器类都实现了一个接口,允许图像扫描和图像集以通用的方式与不同的数据存储表示进行交互。使用“flyweight”模式(Gamma)实现对图像子集的支持等。, 1994)通过轻量级高级接口访问的多个子集保留对执行读取和解释的单个读取器的引用。这具有在并行访问多个子集图像时减少内存使用的优点。
2.3. 图像元数据存储
提供了一种模块以使得能够直接存储修改后的图像集元数据。然后可以从文件表示创建图像集,从而可以保存经过优化的实验几何体以供以后使用。数据使用JavaScript对象标记(JSON)格式保存(Crockford,2006)); 之所以选择这种格式,是因为它是人类可读的,是一种开放标准,并且在许多编程语言中都得到了本机支持。特别是,Python标准库包含一个模块,用于将任意Pythons结构读写为JSON格式,从而方便在dxtbx公司.
2.4. 这个格式插件系统
这个dxtbx公司提供了一种插件机制来处理来自多个文件格式的输入,并对实验几何体进行替代描述。每个F类o个第页米一t吨类用于解释特定的图像文件和元数据格式,以及F类o个第页米一t吨通用检测器和数据表示的类包含在dxtbx公司用户可以添加自己的图像格式来处理定制图像格式或本地变体(参见附录A类和B类). 注册表维护以下项的树结构F类o个第页米一t吨类,这样最专用的格式离根最远。有关插件机制的更多详细信息,请参阅附录D类这种用于处理不同数据表示的模型有两个优点:操作不需要外部站点文件;此外,复杂修正(例如Pilatus检测器的平铺位置校正)可以以独立的方式进行编码。
波束线描述的可扩展性是dxtbx公司:特别是光束线科学家编写F类o个第页米一t吨描述如何使用图像标题中的值的模块(可能扩展了检测器的更通用示例)。自定义F类o个第页米一t吨模块可以放在指定的目录中,然后自动注册以在dxtbx公司应用程序启动时。扩展库的能力主要用于存在不寻常的实验硬件或波束线具有某些特性(例如左手旋转轴)的情况。将使用两个示例来演示扩展库的容易程度。
2.4.1. 示例1:反向旋转轴
澳大利亚同步加速器的MX1光束线有一个左旋角度计,与传统的右手轴相反,但它是一个包括ADSC Quantum 210r探测器的其他传统光束线,这仅仅意味着需要反转旋转轴的方向。在dxtbx公司这是通过在附录中创建Python文件来实现的A类,以标准为基础F类o个第页米一t吨类,并在确保(基于检测器序列号)这适用于这些数据后,替换旋转轴的定义。
2.4.2. 示例2:2上的ADSC Q315θ臂
大多数ADSC CCD探测器安装在简单的平移台上:考虑到这些设备的尺寸和重量,很少需要更复杂的轴。然而,在ALS光束线8.3.1处,Quantum 315探测器安装在2θarm,这在处理数据时必须考虑。此处,图像标题中记录的光束中心对应于2θ偏移值而不是2所在的位置θ角度为0°(詹姆斯·霍尔顿,私人通信)。这个F类o个第页米一t吨类来支持这一点,包括在附录中B类,替换检测器定义,以说明检测器原点的偏移以及定义检测器平面的矢量因2中的偏移而发生的变化θ需要注意的是,这些更改仅限于探测器几何结构,简化了束线科学家的实现,并且只会影响具有特定序列号的探测器(如源代码所示)。
3.应用
这个dxtbx公司旨在普遍适用于X射线衍射数据处理程序中图像数据和元数据的读取。它已经在已建立的项目中找到了实用性,例如cctbx公司图像查看器和下2以及在新项目中形成关键组成部分,例如先进光源的衍射积分(DIALS(刻度盘))项目(Waterman等。, 2013). 一些示例显示了dxtbx公司见附录C.
3.1. 这个cctbx公司图像查看器
这个cctbx公司图像查看器用于显示来自各种不同来源的衍射图像(索特等。, 2013). 它已经更新,以利用dxtbx公司,展示了F类o个第页米一t吨,我米一克e(电子)S公司e(电子)t吨和我米一克e(电子)S公司w个e(电子)e(电子)第页类。从命令行运行时,查看器使用dxtbx公司 我米一克e(电子)S公司e(电子)t吨工厂创建集合或扫掠。它加载集合中的第一个图像,显示它,并通过保留对我米一克e(电子)S公司e(电子)t吨或我米一克e(电子)S公司w个e(电子)e(电子)第页对象。这个dxtbx公司允许应用程序快速添加对几种新文件格式的支持,最重要的是新定义的HDF5文件。
HDF5(HDF集团,2010年)是一种文件容器格式,目前用于大型数据集,例如来自XFEL束线或精细切片同步加速器实验的数据集。新一代探测器目前支持120帧的帧速率 Hz,地平线上的探测器将支持1000帧速率 Hz或更高。使用每个图像一个文件将这些数据集存放在文件系统上是不现实的,因此最好使用HDF5等容器技术。这个dxtbx公司提供了一个插件接口,允许将HDF5数据集包装在M(M)u个我t吨我F类我我e(电子)R(右)e(电子)一d日e(电子)第页类,提供对其包含的图像和元数据的轻松访问。随着HDF5格式的发展dxtbx公司插件可以被编写或修改以支持其元数据格式(布鲁斯特等。, 2014). 这些插件将把新格式无缝地连接到现有系统上,允许图像显示和处理。
3.2.下2
如中所述介绍,下2最初使用的是CCP4型套件读取X射线衍射图像的标题。虽然这对程序支持的初始实验设置范围有效,但随着支持更复杂的实验几何体,例如使用κ测角仪和2θ探测器臂。
最初,这是通过提供读取特定图像类型的替代方法来解决的,这些方法在DiffractionImage-based方法失败后按顺序进行测试;然而,这种方法很快导致了非常复杂的代码,伸缩性非常差。自开发和合并dxtbx公司进入之内下2然而,支持任意实验几何形状的分析变得更加简单,允许下2除用于大分子晶体学实验外,还用于分析小分子数据(通常具有更复杂的几何结构)。预计在未来,这一趋势将继续下去,为晶体衍射实验开发新光束线的科学家将能够为他们的光束线本身添加特定的支持。
3.3. 这个DIALS(刻度盘)框架
这个DIALS(刻度盘)该项目旨在为衍射数据的处理提供一个可扩展的框架和软件包。它面向全球高级光源的用户,因此需要从各种数据源访问图像数据和实验几何图形。为了简化实现并保持通用性,实验几何和图像数据必须以统一的方式公开,而不依赖于底层数据表示。在以下背景下DIALS(刻度盘),的dxtbx公司为这些挑战提供了解决方案。
4.讨论
背后的原则dxtbx公司将X射线衍射数据的解释与其分析分开。实验设置的详细信息使用所有数据类型的通用接口和参考框架进行封装和公开,确保客户端分析代码不需要知道任何文件格式细节。由dxtbx公司描述关键实验组件,可以直接使用,无需进一步转换。这个dxtbx公司也是可扩展的,因为可以通过添加一个描述本地环境的Python文件来支持新的实验设置:一旦发生这种情况,就不需要在dxtbx公司或正确解释数据的分析代码。这些使分析代码的开发人员能够集中精力改进算法,而不是支持多种检测器数据格式。最后,使用完全通用的实验几何矢量描述可以将详细的校准信息传播到分析代码中,也可以鼓励分析软件支持处理X射线衍射数据的类似通用方法。
附录A
实现:反转轴
全面实施dxtbx公司 F类o个第页米一t吨对象,为澳大利亚同步加速器光束线MX1定制,具有反向旋转轴。
附录B
实施:ADSC Q315 on a 2θ臂
全面实施dxtbx公司 F类o个第页米一t吨ALS光束线8.3.1的目标,其中ADSC Quantum 315探测器安装在2θ手臂。
附录C
简单示例
我们使用dxtbx公司。这些示例的完整源代码也可以在dxtbx公司下的源分布./dxtbx/示例/.
C1.探测器角分辨率
一个简单的例子,展示了dxtbx公司计算任意位置探测器的角分辨率。简单地说,这个示例计算2θ光束和探测器每个角的位置之间的角度,并将它们转换为相应的d日间距。
指挥与控制。图像集接口
下面的代码片段显示了高级我米一克e(电子)S公司e(电子)t吨接口在一个简单的示例中操作。这个我米一克e(电子)S公司e(电子)t吨对象,通过工厂函数实例化,提供对实验模型和我米一克e(电子)S公司e(电子)t吨,并允许对集合或子集中的图像进行简单索引。最后,可以从包含在我米一克e(电子)S公司e(电子)t吨.
C3.储存
这个dxtbx公司提供了一个模块,用于将扫描或图像集写入JSON文件。只需一行代码就可以从文件中读取或写入图像集。需要注意的是,这些功能不会直接读取和写入图像数据;他们读写了一个表示dxtbx公司可以用来理解图像数据和元数据。JSON格式还加载图像集中覆盖的任何模型,允许根据需要保存和加载扫描的精细几何体。
C4.探测器-道路交叉口
探测器模型提供了计算射线与虚拟探测器平面相交点的方法,该点由其内部几何表示表示,如下面的代码片段所示。该点在快速和慢速方向上都以毫米为单位从第零个像素返回。检测器模型还提供了毫米对像素(和像素对毫米)功能,允许任意复杂的映射。
附录D
插件机制
给定一个图像文件,注册表调用u个n个d日e(电子)第页秒t吨一n个d日()直接从基类派生的类的函数,F类o个第页米一t吨。如果格式声称可以理解图像,则图像将传递给u个n个d日e(电子)第页秒t吨一n个d日()它的子类的函数。该过程以递归方式继续,直到返回嵌套最深的兼容格式。如果在层次结构的任何级别上有多个子类理解图像,就会引发异常,从而确保结果唯一。
注册表树是使用Python元类自动建立的,它允许控制类的创建。当F类o个第页米一t吨类首先被发现,元类递归地确保它被注册到基类的直接后代列表中。因为元类绑定到F类o个第页米一t吨它只实现一次基类,它的所有子类都将从它提供的自动注册中受益。
致谢
JMP和LFM得到了欧洲共同体第七框架计划(FP7/2007-2013)在BioStruct-X(第283570号赠款协议)下的支持。ASB、JH和NKS得到了美国国立卫生研究院/国家普通医学科学研究所的R01GM095887拨款支持。NE得到了美国国立卫生研究院/美国国立普通医学科学研究院的支持,向Paul Adams(LBNL)拨款1P01GM063210,这也支持了cctbx公司.
| 的日志 应用 结晶学 |
国际标准编号:1600-5767
打开访问