本文主要是介绍Gate学习2 ——Defining a geometry(定义几何体),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接Gate学习1,使用软件Gate来实现Gate1的部分内容:
一、可视化命令调出可视化窗口
在工作空间的文件夹(workspace,可以新建)中右键打开终端,输入Gate后打开软件,就可以输入命令。
我先执行了一个可视化文件:
/vis/open OGLSX
/vis/viewer/set/viewpointThetaPhi 60 60
/vis/viewer/zoom 1
/vis/drawVolume
/vis/viewer/flush
/tracking/verbose 0
/tracking/storeTrajectory 1
/vis/scene/add/trajectories
/vis/scene/endOfEventAction accumulate
出现了一个OpenGL的窗口,可以将上面的命令放入一个visu.mac的文件中,用以下命令执行文件:
/control/execute visu.mac
二、创建几何体:
/gate/geometry/setMaterialDatabase ../../GateMaterials.db# W O R L D
/gate/world/geometry/setXLength 40. cm
/gate/world/geometry/setYLength 40. cm
/gate/world/geometry/setZLength 40. cm/gate/world/daughters/name vol_name
#vol_name是子volume的名称# S Y S T E M
/gate/world/daughters/name cylindricalPET #设置子volume的名字
/gate/world/daughters/insert cylinder #设置子volume形状
/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的装满水的圆柱体。然后将其可视化设#置为线框。# FIRST LEVEL OF THE SYSTEM
/gate/cylindricalPET/daughters/name box1 #设置矩形模块的名字为box1
/gate/cylindricalPET/daughters/insert box #设置box1的形状为矩形
/gate/box1/placement/setTranslation 91. 0 0 mm #位置???
/gate/box1/geometry/setXLength 10. mm #设置box1的X方向长度为10mm
/gate/box1/geometry/setYLength 17.75 mm #设置box1的Y方向长度为17.75mm
/gate/box1/geometry/setZLength 17.75 mm #设置box1的Z方向长度为17.75mm
/gate/box1/setMaterial Water #设置box1材料是水
/gate/box1/vis/setColor yellow #可视化颜色设置为黄色
/gate/box1/vis/forceWireframe #设置使用框线 # 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
可以复制到终端执行(好像不可以一整段复制),也可以像visu.mac一样放到文件中执行(用文件执行,实时窗口变化太快),上面的命令执行完成后在OpenGL窗口还看不到几何体可视化,如果想看一下可视化结果的话需要初始化:
/gate/run/initialize
但初始化过后,就不可以修改前面定义的几何内容了。以上命令可视化结果如下:
box1和box2
# Z O O M
/vis/viewer/zoom 4
/vis/viewer/panTo 60 -40 mm #将查看器窗口平移水平右移60mm,垂直下移40mm,(默认为世界原点 (0,0,0))# 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 # 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# 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 #还不清楚什么意思# 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# 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# I N I T I A L I Z E
/gate/run/initialize #初始化后可以看到定义的几何体的效果
8*8个矩阵排列的box2
30个环状排列的box1
三、链接几何体到系统、数据输出和数据采集还不清楚。
--------------------------------------------------------分割线----------------------------------------------------------------
定义几何体——Defining a geometry
这部分分别从以下几方面进行说明:构建世界world、创建一个几何体对象volume、重复这个volume、放置这个volume、移动这个volume以及最后更新创建的几何对象。
一、World
在启动宏时,World是GATE中已定义的唯一量。所有的对象都被定义为World的子volume或子子volume。World是GATE中volume的一个典型例子,它具有预定义的属性。World是一个以原点为中心的Box,对于任何粒子,当它脱离World体积时追踪就停止了。世界体积可以是任何大小,但必须足够大以能够包括所有涉及模拟的volume。
World Volume有默认的参数:形状、尺寸、材质、可见性属性和子volume的数量。这些参数都可以使用以下GATE命令编辑:
/gate/world/describe
与World Volume相关的参数可以修改以适应特定的模拟配置。World只有体积的形状是无法改变的Box。修改参数的命令,例如,X长度可以改变从50cm到2m:
/gate/world/geometry/setXLength 2. m
修改World Volume 其他参数的命令有下面的部分给出。
二、创建一个Volume
1、基础
(1)树状结构概论
当使用gate创建volume时,volume会自动出现在GATE树中。所有新建的Volume的命令都要用这个GATE树来实现。例如,创建的Volume的名称为“Volume_Name”,则该卷的所有命令都需要以“Volume_Name”开头:
/gate/Volume_Name/
该树包含以下命令:
• setMaterial:给Volume分配材料
• attachCrystalSD:将晶体敏感探测器链接到volume上
• attachPhantomSD:将模体敏感探测器链接到volume上
• enable:启用volume
• disable:禁用volume
• describe:描述volume
volume和子volume的一些命令:
• daughters:在volume中插入一个新的子volume
• geometry:控制volume的几何形状
• vis:控制volume的可视化属性
• repeaters:给volume加一个“重复器”
• moves:“移动”volume
• placement:控制volume的放置
(2)单位使用
在GATE中预定义了不同的单位(Gate单位表),使用相应的缩写来指代。在GATE环境中,可以使用以下方法编辑GATE中可用的单位列表:
/units/list
(3)坐标轴
World中的任何位置都可以根据X, Y和Z三轴坐标定义,坐标轴可以在显示窗口中看到 :
/vis/scene/add/axes
2、创建一个Volume
任何新的Volume都必须创建为另一个Volume(即World或先前创建的Volume)的子卷。
创建新卷时必须遵守三条规定:
• 位于一个Volume内部的volume必须是它的子volume(有点绕*^____^*)
• 子volume必须完全包含于母Volume
• 体积不能重叠
几何构建的错误会导致错误的粒子传输,从而产生错误的结果!
(1)创建一个新的volume第一步:定义名称
/gate/mother_Volume_Name/daughters/name Volume_Name
这个命令是准备创建一个名为Volume_Name的新对象,它是mother_Volume_Name的子volume。
有些名称不能使用,因为它们在gate中有精确的含义(类似C语言中的一些特殊字符串)。这些名称是在GATE中定义的GATE系统的名称(参考 Defining a system): scanner, PETscanner,
cylindricalPET, SPECTHead, ecat, CPET, OPET and OpticalSystem.
(2)定义新Volume的形状
只有在为新volume分配形状后,创建才算完成。
Gate提供了不同的体积形状:盒形box、球形sphere、圆柱形cylinder、锥形cone、六边形hexagon、一般或挤压梯形general or extruded trapezoid、楔形wedge、椭圆形管形elliptical tube、tessellated and TetMeshBox。
查看可用形状的命令是:
/gate/world/daughters/info
但是我输进命令行后什么都没有,不知道怎么回事。定义volume形状的命令:
/gate/mother_Volume_Name/daughters/insert Volume_shape
示例:
/gate/world/daughters/name Phantom
/gate/world/daughters/insert box
(3)定义尺寸
在创建带有形状的volume之后,其尺寸是与形状关联的默认尺寸。这些默认维度可以使用volume_name/geometry/ 进行修改:
子volume可用的命令取决于形状(每种形状定义尺寸的不同命令)
/gate/Volume_Name/geometry/
示例:
/gate/Phantom/geometry/setXLength 10. mm
/gate/Phantom/geometry/setYLength 10. mm
/gate/Phantom/geometry/setZLength 20. mm
(4)定义材料
每个volume都必须被分配相应的材料。分配给新volume的默认材料是Vacuum。可用材料列表在Gatematerials .db文件中定义。(见 Materials)。
下面的命令用名为material的材质填充Volume_Name:
/gate/Volume_Name/setMaterial Material
示例:
/gate/Phantom/setMaterial Water
(5)定义颜色和外型
为了使几何图形易于可视化,可以使用子树/vis/设置一些显示选项,在这个子树中可用的命令有:setColor, setVisible, setDaughtersInvisible, setLineStyle, setLineWidth, forceSolid和forceWireframe(见下表)
示例:
/gate/Phantom/vis/setColor blue
/gate/Phantom/vis/forceWireframe
模体将被显示蓝色透明。
(6)启用和禁用volume
volume不能被销毁,唯一可能的操作是禁用它:这使得volume从显示窗口中消失,而不是从几何体中消失。只有世界卷不能被禁用。
禁用Volume_Name
/gate/Volume_Name/disable #禁用Volume_Name
/gate/Volume_Name/enable #重新启用volume
示例:
/gate/Phantom/disable
(7)Describing volume
与对象Volume_name关联的参数可以通过以下方式列出:
/gate/Volume_Name/describe
示例:
/gate/Phantom/describe
3、示例
(1)构建NaI晶体
/gate/mother_Volume_Name/daughters/name crystal
/gate/mother_Volume_Name/daughters/insert box/gate/crystal/geometry/setXLength 1. cm
/gate/crystal/geometry/setYLength 40. cm
/gate/crystal/geometry/setZLength 54. cm/gate/crystal/setMaterial NaI/gate/crystal/vis/setColor yellow/gate/crystal/describe/gate/crystal/disable
应该 比较容易看懂
(2)构建trpd Volume
描述复杂几何图形的另一种方法是使用所谓的“布尔”体积,以便使用单个体积来描述一个部件,而不是使用一对母子volume。这可以使描述更容易和更综合。下面的例子描述了如何使用trpd形状来定义下图所示的形状,trpd形状是基于:一个梯形减去一个方框组成的“布尔”体积:
# V I S U A L I S A T I O N
/vis/open OGLSX
/vis/viewer/reset #???
/vis/viewer/viewpointThetaPhi 60 60
/vis/viewer/zoom 1
/vis/viewer/set/style surface
/vis/drawVolume
/tracking/storeTrajectory 1
/vis/scene/endOfEventAction accumulate
/vis/viewer/update
/vis/verbose 2
/gate/geometry/enableAutoUpdate #启用几何体自动加载???
/gate/world/daughters/name Volume_Name
/gate/world/daughters/insert box
/gate/Volume_Name/geometry/setXLength 40 cm
/gate/Volume_Name/geometry/setYLength 40 cm
/gate/Volume_Name/geometry/setZLength 40 cm
/gate/Volume_Name/vis/forceWireframe
/gate/Volume_Name/daughters/name trapeze_name
/gate/Volume_Name/daughters/insert trpd
/gate/trapeze_name/geometry/setX1Length 23.3 mm
/gate/trapeze_name/geometry/setY1Length 21.4 mm
/gate/trapeze_name/geometry/setX2Length 23.3 mm
/gate/trapeze_name/geometry/setY2Length 23.3 mm
/gate/trapeze_name/geometry/setZLength 6. mm
/gate/trapeze_name/geometry/setXBoxPos 0. mm
/gate/trapeze_name/geometry/setYBoxPos 0. m
/gate/trapeze_name/geometry/setZBoxPos 0.7501 mm
/gate/trapeze_name/geometry/setXBoxLength 20.3 mm
/gate/trapeze_name/geometry/setYBoxLength 20.3 mm
/gate/trapeze_name/geometry/setZBoxLength 4.501 mm
没有太明白这个参数是什么意思。。。
图为基于布尔实心的挤压梯形的侧视图,蓝色的等高线和红色虚线分别表示楔形和方框的等高线
名为trapeze_name的新volume是Volume_Name的子volume,使用5+6个参数进行描述。前5个参数与梯形有关,而后6个参数使用盒状描述挤压体积。
(3)构建楔形volume
创建一个梯形,用户需要指定11个参数(除了它的名称和材质),这并不容易使用。
为了模拟“倾斜的”晶体,一个名为GateWedgeCreator(源自G4Trap)的新类构建了直角楔形。如下图所示,楔形的定义只有三个容易理解的参数:
XLength:是X方向上的楔形长度。
NarrowerXLength:是楔形在X方向上较短的边的长度。
YLength:Y方向上的长度。
ZLength: Z方向上的长度。
/gate/module/daughters/name wedge0
/gate/module/daughters/insert wedge
/gate/wedge0/geometry/setXLength 10 mm
/gate/wedge0/geometry/setNarrowerXLength 8.921 mm
/gate/wedge0/geometry/setYLength 2.1620 mm
/gate/wedge0/geometry/setZLength 2.1620 mm
/gate/wedge0/setMaterial LSO
/gate/wedge0/vis/setColor yellow
(4)构建嵌入volume
在GATE中,您可以从STL文件创建镶嵌volume。STL是一种常用的文件格式,它使用三角形切面来定义三维对象的表面,这允许模拟从CAD软件导入的复杂几何图形。STL文件中描述的表面用于使用Geant4 G4TessellatedSolid类在GATE中创建volume。重要的是,镶嵌体只可以关联一种材料。可以使用ASCII或二进制STL文件。
下面是一个在GATE宏中从STL文件创建镶嵌volume的示例:
/gate/world/daughters/name kidneyLeft
/gate/world/daughters/insert tessellated
/gate/kidneyLeft/placement/setTranslation -265.3625 -121.5875 -842.16 mm
/gate/kidneyLeft/geometry/setPathToSTLFile data/Label89.stl
/gate/kidneyLeft/setMaterial Kidney
用于生成此图的完整代码可以在GateContrib GitHub存储库中找到:misc/geometry_STL/kidneys
(5) 构建 TetMeshBox volume
TetMeshBox是一个包含四边形网格拼接而成的体积。四边形网格可以从' .ele /.node '的文件中获得,该文件可以由开源的四边形网格生成器 TetGen生成。请参考TetGen手册理解 .ele和 .node的文件 。TetMeshBox的用法示例如下:
/gate/world/daughters/name meshPhantom
/gate/world/daughters/insert TetMeshBox
/gate/meshPhantom/setMaterial Air
/gate/meshPhantom/reader/setPathToELEFile data/BodyHasHeart.ele
/gate/meshPhantom/reader/setUnitOfLength 1.0 mm
/gate/meshPhantom/setPathToAttributeMap data/RegionAttributeTable.dat
在这里,GATE会隐含地假设存在两个文件,即‘data/BodyHasHeart.node'和'data/ BodyHasHeart.ele”。这些文件中定义的数值是根据“setUnitOfLength”命令设置进行解释的。Gate假设 '.ele' 的输入文件为每个四面体定义了一个区域属性——整数属性,逻辑上将四面体分组,形成网格的子结构。用户必须提供一个“属性map”,它定义了四面体网格中每个区域的材质和颜色。属性映射是一个文本文件,如下所示:
# [first region, last region] material visible r g b alpha
# ------------------------------------------------------------------------------------
1 1 Heart true 1.00 0.0 0.0 1.0
2 3 Adipose true 1.00 0.89 0.77 1.0
这两栏参考的区域属性定义在 ’.ele‘ 文件中。
包围盒的大小适应四面体网格的尺寸,包围盒的材质可以通过“setMaterial”设置。这里是TetMeshBox卷的一个可视化示例:
用于生成此图的完整代码可以在GateContrib GitHub存储库中找到: misc/TetrahedralMeshGeometry.
后面两个示例是翻译的用户手册,不懂。。。
在Github上搜GateContrib这个仓库,里面有很多内容可以学习。如果有错误的地方,欢迎指正。
这篇关于Gate学习2 ——Defining a geometry(定义几何体)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!