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

 cylindricalPETSPECTHeadecatCPETOPET 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这个仓库,里面有很多内容可以学习。如果有错误的地方,欢迎指正。

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值