核磁共振(Nuclear Magnetic Resonance,NMR)自1945年发现以来,凭借其严密的理论体系和丰富多样的脉冲序列,在生物、化学、材料和医学等领域发挥着巨大的作用.研究人员在利用NMR仪器进行研究时,往往根据自身需要,设计各式各样的脉冲序列.因此,直观、便捷的脉冲序列设计环境就成为现代NMR仪器不可或缺的重要组成部分.目前,大多数的NMR仪器软件提供的脉冲序列设计环境都是采用特定编程语言的文本格式编程环境,如Bruker采用自定义的类似BASIC的语言格式文本[1],Agilent/Varian采用的C语言[2],GE和Siemens磁共振成像(Magnetic Resonance Imaging,MRI)仪则采用C++语言.这种使用特定编程语言设计脉冲序列的方式虽然功能强大、控制灵活,但需要脉冲设计人员具备一定的编程基础,对用户要求较高.近年来,有越来越多有关图形化脉冲序列编辑环境的研究[3–5],不过这些图形化软件的功能和界面还比较简单.
本文提出了一种基于Eclipse图形建模框架(Graphical Modeling Framework,GMF)的图形化脉冲序列设计软件.软件基于GMF技术,具有开发周期短、更专注于业务逻辑、易于扩展和维护等优点.软件同时支持NMR和MRI脉冲序列的设计.此外,软件还集成了NMR实验参数管理模块,从而实现了以脉冲序列为基础的NMR实验设计.
1 GMF及其相关技术简介基于GMF技术的图形化编辑器近年来得到越来越广泛的应用.GMF是基于Eclipse图形编辑框架(Graphical Editing Framework,GEF)和Eclipse建模框架(Eclipse Modeling Framework,EMF)两大技术之上的.在GMF发布之前,人们就已经通过同时使用EMF和GEF技术来开发图形编辑器[6].GMF的发布使得开发人员能够更简单地同时使用EMF和GEF,而不必过多地关心二者结合带来的问题.其强大的模型构建能力、完善的代码生成机制和丰富的扩展性,使得开发人员能够更快速地开发出易于维护和扩展的图形化编辑器.
1.1 GEF框架GEF是Eclipse提供的一个图形化编辑框架[7],采用流行的模型-视图-控制器(Model-View-Controller,MVC)模式,减少数据模型和视图之间的依赖,开发人员可根据需要选择合适的模型和视图组合,而不必受到框架的束缚.
GEF框架对模型的规范非常宽泛,任何实现消息通知机制的Java类都可以作为GEF的模型层.在视图层方面,GEF使用Eclipse图形库Draw2D[8]作为视图层的实现.用户与界面的交互事件,如新建、删除、拖动、编辑等,会通过GEF的事件机制传递到控制器层EditPart类中,EditPart类根据事件相应地修改模型层的数据;EditPart类也是模型的监听器,模型层变化后会通知EditPart类,EditPart类相应地刷新视图显示.
1.2 EMF框架[9]EMF是由Eclipse组织提供的建模框架,可以将统一建模语言(Unified Modeling Language,UML)、可扩展标记语言(eXtensible Markup Language,XML)等构建的模型转换为健壮且功能丰富的Java代码.通过使用EMF,程序员可以便捷地获得一个健壮的模型层,而且它通常比程序员手工编写的模型层更为健壮.此外,EMF还提供了便捷的模型编辑支持和模型持久化框架,可以方便地将模型层数据保存为元数据交换(XML Metadata Interchange,XMI)和XML等格式文件.
1.3 GMF框架[10]GMF在GEF和EMF的基础之上,作为两者之间的桥梁,将两者有机地结合起来.GMF以GEF来建立MVC构架,以EMF来构建MVC构架中的模型层.GMF由两个主要部分构成:1个运行时框架和1个工具框架.运行时框架的主要任务是处理EMF和GEF的结合问题,同时为开发功能丰富的图形编辑器提供大量的编程接口;工具框架则提供了一系列的工具,以模型驱动开发的方法来生成图形编辑器.
GMF与GEF和EMF的关系如图 1所示.
本文作者参与的项目对NMR脉冲序列设计软件有如下功能需求:支持NMR和MRI脉冲序列设计;拥有图形编辑界面和脉冲序列元素工具栏,可图形化交互式地实现添加、删除和编辑脉冲序列元素;拥有脉冲序列文本编辑器,能够对脉冲序列直接进行文本编辑;拥有实验参数编辑器,能够对与脉冲序列配套的实验参数进行编辑.
2.2 脉冲序列业务模型和业务逻辑的设计NMR脉冲序列本质上是NMR仪器硬件组件的工作时间表.对于一个NMR实验的基本脉冲序列来说,它的组成元素包括通道、脉冲序列基本元素、脉冲序列的时序(各个通道的脉冲序列基本元素的同步方式)、脉冲序列的控制元素.
2.1.1 通道设计软件目前支持5种类型通道:射频通道(RF Channel)、x梯度场通道(Gx Channel)、y梯度场通道(Gy Channel)、z梯度场通道(Gz Channel)和接收通道(ACQ Channel).通道类都拥有一个type属性,用来表示上述5种类型通道.此外,通道类还拥有name和id属性,name为通道的显示名称,而id则为该通道的唯一标识.
通道可以自由进行添加、删除.当增加一个通道时,通道类型即确定,随后无法进行修改.用户可以更改通道的标识id和name属性值.
2.2.2 脉冲序列基本元素设计用户所编辑的脉冲序列,是由各种各样的脉冲序列基本元素组成的.软件目前支持的脉冲序列元素对象有:延时(Delay)、射频脉冲(Pulse)、组合射频脉冲(Composite Pulse)、x方向梯度脉冲(Gx)、y方向梯度脉冲(Gy)、z方向梯度脉冲(Gz)、选层梯度脉冲(Gs)、相位编码梯度(Gp)、频率编码梯度(Gf)和采样(Acquire).另外还提供一些控制元素:循环控制(Loop)、条件控制(If)、去偶标志(Decoupling).每个元素根据其物理意义不同,拥有各自的属性.比如射频脉冲元素有延时、功率、相位、频率偏置、脉冲形状等属性.脉冲序列设计人员可以通过设置这些属性值来操纵脉冲序列.
2.2.3 脉冲序列元素约束根据脉冲序列元素的物理意义,特定的元素只能放置到特定的通道,不能放置在任意通道上,比如:Pulse元素只能放置到RF Channel上,而不能放置到Gx Channel上.相对的,Gx元素就只能放置到Gx Channel上.当用户把一个Gx拖放到RF Channel上,软件会自动禁止操作并提示.因此,当我们在创建脉冲序列基本元素时,随着鼠标的移动,我们会不断地对鼠标下的区域进行判断,只有当正在创建的脉冲序列基本元素能放置到该区域上时,才能进行创建,否则禁止创建.
2.2.4 脉冲序列元素同步方式在多通道脉冲序列中,需要各个通道的脉冲序列基本元素协调合作.因此脉冲序列基本元素的同步方式就显得十分重要.
我们使用的方式为时间片方式,该方式的本质就是将脉冲序列分割成一个个时间段,这些时间段我们称之为时间片.在每个时间片内,可以自由地定义各个通道的事件,例如脉冲、延时、梯度等,而且脉冲序列基本元素只能放置在时间片中.这些时间片按照一定顺序依次排列,组成一个完整的脉冲序列.为了方便用户的使用,我们实现了智能添加时间片的功能.用户有两种方式进行各个通道间的同步:一种是当我们不是向时间片中添加脉冲元素时,那么就会自动新增一个时间片,而要添加的脉冲序列基本元素会直接放置到新增的时间片中;另一种是当我们向一个已存在的时间片中添加脉冲序列基本元素时,该脉冲序列基本元素会直接添加到该时间片中.
2.2.5 脉冲序列持久化软件使用EMF构建脉冲序列模型层,EMF提供了便捷的持久化功能,可以将模型层持久化到XML文件中.XML是一种优秀的用于传输和存储数据的语言,不但有利于实现脉冲序列设计的重用和软件无关性,而且便于将脉冲序列转换为各种谱仪接受的格式,达到硬件无关性.因此,在本软件中,我们在EMF框架提供的XMLResource实现的基础上,对其内部序列化和反序列化过程进行了自定义,使得脉冲序列持久化后的XML文件格式符合我们设计的要求.
2.2.6 脉冲序列实验参数管理模块设计脉冲序列最终目的是用于实验,因此需要根据实验要求对实验参数进行设置.每个脉冲序列都有一套与自身相关的实验参数列表.在我们的设计中,我们将实验参数列表和脉冲序列整合在一起,持久化到同一个文件中,这保证了NMR实验方案的完整性,避免了实验参数列表文件可能缺失的情况.
在设计脉冲序列的同时,我们还提供两种编辑参数列表的模式(图 2)来设计相对应的实验参数列表:一种是在设计脉冲序列时,点击脉冲序列元素,就可以编辑与该脉冲序列元素相关的参数;另一种是额外提供一个参数列表编辑器,提供增加、删除、编辑功能,对整个参数列表进行修改.
编辑完实验参数列表并赋予初始值,软件就可以模拟运行所设计的脉冲序列,预览脉冲序列的时序和相位变化等情况.若存在脉冲序列仿真插件,提供样品自旋信息,软件就可以模拟采样,生成模拟谱图,这将是我们下一步的工作.
2.3 脉冲序列视图布局一个脉冲序列图是各种脉冲序列元素视图的组合,如何将这些视图合理、有序的直观的显示出来是十分重要的.我们根据各个脉冲序列元素的时长,按一定比例来安排其布局,使整个脉冲序列图看起来更为合理.
本软件中,视图层使用的是Draw2D.在Draw2D中,每个父视图都会通过setLayoutManager()方法设置一个LayoutManager对象,父视图对子视图的布局是委托给LayoutManager进行的.
在我们的脉冲序列设计软件中,脉冲序列是以时间片为基本单位的,因此对时间片视图的布局十分重要.因此我们设计了SlicesFigureLayout类来对时间片视图进行布局,SlicesFigureLayout的布局算法为:
(1)提取出脉冲序列中所有的时间片视图:由于时间片视图有可能会被放置在控制元素的视图中,因此如果序列中存在控制元素视图,需要将它们包含的时间片视图也提取出来.
(2)将所有时间片视图按照时长进行分组,分为秒级别组(比如延时)、毫秒级别组(比如梯度脉冲、形状射频脉冲)、微秒级别组(比如射频脉冲)及以下级别组,并得到每个组别的时间片时长的最小值.时间片视图是用来作为脉冲序列基本元素视图的父视图的,因此时间片视图的时长为其所包含的脉冲序列基本元素时长的最大值.
(3)分别计算每个组别时间片视图的时长与该组别最小时长的比值,当然,该比值不能过大或过小,需要根据实践设定一定的取值范围.
(4)为每个组别分配一定的像素宽度:根据每个组别所含时间片视图的个数与总时间片视图数量的比例,将总的像素宽度按比例分配给各个组别.
(5)计算每个时间片视图的像素宽度:在分配完每个组别的总像素宽度后,就可以根据该组别中每个时间片视图时长和最小时长比值与所在组别总比值的比例,来计算每个时间片视图的像素宽度.
3 软件实现结果我们实现的脉冲序列编辑器采用多页编辑器形式,主要分为3个编辑页:图形编辑页Diagram、文本编辑页Source、参数编辑页Params,下面分别介绍3个编辑页.
3.1 图形编辑页图形编辑页实现了图形化编辑脉冲序列的主要功能,其界面如图 3所示:
图形编辑区域是整个脉冲序列图形化编辑的主要场所,该区域显示脉冲序列,可以对脉冲序列元素进行拖拉、增加、删除、编辑.
工具栏区域则提供了预定义好的脉冲序列元素,当要向图形编辑区域添加脉冲序列元素时,只需点击工具栏区域的元素,然后再点击图形编辑的适当区域,即可将该元素添加.
元素属性编辑区域主要作用是对元素的属性进行编辑.软件支持3种方式来设置属性值:(1)字面直接量,如延时直接设置为1 s;(2)参数变量,如延时设置为d1;(3)参数运算表达式,比如延时可以设置为d1/2+gt1等.对于属性值,我们首先会判断其类型:如果该属性值能够直接转为数值,则为字面直接量;如果属性值是以英文字母、下划线和美元符号$等开头,仅包含英文字母、阿拉伯数字、下划线、美元符号的字符串,则为参数变量;如果属性值是包含加减乘除等运算符的,则认为是参数运算表达式.对于参数运算表达式,我们会首先将参数运算表达式中的参数变量用其具体的参数值进行替换,然后将替换过的参数运算表达式交给本软件中内置的JavaScript引擎运行,即可得到参数运算表达式的计算结果,并实时显示在图形编辑区域脉冲序列的相应位置上.
软件同时还提供了一些易于用户使用的功能,比如在菜单栏的Edit菜单和编辑区域的上下文菜单中都提供了方便脉冲序列编辑的功能:撤销/重做、剪切、复制、粘贴和删除.
3.2 文本编辑页文本编辑页支持简单、易懂的文本编辑.该文本编辑器实现了自动语法高亮和内容格式化,提供了较好的用户体验.其界面如图 4所示:
在参数编辑页,软件提供了一个表格,将与该脉冲序列实验相关的参数都列出来.用户可以直接在表格上修改参数的属性值,还可以添加、删除参数.界面如图 2右图所示.
本文构建的图形化脉冲序列设计软件已经应用于厦门大学自行研制的0.5 T MRI谱仪中[11].在设计完脉冲序列后,XML文本会转化为二进制的接口元素并通过网络传输控制协议(TCP)发送至控制台的硬件设备上,控制硬件的实验参数进行实验.本软件设计的NMR波谱脉冲序列,也适用于中国科学院武汉物理与数学研究所研制并商品化生产的500 MHz NMR波谱仪[12, 13],序列格式与其第1代控制软件WXNMR兼容,可在WXNMR软件中控制国产波谱仪进行采样.
4 结论本文分析了图形化脉冲序列设计插件在NMR仪器中的作用,提出了一种基于GMF框架的图形化脉冲序列设计软件的实现,从而使得用户可以不需任何编程语言基础即可设计脉冲序列.本文实现的图形化脉冲序列编辑器具有十分直观的特点,用户就如在纸上画脉冲序列图一样的方便、直观,所见即所得.同时还将实验参数列表信息和脉冲序列信息保存到一个文件中,避免了脉冲序列和实验参数信息分离而导致的信息丢失.还提供了实验参数编辑器,实现了在脉冲序列基础上进行NMR实验设计的功能.
[1] | BRUKER. Pusle programming[EB/OL].[2008-01-28]. https://www.bruker.com/cn/service/information-communication/user-manuals/nmr/programming.html. |
[2] | KYBURZ R. VNMR pulse sequences:Programming and hardware aspects[M]. USA: Varian Inc, 1998. |
[3] | 鲍庆嘉. 核磁共振软件脉冲序列管理模块的实现[D]. 武汉: 华中科技大学, 2009. |
[4] | 李元. 核磁共振谱仪软件实验参数管理的设计与实现[D]. 武汉: 武汉理工大学, 2011. |
[5] |
ZHANG Z, MAO W P, LIU C Y. Pragressin the development of pulse pragrammer for nuclear magnetic resonance[J].
Chinese J Magn Reson, 2012, 29(3): 339-345.
张志, 毛文平, 刘朝阳. 核磁共振脉冲序列发生器研究进展[J]. 波谱学杂志, 2012, 29(3): 339-345. |
[6] | MOORE B, DEAN D, GERBER A, et al. Eclipse development using the graphical editing framework and the eclipse modeling framework[M]. New York: IBM Corp., 2004. |
[7] | FOUNDATION T E. Graphical editing framework[EB/OL].[2016-04-21]. https://en.wikipedia.org/wiki/Graphical_Editing_Framework. |
[8] | THE ECLIPSE FOUNDATION. Draw2D[EB/OL].[2016-04-21]. https://www.eclipse.org/gef/draw2d/. |
[9] | STEINBERG D, BUDINSKY F, PATERNOSTRO M, et al. EMF:Eclipse modeling framework[M]. 2nd ed. Boston: Addison-Wesley Professional, 2008. |
[10] | GRONBACK R C. Eclipse modeling project:A domain-specific language toolkit[M]. Boston: Pearson Education Inc., 2009. |
[11] |
CHEN D S, CHEN Z W. Development of a 0.5 T MRI scanner contral and data processing software based on Eclipse RCP[J].
China Medical Deviaes, 2015, 30(7): 30-32.
陈东山, 陈志伟. 基于Eclipse RCP技术的0.5 T磁共振成像仪控制和数据处理软件系统开发[J]. 中国医疗设备, 2015, 30(7): 30-32. |
[12] |
YANG L, BAO Q J, MAO W P, et al. System performance evaluation of a self-developed NMR spectrometer[J].
Chinese J Magn Reson, 2012, 29(1): 78-85.
杨亮, 鲍庆嘉, 毛文平, 等. 自主研制核磁共振波谱仪的性能评估[J]. 波谱学杂志, 2012, 29(1): 78-85. |
[13] |
CHEN L, SONG K, WANG Y L. Effects of attenuated saimonella typhimarium infection on fecal metabonome in mice-comparison between WIPM and Bruker 500 MHz NMR spectrometers[J].
Chinese J Magn Reson, 2014, 31(3): 349-363.
陈璐, 宋侃, 王玉兰. 感染减毒鼠伤寒沙门氏菌对小鼠粪样代谢组的影响——WIPM和Bruker 500 MHz核磁共振波谱仪检测结果的比较[J]. 波谱学杂志, 2014, 31(3): 349-363. |