使用形式描述的磁共振序列模型以使测量序列设计自动化.pdf

上传人:a**** 文档编号:318404 上传时间:2018-02-09 格式:PDF 页数:76 大小:3.13MB
返回 下载 相关 举报
摘要
申请专利号:

CN200910171001.1

申请日:

2009.08.28

公开号:

CN101661087A

公开日:

2010.03.03

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G01R 33/54申请日:20090828|||公开

IPC分类号:

G01R33/54; A61B5/055

主分类号:

G01R33/54

申请人:

西门子公司

发明人:

奥利弗·海德; 托马斯·克卢格

地址:

德国慕尼黑

优先权:

2008.8.28 DE 102008044828.1

专利代理机构:

北京市柳沈律师事务所

代理人:

谢 强

PDF下载: PDF下载
内容摘要

本发明涉及为了对测量序列设计进行自动化而使用形式描述测量序列(100)的磁共振序列模型。提出的序列模型允许用于在磁共振扫描器(4)上执行的测量序列(100)的独立于系统的说明。在此序列模型是尽可能形式的,其限制到为描述测量序列(100)最小所需的信息而不限制序列设计中的灵活性。按照本发明的、用于形式描述测量序列(100)的方法允许对通过多个参数表征的测量序列进行参数化。除了尚待确定的参数(1100)的集合,可以自动地从测量序列的形式化的描述中进行测量序列(100)的参数化。为了自动地产生可执

权利要求书

1: 一种用于形式描述要在磁共振扫描器(4)上执行的测量序列(100)的 方法,其中,以作为有向图(G)表示的序列模型为基础来构造所述方法, 其中,所述序列模型基于由蜂动块(W)、X块(X)、暂停(B)组成的组 中的块,并且其中,所述有向图(G)至少包括以下: -从由X块(X)、入口点(I)和出口点(O)组成的组中形成的节点, -连接线(Ka), -用于有向图(G)的流程控制的连接线(Ka)的特征; 其中,除了待确定的参数(1100)的集合之外,所述测量序列(100)是 能够自动地从有向图(G)中参数化的。
2: 根据权利要求1所述的方法,其中,用于流程控制的连接线(Ka)的特 征通过由以下组成的组给出: -蜂动块(W) -时间测量 -暂停(B) -路径控制(P)。
3: 根据权利要求1或2所述的方法,其中,在节点之间的所述连接线(Ka) 通过由如下组成的组给出: -从入口点(I)经过路径控制(P)到蜂动块(W)并且从那里到X块(X) 的过渡, -从X块(X)经过路径控制(P)到出口点(O)的过渡, -从X块(X)经过路径控制(P)到蜂动块(W)并且从那里到X块(X) 的过渡, -从X块(X)经过路径控制(P)和暂停(B)到蜂动块(W)并且从那 里到X块(X)的过渡,以及 -从X块(X)经过时间测量到X块(X)的过渡。
4: 根据上述权利要求中任一项所述的方法,其中,每个X块(X)代表一 个接收型(ET)和/或发送型(ST)的时间段。
5: 根据权利要求4所述的方法,其中,发送型(ST)的X块(X)代表反 转脉冲、激励脉冲、再聚焦脉冲或者混合形式。
6: 根据权利要求2至5中任一项所述的方法,其中,在有向图(G)内部 始终仅允许满足一个路径控制(P)。
7: 根据权利要求2至6中任一项所述的方法,其中,每个时间测量是由如 下组成的组中的一个元素: -X块(X)的持续时间, -在两个X块(X)的中心之间测量的序列时间,以及 -作为在测量序列(100)内部的各个第一X块(X)的中心的时刻的序列 开始时间(T.30)。
8: 根据上述权利要求中任一项所述的方法,还包括以下方法步骤: -对有向图(G)的每个X块(X)确定指数, -从有向图(G)中对每个蜂动块(W)和X块(X)确定变量, -从有向图(G)中对发送型(ST)和/或接收型(ET)的每个X块(X) 的每个中心确定零阶梯度磁矩。
9: 根据上述权利要求中任一项所述的方法,还包括以下方法步骤: -从有向图(G)中确定序列公式。
10: 根据上述权利要求中任一项所述的方法,还包括以下方法步骤: -从有向图(G)中对于发送型(ST)和/或接收型(ET)的每个X块(X) 作为激励脉冲和/或再聚焦脉冲和/或混合形式和/或反转脉冲的序列,确定用于 回波形成的路径。
11: 根据上述权利要求中任一项所述的方法,还包括以下方法步骤: -从有向图(G)中对于发送型(ST)和/或接收型(ET)的每个X块(X) 的每个中心确定一阶梯度磁矩,由此能够在测量序列(100)中进行流动补偿和 /或流动编码。
12: 根据上述权利要求中任一项所述的方法,还包括以下方法步骤: -从有向图(G)中对于发送型(ST)和/或接收型(ET)的每个X块(X) 确定扩散加权。
13: 根据上述权利要求中任一项所述的方法,还包括以下方法步骤: -从有向图(G)中对于发送型(ST)和/或接收型(ET)的每个X块(X) 的每个中心确定高阶梯度磁矩。
14: 根据上述权利要求中任一项所述的方法,还包括以下方法步骤: -在测量序列(100)内部确定子序列(101), -在所确定的子序列(101)内部识别不可分的超块(102),其中,不可分 的超块(102)在有向图(G)内部在序列时间上相连。
15: 一种基于序列模型、用于自动产生在磁共振扫描器(4)上执行的测量 序列(100)的方法,该序列模型根据按照权利要求1至14中任一项所述的用 于形式描述测量序列(100)的方法被参数化,并且作为有向图(G)呈现,其 中所述参数化包括待确定的参数(1100)的集合,具有以下步骤: -提供为了在磁共振扫描器(4)上执行所述测量序列(100)要满足的边 界条件(2500), -通过解算器(2000)确定对于每个蜂动块(W)和/或X块(X)的定时 值(T.i)以及对于待确定的参数(1100)的集合的允许的值, -将所述测量序列(100)的形式描述自动转换为能够在磁共振扫描器(4) 上执行的时间段的序列。
16: 根据权利要求15所述的方法,还包括以下用于交叉地执行测量序列的 步骤: -提供多个测量序列, -在多个测量序列的各个包括暂停(B)的第一测量序列内部识别至少一 个子序列(101), -从多个测量序列的各个其它测量序列中确定子序列,从而在各个第一测 量序列的暂停(B)期间能够无重叠地执行至少一个所确定的子序列。
17: 根据权利要求15或16所述的方法,其中,所述边界条件(2500)是 来自包括如下的组中的至少一个元素: -对比度规定, -图像分辨率规定, -对于至少一层的位置规定, -硬件限制, -测量时间的最小化,以及 -患者安全性规定。
18: 根据权利要求15至17中任一项所述的方法,其中,所述自动地转换 形式描述的步骤包括到程序设计语言的转换,使得能够在磁共振扫描器(4)上 和/或在与MR扫描器(4)相连的控制单元(45)上执行所述测量序列(100)。
19: 一种用于形式描述要在磁共振扫描器(4)上执行的测量序列(100) 的装置,其中,所述装置包括: -序列模型接口,其用于接收序列模型,其中,所述序列模型基于由蜂动 块(W)、X块(X)、暂停(B)组成的组中的块, -监视器(205),其适合于,基于所述序列模型,将所述测量序列(100) 作为有向图(G)显示,其中,所述有向图(G)至少包括: -由X块(X)、入口点(I)和出口点(O)组成的组所形成的节点, -连接线(Ka), -用于有向图(G)的流程控制的连接线(Ka)的特征; 其中,所述装置还包括参数化模块(1005),该参数化模块适合于,从所 述序列模型出发,除了待确定的参数(1100)的集合之外,从有向图(G)中 自动地参数化所述测量序列(100)。
20: 一种用于自动地产生要在磁共振扫描器(4)上执行的测量序列(100) 的装置,其中所述装置包括: -图形接收接口(910),其用于接收有向图(G),其中,从序列模型出发, 借助按照权利要求19所述的用于形式描述用于要在磁共振扫描器(4)上执行 的测量序列(100)的装置,产生所述有向图(G), -边界条件接口模块(915),其用于接收在执行所述测量序列(100)时可 选地要满足的预先给出的边界条件(2500), -解算器(2000),其用于可选地在考虑边界条件(2500)的情况下为每个 蜂动块(W)和/或X块(X)确定定时值(T.i)以及为待确定的参数(1100) 的集合确定允许的值, -转换模块(990),其用于将所述用于在磁共振扫描器(4)上执行的测量 序列(100)的形式描述,自动地转换为能够在磁共振扫描器(4)上执行的时 间段的序列。
21: 根据权利要求20所述的装置,其中,所述装置还包括以下模块中的至 少一个: -指数化模块,其用于从有向图(G)中对于每个X块(X)确定指数, -变量模块,其用于从有向图(G)中对于每个蜂动块(W)和/或每个X 块(X)确定变量, -序列公式模块,其用于从有向图(G)中确定序列公式, -回波路径模块,其用于从有向图(G)中对于发送型(ST)和/或接收型 (ET)的每个X块(X)作为激励脉冲和/或再聚焦脉冲和/或混合形式和/或反 转脉冲的序列确定用于回波形成的路径, -梯度磁矩模块,其用于从有向图(G)中对于发送型(ST)和/或接收型 (ET)的每个X块(X)的每个中心确定零阶梯度磁矩和/或一阶梯度磁矩和/ 或高阶梯度磁矩, -扩散加权模块,其用于从有向图(G)中对于发送型(ST)和/或接收型 (ET)的每个X块(X)确定扩散加权, -交叉模块,其用于接收要交叉地执行的多个测量序列, -子序列识别模块,其用于识别多个测量序列的各个包括暂停(B)的第 一测量序列内部的至少一个子序列(101), -子序列确定模块,其用于从多个测量序列的各个其它测量序列中确定子 序列,从而在各个第一测量序列的暂停(B)期间能够无重叠地执行至少一个 所确定的子序列。
22: 一种计算机程序产品,当该程序在与磁共振扫描器(4)相连的计算机 单元和/或在磁共振扫描器上执行时,其执行根据权利要求1-14中任一项所述 的、用于形式描述用于在磁共振扫描器(4)上执行的测量序列(100)的方法, 和/或根据权利要求15-18中任一项所述的、用于自动地产生用于在磁共振扫描 器(4)上执行的测量序列(100)的方法。
23: 一种用于自动地产生用于在磁共振扫描器(4)上执行的测量序列(100) 的系统,其中所述系统包括: -磁共振扫描器(4),在其上能够执行所述测量序列(100), -用户接口(3000),其用于与所述磁共振扫描器(4)的用户交互, -根据权利要求19的、用于形式描述用于在磁共振扫描器(4)上执行的 测量序列(100)的装置, -根据权利要求20或21的、用于自动地产生用于在磁共振扫描器(4)上 执行的测量序列(100)的装置。

说明书


使用形式描述的磁共振序列模型以使测量序列设计自动化

    【技术领域】

    本发明涉及用于磁共振的测量序列的设计领域。本发明特别提出一种在使用磁共振序列模型的条件下对测量序列的形式描述,由此可以对用于磁共振的测量序列尽可能自动化地设计。

    背景技术

    磁共振扫描器、简称MR扫描器或者也称为核自旋断层造影装置,目前是用于检查患者的临床常规的固定组成部分。此外MR扫描器还可以用来检查动物和/或生物样本。

    测量序列是用于控制MR扫描器所必须的。

    为了在MR扫描器中产生MR图像,要求在高频激励、HF激励、自旋、位置编码以及探测自旋的共振响应之间的精确的时间上的顺序。激励、制备和探测的时间上的顺序被称为脉冲序列或者说测量序列。根据其目的划分测量序列的单个片段。该划分被称为时间段。一个时间段也就是测量序列内的用于特定的目的(例如激励核自旋)的确定的时间片段。时间段包含用于MR扫描器的控制指令。时间段精确地确定,MR扫描器要做什么并且是在哪个时刻。可以在MR扫描器上执行时间段的顺序,因为其包含所有指令及其与MR扫描器的控制的时间上的关系。作为替换,也可以执行与MR扫描器相连的控制单元的时间段。

    可以在MR扫描器上执行作为时间段的序列的测量序列。在用于在MR扫描器上执行的测量序列内部,时间段无缝地、即无空隙地彼此紧接。每个时间段具有特定的长度并且每个时间段对应于至少一个具有脉冲形(Pulsform)的脉冲。每个时间段可以对应于如下集合中的型:用于发送HF功率的发送型、用于探测核自旋共振响应的接收型、以及用于制备核自旋的蜂动型(Warptyp)。发送型的时间段被用来作为所谓的激励脉冲来激励核自旋、再聚焦核自旋、以及按照混合形式既用于激励也用于再聚焦。此外,还有在其中发送HF能量的和/或接收HF信号的时间段。此外,还公知用于反转核磁化的HF脉冲、即所谓的反转脉冲。

    近年来开发了大量用于不同应用的测量序列。例如可以通过选择测量序列来决定性地影响图像的对比度。自旋系统的制备,例如借助用于HF激励的脉冲、梯度脉冲、等待时间等等,对获得的MR图像的质量和特征具有决定性的影响。

    用于在MR扫描器上执行的测量序列在临床中典型地由106个互相具有敏感的时间关系的不同的时间段组成。测量序列的发展向着MR物理的特有领域发展。

    迄今为止通过序列设计员提供用于在MR扫描器上执行的测量序列。这以一种公知的程序设计语言、通常是C++进行,其描述时间段地所有特征和时间上的顺序。也就是说,迄今为止手动地产生测量序列,以便提供完全参数化并且具有用于在MR扫描器上执行的允许的参数值的测量序列。

    管理这么多参数是困难的并且容易出错。在序列设计中的设计员的错误例如会导致中断通过MR扫描器对患者的MR检查和/或监视模块,因为例如所需的参数没有被赋予值。在单个的参数之间、由此可以获得MR图像存在大量的例如时间上的关系。如果没有遵循这些关系,则不能获得期望的MR图像。通过序列设计员检查这些大量的关系是非常费时和容易出错的。

    此外,当要扩展新的用于在MR扫描器上执行的测量序列时,找出产生期望的MR图像的允许的参数组是个漫长的过程。在许多重复步骤中MR扫描器的用户和/或设计员必须修改单个参数,直到参数组互相完全一致并且包含允许的值,使得在MR扫描器上可以执行测量序列。

    【发明内容】

    存在如下的需求,即尽可能简短和全面地描述测量序列。也就是寻找一种测量序列描述。同时这样的简短描述不限制设计员建立新的测量序列的自由。

    此外,还存在对如下方法的需求,即一种自动地将测量序列转换为一种形式的方法,使得测量序列是在MR扫描器上可以执行的。这对于当前的MR扫描器来说可以意味着,将测量序列描述自动地转换为可以在MR扫描器上执行的时间段的序列。

    本发明首先提出一种用于形式或者说形式化地描述测量序列的方法。为了建立形式描述提出一种序列模型。提出的序列模型可以给出以形式化描述的形式的非常简短的测量序列描述。此外,测量序列的该形式描述是独立于系统的。也就是说,在形式描述中不涉及要执行测量序列的系统的特性。由此,在测量序列的描述和设计中比迄今为止的达到更高的抽象度。

    此外,本发明还提供一种用于将测量序列自动转换为可以在MR扫描器上执行的时间段的序列的方法。该方法从形式化的描述中确定测量序列的多个特征,这些特征一定程度上自动地从形式描述中产生。由此对于测量序列设计员来说大大降低设计开销。本发明由此大大简化MR扫描器的控制。按照本发明的方法允许,从形式的MR序列模型出发,产生在MR扫描器上直接可以执行的测量序列。

    从形式化的描述出发,在使用解算器(Solver)的条件下产生对MR扫描器的控制指令流,例如作为时间段的序列。然后可以在MR扫描器上直接执行时间段的序列,由此开始MR检查。解算器的使用和功能在以下解释。

    本发明的上述技术问题特别通过如下解决:

    -一种用于形式描述在磁共振扫描器上执行的测量序列的方法,

    -一种用于自动地产生在MR扫描器上执行的测量序列的方法,

    -一种计算机程序产品,当其在计算机上被执行时,执行用于形式描述测量序列的方法和/或用于自动地产生在磁共振扫描器上执行的测量序列的方法,以及

    -一种用于自动地产生在磁共振扫描器上执行的测量序列的系统。

    以下将结合各个方法描述上述技术问题的解决方案。在此提到的特征、优点或可替换的实施方式同样也可以用于其它的要求保护的内容以及反过来。换言之,具体的权利要求(例如针对系统或针对产品的)可以用关于方法所描述的和/或所要求的特征来扩展,以及反过来。方法的相应的功能性特征在此通过相应的具体的模块、特别是通过硬件模块、系统以及装置来构造。

    上述技术问题特别通过一种用于形式描述在MR扫描器上执行的测量序列的方法解决。

    按照本发明的方法建立在序列模型的基础上,在该序列模型中测量序列可以作为有向图(gerichteter Graph)表示。序列模型使用块来构建有向图。有向图包括节点、连接线以及用于流程控制的连接线的特征。

    序列模型允许自动地从有向图中对除了待确定的参数的集合之外的测量序列进行参数化。

    可参数化意味着,描述测量序列的参数至少作为占位符(Platzhalter)是已知的。也就是给出为完整地描述测量序列所必须的所有参数的列表。特别是从有向图中得到该列表。

    待确定的参数的集合的特征是,必须预先给出对于这些参数的参数值;通常通过用户预先给出。

    形式描述被理解为以形式的形态表示MR物理关系。在本发明的范围内提出一种包括所有可能的测量序列的形式描述。也就是,提出的形式描述允许对用于在MR扫描器上执行的所有可能的测量序列一般性地进行描述。也就是说,对于测量序列的设计员来说,保留了在测量序列设计中的自由度,不过在形式描述的范围内、也就是以一种程序设计语言来描述测量序列。从形式描述或者序列说明语言,除了待确定的参数的集合之外可以对测量序列进行参数化。

    以下一个块代表了测量序列的一个时间段。然而,在时间段和块之间的主要区别是,块的特征没有完全被确定。由此一个块仅仅是用于没有具体持续时间的时间段的占位符或者容器,而时间段有具体的持续时间。

    由此,块具有至少作为用于具体的参数值的占位符描述时间段的所有特征。在此意义上,块表示对在测量序列内部的具体时间段的抽象。

    为了从一个块获得一个时间段,必须确定所有的特征,也就是描述块的特征的所有的参数。也就是说,必须用具体的值赋予这些参数。

    在使用的序列模型的范围内,块可以是由蜂动块、X块和暂停组成的组的一个元素。蜂动块、也简称W块,代表蜂动型的时间段。而X块代表在发送HF功率和/或接收HF信号期间的时间段。暂停的模型化和识别对测量序列的交叉来说是重要的。其标记可以执行(但不是必须执行)另一个测量序列的至少部分的时间窗。

    在提出的序列模型中,块无间隙地并且无重叠地互相紧接。此外,在序列模型的范围内可以表达在单个块之间的相对的时间上的关系,例如以序列时间的形式表达,如后面要解释的那样。

    提出的序列模型的另一个主要思路是,将蜂动块和后面的X块的单元综合为所谓的WX块。在序列模型中考虑WX块的决定仅仅是一种可能性,然而其被证明是非常有意义的。其允许非常简短和灵巧的测量序列描述。

    当然,还可以考虑综合不同于WX块的其它块的序列模型。但是这样的序列模块到目前为止不允许测量序列的、如对于按照本发明的方法的情况下那样简短的表达。因此对于以下的描述,讨论上面描述的将WX块作为一个单元考虑的序列模型。

    从序列模型出发,在下一步骤中作为有向图来表示测量序列。

    从由X块、入口点和出口点组成的组中形成有向图的节点。关于除了入口点和出口点还选择X块作为有向图的节点的决定是任意的。同样可以作为有向图的节点描述蜂动块。然而,在这种情况下对测量序列的形式描述是复杂的,因为不再象在有向图的节点之间的时间测量那么方便地产生序列时间、例如回波时间。

    然而要指出的是,将基于序列模型的形式描述表达为有向图仅仅是示例性的。从序列模型出发,任何其它的形式的描述(例如以伪代码或者以程序设计语言、例如C++)都是可能的。由此形式描述的选择仅仅是句法上的选择。可以从一种形式描述转换到另一种形式描述。在此意义上,测量序列作为有向图的表达只是对用户和/或序列设计员是方便的,因为可以非常简短地理解它。

    可以使用有向图来表示流程或者算法。在信息科学中例如已知其用来描述自动装置。在此背景下,测量序列作为有向图的表达表示了可在MR扫描器上执行的时间段的序列的另一个抽象。通过遍历(Durchlaufen)有向图,可以在全局的时间轴上按照时间上的顺序表示作为有向图所代表的测量序列。在此,作为有向图所代表的测量序列的具体时间上的流程还没有完全确定。首先仅确定相对的时间关系,例如在特定的X块和互相没有重叠地无间隙地紧接的块之间的序列时间。通常,有向图的流程提供了对于测量序列的流程的元时间表(Meta-Zeitplan)。通过求解定时问题来实现测量序列的元时间表到时间段的序列的具体转换。为此按照本发明可以使用解算器。

    入口点标出图形中的入口。出口点标记图形中的流程的结束。

    在有向图中经过有向图的连接线连接节点。这些连接线对应于过渡(Transition),如对于自动化理论领域中的专业人员公知的。

    有向图从入口点到其出口点的流程或者说遍历描述了测量序列。遍历意味着在考虑有向图中的路径控制的条件下有向图的连接线的流程,以及用于有向图的流程控制的特征。作为测量序列的表示的、选择的有向图的形态被证明是非常灵巧的表示形态,因为不再需要详尽地标记测量序列的所有块。

    对于按照本发明的、测量序列的以有向图的形式的形态的描述以及模型化来说,除了有向图的节点和过渡或者连接线,还需要连接线的特征,用于有向图的流程控制。使用连接线的这些特征,以便在作为有向图的表示中代表在测量序列中的其它特征和关系。

    用于有向图的流程控制的连接线的特征可以是:蜂动块、时间测量、暂停和/或路径控制。蜂动块用于核自旋系统的制备。暂停或暂停块是在其中不执行动作的测量序列中的一个时间片段,也就是说,MR扫描器主要等待。路径控制被理解为必须满足的请求,由此可以执行有向图的特定的片段。

    按照本发明的方法还包括通过由如下组成的组给出的节点之间的连接线:

    -从入口点经过路径控制到蜂动块和从那里到X块的过渡,

    -从X块经过路径控制到出口点的过渡,

    -从X块经过路径控制到蜂动块并且从那里到X块的过渡,

    -从X块经过路径控制和暂停到蜂动块并且从那里到X块的过渡,以及

    -从X块经过时间测量到X块的过渡。

    由此连接线描述了可能的过渡,也就是在有向图的单个节点之间的过渡。

    按照本发明发送型的X块可以代表激励脉冲、再聚焦脉冲、反转脉冲或者由激励脉冲和再聚焦脉冲的混合形式。激励脉冲是激励自旋系统的HF脉冲,英语也称为exitation pulse。再聚焦脉冲重新建立核自旋的相干性反转脉冲用于反转核磁化。此外,还有代表了激励脉冲和再聚焦脉冲的混合形式的发送型的X块。混合形式的发送脉冲与刺激的回波相关是特别令人感兴趣的。混合形式的发送脉冲用于将非横向的磁化重新翻转回横向的平面,使得其作为信号是可识别的。与此关联,参见Hennig,J.的文章“Echoes-How toGenerate,Recognize,Use or Avoid them in MR-Imaging Sequences”in Concepts inMagnetic Resonance 3(1991),125-143。

    按照本发明总是仅允许满足在有向图内部的一个路径控制。这样的有向图和由此的测量序列可以包含多个路径控制。利用总是只允许满足一个路径控制的规定,可以确保,总是仅允许在分支点上执行有向图的一个(eine und welche)连接线。换言之,路径控制确定有向图的流程。

    经过路径控制确保了仅运行有向图的一个连接线。在此,路径控制代表逻辑异或函数、也称为XOR的功能。

    时间测量始终是由单个X块的持续时间、序列时间和序列开始时间组成的组中的元素。X块的持续时间由各个X块的开始和结束给出。序列时间在两个X块的中心之间测量。这样的序列时间的例子是回波时间、重复时间或反转时间。序列时间表示测量序列的全局特征。在序列模型的范围内,为了描述测量序列,此外还需要序列开始时间,其描述如下的时刻,在该时刻达到测量序列内部的第一X块的中心。利用这三种时间测量可以确定有向图内的所有X块和所有蜂动块的时刻。这三种时间测量足以用来描述测量序列内的块的相对时间关系,如在MR成像中使用的那样。

    在按照本发明的方法的另一种实施方式中,确定对每个X块的指数,该指数是从遍历有向图中确定的。严格来说是对每个WX块的指数。

    此外,从有向图中确定对每个蜂动块和对每个X块的变量。此外,可以从有向图中对发送型和/或接收型的每个X块的每个中心确定零阶梯度磁矩。

    指数被理解为在所有的WX块上的连续指数,通过该指数可以在序列内部唯一地识别每个X块以及每个蜂动块。换言之,可以将指数理解为X块的和由此对应的蜂动块的参考或者非正式的“门牌号”。

    只要已知对每个X块的指数,则可以从有向图中对每个X块和每个蜂动块进行变量的对应。这就是说,可以描述在每个X块内部和在每个蜂动块内部的物理状态。在此易于理解的是,从指数和变量的对应中为什么能够对每个X块和/或每个蜂动块的每个中心直接确定零阶梯度磁矩。

    此处还成立,遍历有向图足以直接给出对于在有向图中的每个块的这些信息。

    在另一个实施方式中,该方法还包括用于从遍历有向图中确定序列公式的步骤。通过已经预先给出的、对于测量序列内部的X块和蜂动块的指数和变量,可以同样从遍历有向图中确定用于测量序列的序列公式。这意味着,通过有向图的指示,参数化地给出用于测量序列的所有序列公式。

    按照本方法的另一个实施方式,该方法此外还可以提供用于确定到发送型或接收型的每个X块的回波形成的路径的步骤。在此,从激励脉冲和/或反转脉冲和/或再聚焦脉冲和/或混合形式的序列中形成用于回波形成的路径。从遍历有向图中产生用于回波形成的路径。关于用于回波形成的路径参见已经引用的Hennig的出版物。可以从遍历有向图中灵活地确定用于回波形成的路径。通过回波描述可以表示用于回波形成的路径,如后面解释的那样。

    在另一个实施方式中可以从遍历有向图中对发送型和/或接收型的每个X块的每个中心确定一阶梯度磁矩。由此,可以在测量序列中施加流动补偿(Flusskompensierung)和/或流编码(Flusskodierung)。一阶梯度磁矩对专业人员来说是公知的并且对于信号的取决于速度的分量是特别重要的,通过该分量可以补偿通过流动的物质、例如脑脊液流和/或血流产生的信号分量,和/或在所获得的MR图像中完全有针对地对信号的那些分量编码,即显示。在该关联中,编码意味着在MR图像中显示信号分量。

    在另一个实施方式中按照本发明的方法包括对发送型和/或接收型的每个X块的每个中心确定高阶梯度磁矩。同样,可以从遍历有向图中确定高阶梯度磁矩。由此测量序列作为有向图的表达再次被证明是用来对测量序列的物理特征、例如梯度磁矩建模的非常有用的工具。

    在另一个实施方式中按照本发明的方法允许从遍历有向图中对发送型和/或接收型的每个X块确定扩散加权。扩散加权此处被理解为例如信号或者信号扩展的强烈的优先方向。这样的优先方向可以通过患者的解剖结构来预先给出。沿着动脉的方向的物质和信号的流远远高于横跨动脉壁的信号流。尽管如此,图像中大约横跨动脉壁的扩散加权在诊断上是非常有意义的,因为其给出关于脉管的状态的说明。这样的检查结果例如对于糖尿病患者是重要的。此外,扩散加权对于所谓的MR纤维跟踪研究也是有意义的。

    本发明还提供一种用于自动产生用于在磁共振扫描器上执行的测量序列的方法。由此还可以对测量序列的设计进一步自动化。该方法从测量序列的形式描述出发,通过该形式描述可以参数化地呈现除了待确定的参数的集合之外的测量序列并且可以作为有向图显示。

    通过形式描述,剩下参数的集合待确定。确切地说,要确定可能有多个解的大量的参数。此外从有向图中的块首先仅给出这些块互相之间的时间上的相对关系和由此通过这些块代表的时间段。也就是缺少对于每个块的具体定时值。

    用于自动产生的方法的任务恰恰是对未确定的参数的该集合赋予具体的、明确定义的参数值。这在按照本发明的、在考虑为执行测量序列要满足的边界条件的条件下自动产生测量序列的方法中实现。按照本发明通过解算器确定定时值。解算器典型地是找到数学问题的数值解的软件模块。对于解算器,例如其如何用来求解在MR成像中的定时问题,参见申请者的德国专利申请文件DE10213848A1和DE102006034397B3。在通过解算器求解时多个参数尚未知。这些多个参数包括时间上的设置、定时、测量序列以及子序列的种类和数量,如以下解释的。子序列以及测量序列的每个单个参数可以通过解算器来确定。这在该公开文件的范围内示例性对于定时值的确定来讨论。

    此外,该方法还包括自动地将测量序列的形式描述转换为可在磁共振扫描器上执行的一系列时间段。这就是说,通过解算器设置在测量序列内部的每个块的具体的值。因此在测量序列内部的所有块的所有参数具有具体的值。由此每个块完全地参数化并且表示描述时间段的所有信息。

    这样理解测量序列的形式描述的自动转换:通过计算机或者通过遵循转换程序,就是没有用户的交互也能转换形式描述。可以通过转换模块进行该转换。这意味着测量序列的所有特征是已知的。换言之,解算器确定首先是允许的并且其次满足边界条件的这些定时值。用既满足边界条件又是定时问题的允许解的值赋予待确定的参数的集合。这些解典型地是具有许多变量的问题。解算器的任务是找到允许的解。如果没有满足块的所有相对时间关系和同时满足边界条件的允许的解,则需要与用户交互。只有对于解算器不能找到这样的解的情况才进行与用户的交互。然而,通过按照本发明的方法大大减少了为了产生测量序列所必须的用户交互的次数。当用预先给出的值和限制不能找到允许的解的时候,在使用本发明的用于自动地转换的方法的条件下手动的输入才是需要的。测量序列的形式描述的自动转换的另一个显著优点例如是,明显降低在使得测量序列可以在磁共振扫描器上执行的程序设计语言中的代码的易出错性。

    按照本发明的方法此外还可以包括用于交叉地执行测量序列的步骤。测量序列包括多个不同的MR测量、例如同时被执行的多个层的拍摄。单个层的拍摄例如可以表达为单个模块。为了拍摄多个层,就需要单个模块的多个实例并且必须为了同时执行这些实例而这样交叉,使得可以无重叠地执行它们。测量序列内部的这样的模块被称为子序列。子序列是测量序列内部的WX块的合理的子集。由此测量序列由至少一个子序列组成。

    单独地考虑测量序列内部的子序列的可能性是有意义的。所考虑的测量序列可以被划分为多个更小的、更容易求解的问题。也就是以下当提到测量序列时,由此也可以指单个子序列。同样测量序列可以表示患者的完整的检查。

    在该公开文件内部有向图仅示出代表子序列的有向图。当然对于患者的完整的MR检查还可以给出通常由多个代表子序列的有向图综合而成的有向图。子序列包含不可分的超块测量序列内部的最小的不可分的超块是WX块。WX块不允许被中断,因为否则的话会干扰核自旋的相干性,并且不再产生所定义的HF信号。除了WX块还有更大的不可分超块,它们同样不允许被中断或者被划分。子序列内部的不可分的超块的特征是,它们在相应的有向图中经过暂停相连,其中,如果子序列不包括暂停,则子序列包括一个唯一的超块。

    按照本发明的用于交叉地执行测量序列的方法,首先包括提供多个测量序列。然后从多个测量序列中识别第一测量序列内部的至少一个子序列。识别的子序列包括暂停。然后从各个其它测量序列确定子序列。各个其它测量序列是除了所提供的测量序列中的第一测量序列之外的每个。为了交叉地执行测量序列,在各个第一测量序列的暂停期间无重叠地执行至少一个确定的子序列。换言之,也就是必须确保,在第一测量序列的暂停中插入的具有其不可分的超块的子序列始终位于第一测量序列的暂停中。在不可分的超块之间的暂停是这样的时间窗,在该时间窗期间完全可以执行其它的子序列。

    根据按照本发明的方法的另一个实施方式,规定边界条件,其中边界条件包括以下组中的至少一个元素:

    -对比度规定。其被理解为确定所包含的磁共振图像的对比度、例如T1对比度、T2对比度以及脂肪抑制的这样的规定。

    -图像分辨率规定。其被理解为从对于一层的期望的分辨率产生的这样的规定。例如,如果拍摄头部颅骨盖附近的多个层,则每层的相关面积越是靠近颅骨盖越小,直到其最后收紧为一个点。也就是,考虑这些例如从解剖结构得到的图像分辨率规定是完全有意义的。由此可以匹配所需的存储要求、如为了产生相应的分辨率所需的梯度强度。其它的规定例如是对于在图像中要记录的至少一层的位置规定。也就是,其确定在身体中的哪个位置拍摄该图像,这通常仅从诊断的设问中就可以看出的。

    -例如从对于梯度放大器的以及对于梯度的边沿陡度的允许的负载周期(Lastzyklen)中得出的硬件限制,因为不允许超过特定的边界值或者说太陡的边沿会导致功率放大器的过载。

    -测量时间的最小化是另一个典型的边界条件,因为期望在尽可能短的时间中获得患者的图像。这对于对跳动的心脏的检查或者所谓的呼吸屏住拍摄、即在其中患者憋气的这些拍摄特别是这样。由此对于图像拍摄的持续时间预先给出为此目的必须执行测量序列的完全清楚的最大值。除此之外对于测量时间的最小化当然还有经济的动机,如上面已经解释的。

    -患者安全性规定。其例如从由于太陡的梯度引起的末梢神经刺激的风险产生。这样的末梢神经刺激对于患者是不舒服的,因为其导致患者四肢的不自觉的运动。此外患者的不自觉的运动会大大恶化MR图像的拍摄,因为这样获得的图像就不清楚。此外由患者吸收的HF功率不允许超过特定的边界值,因为否则的话患者会遭受灼烧。对于特定于组织的吸收率的这样的边界值是预先给出的并且例如位于每千克体重4瓦特的范围中。

    要满足的几个边界条件可以是已经通过硬件预先给出的或者由硬件本身借助所谓的监视模块(看门狗)监视的那些。这些监视模块在测量序列的实际运行中将确保不超过边界值。如果在测量序列的运行中发生这样的监视条件的破坏,则中断整个测量序列。这首先对于患者是不舒服的并且此外还丢失宝贵的扫描时间,因为必须重新开始测量,可能还必须更换硬件等等。通过这些边界条件的监视和遵守,在将测量序列自动转换为时间表时确保可以尽可能避免通过监视模块不期望地中断运行着的测量模块。

    在本发明的另一个实施方式中,可以进行按照程序设计语言自动转换形式描述的步骤。该自动转换的步骤大大降低了在程序设计语言中测量序列的设计的易出错性。对于现代的测量序列大约需要106个必须赋予值、特别是允许的值的参数。随着发展趋势强烈要求设计员正确地设置所有这些值。

    在上述技术问题的另一个解决方案中本发明提供一种用于形式描述用于在磁共振扫描器上执行的测量序列的装置。

    在上述技术问题的另一个解决方案中本发明提供一种用于自动产生用于在MR扫描器上执行的测量序列的装置。

    该装置可以进一步扩展。

    此外在上述技术问题的另一个解决方案中本发明还提供一种计算机程序产品。

    按照上述技术问题的另一个解决方案,本发明提供一种用于自动产生用于在MR扫描器上执行的测量序列的系统。该系统包括磁共振扫描器、用户接口和用于形式描述在磁共振扫描器上执行的测量序列的装置。

    可选地,该系统还包括用于自动产生用于在磁共振扫描器上执行的测量序列的装置。

    在MR扫描器上可以执行测量序列。用户接口用于与MR扫描器的用户交互。为了开始测量序列、为了中断测量序列或者如果在预先给出的边界条件下不能找到用于定时问题的允许的值时为了反馈给用户,特别需要用户接口。

    由此可以在该系统中实现这两个装置。在此可以可选地将一个或两个装置构造为MR扫描器的集成的组成部分和/或构造为软件模块。

    该系统可以包括用于形式描述要在磁共振扫描器上执行的测量序列的装置。也就是完全可以,通过自动产生可执行的测量序列,在磁共振扫描器上和/或在按照本发明的系统上或者在与磁共振扫描器连接的控制单元上执行形式描述的方法的整个处理链。

    【附图说明】

    本发明的保护范围仅从所附的权利要求中确定。因此,本发明的以下详细的描述绝不应理解为限制性的,而是用于描述的目的。

    对于专业人员来说明显的是,从此处给出的描述中可以组合本发明的单个特征的组合和优点,而不偏离本发明的范围。在此意义上附图也不应理解为限制性的。

    图1是MR扫描器的框图。

    图2示出了作为时间段的序列的自旋回波序列。

    图3A示出了作为按照本发明的序列模型的基本单元的WX块。

    图3B示出了作为WX块的序列的序列描述。

    图3C示出了对于几个已知的测量序列的W块和X块的顺序。

    图4示出了用于对来自有向图的测量序列形成回波的路径。

    图5A示出了在WX块的流中嵌入的子序列。

    图5B从在图5A中示出的WX块的序列中识别子序列和暂停。

    图6示出了代表了梯度回波序列的有向图。

    图7A至7I示出了用于从相应的有向图中接收梯度回波的单个步骤。

    图8示出了在使用本发明的条件下用于建立和执行测量序列的流程。

    【具体实施方式】

    图1示出了具有其主要组件的MR扫描器4的原理结构。为了借助MR成像来检查身体,将不同的、在其时间上和空间上的特征精确互相调谐的、时间可变的磁场入射到身体上并且这导致对入射的射频能量或者HF能量的共振的响应。

    在高频技术屏蔽的测量室3中设置了磁铁450,例如通常是通过液体的冷却剂来冷却的超导磁铁。磁铁450具有圆柱形的开口,产生静态的主磁场47,该主磁场场强通常在0.1特斯拉到3特斯拉或者更高的范围中。主磁场47是高均匀性的,典型地例如对直径为15cm的容积在几个ppm的范围中。待检查的身体或身体部位(图1中未示出)被置于患者卧榻49上并且被定位在主磁场47的均匀区域中。

    在通过HF激励激励的情况下,产生自旋系统的共振的响应。可以方便地实现通过所谓的HF脉冲的HF激励。这些HF脉冲可以用于激励核自旋系统和/或用于再聚焦核自旋系统,如已经提到的那样。

    通过经由在图1中作为身体线圈413示出的高频天线入射的磁HF脉冲进行在人体中的核自旋的、即通常人体中的质子的激励。当然,不同于质子的其它核(例如锂或硫)的MR检查也是可以的。

    作为对使用身体线圈413的替换,还可以使用特殊的、与解剖结构匹配的激励线圈或者高频天线,例如作为头部线圈。由脉冲产生单元415产生为了激励所需的HF激励脉冲,该脉冲产生单元由脉冲频率控制单元417控制。在通过高频放大器放大之后,将HF激励脉冲传输到高频天线。

    在图1中示出的HF系统仅仅是示意性地表示。在MR扫描器中可以采用多个脉冲产生单元415、多个高频放大器419和多个高频天线或附加的模块。特别是可以使用整组天线,由此一方面可以达到信噪比的改善和/或通过探测器(Probe)的特征来控制噪声效应。在该关联中,只简单提到作为可能的天线的相控阵,如专业人员公知的那样。

    MR扫描器4具有梯度线圈421,利用该梯度线圈在测量时入射用于选择性的层激励和用于测量信号的位置编码的梯度磁场。梯度线圈421由梯度线圈控制单元423控制,该梯度线圈控制单元423象脉冲产生单元415一样与脉冲频率控制单元417相连。

    从激励的核自旋发出的信号、也就是对共振的激励的响应,由接收线圈、例如身体线圈413和/或由局部线圈425接收,通过对应的高频放大器427放大并且由接收单元429进一步处理和数字化。如对于发送线圈那样,对于用来接收的局部线圈425下面情况也成立:使用小的、与待检查的身体区域匹配的线圈、例如表面线圈可能有利于改善信噪比。

    因为根据可逆性原理,好的发送器也表示好的接收器,所以一个线圈既可以作为发送线圈也可以作为接收线圈工作。然而在使用线圈作为发送和接收线圈的情况下,需要可靠地提供正确的信号传输。这通常通过发送接收转接器439进行。作为发送接收转接器例如考虑环形器。

    图像处理单元431从测量数据中产生MR图像,该MR图像通过监视器205显示给操作者或者存储在存储单元435中。计算单元437和/或控制单元45控制MR扫描器4的单个组件。在此,如下地构造控制单元45,使得利用该控制单元可以执行按照本发明的方法。

    通过频率空间、也称为k空间的系统的扫描产生MR图像。通过梯度脉冲和激励脉冲的合适的序列进行K空间的该扫描。测量序列100给出应该如何遍历k空间的一种方法。也就是其确定k空间轨迹。对于在临床中使用磁共振来说,值得期待的是,找到尽可能有效的k空间轨迹,使得因此可以快速和有效地产生诊断的图像。目前有大量使用麻烦的和复杂的策略来扫描k空间的测量序列100。

    除了测量序列100的时间上的效率,此外对于产生的图像的对比度是重要的。根据所选择的测量序列100的不同,可以激励快或者慢地响应的、即弛豫的组织部位。这对MR图像中设置的对比度有关键的影响。也就是同样对于各个选择的协议、即选择的临床检查要匹配测量序列100,从而对于医生可以实现最大的信息获取。例如对于医生想要进行的癌状组织改变的分析来说也是这样。对于MR扫描器4的测量序列100由从核自旋的物理特征和各个组织产生的时间段的序列组成。

    图2示出了所谓的自旋回波序列的简单的测量序列100的例子。在图2中示出了对于自旋回波序列的时间顺序。这些图上下对应地示出HF循环中的动作的时间顺序。此外示出其中的三个动作,一般地来说互相垂直的用于层选择(英语slice select)的梯度系统GS,同样如作为所谓的相位编码(英语phaseencode)的GP以及此外在读出响应信号期间接入的所谓的读出梯度(英语readout)。对于自旋回波序列首先用90°脉冲激励自旋系统,由此在信号分支(Signalast)中产生回波。通过180°脉冲,最后在回波时间TE之后,如图1中所示,产生包含图像的行的信息的回波。如所表示的,多次执行相位编码梯度GP并且从每次都改变且其振幅。层选择梯度经过所有这些运行保持不变,对于读出梯度也是一样。

    在图2中从左到右示出了单个时间段类型。在激励侧入射90°脉冲期间,自旋回波序列首先随着发送型的时间段(在图中I)开始,紧接着是用于自旋系统的制备的蜂动型的时间段(在图中II)。然后是具有180°脉冲的发送型的新的时间段(在图中III),紧接着是另一个蜂动块(在图中IV)并且最后是接收型的时间段,在该时间段接收作为HF信号的回波(在图中V)。具有180°脉冲的发送型ST的时间段用于核自旋系统的再聚焦。在接收型ET的时间段之后序列重复。对于自旋回波序列来说,直到TE的这样的遍历提供对于在k空间中的MR图像的一行。典型地,例如对于一幅图像记录128行。通过合适的傅里叶变换可以在位置空间中显示图像并且获得MR图像。

    按照本发明由不重叠的时间段构建测量序列100,在这些时间段之间没有暂停。目前序列设计是基于事件的,其中将梯度脉冲和HF脉冲作为事件块编组。典型地将图2中的测量序列作为事件块处理并且传递到扫描器4。该处理的缺陷是,系统的实时特性会有所妥协。此外事件组的数学建模是非常困难的。

    通过具有如下两个不同类型的块来代表从中产生测量序列100的时间段的流被证明是合适的:

    -蜂动块W,在其中只有梯度是激活的,以及

    -非蜂动块,在其中结合梯度发送HF脉冲和/或接收数据。

    非蜂动块也就是发送型ST的和/或接收型ET的X块。以下为简单起见将这些块称为X块X。在X块的持续期间,梯度和发送和/或接收活动必须非常精确地合作,以便获得正确的结果。对于许多测量序列,简单地实现精确的合作,因为在发送和/或接收间隔期间梯度保持恒定。诸如VERSE、2D激励、螺旋轨迹等等的复杂的测量序列要求精确地接通梯度以便产生与HF脉冲或者数据记录的期望的形式匹配的k空间轨迹。因此,在实施X块X期间必须定义精确的梯度形式。

    从序列设计员的角度来说重要的是,核自旋在X块X的开始时具有定义的相位。此外重要的是,当X块开始,以便能够在执行X块期间执行所要求的接通(Schalten)时,梯度具有特定的值。

    蜂动块W的任务是将特定相位施加到核自旋以及在其末端达到特定的梯度值。此处要强调的是,从序列设计员的角度来说,蜂动块W在蜂动块W的开始和结束如何达到已知的梯度值是不重要的。也就是说,精确的梯度形式是不重要的。当提到梯度形式是重要的时,通常是指,仅仅是想以特定的方式控制核自旋的相位,并且相信这将通过梯度形式实现。提出的测量序列的形式描述包含在梯度形式的选择中的自由度,其中对于基于序列模型的、测量序列100的形式描述的模型化来说,仅仅在X块内部的梯度的开始和结束值是重要的。

    由此非常合适的是,将每个X块X与在它之前发生的正好一个蜂动块W关联。这基于,至少需要一个蜂动块W,用以操纵核自旋的相位并且在两个X块之间切换梯度振幅。并不清楚,为什么在两个X块之间需要多于一个蜂动块W。相反,在两个X块X之间使用多于一个蜂动块W对于在两个X块之间的梯度特性的最佳计算看来是不必要的限制。

    图3A示例性示出作为蜂动块W的顺序的WX块WX的形式,该蜂动块W直接地并且没有暂停地紧接着X块X。这样的单元在本文的以下部分也称为WX块WX。在以下仅简短讨论,为何蜂动块W不是在时间上设置在X块之后,以及为何有必要将蜂动块W和X块X综合为一个单元WX块WX:

    如果要将蜂动块W与X块X关联,还必须能够确定,蜂动块W是发生在X块之前还是反过来。

    -为了执行X块,必要的是对自旋施加相位;更确定地说以预先给出的方式并且此外还给出对于梯度的确定的开始振幅。这在执行X块之后是不可能的。

    -为了执行蜂动块W,必须已知蜂动块W的特征。同样必须已知蜂动块的梯度的开始和结束振幅。这对于序列设计员和对于要执行测量序列100的软件来说都是这样。在两种情况下难以分析测量序列100的未来的时间段以及块,以便找出,对于梯度蜂动块W的结束振幅可能是什么。如果此外想将测量序列100划分为子序列101,则在子序列101内部完全不知道,在子序列外部发生了什么或者在执行子序列之后在测量序列100的全局的时间轴t上。与此相反,对于在MR扫描器4上和/或与MR扫描器4相连的控制单元45上执行测量序列100的软件来说,简单的是,考虑过去的块并且将最近执行的X块X的结束振幅确定为下一个蜂动块W的开始振幅。通过关联的X块X的开始振幅给出蜂动块W的结束振幅。

    -对于X块本身,在其之后发生了什么是不重要的,只要X块结束了,则所有的都完成了。X块X不需要知道将来要发生什么。

    -在X块X之后操纵梯度磁矩的原因是,开始以下过程,如在将来影响X块X的梯度磁矩的重绕(Rewinding)、或者扰相(Spoiling)。重绕和扰相对专业人员来说是公知的。通过如下可以简单地实现重绕和扰相:存储所需要的磁矩,并且保证通过各个下一个蜂动块W结束其。

    总之,简单和合适的是,以蜂动块W(紧接着X块X)的单元执行测量序列100,而该过程不会限制设计员的自由度。也就是说,在使用对于序列模型来说是具有特征性的该方案的条件下可以保持测量序列100的设计。因此,整个测量序列100被表示为X块X的及其关联的蜂动块W的流。选择蜂动块W与X块X关联的单元,以便给出为描述测量序列100所需的最少信息,被证明是合适的。

    以下使用X块X的中心的概念。对于发送型ST的X块,通过使用的HF脉冲的不对称典型地定义该中心。对于接收型ET的X块X,通过接收型ET的X块内部的回波的位置典型地定义该中心。X块X的中心是在确定序列时间和用于计算在测量序列100内部的梯度磁矩的重要的时刻。

    每个X块X只具有一个中心就足够。当然每个X块X多个中心的表达也是可以的。

    在按照本发明的序列模型中有三个不同种类的时间测量。这些种类的时间测量是:

    -X块X的持续时间,

    -在两个X块X的中心之间测量的序列时间。对于这些时间的例子是重复时间TR、回波时间TE、反转时间TI以及回波间隔。

    -此外,还有作为在测量序列100内部的各个第一块X的中心的时刻的序列开始时间T.30。

    在图3B中示出了这些单个时间。序列开始时间T.30是通过第一X块的中心标记的X,回波时间TE从第一X块X的中心到达第二X块X的中心。重复时间TR表征另一个序列时间,在该序列时间测量序列100重复。为了用这三种时间测量在全局时间轴t上完全地描述测量序列100的定时,在每个X块X上的序列时间必须在测量序列100内部结束。对于所有已知的测量序列100确实是这样。除了重复时间TR、(自旋)回波时间TE和反转时间TI,此外还有对于EPI(回波平面成像)和快速自旋回波序列的回波间隔以及对于如在目前通常的MR扫描器4中使用的二项式(binominale)脉冲的HF间隔。由此不是必须提供给序列设计员的新的信息,大多数时候表示的必要形式会改变。相反,对于测量序列100内部的第一X块X是例外。对于第一X块X,必须已知以序列开始时间T.30的形式的其出现的时间。对于第一X块X的中心给出该时间。只要已知对于在测量序列100内部的所有X块X的时间测量和/或时刻,就可以计算在测量序列100内部的所有蜂动块W的持续时间。该计算也可以在运行时刻在MR扫描器4上和/或与MR扫描器4相连的控制单元45执行测量序列100期间完成。

    要指出的是,对在X块之间的时间测量的选择是任意的。同样,在单个蜂动块W之间的其时间测量也是可能的。然而,就不能再那么简单地灵巧转换到序列时间。

    随着在序列模型的范围内将测量序列100表达为蜂动块W和X块X的序列(其中它们被综合为WX块),可以为每个回波给出其产生路径。图3C示出对于已知的序列的蜂动块W和X块X的顺序。在最上面的行中示出了对于梯度回波序列GRE的顺序,在它下面是对于回波平面成像序列EPI、对于如已经在图2中示出的自旋回波序列SE、由自旋回波和EPI测量序列的组合SE-EPI以及对于快速自旋回波序列TSE的表达。对于发送型ST和/或接收型ET的每个X块X给出,是否产生回波并且发送型ST和/或接收型ET的每个X块X的哪个序列对于回波的形成具有贡献。在此,在相应的标签(Label)上的E代表激励(英语excitation)而R代表再聚焦。在此再次指出,也有由激励脉冲和再聚焦脉冲组成的混合形式。在该关联中,刺激的回波也是有意义的。

    通过刺激的回波,每个接收型ET的X块X可以有多个回波描述(Echospezifikation)。为此,需要对于每个回波描述建立梯度磁矩公式。基于由蜂动块W和X块X综合为一个作为WX块WX的单元,序列模型允许对于每个蜂动块W及其关联的X块X建立序列公式。

    这些WX块WX的每个可以用指数i对应。

    蜂动块W的持续时间是Tw,i。

    X块X的在其中心之前的持续时间是Txs,i。

    X块X的在其中心之后的持续时间是Txe,i。

    在X块X的开始的梯度振幅是Gs,i。

    在X块X的结束的梯度振幅是Ge,i。

    蜂动块W的h阶梯度磁矩是Mh,w,i。

    X块X在其中心之前的第h阶磁矩是Mh,xs,i。

    X块X在其中心之后的第h阶磁矩是Mh,xe,i。

    每个不是纯发送型ST的X块X对应于一个回波描述ξ,其作为向量表示用于回波形成的路径。

    (不一定是纯)接收型ET的X块X的X块X,具有零阶梯度磁矩M0,Echo,i,其必须被转换到其中心。

    在给出梯度磁矩公式之后,可以为是接收型ET的每个X块X也给出回波形成的路径。也就是必须产生指数IR的集合,其包含所有对于其存在回波描述ξ的那些WX块WX的指数i。对于来自存在回波描述的指数IR的集合中的特定指数k,必须反向分析WX块WX的流,直到每个包含回波描述的HF激励脉冲的WX块。对于用于激励的该WX块WX的指数是kex,其中成立:kex<k,k是回波的指数。此外产生向量s,对于其成立:Ns=k-kex,其包含元素si,i∈{0,...,Ns-1}并且给出,对于在梯度磁矩公式内部计算磁矩要使用哪个系数。

    在图4的图中对于快速梯度自旋回波序列TGSE示例性示出对于回波描述的这样的分析的图形表示。从用于回波形成(也就是回波描述)的该路径,可以确定用于计算梯度磁矩所需的信息。实际上可以自动地进行该确定。以完全相应的方式同样可以考虑刺激的回波。

    通过变量的对应,如在上面列表中提及的那样,可以给出对于每个X块X的磁矩公式和序列公式。通过如下给出在具有指数h的X块X的中心的零阶梯度磁矩:

    M0,k=Σi=0Nssi(M0,xe,kex+i+M0,w,kex+i+1+M0,xs,kex+i+1)]]>

    该磁矩满足以下公式:

    M0,k=M0Echo,k

    在具有指数k的X块X的中心的一阶磁矩是M1,k。考虑到HF脉冲的中心的距离δ可以按照以下公式计算该一阶梯度磁矩:

    M1,k=Σi=0Nssim1,i]]>

    其中

    m1,i=M1,xe,kex+i+M1,w,kex+i+1+M1,xs,kex+i+1]]>

    +M0,xe,kex+i(Ts,i)]]>

    +M0,w,kex+i+1(Ts,i+Txe,kex+i)]]>

    +M0,xs,kex+i+1(Ts,i+Txe,kex+i+Tw,kex+i+1)]]>

    以及

    Ts,i=δ+Σj<i(Txe,kex+j+Tw,kex+i+1+Txs,kex+j+1)]]>

    只要期望对于具有指数h的X块X的速度编码Vk,则已知在期望的速度方向上的单位向量ev就足够。一旦给出单位向量,则可以直接通过一阶梯度磁矩M1k给出X块的速度编码k,因为成立:

    V∝ev·M1,k

    这样的速度编码对于以速度Vk运动的信号分量的检查是特别有意义的。可以隔离或者抑制这些信号分量。要说明的是,无需知道单个X块的细节就可以进行该扩散加权。更确切地说,可以从关于所有WX块WX的充分的“簿记(Buchführung)”实现这些信息。

    对于更高阶的梯度磁矩以及扩散加权形成相应的公式。必须将X块X与扩散值对应。

    按照完全类似的方式,可以在测量序列100内部给出对于每个序列时间测量的序列公式。只要时间测量例如是序列时间,其测量以具有指数kb的X块X开始并且在具有指数ke>kb的另一个X块X结束,则对于该序列时间成立:

    T=Txe,kb-Txe,ke+Σi=kb+1ke(Tw,i+Txs,i+Txe,i)]]>

    目前通过在循环结构中建立所谓的“序列核”来描述测量序列100,在该循环结构中重复执行该序列核。序列核实现基本的扫描技术,如梯度回波GE、快速自旋回波TSE、true fisp TRUFI、平面回波成像EPI,等等。循环结构对于所有原始数据线(Rohdatenlinien)以明确规定的方式重复调用该序列核,以便从它们中产生所有要通过测量序列100测量的MR图像。所谓的协议是测量序列100以及对于测量序列100的特殊参数的集合,例如视野(英语field of view,FOV)、分辨率、回波时间,等等。检查通常由按顺序执行的多个这样的协议组成。测量序列100至少由一个单个X块X和与其关联的蜂动块W组成,如图3A中所示。同样,一个序列可以表示患者的完整的检查。由此测量序列100在这两个极端之间变动。为了识别测量序列100的结构,建议将WX块WX的整个流划分为模块。该方案被证明是非常有效率的。

    典型地,WX块WX的整个流由许多不同的MR测量组成,例如同时记录的多个层的拍摄。例如可以独立地描述单个层的拍摄并且视为独立的模块。为了检查、即为了拍摄多个层,需要该模块的交叉执行的多个实例,使得不同模块的定时不会重叠。这样的模块被称为“WX块WX的合适子集”或者子序列101。

    在子序列101内部给出这样的范围,对于该范围序列设计员明确允许,其它的子序列101在MR扫描器4的硬件上执行一些,而不干扰测量。其原因是在多层测量中的层的交叉和对单层的反转测量(其目前允许即使是在反转脉冲和激励脉冲之间也可以执行一些)。在子序列101内部的这样的范围称为暂停P。在将X块X及其关联的蜂动块W作为一个单元执行之后,这样的暂停P只能在X块X之后和在蜂动块W之前出现。暂停P将子序列101划分为不允许中断的不可划分的超块102。

    子序列101包括开始时间T.30,其给出子序列101的第一X块X在全局时间轴t的何处出现。

    图5A示出了嵌入于WX块WX的流中的子序列101。同样示出的是序列时间,子序列101的单个X块X在这些序列时间上互相连接。

    图5B示出了如图5A中的同一个子序列,但是没有其余的WX块WX。而是示出了子序列101的经过暂停P相连的不可分的超块102。

    颇有意思的是,为了正确地执行多个子序列101,如下两个条件就足够了:每个子序列101具有全局开始时间T.30并且子序列101的超块102经过对于每个子序列101的序列时间测量相连。这意味着,多个子序列101的执行无需其它循环结构工作并且无需计算必要的填充时间(Füllzeit)就可以起作用。

    子序列101的概念允许在使用任意的子序列101的实例的条件下构建测量序列100。子序列101的每个实例具有一个模式,也就是在全局的时间轴t上的特征。为了实现短的测量时间或者为了达到特殊的物理效果、例如脂肪信号的局域的饱和,必须将子序列101的实例在时间轴t上交叉。在时间轴t上的子序列101的指纹(Fingerabdruck)通过在子序列101和每个超块102的持续时间内部的超块102的数量给出。因此,子序列101的交叉取决于在所有子序列101的在全局时间轴t上的指纹以及特征。

    由于长期硬件限制和患者限制、例如RF功率放大器的切换周期以及特定于组织的吸收率(英语SAR),每个蜂动块W和/或X块X的长度取决于在全局时间轴t上所有在蜂动块W之前所经过的。换言之,长期限制(Langzeit-limitierungen)描述了在测量序列100的整个过程上必须保持的这样的限制。

    子序列101的时间轴特征取决于子序列101的交叉。也就是为了正确地描述和计算序列定时,必要的是,共同地考虑子序列101的定时问题和子序列交叉的问题。可以给出完整的问题描述,至少只要已知子序列101的数量,还有对于每个子序列101的WX块WX和超块102的数量。如果考虑目前可用的计算能力,该问题偏偏不是一般可求解的。使该问题的求解变得更难的是如下事实:对于单个WX块WX的确定的定时值T.i必须与磁共振扫描器的时间间隔(Zeitraster)匹配。如果将该要求表达为用于求解该问题的边界条件,则定时问题的数值求解甚至是几乎不可能的。

    在该关联中,参见申请人的申请DE102008044827.3,该申请提出了在测量序列100的内部的时间段与磁共振扫描器4的时间间隔匹配的解决方案。迄今为止建立了这样的序列模型,该序列模型描述了测量序列100的众多方面,例如定时定义(也就是在测量序列100内部的相关的时间过程的定义),回波描述,零阶、一阶以及更高阶梯度磁矩。该序列模型允许从子序列101或者说子序列模块中记录MR测量,其作为特定于应用的程序设计语言的基础能够适用于子序列101和由此也适用于测量序列100。

    本发明提出了用于描述和产生子序列模块的有效方法。这通过形式化的描述实现。此外可以简单和简短的记录的、形式化的描述,最后用于从形式化的描述中尽可能完整地参数化整个测量序列和由此的整个测量序列100。由此,实现了形式和灵活性的最佳合成。先前的扫描器具有用于描述测量序列100的形式,但是对于序列设计员仅提供非常小的灵活性。然后是用于描述的方案提供给序列设计员在设计中的大的灵活性。然而,该灵活性以高的程序设计开销为代价。

    还可以在自动装置或状态机(Zustandsmaschine)的意义上理解对有向图G的测量序列100的形式描述。描述的序列模型允许序列设计员书写子序列101的说明。该子序列101被用来产生软件库,其执行子序列101并且利用序列数据、即序列描述执行独立于序列的插件程序。在独立于序列的插件程序的执行中例如可以考虑C++类,当被赋予值时,其描述测量序列100,使得后者可以在MR扫描器4上和/或在与MR扫描器4相连的控制单元45上被执行。该插件程序的执行提供了用于在不同的硬件和软件平台上执行序列的功能,用于描述测量序列100。此外,形式描述用作众多解算器的输入值。每个功能扩展都可以作为另一个执行插件程序来表达和使用,而不改变序列描述。

    在图5B中示出了梯度回波GRE型的测量序列100。由此,测量序列的形式化的描述的目的是,找到有效的方式来描述所有的WX块WX,而不必显式说明每个WX块。此外还要参数化地给出子序列101的描述。

    在对基于序列模型的测量序列的按照本发明的形式描述中,梯度回波型的GRE子序列可以被作为有向图G显示,如在图6中所示。对于实际的测量,如临床使用的那样,例如对于3D试验需要65536行原始数据,其借助单独的WX块WX在全局时间轴t上的表示是不合理地长的。相反,参数化的图形表示是按照与记录的k空间行完全相同多的有向图G的形式。

    以下,在使用梯度回波序列GRE作为由一个唯一的子序列101组成的测量序列100的可能的例子的条件下,解释该有向图G和与之相关的程序设计语言以及数据模型。可以完全和自动地将有向图G的形式描述转换为机器可读的形式,如后面要示出的那样。

    用于测量序列100和由此用于子序列101的有向图G再现多个WX块WX之间的相对关系,例如时间上的方式,并且可以完全地参数化,也就是赋予具体的值。序列模型的基本原理是如下事实,即,其基于由蜂动块W、X块X、暂停P组成的组中的块。子序列102的有向图G包括节点、连接线Ka和用于有向图G的流程控制的连接线的特征。节点包括由X块X、入口点I和出口点O组成的组。入口点I和出口点O以一定的方式占据特殊地位,因为其将有向图G的开始标记为入口点I并且将有向图G的末端标记为出口点O。因此,在图6中的有向图的选择的图形表示中,将入口点I表示为一个向下的三角形,而将出口点O表示为向上的三角形。只要一个有向图G结束,则可以跳到子序列102或者测量序列100的另一个有向图G。有向图的剩下的节点、即不是入口点I和/或出口点O的节点,通过X块X给出。在图6中以及在下面通过椭圆表示它们。有向图的节点通过连接线Ka连接。此外,连接线Ka具有用于有向图的流程控制的特征。连接线Ka同样地表示过渡,如从自动装置的状态模型或者由图论中所公知的那样。用于流程控制的连接线Ka的特征形成测量序列100的独特的特征。用于流程控制的连接线Ka的特征通过由如下组成的组给出:蜂动块W、时间测量、暂停B和路径控制P。对于要参数化测量序列100的有向图G,仅允许完全特定的过渡。这些允许的过渡是:

    从入口点I经过路径控制P到X块X的过渡。还有从X块X经过路径控制P到出口点O的过渡。此外,还允许从X块X经过路径控制P到蜂动块W和从那里到X块X的过渡。还有从X块X经过路径控制P和暂停B到蜂动块W和从那里到X块X的过渡,以及最后从X块X经过时间测量到X块X的过渡。

    有向图G的连接线Ka通过线给出。在有向图G中借助圆形表示时间测量,在该圆形中给出各个待测量的序列时间、例如回波时间TE或重复时间TR。

    路径控制P被理解为必须满足的请求,由此可以进入有向图G的连接线Ka。

    属于用于流程控制的连接线Ka的特征有蜂动块W,其在有向图中如在图6中那样被表示为矩形。此外,将有向图G的用于流程控制的连接线Ka的时间测量特征在有向图中表示为圆。

    测量序列100的执行的原理是WX块的执行、路径控制P的使用,以便发现,哪个WX块WX作为下一个要执行的,以及重复该过程直到达到测量序列100的出口点O。

    使用有向图G内部的序列时间,例如图6中的回波时间TE或重复时间TR,以便在运行时间计算蜂动块的长度。有向图G的所有元素、也就是节点、连接线Ka、用于流程控制的连接线Ka的特征,代表了测量序列100以及子序列101的完全特定的功能。

    蜂动块W和WX块WX代表了在测量序列100内部的用于所有蜂动块W和X块X的控制结构,该测量序列可以由有向图中作为具体的蜂动块W以及X块X产生。换言之,蜂动块W和X块X、如其在有向图G中表示的那样,确定两种类型的块互相之间的相对关系,而无需确定其具体的持续时间。为了从在有向图G中代表的蜂动块W和X块X中产生可以在磁共振扫描器4上执行的时间段,需要确定其持续时间。因此,为每个X块X设置了具有时间指数函数(Zeitindexfunktion)的节点。时间指数函数允许综合测量序列100内部的X块X的编组。

    在有向图G的“展直(Abrollen)”中,对于有向图G的X块X的每个所使用的实例,分别形成一个时间变量Txs,i和Txe,i。使用时间指数函数,以便确定这些时间变量是否以及如何互相区别。例如,由此可以确定,对应于X块X的所有的时间变量应该具有相同的值。作为替换,例如还可以允许,对应于X块X的所有的时间变量具有不同的值。此外,例如还可以确定,虽然在快速自旋回波序列内部的再聚焦脉冲的持续时间随着回波号改变,但是不随着回波链号改变。由此(可能结合对于解算程序2000的边沿条件2500)以最简单的方式实现目前只能用高的设计开销转换的测量序列100。这样的测量序列例如是VET测量序列(VET:英语“variable encoding time,可变编码时间”)或者具有可变的读出带宽的测量序列100。

    在图6中示出的梯度回波序列GRE的例子包含用于激励的发送型ST的X块X(用“Excite”表示)和接收型ET的X块X(在图中用“GradEcho”表示)。可以经过蜂动块W(在图中的“Excite 0”)并且具体说是从序列入口点I到达节点“Excite”,以及从梯度回波X块“GradEcho”经过用于第n个回波激励的蜂动块W(在图中的“ToExciteN”)到达节点“Excite”。与之相反,只能从激励脉冲“Excite”经过用于梯度回波的蜂动块“ToGradEcho”到达用于产生回波的X块“GradEcho”。

    如已经提到的,在X块X之间定义序列时间的测量。在此,序列时间的名称是描述的部分。这样的名称例如可以是回波时间TE、重复时间TR或者反转时间TI。必须存在足够的序列时间,以便能够确定蜂动块W的长度。序列时间的至少一个测量必须结束于每个X块;在子序列101内部的第一X块X作为例外,通过序列开始时间T.30定义其全局时间t。此外,每个序列时间测量与从有向图G的图形表示中不能看出的三个功能相关联。它们首先是序列时间测量的条件,该条件说明是否在全局时间轴t上在特定的X块X开始序列时间的测量。另一个用于测量序列时间的条件说明是否在全局时间轴t上在特定的X块X停止序列时间的测量。最后是时间指数函数,其允许序列设计员为给定的序列时间分配一个指数。对于在图6中示出的用于梯度回波子序列GRE的例子,作为序列时间有回波时间TE和重复时间TR。始终从激励脉冲“Excite”到梯度回波“GradEcho”测量回波时间TE。而从一个激励脉冲“Excite”到下一个激励脉冲测量TR。对于第一激励脉冲“Excite”不允许停止对重复时间TR的测量。此外,对于最后的激励脉冲“Excite”不允许开始对重复时间TR的测量。

    入口点I简单地表示入口,也就是,子序列102以及由此测量序列100的开始。与此相反,出口点O给出子序列101以及测量序列100的结束。利用可选的暂停B,序列设计员可以清楚地允许与其它子序列101交叉。在图6的例子中暂停B位于每个激励脉冲“Excite”之前,第一激励脉冲“Excite”例外。对于true-fisp测量序列TRUFI,如专业人员公知的那样,不存在这样的暂停B,因为由此会干扰所需的准静止的状态(也称为稳定状态)。因此,对于TRUFI测量序列缺少暂停B。

    路径控制P在有向图G中起非常重要的作用。路径控制P定义了这样的顺序,按照该顺序执行子序列101内部的WX块WX。每个X块X具有至少一个随后者。在执行了一个WX块WX之后,以任意的顺序询问所有可能的随后者的路径控制P,可能的随后者中的哪个是实际的随后者。只允许一个被询问的路径控制P用“是”回答该问题。在路径控制P内部检查和改变子序列指数。尽管所有其它功能是局部的,在子序列101内部的流程控制要求对于整个子序列101都适用的全局的知识。由此,一般来说子序列101内部的所有路径控制P都必须合作,以便确保子序列101内部的WX块WX的正确的顺序。因此,表达路径控制P的组对于序列设计员来说是最困难的任务。

    要指出的是,测量序列100作为有向图G的表示可以容易地表示交叉的循环结构。与交叉的循环结构的经典的表达相反,借助于路径控制P的作为有向图G的表达更有力。借助交叉的循环结构,在测量序列100的该形式描述的范围内可以不表达每个控制结构,如作为有向图G表示的那样。对于在图6中示出的例子,例如始终待满足的路径控制(在图中用“Always”表示)是这样的路径控制,其确保在一个激励脉冲“Excite”之后始终记录一个梯度回波“GradEcho”。梯度回波类型的序列GRE的所示的例子记录另一个梯度回波“GradEcho”,只要还没有记录所有的梯度回波“GradEcho”。只要记录了最后的梯度回波“GradEcho”,则子序列结束于用于结束的路径控制P(在有向图G中用“Finished”表示)。

    此外,可以在子序列102或者测量序列100上执行重排序功能()。在有向图G的图形显示中没有示出重排序的该可能的功能。重排序功能的任务是从预先给出的数量的子序列指数计算子序列指数。按照每个蜂动块W之前的任意的顺序执行该重排序功能。为了避免不必要的复杂性,有意义的是,确保重排序功能的输出的指数不是那些只能通过路径控制P修改的指数。对于在图6中示出的梯度回波类型的序列GRE的例子,从梯度回波的指数中计算k空间行和分区指数(Partitionsindex)。对于在梯度回波序列GRE内部的梯度回波(例如对于该梯度回波序列在一个运行中产生五个梯度回波,也就是回波链为五个回波长),必须确保,对于每个该回波要记录哪组k空间行。然后从回波的号中确定,要对哪个k空间行编码。专业人员对这种重排序充分公知。其同样公知的是,要如何进行边沿等的可能的强调(Akzentuierung),该边沿是直接从单个k空间行的选择的分布对不同的回波严生的。

    为了显示有向图G的单个元素的合作,现在逐步地讨论对于梯度回波类型的序列GRE的k空间行的记录,如在图6中作为有向图G所示的那样。在此,通过各个元素的加粗表示标出在有向图G中的当前位置。同样在以下图中各个位置位于全局时间轴t上。

    图7A示出在入口点I上进入有向图G中。在该步骤中,首先在全局时间轴t上对子序列101确定子序列开始时间T.30。

    图7B是在有向图G中的下一步骤,也就是在始终待满足的路径控制“Always”之后到达蜂动块“ToExcite0”。该蜂动块“ToExcite0”从第一激励脉冲“Excite”出发。

    在图7C中到达第一激励脉冲“Excite”并且对于第一k空间行进行自旋系统的激励。

    图7D示出,随着第一激励脉冲“Excite”的到达,开始回波时间TE的序列时间测量。这从“Excite”块出发并且在图的下面部分中的有向图G中加粗表示。

    图7E示出,此外随着激励块“Excite”的到达,开始序列时间的、即重复时间TR的另一个测量。由此开始从激励块“Excite”出发的所有时间测量。

    在图7F中始终待满足的路径控制“Always”强迫前进到有向图G中的蜂动块“ToGradEcho”。因此,该始终待满足的路径控制“Always”在有向图G中加粗表示。在图的上面部分中在全局时间轴t上用于找到X块“Excite”的随后者的路径控制P的检查通过在全局时间轴t上的问号表示。也就是在通过激励块“Excite”的激励之后始终强迫梯度回波“GradEcho”。随着到达梯度回波“GradEcho”、也就是用于接收梯度回波“GradEcho”的接收型的X块,停止序列时间TE的测量。这在图7G中可以看出。

    图7H进一步示出,在始终待满足的路径控制“Always”之后执行在梯度回波“GradEcho”之前执行的蜂动块“ToGradEcho”。

    在图7I中执行X块“GradEcho”,对于该X块记录梯度回波。这既在有向图G中也在全局的时间轴t上可以看出。在执行X块X之后,有向图G到达两个等价并列的路径控制P。这些路径控制P一方面是显示子序列101的结束的那个路径控制“Finished”。此外,是显示k空间行的其它记录的那个路径控制。该路径控制在有向图G中用“AnotherScan”表示。对于要记录另一个k空间行的情况,后续跟随一个暂停B,在该暂停之后又跟随蜂动块“ToExciteN”,其中N表示,该蜂动块在第n阶激励之前发生。只有当扫描了所有的k空间行,也就是记录了所有的梯度回波“GradEcho”,才结束子序列101并且满足作为唯一的用于结束子序列101的路径控制“Finished”。由此在有向图G中到达出口点O。只要对于下一个k空间行达到激励脉冲“Excite”,则停止重复时间TR的序列时间测量。这完全类似于回波时间TE的测量而进行。然而,如从该图的上面部分中的时间变化可以看出的那样,重复时间TR连接一个子序列101和由此一个测量序列100的内部的两个超块102。

    特别要指出的是,使用可以用有向图G表示的用于要在MR扫描器4上执行的测量序列100的形式描述或者说形式化的描述,使得可以从有向图G中提取除了待确定的参数1100的集合之外已经完全参数化的测量序列100的参数化。

    如上面结合图7详细示出的,可以从有向图G中确定一个子序列101内部和由此也在测量序列100内部的单个WX块WX的相对关系。此外,子序列101以及测量序列100的相应的有向图G,表示将子序列101以及测量序列100除了待确定的参数1100的集合之外完全地参数化的最小数量的必要信息。特别是不再需要其它循环结构,用来在全局时间轴t上显示或者“展开”作为有向图G表示的测量序列100。

    由此,基于序列模型的测量序列100的显示和由此还有子序列102的显示,为序列设计员构成了用于特定于应用的程序设计语言的基础。在有向图G中给出的测量序列100的说明包括必须可供序列设计员支配的最少所需信息。该序列描述可以由用于产生软件的构建系统(Build-System)以完全习惯的方式使用。构建系统被理解为集成在源代码文件库中的并且产生可执行软件的系统。此外,独立于序列的软件模块还可以使用作为有向图G表示的测量序列100的数据流作为输入数据。因此可以以不同的形式分析该数据流。

    在该关联中,可以考虑解算器2000,该解算器从有向图G确定测量序列100的结构,并且然后例如在考虑所建立的序列公式的条件下,求解用于测量序列的定时问题并且确定允许的以及合适的定时值T.i。以下还要深入地讨论解算器2000。此外还可以考虑,直接作为有向图G形成新的测量序列100。此外还可以考虑,外部的软件模块读入有向图G的说明并且显示它们,或者对于不同定时值T.i和对比度规定(Kontrastvorgaben)计算模体图像(Phantombilder),以便可以减轻MR扫描器4的用户选择合适的定时值T.i及其参数。对于独立于序列的软件模块、例如解算器2000,完全可以考虑的是,其将给出的有向图G在全局时间轴t上展开,如在图7中所示,借助由有向图G给出的序列公式求解对于有向图G的整个定时问题。该解对于所有蜂动块W和所有X块X包括各个持续时间。从X块的持续时间中隐含地产生蜂动块W的持续时间。因此,解算器2000可以将确定的定时值T.i标记到各个块中合适的位置并且然后又展开有向图G。由此现在规定了有向图G的所有特征。也就是说,起先从一般的有向图G中还是未知的待确定的参数1100的集合,现在被赋予具体的值。

    结合要在MR扫描器4上执行的测量序列100,还可以按照下面描述解算器2000:解算器2000总的来说是软件模块,该软件模块从输入值的明确规定的组中确定用于MR测量的所有参数。按照本发明通过以有向图G的形式的测量序列100的形式化的描述来提供明确定义的输入值的这样的组。从中可以与用于待确定的参数1100的集合的允许的值一起求解定时问题,其中将具体的值赋予尚待确定的参数1100。通过解算器2000确定这些具体的值。在此,解算器2000还可以考虑为了在MR扫描器4上执行测量序列100必须满足的边界条件2500。由此特别地通过解算器2000完全地将允许的值赋予测量序列100。现在可以将描述或者测量序列说明自动地转换为任意的程序设计语言。此外,该程序设计语言例如可以是直接在磁共振扫描器4上可执行的和/或在与MR扫描器4相连的控制单元45上可执行的。边界条件2500可以包括以下元素:用于MR图像的对比度规定。这通常从诊断的设问中产生,因为例如T1方向,用来回答特定的诊断的设问。作为对此的替换,T2加权或者MR图像中的有针对的脂肪抑制(Fettunterdrückung)也是可以的。该对比度规定对于回波时间TE、重复时间TR、反转时间TI等等的待选择的值有直接的影响。该事实对专业人员是公知的。按照本发明,可以将这样的对比度规定例如以数学的约束条件的形式作为数学问题,为了执行和求解而给出到解算器2000,该约束条件在求解定时问题时要由解算器2000考虑。此外,图像分辨率规定可以是另一个用于待满足的边界条件2500。属于此的例如有解剖结构的实际情况,从中产生所需的图像分辨率。例如为了检查患者的前列腺,需要非常高的分辨率,然而还在非常小的目标区域。该目标区域也表示为视野或者英语称为field of view FOV。此外要遵循用于待检查的层的位置规定。因此对于心脏的检查必须选择合适的层。

    此外,还有从作为所谓的硬件限制的扫描器4的硬件的特性中产生的边界条件2500。属于此的例如有为梯度线圈提供梯度电流的功率放大器的最大功率,还有用来将MR扫描器4保持运行的必要的冷却功率。如果由于太小的冷却功率使得MR扫描器4过热,则监控模块中断处于运行中的测量序列100,使得必须从前面开始。仅从经济的原因上,MR测量的这样的中断是不值得期望的,因为形成在其中不能检查患者的死时间(Totzeit)。此外存在损害MR扫描器4的硬件的部分的风险。另一个可能的边界条件2500是规定用来执行测量序列100所需的测量时间应该最小。这点一方面是经济的原因为动机的,因为单位时间内检查病人数量多就可以快速摊还MR扫描器的成本。但是此外还有规定最大测量时间的检查。例如对于在其中患者屏住呼吸的测量。此外,还有大量患者安全性规定,特别地在测量序列的整个过程上要遵循这些患者安全性规定。从用于保护患者免受伤害或者损伤的规定中例如得出梯度的最大边缘陡度,如已经提到的。此外,发送的HF功率不超过最大值,可以是另一个患者安全性规定。如果入射的HF功率太高,则会发生在患者上的灼烧,如上面已经讨论的。这些边界值的遵守在实践中例如通过帐户模型(Kontenmodell)来实现,方法是,记录对患者已经输出哪个功率。这样的方法对专业人员来说是公知的,因此这里不作详细解释。

    如结合该公开描述的那样,按照本发明的用于形式描述可在MR扫描器4上执行的测量序列100的方法,以及按照本发明的、从测量序列100的形式描述出发自动地产生用于在MR扫描器上执行的测量序列100的方法,大大减轻了序列设计员的工作。一方面,大大简化了用来完整地描述测量序列100所需的参数的管理,因为可以自动地从有向图G确定测量序列100的大部分参数。此外,用待确定的参数1100的集合至少作为占位符已知所有所需的参数。也就是说,换言之,在没有确定一个具体的值的条件下,它们是已知的。设计员不再需要关心在临床中用于测量序列100的多个参数。然后,对于待确定的参数1100的集合的允许的值的确定,可以通过解算器2000来进行。解算器2000从给出的参数及其关系中、如在有向图G中形式描述的那样,确定待确定的参数1100并且将它们赋予允许的值。只要描述了所有的参数,则自然可以自动地转换测量序列100的完整的说明。迄今为止允许的参数值的确定是个漫长的过程。用户建议用于执行测量序列的大量参数值。迄今为止通过检验模块来检验用户的这些输入,特别地检验硬件限制和/或梯度限制。对于在此导致问题的情况,通过MR扫描器4的用户接口3000的窗口或者控制元件提醒MR扫描器的用户。这例如可以通过监视器205进行。然后需要用户的介入,典型地对于新的测量序列100该介入是必要的。就此而言,与磁共振扫描器4的用户交互作用确定允许的值,有时是非常费时和艰难的。只要使用这两种按照本发明的方法,则可以大大减少对于用户的开销。通常待确定的参数1100的数量小。这些值例如典型地是所谓的高级参数(High-level-Parameter),如回波时间TE、重复时间TR等等。由此要由用户预先给出的参数是对于他来说是能直观处理的参数。最后它们与MR图像的对比度特征直接关联。

    图8示出了用于按照本发明的优选实施方式的系统的框图,其包括了按照本发明的两个方法。系统的组件通过实线互相连接并且可以互相通信。在图8中通过矩形示出了网络,在该网络上连接了参与的模块。经过用户接口3000可以与用户交互。用户接口3000包括适合于显示有向图G的监视器205。该系统包括用来接收有向图G的图形接收接口910。有向图通过序列模型提供。作为替换,图形接收接口910还可以接收用于形式描述的装置的输入。此外,该系统包括另一个边界条件接口模块915。该边界条件接口模块接收由用户和/或通过硬件预先给出的边界条件2500。参数化模块1005在使用有向图G的结构的条件下确定测量序列100的参数化。解算器2000从边界条件2500以及待确定的参数1100的集合中确定定时值T.i的组,其求解定时问题并且包括用于待确定的参数1100的集合的允许的值的集合。

    当然也可以使用解算器2000来确定测量序列100的所有参数,例如在所选的层内部2mm的分辨率。可以证明具有优势的是,对于解算器2000不预先给出任何用于参数值的固定界限,而是结合价值函数或者说惩罚函数的具有可变边界的参数范围。通过惩罚函数可以表达,估计与预先给出的边界的偏离有多严重。这样,在同时尽可能小的惩罚函数的情况下,解算器2000寻求一个解,其中可变的边界可以由解算器2000改变。只有当这样的解在预先给出的边界条件2500的情况下是不可能的时,才需要经过接口3000与MR扫描器4的用户的交互。用户可以预先给出和/或改变用于待确定的参数1100的值和/或边界条件2500。从通过解算器2000所确定的参数值中产生测量序列100的完整的描述。借助转换模块990可以将测量序列100转换为可以在作为按照本发明的系统的部分的MR扫描器4上执行的时间段。

    总的来说,本发明大大减少了与MR扫描器4的用户的必要的交互的次数。就此而言,不仅简化了对于序列设计员的工作,此外还大大简化了MR扫描器4的用户的工作。利用本发明序列设计员具有更多的时间集中于诊断的设问。

    此外,从测量序列100的所选择的形式描述中可以产生一系列全新的应用。例如可以图形地描述测量序列100。此外,测量序列100的借助有向图G的按照本发明几乎完全的参数化,减轻了对测量序列100的分析。如通过转换模块990进行的那样,自动地将当前的完整序列说明转换为程序设计语言的步骤,是容易的并且可以以公知的方式实现。因此,以下以XML给出用于FLASH序列(如专业人员所公知的)的说明。

    <?xml version=″1.0″encoding=″utf-8″?>

    <iSeq xmlns:xsi=″http://www.w3.org/2001/XML Schema-instance″

        xsi:noNamespaceSchemaLocation=″iSeq.0.08.xsd″version=″0.08″ID=″iSeq_Demo″>

      <SubSeq ID=″SubSeq_FLASH″>

           <XNode ID=″XNode_FLASHTxExcite″xcalc=″Tx_Excite″tindex=″SeqTimeIndex_Tx″>

           <PlotInfo>

                    <BoundingBOX height=″40″width=″80″x=″100″y=″260″/>

           </PlotInfo>

           </XNode>

           <XNode ID=″XNode_FLASHRxGradEcho″xcalc=″Rx_GradEcho″

                   tindex=″SeqTimeIndex_Rx″>

             <PlotInfo>

                   <BoundingBox height=″40″width=″80″x=″100″y=″460″/>

             </PlotInfo>

           </XNode>

           <Entry warp=″Warp_ToExcite0″to=″XNode_FLASHTxExcite″>

               <PlotInfo>

                   <EntryBox height=″40″width=″40″x=″60″y=″20″/>

                    <LabelBox height=″40″width=″80″x=″40″y=″140″/>

                   <ToConnectorPoint x=″80″y=″220″/>

                   <ToConnectorPoint x=″140″y=″220″/>

               </PlotInfo>

           </Entry>

           <Connection to=″XNode_FLASHRxGradEcho″from=’XNode_FLASHTxExcite″

                              ctrl=″PathCtrl_Always″warp=″Warp_ToGradEcho″break=″false″>

              <PlotInfo>

        <LabelBox height=″80″width=″98″x=″100″y=″340″/>

      </PlotInfo>

    </Connection>

    <Connection to=″XNode FLASHTxEXcite″from=″XNode_FLASHRxGradEcho″

                       ctrl=″PathCtrl_AnotherScan″warp=″Warp_TOExciteN″break=″true″>

          <PlotInfo>

            <LabelBox height=″120″width=″100″x=″160″y=″60″/>

            <FromConnectorPoint x=″140″y=″540″/>

            <FromConnectorPoint x=″300″y=″540″/>

            <FromConnectorPoint x=″300″y=″20″/>

            <FromConnectorPoint x=″200″y=″20″/>

            <ToConnectorPoint x=″200″y=″220″/>

            <ToConnectorPoint x=″140″y=″220″/>

             </PlotInfo>

    </Connection>

    <Exit ctrl=″PathCtrl_Finished″from=″XNode_FLASHRxGradEcho″>

        <PlotInfo>

            <ExitBox height=″40″width=″40″x=″120″y=″660″/>

            <LabelBox height=″40″width=″80″x=″100″y=″580″/>

         </PlotInfo>

    </Exit>

    <SeqTimeDef time=″SeqTime_TE″tindex=″SeqTimeIndex_TE″>

        <Meas to=″XNode FLASHRxGradEcho″starts=″SeqTimeCond_Always″

           ends=″SeqTimeCond_Always″frorn=″XNode_FLASHTxExcite″>

        <PlotInfo>

                 <LabelBox height=″40″width=″40″x=″20″y=″360″/>

                 <FromConnectorPoint x=″40″y=″280″/>

                 <ToConnectorPoint x=″40″y=″480″/>

                  <StartPort right=″false″/>

                 <EndPort right=″false″/>

           </PlotInfo>

             </Meas>

        </SeqTimeDef>

        <SeqTimeneftime=″SeqTime_TR″tindex=″SeqTimeIndexTR″>

       <Meas to=″XNode_FLASHTxExcite″starts=″SeqTimeCond_NotAtLastScan″

                          ends=″SeqTimeCond_NotAtFirstScan″from=″XNode_FLASHTxExcite″>

                   <PlotInfo>

                        <LabelBox height=″40″width=″40″x=″220″y=″260″/>

                        <FromConnectorPoint x=″200″y=″240″/>

                        <FromConnectorPoint x=″240″y=″240″/>

                        <ToConnectorPoint x=″240″y=″320″/>

                        <ToConnectorPoint x=″200″y=″320″/>

                       <StartPort right=″true″/>

                       <EndPort right=″true″/>

                   </PlotInfo>

               </Meas>

          </SeqTimeDef>

           <Reorder IDREF=″Reorder_FLASH3d″/>

           <N4SeqInfo IDREF=″N4SeqInfo_BandwidthTimeProductExcite″/>

           <N4SeqInfo IDREF=″N4SeqInfo_DurationExcite″/>

           <N4SeqInfo IDREF=″N4SeqInfo_TimeIndexModeTx″/>

           <N4SeqInfo IDREF=″N4SeqInfo_TimeIndexModeRx″/>

           <N4SeqInfo IDREF=″N4SeqInfo_TimeIndexNodeTE″/>

           <N4SeqInfn IDREF=″N4SeqInfo_TimeIndexModeT R″/>

           <PlntInfo>

               <Font size=″12″/>

        </PlotInfo>

    </Subseq>

    <TxBlockCalc ID=″Tx_Excite″block=″TxBlock_ConstGradld″>

    <RunFuncParams>

          <BaseMoment IDREF=″BaseMoment_Excite″/>

          <Property IDREF=″Property_SlicePosition″/>

              <Property IDREF=″Prnperty_BandwidthTimeProductExcite″/>

              <Property IDREF=″Property_Gamma″/>

              <SubSeqGlobalStorage IDREF=″SubSeqGlobalStorage_RFSpoil″/>

              </RunFuncParams>

    </TxBlockCalc>

    <RxBlockCalc ID=″Rx_GradEcho″block=″RxBlock_ConstGradld″>

    <RunFuncParams>

           <BaseMoment IDREF=″BaseMoment_ReadOut″/>

           <BaseMoment IDREF=″BaseMoment_DeltaPE″/>

           <BaseMoment IDREF=″BaseMoment_Delta3D″/>

           <Property IDREF=″Property_DirectionPE″/>

           <Property IDREF=″Property_Direction3D″/>

           <Property IDREF=″Property_SlicePosition″/>

           <Property IDREF=″Property_ImageSamplesRO″/>

            <Property IDREF=″Property_ImageSamplesPE″/>

           <Property IDREF=″Propsrty_ImageSamples3D″/>

           <Property IDREF=″Property_ImagePixelsize2D″/>

           <Property IDREF=″Property_KspaceSamplesPE″/>

           <Property IDREF=″Property_KSpaceSamples3D″/>

            <Property IDREF=″Property_ImegePixelSize3D″/>

            <Property IDREF=″Property_OversamplingPE″/>

           <Property IDREF=″Property_OverSampling3D″/>

           <Property IDREF=″Property_Gamma″/>

           <Property IDREF=″Property_NumberOfChannels″/>

            <SeqRunIndex IDREF=″SeqIndex_Lin″/>

           <SeqRunIndex IDREF=″SeqIndex_Par″/>

           <SubSeqGlobalStorage IDREF=″SubSeqGlobalStorage_RFSpoil″/>

           </RunFuncParams>

    </RxBlockCalc>

    <warpBlockCalc ID=″Warp_ToExcite0″block=″WarpBlock_WarpM0″>

        <RunFuncParams>

            <BaseMoment IDREF=″BaseMoment_Zero″/>

        <SeqGlobalStorage IDREF=″SeqGlobalStorege_M0Store″/>

        </RunFuncParams>

    </warpBlockCalc>

    <WarpBlockCalc ID=″Warp_ToExciteN″block=″WarpBlock_WarpM0″>

        <RunFuncParams>

           <BaseMoment IDREF=″BaseMoment_Zero″/>

           <SeqGlobalStorage IDREF=″SeqGlobalStorage_M0Store″/>

        </RunFuncParams>

    </WarpBlockCalc>

    <WarpBlockCalc ID=″Warp_ToGradEcho″block=″Marp Block_WarpM0″>

        <RunFuncparams>

            <BaseMoment IDREF=″BaseMoment_Delta3D″/>

            <BaseMoment IDREF=″BaseMoment_DeltapE″/>

            <BaseMoment IDREF=″BaseMoment_Excite″/>

            <BaseMoment IDREF=″BaseMoment_ReadOut″/>

            <Property IDREF=″Property_KSpaceSamples3D″/>

            <Property IDREF=″Property_KSpaceSamplesPE″/>

            <SeqRunIndex IDREF=″SeqIndex_Lin″/>

            <SeqRunIndex IDREF=″SeqIndex_Par″/>

            <SeqGlobalStorage IDREF=″SeqGlobalStorage_M0Store″/>

        </RunFuncParams>

    </WarpBlockCalc>

    <PathCtrlCalc ID=″PathCtrl_Finished″>

        <RunFuncParams>

          <Property IPREF=″Property_KSpaceSamplesPE″/>

          <Property IDREF=″Property_KSpaceSamples3D″/>

          <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

    </PathCtrlCalc>

    <PathCtrlCalc ID=″PathCtrl_AnotherScan″>

        <RunFuncParams>

           <Property IDREF=″Property_KSpaceSamplesPE″/>

           <Property IDREF=″Property_KSpaceSamples3D″/>

        </RunFuncParams>

        <SeqRunIndexOut IDREF=″SeqIndex_Scan″/>

    </PathCtrlCalc>

    <PathCtrlCalc ID=″PathCtrl_Always″>

        <RunFuncParams/>

    </PathCtrlCalc>

    <SeqTimeCondCalc ID=″SeqTimeCond_NotAtLastScan″>

        <RunFuncParams>

           <Property IDREF=″Property_KSpaceSamplesPE″/>

           <Property IDREF=″Property_KSpacSamples3D″/>

           <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

    </Seq TimeCondCalc>

    <SeqTimeCondCalc ID=″SeqTimeCond_NotAtFirstScan″>

        <RunFuncParams>

            <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

    </Seq TimeCondCalc>

    <SeqTimeCondCalc ID=″SeqTimeCond_Always″>

        <RunFuncParams/>

    </SeqTimeCondCalc>

    <SeqTimeIndexCalc ID=″SeqTimeIndex_Tx″>

        <RunFuncParams>

           <Property IDREF=″Property_TimeIndexModeTx″/>

           <Property IDREF=″Property_KSpaceSamplesPE″/>

           <Property IDREF=″Property_KSpaceSamples3D″/>

           <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

    </SeqTimeIndexCalc>

    <SeqTimeIndexcalc ID=″SeqTimeIndexRx″>

        <RunFuncParms>

           <Property IDREF=″Property_TimeIndexModeRx″/>

           <Property IDREF=″Property_KSpaceSamplesPE″/>

           <Property IDREF=″Property_KSpaceSamples3D″/>

           <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

    </SeqTimeIndexCalc>

    <SeqTimeIndexCalc ID=″SeqTimeIndex_TE″>

        <RunFuncParams>

           <Property IDREF=″Property_TimeIndexModeTE″/>

           <Property IDREF=″Property_KspeceSampplesPE″/>

           <Property IDREF=″Property_KSpeeeSamples3D″/>

           <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

    </SeqTimeIndexCalc>

    <SeqTimeIndexCalc ID=″SeqTimeIndex_TR″>

        <RunFuncParams>

           <Property IDREF=″Property_TimeIndexModeTR″/>

           <Property IDREF=″Property_KSpaceSamplesPE″/>

           <Property IDREF=″Property_KSpaceSamples3D″/>

           <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

    </SeqTimeIndexCalc>

    <ReorderCalc ID=″Reorder_FLASH3d″>

        <RunFuncParams>

           <Property IDREF=″Property_KSpaceSamplesPE″/>

           <SeqRunIndex IDREF=″SeqIndex_Scan″/>

        </RunFuncParams>

        <SeqRunIndexOut IDREF=″SeqIndex_Lin″/>

            <SeqRunIndexOut IDREF=″SeqIndexx_ar ″/>

        </ReorderCalc>

        <SeqTime ID=″SeqTime_TE″/>

        <SeqTime ID=″SeqTime_TR″/>

        <TXBlock ID=″TxBlock_ConstGradld″/>

        <RXBlock ID=″RxBlockConstGradld″/>

        <warpBlock ID=″WarpBlock_WarpM0″/>

        <SeqRunIndex ID=″SeqIndex_Scan″/>

        <SaqRunIndex ID=″SeqIndex_Par″/>

        <SeqRunIndex ID=″SeqIndex_Lin″/>

        <DataType ID=″DataType_Int64″/>

        <DataType ID=″DataType_NonNegativeFloat″/>

        <DataType ID=″DataType_UnitVector3dxYZ″/>

        <DataType ID=″DataType_PositiveInteger″/>

        <DataType ID=″DataType_NonNegativeInteger″/>

        <DataType ID=″DataType_PositiveFloat″/>

        <DataType ID=″DataType_SeqTimeVar″/>

        <DataType ID=″DataType_Vector3dxYZ″/>

        <Unit ID=″Unit_SRT″/>

        <Unit ID=″Unit_PercentOver 100″/>

        <Unit ID=″Unit_mm″/>

        <Unit ID=″Unit_HzPerPixel″/>

        <Unit ID=″Unit_MHzPerT″/>

        <Unit ID=″Unit_One″/>

        <Property ID=″Property_KSpaceSamples3DCS″DataType=″DataTYPe_Int64″Unit=″Unit_One″/>

        <Property ID=″Property_SlicePositionCS″DataType=″DataType_Int64″Unit=″Unit_mm″/>

        <Property ID=″Property_KSpaceSamples3D″DataType=″DataType_PositiveInteger″

    Unit=″Unit_One″/>

        <Property ID=″Property_lmagePixelSize3D″DataType=″DataType_PositiveFloat″

    Unit=″Unit_mm″

                 />

        <Property ID=″Property_SlicePosition″DataType=″DataType_Vector3dXYZ″Unit=″Unit_mm″/>

        <Property ID=″Property_ImagePixelSize2D″DataType=″DataType_PositiveFloat″

    Unit=″Unit_mm″

               />

        <Property ID=″Property_Oversampling3D″DataType=″DataType_NonNegativeFloat″

             Unit=″Unit_PercentOver100″/>

        <Property ID=″Property_KspaceSamplesPE″DataType=″DataType_PositiveInteger″

             Unit=″Unit_One″/>

        <Property ID=″Property_BandwidthTimeProductExcite″DataType=″DataType_PositiveFloat″

             Unit=″Unit_One″/>

        <Property ID=″Property_Gamma″DataType=″DataType_PositiveFloat″Unit=″Unit_MHzPerT″/>

         <Property ID=″Property_OversamplingPE″DataType=″DataType_NonNegativeFloat″

             Unit=″Unit_PercentOver100″/>

        <Property ID=″Property_ImageSamples3D″DataType=″DataType_PositiveInteger″

             Unit=″Unit_One″/>

        <Property ID=″Property_DirectiOn3D″DataType=″DataType_UnitVector3dXYE″Unit=″Unit_One″

           />

        <Prcperty ID=″Property_NumberOfChannels″DataType=″DataType_PositiveInteger″

             Unit=″Unit_One″/>

        <Property ID=″Property_ImageSamplesRO″DataType=″DataType_PositiveInteger″

             Unit=″Unit_One″/>

        <Property ID=″Property_ImageSamplesPE″DataType=″DataType_PositiveInteger″

             Unit=″Unit_One″/>

        <Property ID=″Property_DirectionRO″DataType=″DataType_UnitVector3dXYZ″Unit+″Unit_One″

           />

        <Property ID=″Property_DirectionPE″DataType=″DataType_Unitvector3dXTZ″Unit=″Unit_One″

           />

        <Property ID=″Property_TimeIndexModeTx″DataType=″DataType_NonNegativeInteger″

             Unit=″Unit_One″/>

        <Property ID=″Property_TimeIndexNodeRx″DataType=″DataType_NonNegativeInteger″

             Unit=″Unit_One″/>

    <Property ID=″Property_TimeIndexModeTE″DataType=″DataType_NonNegativeInteger″

         Unit=″Unit_One″/>

    <Property ID=″Property_TimeIndexModeTR″DataType=″DataType_NonNegativeInteger″

         Unit=″Unit_One″/>

    <N4SeqInfo ID=″N4SeqInfo_BandwidthTimeProductExcite″DataType=″DataType_PositiveFloat″

         Unit=″Unit_One″/>

    <N4SeqInfo ID=″N4SmqInfo_DurationExcite″DataType=″DataType_NonNegativeInteger″

         Unit=″Unit_SRT″/>

    <N4SeqInfo ID=″N4SeqInfo_TimeIndexModeTx″DataType=″DataType_NonNegativeInteger″

         Unit=″Unit_One″/>

    <N4 SeqInfo ID=″N4SeqInfo_TimeIndexModeRx″DataType=″DataType_NonNegativeInteger″

         Unit=″Unit_One″/>

    <N4 SeqInfo ID=″N4SeqInfo_TimeIndexModeTE″DataType=″DtaType_NoNegativeIteger″

         Unit=″Unit+One″/>

    <N4 SeqInfn ID=″N4SeqInfo_TimeIndexModeTR″DataType=″DataType_NonNegativeInteger″

         Unit=″Unit_One″/>

    <BaseMomentCalc ID=″BaseMoment_Zero″/>

    <BaseMomentCalc ID=″BaseMoment Excite″>

         <Property IDREF=″Property_Direction3D″/>

         <Property IDREF=″Property_BandwidthTimeProductExcite″/>

         <Property IDREF=″Property_ImagePixelSize3D″/>

         <Property IDREF=″Property_ImageSamples3D″I>

         <Property IPREF=″Property_Gamma″/>

    </BaseMomentCalc>

    <BaseMomentCalc ID=″BaseMoment-ReadOut″>

         <Property IDREF=″Property_DirectionRO″/>

         <Property IDREF=″Property_ImagePixelSize2D″/>

         <Property IDREF=″Property_ImageSamplesRO″/>

         <Property IDREF=″Property Gamma″/>

    </BaseMomentCalc>

    <BaseMomentCalc ID=″BaseMoment_DeltapE″>

         <Property IDREF=″Property_DirectionPE″/>

         <Property IDREF=″Property_Gamma″/>

         <Property IDREF=″Property_OversamplingPE″/>

         <Property IDREF=″Property_ImageSamplesPE″/>

         <Property IDREF=″Property_ImagePixelSize2D″/>

    </BaseMomentCalc>

         <BaseMomentCalc ID=″BaseMomentDelta3D″>

         <Property IDREF=″Property_Direction3D″/>

         <Property IDREF=″Property_Gamma″/>

         <Property IDREF=″Property_Oversampling3D″/>

         <Property IDREF=″Property_ImageSamples3D″I>

         <Property IDREF=″Property_ImagePixelSize3D″/>

    </BaseMomentCalc>

    <SeqGlobalStorage ID=″SeqGlobalStorage_M0Store″/>

     <SubSeqGlobalStorage ID=″SubSeqGlobalStorage_RFSpoil″/>

    </iSeq>

    上面给出的XML代码描述了对于在图6中给出的有向图G的FLASH序列。从包括整个序列公式的、以及对于梯度磁矩的公式的形式描述中,也可以从有向图G中确定对于每个X块X的磁矩。例如在以下以C++给出对于单个描述FLASH序列的参数的源代码。

    在3D方向上的梯度磁矩,BaseMoment_Delta3D

    #ifdef GET_MANUAL_INCLUDE

    #include″GradCalc.h″

    #endif

    #ifdef GET_MANUAL_BODY

    double myDeltaM0;

    Success=GradCalc::deltaMoment(myDeltaM0,

                                         PROPERTY(Gamma),

                                         PROP-

    ERTY(ImageSamples3D)*PROPERTY(ImagePixelSize3D),

                                    PROPERTY(Oversampling3D)

                                   );

    CHECK_SUCCESS(Success,false);

    BASEMOMENT(Delta3D).setDirection(PROPERTY(Direction3D));

    BASEMOMENT(Delta3D).setValue(myDeltaM0);

    Success=true

    #endif

    在相位编码方向上的梯度磁矩,Base_MomentDeltaPE

    #ifdef GET_MANUAL_INCLUDE

    #include″GradCalc.h″

    #endif

    #ifdef GET_MANUAL_BODY

    double myDeltaM0;

    Success=GradCalc::deltaMoment(myDeltaM0,

                                         PROPERTY(Gamma),

                                         PROP-

    ERTY(ImageSamplesPE)*PROPERTY(ImagePixelSize2D),

                                         PROPERTY(OversamplingPE)

                                         );

    CHECK SUCCESS(Success,false);

    BASEMOMENT(DeltaPE).setDirection(PROPERTY(DirectionPE));

    BASEMOMENT(DeltaPE).setValue(myDeltaM0);

    Success=true;

    #endif

    梯度磁矩激励,BaseMoment_Excite

    #ifdef GET_MANUAL_INCLUDE

    #include″GradCalc.h″

    #endif

    #ifdef GET_MANUAL_BODY

    double myGSAmpl;

    int64_t myCalcDur ation=25600;

    Success=GradCalc::constGSAmplitude(static_cast<uint64_t>(myCalcDuration),

                                     PROPERTY(BandwidthTimeProductExcite),

                                     PROPERTY(ImageSamples3D)*PROP-

    ERTY(Image PixelSize3D),

                                     PROPERTY(Gamma),

                                     myGSAmpl

                                     );

    CHECK_SUCCESS(Success,false);

    BASEMOMENT(Excite).setDirection(PROPERTY)Direction3D));

    BASEMOMENT(Excite).setValue(myGSAmpl*static_cast<double>(myCalcDuration));

    Success=true;

    #endif

    在读出方向上的梯度磁矩,BaseMoment_ReadOut

    #ifdef GET_MANUAL_INCLUDE

    #include″GradCalc.h″

    #endif

    #ifdef GET_MAN UAL_BOD Y

    double myDeltaM0;

    Success=GradCalc:deltaMoment(     myDeltaM0,

                                       PROPERTY(Gamma),

                                       PROP-

    ERTY(ImagePixelSize2D)*PROPERTY(ImageSamplesRO),

                                       0.0

                                   );

    CHECK_SUCCESS(Success,false);

    BASEMOMENT(ReadOut).setDirection(PROPERTY(DirectionRO));

    BASEMOMENT(ReadOut).setValue(myDel-

    taM0*static_cast<double>(PROPERTY(ImageSamplesRO)));

    Success=true;

    #endif

    零阶磁矩,BaseMoment_Zero

    #ifdef GET_MANUAL_INCLUDE

    #en dif

    #ifdef GET_MANUAL_BODY

    BASEMOMENT(Zero).setDirection(vec3(0,0,1));

    BASEMOMENT(Zero).setValue(0);

    Success=true;

    #endif

    用于配置X块X的FLASH子序列源代码

    激励脉冲,Tx_Excite

    #ifdef GET_MANUAL_INCLUDE

    #endif

    #ifdef GET_MANUAL_BODY

    CTRL_STRUCT(AdditionalPhase)=90+SUDSEQGLOBALSTORAGE(RFSpoil).CurrentPhase;

    CTRL_STRUCT(Asymmetry)=0.5;

    CTRL_STRUCT(BandwidthTimeProduct)=PROPERTY(BandwidthTimeProductExcite);

    CTRL_STRUCT(FlipAngle)=90;

    CTRL_STRUCT(Gamma)=PROPERTY(Gamma);

    CTRL_STRUCT(SlicePosition)=PROPERTY(SlicePosition);

    Success=CTRL_STRUCT(M0).addBaseMoment(BASEMOMENT(Excite),1.0);

    CHECK_SUCCESS(Success,false);

     #endif

    读出梯度回波,Rx_GradEcho

    #ifdef GET_MANUAL_INCLUDE

    #include″GradCalc.h″

    #include″FreqPhaseCalc.h″

    #include″StdRxCtrlSettings.h″

    #endif

    #ifdef GET_MANUAL_BODY

    double myPbaseIncP E;

    Success=FreqPhaseCalc:KSpacePhaseInc

             (

                     myPhaseIncPE,

                    PROPERTY(DirectionPE)*PR0PERTY(SlicePosition),

                    PROPERTY(ImagePixelSize2D)*PROPERTY(ImageSamplesPE),

                    PROPERTY(OversamplingPE)

             );

    CHECK_SUCCESS(Success,false);

    double myPhaseInc3D;

    Success=FreqPhaseCalc:KSpacePhaseInc

            (

                 myPhaseInc3D,

                 PROPERTY(Direction3D)*PROPERTY(SlicePosition),

                 PROPERTY(ImagePixelSize3D)*PROPERTY(ImageSamples3D),

                 PROPERTY(Oversampling3D)

            );

    CHECK_SUCCESS(Success,false);

    double myAdditionalPhase=0;

    int32_t myCenterLinNo=PROPERTY(KSpaceSamplesPE)/2;

    int32_tmyCenterParNo=PROPERTY(KSpaceSamples3D)/2;

    int32_t myLinNo=static_cast<int32_t>(SUBSEQINDEX(Lin))-myCenterLinNo;

    int32_t myParNo=static_cast<int32_t>(SUDSEQINDEX(Par))-myCenterParNo;

    Success=FreqPhaseCalc::applyPEOffcenter

                 (

                    myAdditionalPhase,

                    FreqPhaseCalc::ADCAppliesPhase,

                   myPhaseIncPE,

                   myLinNo,

                   myPhaseInc3D,

                   myParNo

                );

        CHECK_SUCCESS(Success,false);

        double myDeltaM0PE;

        Success=GradCalc::deltaMoment

                  (

                         myDeltaMOPE,

                         PROPERTY(Gamma),

                         PROPERTY(ImagePixelSize2D)*PROPERTY(ImageSamplesPE),

                         PROPERTY(OversamplingPE)

              );

        CHECK_SUCCESS(Success,false);

       double myDeltaM03D;

       Success=GradCalc:deltaMoment

                    (

                       myDeltaM03D,

                       PROPERTY(Gamma),

                       PROPERTY(ImagePixslSize3D)*PROPERTY(ImageSamples3D),

                       PROPERTY(Oversampling3D)

                    )

       CHECK_SUCCESS(Success,false);

       myAdditionalPhase+=SUBSEQGLOBALSTORAGE(RFSpoil).CurrentPhase;

       SUDSEQGLOBALSTORAGE(RFSpoil).NextPhaseInc+=50;

       SUDSEQGLOBALSTORAGE(RFSpoil).CurrentPhase+=SUBSEQGLOBALSTOR-

       AGE(RFSpoil).NextPhaseInc;

       CTRL_STRUCT(AdditionalPhase)=myAdditionalPhase;

    CTRL_STRUCT(Gamma)=PROPERTY(Gamma);

    CTRL_STRUCT(SlicsPosition)=PROPERTY(SlicePosition);

    CTRL_STRUCT(ReadOutImagsSamples)=PROPERTY(ImageSamplesRO);

    CTRL_STRUCT(PartialFourierFactor)=1.0;

    CTRL_STRUCT(EchoSpec).push_back(ExcitationRF);

    Success=CTRL_STRUCT(M0).addBaseMoment(BASEMOMENT(ReadOut),1.0);

    CHECK_SUCCESS(Success,false);

    Success=CTRL_STRUCT(EchoM0).addBaseMoment(BASEMOMENT(DeltaPE),myLinNo);

    CHECK_SUCCESS(Success,false);

    Success=CTRL_STRUCT(EchoM0).addBaseMoment(BASEMOMENT(Delte3D),myParNo);

    CHECK_SUCCESS(Success,false);

    #endif

    用于配置蜂动块W的FLASH子序列源代码

    用于第一次激励的蜂动块“ToExcite0”,Warp_ToExcite0,

    #ifdef GET_MANUAL_INCLUDE

    #endif

    #ifdef GET_MANUAL_BODY

    if  (SEQGLOBALSTORAGE(M0Store).LKBaseMoment().isEmpty())

    {

        Success=rCtrl.M0.addBaseMoment(BASEMOMENT(Zero),1);

        CHECK_SUCCESS(Success,false);

    }

    else

    {

                Success=rCtrl.M0.addBaseMomentLinearCombination(SEQGLOBALSTOR-

             AGE(M0Store).LKBaseMoment());

                CHECK_SUCCESS(Success,false);

                SEQGLOBALSTORAGE(M0Store).LKBaseMoment().clear();

          }

        #endif

    蜂动块“ToExciteN”,Warp_ToExciteN

            #ifdef GET_MANUAL_INCLUDE

            #endif

            #ifdef GET_MANUAL_BODY

            if(SEQGLOBALSTORAGE(M0Store).LKBaseMoment().isEmpty())

            {

                 Success=rCtrl.M0.addBaseMoment(BASEMOMENT(Zero),1);

                 CHECK_SUCCESS(Success,false);

            }

            else

            {

                 Success=rCtrl.M0.addBaseMomentLinearCombination(SEQGLOBALSTOR-

              AGE(M0Store).LKBaseMoment());

                 CHECK_SUCCESS(Success,false);

                 SEQGLOBALSTORAGE(M0Store).LKBaseMoment().clear();

            }

             #endif

    蜂动块“ToGradEcho”,Warp_ToGradEcho

            #ifdef GET_MANUAL_INCLUDE

            #endif

    #ifdef GET_MANUAL_BODY

    int64_t myLinNo=SUBSEQINDEX(Lin);

    int64_t myParNo=SUBSEQINBEX(Par);

    int64_t myCenterLinNo=PROPERTY(KSpaceSamplesPE)/2;

    int64_t myCenterParNo=PROPERTY(KSpaceSamples3D)/2;

    Success=CTRL_TRUCT(M0).addBaseMoment(BASEMOMENT(DeltaPE),myLinNo  -myCen-

    terLinNo);

    CHECK_SUCCESS(Success,false);

    Success=CTRL_STRUCT(M0).addBaseMoment(BASEMOMENT(Delta3D),myParNo-myCen-

    terParNo);

    CHECK_SUCCESS(Success,false);

    Success=CTRL_STRUCT(M0).addBaseMoment(BASEMOMENT(Excite),-0.5);

    CHECK_SUCCESS(Success,false);

    Success=CTRL_STRUC(M0).addBaseMoment(BASEMOMENT(ReadOut),-0.5);

    CHECK_SUCCESS(Success,false);

    Success=SEQGLOBALSTORAGE(M0Store).LKBaseMoment)).addBaseMoment(BASEM0-

    MENT(DeltaPE),static_cast<double>(myCenterLinNo)-

    static_cast<double>(SUBSEQINDEX(Lin)));

    CHECK_SUCCESS()Success,false);

    Success=SEQGLOBALSTORAGE(M0Store).LKBaseMoment().addBaseMoment(BASEM0-

    MENT(Delta3D),static_cast<double>(myCenterParN0)-

    static_cast<double>(SUBSEQINDEX(Par)));

    CHECK_SUCCESS(Success,false);

    Success=SEQGLOBALSTORAGE(M0Store).LKBaseMoment().addBaseMoment(BASEMO-

    MENT(ReadOut),0.5);

    CHECK_SUCCESS(Success,false);

    #endif

    FLASH子序列源代码:路径控制

    始终待满足的路径控制,“Always”

    #ifdef GET_MANUAL_INCLUDE

    #endif

    #ifdef GET_MANUAL_BODY

    TAKE_THIS_PATH(true);

    Success=true;

    #endif

    路径控制“继续扫描?”,“AnotherScan”

        #ifdef GET_MANUAL_INCLUDE

        #endif

        #ifdef GET_MANUAL_BODY

    if(SUBSEQINDEX(Scan)<PROPERTY(KSpaceSamplesPE)*PROPERTY(KSpaceSamples3D)-1)

    {

            TAKE_THIS_PATH(true);

            SUBSEQINDEX(Scan)++;

    }

    else

    {

            TAKE_THIS_PATH(false);

    }

    Success=true;

    #endif

    用于结束的路径控制,“Finished”

    #ifdef GET_MANUAL_INCLUDE

    #ifdefiSeqDemo_KsmStorageSingleton

    #include″KsmStorageSingleton.h″

    #include″KsmStorageSingletonString.h″

    #endif

    #endif

    #ifdef GET_MANUAL_BODY

    if(SUBSEQINDEX(Scan)==PROPERTY(KSpaceSamplesPE)*PROPERTY(KSpacesamples3D)-1)

    {

       TAKE_THIS_PATH(true);

    }

    else

    {

       TAKE_THIS_PATH(false)

    }

    Success=true;

    #ifdef iSeqDemo_KsmStorageSingleton

    {

         KsmStorageSingletonString myKey=KsmStorageSingletonString(″demo message

    from Reorder_FLASH3d″);

         IKsmStorageSingletonEntry*myEntryPtr=KsmStorageSingleton::getObject(myKey);

         If(myEntryPtr)

         {

            KsmStorageSingletonString*pStr=dy-

    namic_cast<KsmStorageSingletonString*>(myEntryPtr);

            if(pStr)

            {

               PR_INFO(″\‘%s\’=\‘%s\’″,myKey.str.c_str(),pstr->str.c_str());

            }

            else

            {

               PR_WARN(″\‘%s\’from KsmStorageSingleton is of wrong type″,

               myKey.str.c_str());

            }

         }

         else

         {

             PR_WARN(″can not get\‘%s\’from KsmStorageSingleton″,

       myKey.str.c_str());

         }

       }

       #endif

       #endif

    FLASH子序列源代码:用于序列时间测量的条件

    时间测量条件“始终”,SeqTimeCond_Always

             #ifdef GET_MANUAL_INCLUDE

             #endif

             #ifdef GET_MANUAL_BODY

             SET_SEQ_TIME_MARK(true);

             Success=true;

             #endif

    时间测量条件“不是第一次扫描”,SeqTimeCond_NotAtFirstScan

    #ifdef_GETMANUAL_INCLUDE

    #endif

    #ifdef GET_MANUAL_BODY

    SET_SEQ_TIME_MARK(SUBSEQINDEX(Scan)!=0)

    Success=true;

    #endif

    时间测量条件“不是最后一次扫描”,SeqTimeCond_NotAtLastScan

    #ifdef GET MANUAL.INCLUDE

    #endif

    #ifdefGET_MANUAL_BODY

    SET_SEQ_TIME_MARK(SUBSEQINDEX(Scan)+1!=PROP-

    ERTY(KSpaceSamplesPE)*PROPERTY(KSpaceSample53D));

    Success=true;

    #endif

    初始化指数,SeqTimeIndexAlwaysZero

    #ifdef GET_MANUAL_INCLUDE

    #endif

    #ifdef GET_MANUAL_BODY

    SET_SEQ_TIME_INDEX(0);

    Success=true;

    #endif

    在此还要指出,由于形式描述的自动转换,按照本发明的方法可以提供可以直接在MR扫描器4的当前硬件上使用的、对于测量序列100的序列描述。由此,可以将按照本发明的两种方法无间隙地引入当前的MR扫描器4中。

使用形式描述的磁共振序列模型以使测量序列设计自动化.pdf_第1页
第1页 / 共76页
使用形式描述的磁共振序列模型以使测量序列设计自动化.pdf_第2页
第2页 / 共76页
使用形式描述的磁共振序列模型以使测量序列设计自动化.pdf_第3页
第3页 / 共76页
点击查看更多>>
资源描述

《使用形式描述的磁共振序列模型以使测量序列设计自动化.pdf》由会员分享,可在线阅读,更多相关《使用形式描述的磁共振序列模型以使测量序列设计自动化.pdf(76页珍藏版)》请在专利查询网上搜索。

本发明涉及为了对测量序列设计进行自动化而使用形式描述测量序列(100)的磁共振序列模型。提出的序列模型允许用于在磁共振扫描器(4)上执行的测量序列(100)的独立于系统的说明。在此序列模型是尽可能形式的,其限制到为描述测量序列(100)最小所需的信息而不限制序列设计中的灵活性。按照本发明的、用于形式描述测量序列(100)的方法允许对通过多个参数表征的测量序列进行参数化。除了尚待确定的参数(1100。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 测量;测试


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1