(1) 概述
介绍
在奥尔堡大学(AAU)的研究小组中,我们最近启动了一个新的研究项目,FastAFM 1 ,寻求利用压缩传感加速原子力显微镜图像的采集。 这是一个相对未开发的应用领域,结果才刚刚开始出现[ 1 ], [ 2 ]. 在本文中,我们给出了通用软件包 马格尼牌手表 ,我们已经开发出将压缩传感和AFM成像技术相结合的技术。
压缩感知是近年来备受关注的理论。 简言之,该理论表明,从大大减少的采集样本中可以准确地表示各种可能的信号类型[ 三 ], [ 4 ]. 也就是说,这些信号类型可以从显著低于香农-奈奎斯特速率(通常被视为最终极限)的采样中准确重建。
原子力显微镜(AFM)是高分辨率成像和纳米级物质操作的最先进工具之一[ 5 ]. 当用于成像时,它能够生成物体亚纳米分辨率的3D表面地图[ 6 ]. 为了生成此贴图,将一个尖锐的探针靠近对象的表面,然后将探针尖端和对象相对移动。 机械探针尖端受表面力的影响,大致来说,“感觉”表面[ 6 ], [ 7 ]. 不幸的是,标准AFM成像需要几分钟到几小时的时间来获取图像[ 7 ].
在压缩传感和AFM的工作过程中,我们发现了三个缺点。 我们发现,这一领域可用的免费开源研究软件无法充分满足这些要求:
用于重建压缩传感信号的软件。
用于对重建算法进行一致和严格测试的软件,特别是在相位转换方面的重建能力。
用于采集和处理压缩传感AFM图像的软件。
虽然压缩传感信号重建的免费开源软件可用[ 8 ], [ 9 ],该软件大部分依赖于MathWorks的Matlab,这限制了再现性。 此外,AFM图像后处理和可视化可用的免费开源软件[ 10 ]不包括压缩传感相关功能。 相反,为了缓解这些缺点,我们构建了magni软件包,以确保信号处理的最高再现性[ 11 ]. 这是通过依赖自由开放源代码编程语言Python2并使所有示例、图形等易于复制来实现的。 AFM图像的重建示例如图所示 1 .使用 马格尼牌手表 ,原始图像被加载、预处理、采样、重建并显示在不到25行中,通过直观调用 马格尼牌手表 例如:
>>>磁共振成像测量螺旋采样图像(h,w,扫描长度,num_points) >>>磁成像测量结构测量矩阵(img字,h,w) >>>magni.imaging.dictionarys.get_DCT((h,w)) >>>磁原子力显微镜重建重建(领域测量,Phi,Psi)
我们设计了 马格尼牌手表 解决上述三个需求的软件包:它包含一系列压缩传感重建算法,一个通过蒙特卡罗模拟评估重建算法的框架,以及从AFM设备采样和重建图像的更多AFM特定功能。 随着未来几年的发展,计划通过我们正在进行的FastAFM研究项目进一步开发该包。 这一进一步的开发旨在扩展包的功能,包括直接连接AFM设备以及添加更多的后处理和重建算法。
实施和架构
这个 马格尼牌手表 包是用Python编程语言编写的 2 .Python与一组第三方库相结合是科学和工程应用程序的优秀工具[ 12 ]. 这个 马格尼牌手表 软件包使用以下第三方库来开发代码重用,以简化质量控制过程,并增强最终用户体验:
这个 努皮 和 松软的 库用于处理数据(使用高效的ndarray数据容器类[ 13 ])以及用于执行数值计算。 这是使用Python进行科学计算的两个核心库[ 12 ].
这个 小矮人 图书馆[ 14 ]用于通过高抽象HDF5数据库接口存储数据。
这个 马特普洛特利布 图书馆[ 15 ]用于可视化数据。
易于使用 IPython公司 [ 16 ]笔记本用于展示一些示例,这些示例显示了 马格尼牌手表 包裹。
这个 马格尼牌手表 包本身就是一个库,即它是Python子包和模块的集合,因此不提供任何(图形)用户界面。 提供的功能 马格尼牌手表 可以分为五类,每个类别都有一个子包,如图所示 2 此外,每个子包都有多个模块或嵌套子包来对相关功能进行分组。
至于编码风格,过程编程优于面向对象编程,以避免不必要的开销[ 17 ]. 此外,开发人员发现过程编程对于实现所需的功能更加透明。 只有在少数情况下,类的使用会导致代码更加清晰,才应用面向对象编程。 因此,每个模块都将其功能封装在许多函数和类中,并对公共、内部和私有可访问性进行了区分[ 18 ]. 这些可访问性级别通过使用PEP8建议的弱“内部使用”指示器下划线约定反映在代码中 三 :
私有功能仅由模块本身使用。 此类函数或类的名称前面有下划线。
内部功能由同一子包或嵌套子包中的模块使用。 此类函数或类的名称之前没有下划线,但模块名称之前有下划线。
公共功能可供最终用户使用,并由包本身使用。 此类函数或类的名称之前没有下划线,模块名称之前也没有下划线。
通过限制每个例程的逻辑任务数量、圈复杂度,实现了函数和方法,以确保可读性和效率[ 19 ], [ 20 ],以及物理代码行数 4 。圈复杂度,即通过函数的独立路径数,对于核心功能保持在10以下,与程序员通常可以完美处理的级别上的观察结果一致。 这已经通过静态代码分析器进行了验证 氡 5 物理代码行数保持在50以下,这与IBM和TRW使用的建议一致[ 19 ]以及该领域的一般经验[ 21 ], [ 22 ].
这个 马格尼牌手表 该包符合PEP8关于Python编码约定的建议。 这确保了所有Python代码都符合许多建议,目的是使代码更人性化,从而从维护角度来看更容易、更健壮。 建议包括线宽、变量命名约定、包导入、缩进和源编码。 此外, 马格尼牌手表 使用numpydoc进行了大量文档记录 6 格式化的文档字符串,描述代码的目标,指定函数的输入和输出,详细说明代码的功能,提及相关参考文献,并提供包的使用示例。 最后,根据已知要求验证每个公共(即用户可访问)函数和类的输入,并为无效输入引发适当的Python异常。 这样做是为了避免运行时错误与难以调试的消息和堆栈跟踪。
质量控制
代码开发过程建立在以下方法的最佳选择之上:1)定义良好的基于阶段的方法,如结构化瀑布方法[ 23 ]和螺旋式方法[ 24 ]允许不同开发阶段之间的反向交互; 和2)以测试和自适应为中心的敏捷程序[ 25 ]包括Scrum[ 26 ], [ 27 ]和极限编程[ 28 ], [ 29 ]包括代码审查、代码迭代、设计简单性、频繁重构和集体所有权等部分。 所有代码模块首先是通过与算法的紧密链接开发的,然后进行重构,以确保可维护性、可读性、健壮性和足够的性能。 包括主要开发人员在内的2-6名研究人员进行了多次小型和大型代码评审。 在整个开发过程中,Git用于版本控制和问题跟踪[ 30 ],并使用多个分支来确保只有经过测试的代码进入主分支。
测试和代码验证由不同的工具处理:
15个精心设计的端到端示例已在 IPython公司 笔记本(.ipynb文件)。 这些示例结合在一起,可以测试所有关键的代码段,并用于集成和回归测试。
所有公共函数的Doc-string都包括自动文档测试中使用的示例 7 这有助于回归测试,并确保文档字符串保持最新。
pyflakes公司 和 皮林 Python的静态源代码分析器在代码开发过程中被用来捕获错误和糟糕的编码质量。
一如既往,没有哪个软件包比随软件包提供的文档和示例更好。 已经提到了示例和部分文档。 一些示例使用了随软件包提供的AFM映像。 此外,从doc-string中自动生成html格式的完整文档。 该代码附带了一个pdf版本。
(2) 可用性
操作系统
在Ubuntu 12.04 LTS Linux、Apple Mac OS X 10.9和Microsoft Windows 7上进行了测试。 自 马格尼牌手表 是用纯Python编写的,它应该在Python和 马格尼牌手表 依赖项运行。
程序设计语言
这个 马格尼牌手表 这个包是用纯Python编写的。 需要Python 2(>=2.7)或Python3(>=3.3)才能使用该包。 这个包裹已经用蟒蛇进行了测试 8 Continuum Analytics发布的Python。
其他系统要求
马格尼牌手表 旨在处理所有大小的数据集。 处理器功率、内存容量等方面的硬件要求主要取决于所处理的数据集的大小。
依赖关系
马格尼牌手表 取决于 努皮 , 松软的 , 圆桌会议 、和 马特普洛特利布 。该包已通过以下测试:
努皮 版本1.8
松软的 版本0.13
小矮人 版本3.1
马特普洛特利布 版本1.3
以下库是的可选要求 马格尼牌手表 :
IPython公司 笔记本>=1.1(用于运行示例)
数学内核库( mkl公司 )>=11.1(对于加速矢量运算)
狮身人面像 >=1.2(用于从源代码构建文档)
拿破仑 >=0.2.6(用于从源代码构建文档)
贡献者列表
Christian Schou Oxvig(奥尔堡大学)-发展
Patrick Steffen Pedersen(奥尔堡大学)-发展
JanØstergaard(奥尔堡大学)-测试和代码审查
托马斯·阿里尔德森(奥尔堡大学)-测试和代码审查
Tobias L.Jensen(奥尔堡大学)-测试和代码审查
托本·拉森(奥尔堡大学)-测试和代码审查
档案文件
出版商
克里斯蒂安·肖奥·奥克斯维格(Christian Schou Oxvig)
(3) 再利用潜力
这个 马格尼牌手表 该包的设计目的是通过广泛的功能和接口文档来促进重用。 代码的实现注重可读性。 该软件包还附带了一些示例,以演示其在各种使用卡中的使用。
我们希望 马格尼牌手表 该软件包对AFM领域的研究人员具有很大的重用潜力,特别是在压缩传感采集和AFM图像重建方面。 这既适用于有兴趣开发和测试与压缩传感技术结合使用的新采样模式的用户,也适用于在AFM背景下开发压缩传感新算法的用户。
此外 马格尼牌手表 该包通常适用于压缩感知,对于那个些寻求在Python中使用的压缩感知重建算法的人来说尤其有用,这些算法到目前为止还很少。 除了重建算法外,该软件包还提供了一个一致的框架,可用于实证评估用户自己的重建算法在重建阶段转换方面的重建能力。
由于 马格尼牌手表 包基于完善的Python库,它自然适合Pythons生态系统[ 31 ]科学计算的高质量工具。 该软件符合信号处理领域中使用的可再生研究范式[ 11 ]. 可复制研究的目的是为与特定研究相关的软件创建一种公开透明的方法-参见例如[ 32 ], [ 33 ], [ 34 ], [ 35 ]. 因此,我们通过慷慨的BSD 2条款许可证提供对所有源代码的完全开放访问和完全重用权限,使其他人可以轻松使用代码库。 虽然开发人员计划不断扩展软件的功能,但其他人可以在不同的分支中自由使用。 这个 再现性 子包更进一步,提供了读写版本和完整配置的功能 马格尼牌手表 此外,如果可用,还包括有关conda、git版本和系统平台的信息。 此信息可以与结果一起自动发送,方法是 马格尼牌手表 使用相同的HDF5数据库存储这两个数据库。 通过这些特性,开发人员希望激励其他人使他们的结果具有可复制性。