Gate学习2 ——Defining a geometry(定义几何体)

2023-11-21 04:20

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

 

这篇关于Gate学习2 ——Defining a geometry(定义几何体)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399786

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件