参考网站

http://wiki.opengatecollaboration.org/index.php/Users_Guide

本文并非完全翻译,会根据情况适当缩减。生命有限,能少就少。

综述:

这部分介绍使用Gate进行仿真所必经的一些步骤,并用了一些简单的例子介绍。更加详细的介绍在用户手册的后面部分,Gate的使用不需要任何C++编程,这得益于扩展geant4本机命令的专用脚本机制,第一部分的目标是提供用户接口的简短介绍和gate使用的一些基本原则。

1.成像应用的仿真结构

在每一个仿真中,用户必须

  1. 定义扫描器几何图形
  2. 定义phantom几何体
  3. 设置物理过程
  4. 初始化仿真            命令:/gate/run/intialize
  5. 建立检测器模型
  6. 定义源
  7. 声明数据输出的格式
  8. 开始采集

2.放射疗和放射测量应用的仿真结构

在每一个仿真中,用户必须

  1. 定义射线几何形状
  2. 定义phantom几何形状
  3. 声明输出
  4. 设置物理过程
  5. 初始化仿真          /gate/run/intialize
  6. 定义源
  7. 用下面的命令开始仿真

/gate/application/setTotalNumberOfPrimaries [particle_number]

/gate/application/start

3.用户接口

Gate命令使用一个树形结构组织,例如:所有的几何控制命令以geometry开始,然后所有的命令都可以在/geometry/分支里面找到。

Gate在运行的时候,会出现Idel> ,然后就可以1.成像应用的仿真结构输入命令了。当仿真效果不是期待的样子,用户可以重新调整参数。 虽然在用户熟悉这个软件或者不知道如何构建几何形状时,一步一步输入命令可以进行仿真比较有用,但是还是推荐一次输入一组命令来完成一个的仿真。

Macros全部是ASCII文件(扩展名是.mac),里面包含一些命令和注释,一个maros文件可以在Gate的命令解释器中执行,或者把它作为一个命令行参数给Gate,或者从另外一个macro文件中调用。一个macros文件必须有正确的命令顺序,包含的命令一般是:可视化,geometry的定义,系统,数字化仪器,物理,初始化,源,输出和开始。这些步骤在下一部分描述,一个仿真可以被分成多个macros,比如一个主macros来定义geometry,一个macros来定义物理。通常,通常有一个marco来调用更多具体的macro。

在linux终端下执行macros文件,命令:

Gate mymacro.mac 

在Gate环境中执行macros文件:

Idle>/control/execute mymacro.mac 

从macro文件中执行另外一个macro,在主macro文件中写:

/control/execute mymacro.mac 

下面介绍成像应用仿真的主要步骤。

步骤1.定义一个扫描几何

用户需要基于volume来定义几何,所有的volume通过树形结构连接到一起,每一个volume用形状,大小,位置,材料来表征,填充到一个新的volume中默认的材料是空气,可以使用的材料都在GateMaterial.db中找到(See Users Guide:Materials).,材料数据库的位置需要用下面的命令来声明:

/gate/geometry/setMaterialDatabase MyMaterialDatabase.db

树基是仿真实验的框架,与构建一个形状相关的所有Gate命令在Users Guide:Defining a geometry.可以找到。世界volume可以任意大小,但是至少能够把整个几何形状包含进去,当一个粒子跑出世界volume之后,其跟踪就会消失,这里给出的例子使用

40 x 40 x 40 cm,因此,世界坐标可以用下面来定义。

/gate/world/geometry/setXLength 40. cm
/gate/world/geometry/setYLength 40. cm
/gate/world/geometry/setZLength 40. cm 

世界volume可以包含一个或者更多子volume

/gate/world/daughters/name vol_name 

第一个子volume有一个专用的意思和名字,它声明了扫描器的类型(Users Guide:Defining a system),也称为一个系统。当前例子中,名字叫做CylindricalPET system,这个系统假定扫描器基于cylindrical 配置,每一个块包含一系列晶体。

/gate/world/daughters/name cylindricalPET
/gate/world/daughters/insert cylinder
/gate/cylindricalPET/setMaterial Water
/gate/cylindricalPET/geometry/setRmax 100 mm
/gate/cylindricalPET/geometry/setRmin 86 mm
/gate/cylindricalPET/geometry/setHeight 18 mm
/gate/cylindricalPET/vis/forceWireframe
/vis/viewer/zoom 3

第七和命令扫描器的全局几何形状,扫描器的形状是圆柱,外圆半径100mm,内圆半径86mm,长度18mm,最后一个命令把可视化为线状。创建时你可能会看到下面的信息

G4PhysicalVolumeModel::Validate() called.
Volume of the same name and copy number ("world_phys", copy 0) still exists and is being used.
WARNING: This does not necessarily guarantee it's the same
volume you originally specified in /vis/scene/add/.

这种信息是正常的,你可以忽视掉。

任何时间里,用户列出了所有可能的可是化命令,例如,命令行来列出可视化的命令是

Idle> ls /gate/cylindricalPET/vis/ 

假设扫描器由30个块构成,每一个块包含8x8的晶石,下面的命令行描述这个扫描器(Users Guide:Defining a geometry查看命令的详细信息),第一,每个块的几何图形被定义为子系统,这里是圆柱PET系统。

/gate/cylindricalPET/daughters/name box1
/gate/cylindricalPET/daughters/insert box
/gate/box1/placement/setTranslation 91. 0 0 mm
/gate/box1/geometry/setXLength 10. mm
/gate/box1/geometry/setYLength 17.75 mm
/gate/box1/geometry/setZLength 17.75 mm
/gate/box1/setMaterial Water
/gate/box1/vis/setColor yellow
/gate/box1/vis/forceWireframe

一旦一个块创建了之后,晶石可以被定义为块的子块。

zoom命令允许用户来缩放几何图形。panto命令把可视窗变成横向60mm和纵向40mm.默认的元殿是(0.0.0)

为了获得晶石的完整矩阵,volume箱2需要重复在Y和Z方向,为了获得完整的唤醒检测器,原始框被重复30次。

# C R Y S T A L
/gate/box1/daughters/name box2
/gate/box1/daughters/insert box
/gate/box2/geometry/setXLength 10. mm
/gate/box2/geometry/setYLength 2. mm
/gate/box2/geometry/setZLength 2. mm
/gate/box2/setMaterial LSO
/gate/box2/vis/setColor red
/gate/box2/vis/forceWireframe
# Z O O M
/vis/viewer/zoom 4
/vis/viewer/panTo 60 -40 mm
# R E P E A T    C R Y S T A L
/gate/box2/repeaters/insert cubicArray
/gate/box2/cubicArray/setRepeatNumberX 1
/gate/box2/cubicArray/setRepeatNumberY 8
/gate/box2/cubicArray/setRepeatNumberZ 8
/gate/box2/cubicArray/setRepeatVector 0. 2.25 2.25 mm

单个PET扫描器形成了,下一步骤是把这些几何图形有序连接在一起,来存储粒子间的相互信息(被称为hits),Gate只存储与检测器相吸附的volume的hits。如果一个volume没有连接到系统,那么里面的hits就不会被存储。系统和敏感传感器的概念可以查看Users Guide:Defining a system and Users Guide:Attaching the sensitive detectors

下面的命令用来把volume连接到系统

# R E P E A T    R S E C T O R
/gate/box1/repeaters/insert ring
/gate/box1/ring/setRepeatNumber 30# Z O O M
/vis/viewer/zoom 0.25
/vis/viewer/panTo 0 0 mm# A T T A C H   V O L U M E S   T O   A   S Y S T E M
/gate/systems/cylindricalPET/rsector/attach box1
/gate/systems/cylindricalPET/module/attach box2 

rsector的名字和模型是详细的名字,对应第一和第二水平CylindricalPET系统,可见Users Guide:Defining a system

保存hits在这个例子下的命令是:

# D E F I N E   A   S E N S I T I V E   D E T E C T O R
/gate/box2/attachCrystalSD vglue 1cm 

这时,用户可以施行检测器环境,Gate最突出的特征之一是时间无关(time-independent)现象,比如检测器移动和源衰减引起获得过程的一致性描述。简单的讲,在这个手册描述的仿真没有把检测器运动和phantom的运动算入。

第二步定义一个phantom几何形状

phatom建立方法和扫描器相同,phantom是世界volume下的一个子volume。

# P H A N T O M
/gate/world/daughters/name my_phantom
/gate/world/daughters/insert cylinder
/gate/my_phantom/setMaterial Water
/gate/my_phantom/vis/setColor grey
/gate/my_phantom/geometry/setRmax   10. mm
/gate/my_phantom/geometry/setHeight 30. mm

为了获得phantom中的compton和Rayleigh互动信息,可以让一个敏感传感器与phantom的volume连接

 P H A N T O M   D E F I N E D   A S   S E N S I T I V E
/gate/my_phantom/attachPhantomSD

现在对于每一个hit,两种信息会被记录

  1. 与phantom连接的所有物理块的分散互动
  2. 上次互动出现的与phantom3d连接的物理volume的名字

这些概念可以查看Users Guide:Attaching the sensitive detectors.

第三步设置物理过程

建立好扫描器和检测器后,必须设置对应的物理过程,Gate使用Geant4模型来及进行物理过程,用户必须为每个粒子选择物理过程,然后可以通过设置生产设备,消减,电磁选项来定制仿真。

一些典型的物理表在目录examples/PhysicsLists中

生产设备,消减,电磁选项可以查看Users Guide:Setting up the physics.

第四步初始化

前三步完成之后(对应geant4的预初始化),仿真用下面的命令初始化

# I N I T I A L I Z E
/gate/run/initialize

初始化实际上触发了不同部分的计算,在这步之后,physic list不能再被修改了,新的volume也不能被插入几何图形

第五步设置数字器(digitier)

Gate的基本输出是一个hit集合,hit数据包括,位置,时间,能量。数字器的目标是从hits建立物理观测以以及来对读出器进行建模,并引发触发单元。Gate digiter物体有一些函数,可以进行现行信号处理,例如,下面的命令插入一个加法器来把每一个基本volume产生的hit相加。

/gate/digitizer/Singles/insert adder 

其他模型可以描述仿真的读出器,readout几何是与一些检测器相连的人工几何

/gate/digitizer/Singles/insert readout
/gate/digitizer/Singles/readout/setDepth 1 

在这个例子中,readout把所有晶石中的能量相加,并且根据最高能量定义晶石头的位置,设置深度命令声明readout运行的几何水平,当前例子是

  • base level (CylindricalPET) = depth 0
  • 1srt daughter (box1) of the system = depth 1
  • next daughter (box2) of the system = depth 2
  • and so on ....

为了把检测器的能量分辨率算入,并只在单个定义的能量窗口收集,也可以使用其他模型(??)

# E N E R G Y   B L U R R I N G
/gate/digitizer/Singles/insert blurring
/gate/digitizer/Singles/blurring/setResolution 0.19
/gate/digitizer/Singles/blurring/setEnergyOfReference 511. keV # E N E R G Y   W I N D O W
/gate/digitizer/Singles/insert thresholder
/gate/digitizer/Singles/thresholder/setThreshold 350. keV
/gate/digitizer/Singles/insert upholder
/gate/digitizer/Singles/upholder/setUphold 650. keV 

在这里考虑551kev 19%的能量分辨率

因此,能量窗口从360kev设置成600kev

对于PET仿真,符合分离器(??)也在数字器下施行

# C O I N C I D E N C E   S O R T E R
/gate/digitizer/Coincidences/setWindow 10. ns

数字器更多信息可以查看Users Guide:Digitizer and readout parameters.

第六步源设置

在Gate里面,一个源是指粒子发射的volume,用户可以定义源的几何形状,以及它的特征,比如发射方向,能量分布,和活动性。不稳定的源的通常从geant4里面的数据库得到的。

一个体素化的phantom或者一个病人数据集也可以用来定义源。定义源的汉书描述可以参考:Users Guide:Voxelized Source and Phantom

当前例子中,源是1mb的线源,线源是一个圆柱,半径0.5mm,长度50mm,源产生一度511kev的gamma粒子,并方向发射(对于更加真实的例子,正电子的范围和两个gamma的共线性也可以考虑在内)

# S O U R C E
/gate/source/addSource twogamma
/gate/source/twogamma/setActivity 100000. becquerel
/gate/source/twogamma/setType backtoback# POSITION
/gate/source/twogamma/gps/centre 0. 0. 0. cm # PARTICLE
/gate/source/twogamma/gps/particle gamma
/gate/source/twogamma/gps/energytype Mono
/gate/source/twogamma/gps/monoenergy 0.511 MeV# TYPE = Volume or Surface
/gate/source/twogamma/gps/type Volume# SHAPE = Sphere or Cylinder
/gate/source/twogamma/gps/shape Cylinder
/gate/source/twogamma/gps/radius 0.5 mm
/gate/source/twogamma/gps/halfz 25 mm
# SET THE ANGULAR DISTRIBUTION OF EMISSION
/gate/source/twogamma/gps/angtype iso# SET MIN AND MAX EMISSION ANGLES
/gate/source/twogamma/gps/mintheta 0. deg
/gate/source/twogamma/gps/maxtheta 180. deg
/gate/source/twogamma/gps/minphi     0. deg
/gate/source/twogamma/gps/maxphi 360. deg
/gate/source/list

第七步定义数据输出

默认输出数据类型是ASCII

# ASCII OUTPUT FORMAT
/gate/output/ascii/enable
/gate/output/ascii/setFileName test
/gate/output/ascii/setOutFileHitsFlag 0
/gate/output/ascii/setOutFileSinglesFlag 1
/gate/output/ascii/setOutFileCoincidencesFlag 1
# ROOT OUTPUT FORMAT
/gate/output/root/enable
/gate/output/root/setFileName test
/gate/output/root/setRootSinglesFlag 1
/gate/output/root/setRootCoincidencesFlag 1 

给定这些脚本之后,.dat的asicc文件和.root文件会被创建,Users Guide:Data output,解释了如何理解结果文件

对于有些配置,结果可能存在sinogram类型,或和List Mode Format(LMF),sinogram输出模块存储扫描器的同时发生事件,每对晶体有一个2d的sinogram,sinogram要以原始格式存储,要么以ecat7格式存储。输出的完整描述清查看Users Guide:Data output

第八步开始一个数据获取

数据的开始和获取定义在现实实验中,此外,Gate需要一个时间片,在这个时间片里,仿真系统是静态的,在每个时间片的开始,几何形状根据要求的运动更新。在每个世界片内,几何性状保持静态,粒子转移仿真和数据获得继续。每个时间片对应一个geant4的运行。

如果仿真中的源不是发射性的或者活动没有被定义,用户可以修定事件总数,这种情况下,粒子数在根据每个时间片的函数进行分割

/gate/application/setTotalNumberOfPrimaries [N]

用户可以修改每一个时间片的数量,这种情况下,每一个事件通过时间片和总仿真时间之间的比来衡量

/gate/application/setNumberOfPrimariesPerRun [N]

也可以不同时间片有不同的时间数。要写在一个文件里运行,设置

/gate/application/readNumberOfPrimariesInAFile [path/to/filename]

4.规则时间片方法

规则时间片方法,成像应用的标准Gate方法,用户使用下面的命令定义数据获取的开始和结束,

/gate/application/setTimeSlice     1.  s
/gate/application/setTimeStart     0.   s
/gate/application/setTimeStop      1.  s

生成种子的选择非常重要,有3种生成的方法。

  • 默认:这种情况下,默认的CLHEP内部种子被使用,种子始终是相同的。
  • 自动:每次Gate运行时,自动生成新的种子。
  • 手动:人工设置种子

对应代码

/gate/random/setEngineSeed default
/gate/random/setEngineSeed auto
/gate/random/setEngineSeed 123456789

也可以选择包含种子的文件来直接控制初始化

/gate/random/resetEngineFrom fileName
# S T A R T  the A C Q U I S I T I O N
/gate/application/startDAQ

投影总数是

在当前的例子中,没有运动,获取时间=1s,投影的数量等于1、如果你想在仿真进行时退出程序,最后一行应该是exit

作为monte-carlo工具,Gate需要随机生成器,CLHEP库提供。有三种随即数生成器,the Ranlux64, the James Random and the Mersenne Twister,默认 Mersenne Twister。

NB:一些用户反馈说使用Ranlux64 生成器,数据里面有artifact效应,但Mersenne Twister生成器里面没有产生这种效应

5.变量时间片

这种方法里面,每个时间片有一个特殊的时期,用户必须定义每个时间片的时间。第一种方法是用一个含有时间片的文件

/gate/application/readTimeSlicesIn [File Name]

第二种方法是给每一个时间片增加命令

/gate/application/addSlice [value] [unit]

用户要用setTimeStart来定义数据的开始,数据的获取以累加每个时间片结束。

仿真开始命令

/gate/application/start

or

/gate/application/startDAQ

6.冗余度

随即引擎的冗余度可以被选择,使用下面命令。冗余度范围[0,2]

/gate/random/verbose 1

较高的值将被解释为2。值为0表示根本不打印,值为1表示在采集开始时打印一次,值为2表示在每次运行开始时打印一次。

Gate 用户手册(一)总体概念相关推荐

  1. 世界地图的制作(总体概念设计)

    1.世界地图主题制定 首先要为将要设计的世界地图制定一个主题,在时间允许的情况下,无论是整个世界还是一个小场景,最好都能为其设定一个主题.例如怪物巢穴 2.世界观及地图风格确定 紧扣制定好的世界主题, ...

  2. Gate用户手册(二)怎样运行Gate以及可视化

    原文通道:http://wiki.opengatecollaboration.org/index.php/Users_Guide:How_to_run_Gate#Interactive_mode 原文 ...

  3. block,inline和inline-block概念和区别

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  4. WCF分布式开发步步为赢(14):WCF安全编程--基本概念

    WCF安全机制是个非常复杂的问题,因为涉及的知识点较多,所以今天这个文章,会分析进行WCF安全开发应该了解的哪些知识点.如何查看资料.为了更好地理解WCF安全相关知识,我把WCF安全机制主要知识点整理 ...

  5. 移动端(一)—— 移动端概念

    移动端相关概念 之前一直在用github博客,但是发现上传图片和在别人访问的问题上很不友好,所以现在改用csdn博客,下面正文. 个人现在在研究移动端,但是对于移动端的相关概念等等,原理性问题一直不了 ...

  6. 【Gazebo要素01】术语和概念

    一.提要 要了解gazebo需要多种技术知识,常常无法短期内掌握,这里列出相关得种种技术术语,和其基本含义:以便在开发中形成一个总体概念.注意,本文不着眼于技术细节,仅仅是提纲携领而已. 二.gaiz ...

  7. 组群的基本概念linux,linux课件-Linux系统中组群与用户管理.ppt

    <linux课件-Linux系统中组群与用户管理.ppt>由会员分享,可在线阅读,更多相关<linux课件-Linux系统中组群与用户管理.ppt(66页珍藏版)>请在装配图网 ...

  8. inline-block什么意思中文_block,inline和inline-block概念和区别

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  9. 谈谈敏捷开发概念和迭代开发方案

    自敏捷开发这一概率进入我们的视野,仅在短短几年内,软件开发领域便进入了高速开发的时代.似乎从业者们都在谈快速,谈迭代,不管是否感受过敏捷开发的益处,先跟风吹起来,只要凑近这一新技术,就像走在了行业的前 ...

最新文章

  1. C++文件如何在linux下生成动态库So,以及如何使用这个动态库
  2. 转载-如何做好项目的需求与业务调研
  3. LDAP用户验证(Spring-LDAP)
  4. python学习-知识点回顾(Python3的安装,编译器、一些关键知识点、数据类型、数据类型转换、运算符优先级)
  5. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步
  6. Spring Boot 解决跨域Cors问题
  7. office连接oracle,Access(VBA)连接Oracle数据库的代码
  8. Matlab去掉矩阵中的全0行或列
  9. JAVA构造对象的几种方式(构建器、构造器)
  10. 怎样使用OUTLOOK收发邮件   小雨
  11. Python Tutorial 实践(2)
  12. LeaRun.Java表单快速开发工具
  13. 清华大学学术答辩通用PPT模板
  14. 畅阳题库管理系统-在线考试(h5+小程序)Java开源版本
  15. java多线程之Single Threaded Execution模式
  16. Flutter面试总结(2022)
  17. 【推荐系统】【论文阅读笔记】【survey】A Survey on Session-based Recommender Systems基于会话的推荐系统综述
  18. linux 服务器的性能考核指标QPS、TPS、RT、Load、PV、UV
  19. liunx服务器 telnet 带用户名 端口登陆方法
  20. 大数据ACA试题-3

热门文章

  1. Virtual host / experienced an error on node rabbit@ xx and may be inaccessible Totals问题的解决
  2. android MDE工程师,Android Application Addon(插件) 架构及管理
  3. Unite 2018|基于照片建模的游戏制作流程
  4. thingsboard
  5. java中关键字缺省(default)
  6. IntelliJ IDEA之开发环境配置
  7. 一次性禁止禁止Flash Helper service(即ff新推荐)即flash弹出来的广告
  8. 记一次拯救NAS硬盘
  9. 米家蓝牙温湿度计2接入树莓派并通过homeassistant显示
  10. 短期趋势自用经传捕捞季节 通达信指标公式副图 源码 贴图