Geant4基础知识.docx
《Geant4基础知识.docx》由会员分享,可在线阅读,更多相关《Geant4基础知识.docx(13页珍藏版)》请在冰豆网上搜索。
Geant4基础知识
Geant4基础知识
G4模拟粒子过程:
建立一次模拟,在G4中称为一次Run;Run建立后,需要对几何结构、物理过程进行初始化;初始化完成后就开始模拟过程了,首先发射一个粒子。
在G4中,发射一个(或一系列)粒子到所有次级粒子死亡的过程成为一次Event。
而每次发射的初始粒子则有粒子发射器进行控制。
而在每一个event过程中,粒子与材料反应后会可能生成多个次级粒子,每个粒子都会有一条径迹,称之为track;而每一个粒子(初始的或次级的)的径迹又是由很多步组成的,称之为step。
G4模拟的基本算法:
ARunStart->初始化物理模型/几何模型->AnEventStart->调用粒子发射器发射粒子
->ATrackStart
->AStepStart
->AStepEnd
->NextStepStart
->……
->AllStepEnd
->ATrackEnd
->NextTrackStart
->……
->AllTrackEnd
->AnEventEnd->NextEventStart
->……
->AllEventEnd(AllPrimariesShot)->ARunEnd->NextRunStart
->……
1)main()中应该包括的内容
Geant4是一个探测器模拟工具,但它对于某个特定的模拟程序没有固定的main()函数,用户在建立模拟程序的过程中需要提供自己的main()函数.一个最基本的main()函数需要包括以下几个方面:
G4RunManager(模拟整个过程)
G4VUserDetectorConstruction(定义探测器材料,几何形状,灵敏区和读出方案)
G4VUserPhysicsList(定义粒子种类和物理过程,还有截断参数)
G4VUserPrimaryGeneratorAction(定义了源粒子的种类,能量,出射方向等)
一个最简单的main()函数如下:
#include""
#include""
#include""
#include""
#include""
intmain()
{
Geant4的类结构
Geant4程序代码是根据这个类结构建立起来的,类结构如下图所示.下面就是Geant4中每个类的简单说明.
1)Run和Event
这些类与模拟事件相关,产生次级粒子,为粒子径迹模拟器提供粒子.
2)Tracking和Track
根据粒子在探测器材料中的物理过程模拟粒子运行的轨迹,给出粒子特定时间段在空间的位置,或者粒子空间时间的分布.
3)Geometry,MagneticField和CAD-Interface
这三个类就是用来描述探测器几何结构和探测器中电磁场的分布.为了使探测器几何结构可以在CAD系统中进行修改,Geant4的几何体模型完全与ISOSTEP标准一致.将来Geant4中几何结构的设计将从程序设计中独立出来.面向对象设计的方法可以让用户在不影响程序其他部分的同时改变几何参数和场.
4)ParticleDefinition和Matter
这两个类用于定义粒子和探测器材料.
5)Physics
它提供了粒子与探测器材料相互作用时所发生物理过程的模型,允许用户为每次反应或每个反应道添加物理模型.用户根据粒子的种类,探测器材料和能量范围选择不同的物理模型.Geant4有电磁物理过程和强子物理过程模型,同时也提供了散射截面数据库.
6)Hits和Digitization
这个两个类用于对用户定义的灵敏区内的响应进行采样和分析.
7)Visualization
它显示了探测器几何形状,粒子轨迹和碰撞过程.由于采用了面向对象设计技术来设计可视化部分,这允许用户独立开发可视化工具,如:
OpenGL和OpenInventor(为X11和Windows设计),DAWN,Postscript(viaDAWN)和VRML.
8)Interfaces
支持可视化用户界面以及和外加程序的交流(OODBMS,reconstruction等).
①UserVerboseoutputclass,定义了一个verbosity变量;
②Runmanager,定义了一个运行管理器runManager;
③UserInitializationclasses(mandatory),设置两个强制类ExN02DetectorConstruction和ExN02PhysicsList;
④UserActionclasses,设置用户干涉类ExN02PrimaryGeneratorAction、ExN02RunAction、ExN02EventAction和ExN02SteppingAction;
⑤InitializeG4kernel,“runManager->Initialize()”,初始化GEANT4内核。
构造探测器,生成物理过程,计算截面以及其他;
⑥GetthepointertotheUserInterfacemanager,获取UI管理器的指针;
⑦batchmode,定义了批处理模式;
⑧interactivemode:
definevisualizationandUIterminal;定义了交互模式的可视化和UI终端;
2.构建模型:
在Geant4中首先要建立一个最大的盒子,称为WorldVolume,然后往这个大盒子里面放各种各样的小盒子(部件),然后每个小盒子(部件)里面还可以放更小的盒子(零件),放入的小盒子将自动代替大盒子原有部分。
在Geant4中,将大盒子称为MotherVolume(母体),小盒子称为DaughterVolume(子体)。
除了WorldVolume之外,每个Volume(体)都必须且只能有一个母体,但可以没有子体,也可以有多个子体。
Geant4的这种盒子模型的要求是:
“不交不超”。
Geant4中每个这样的盒子的安放又分为两步。
第一步是构建盒子,称为LogicalVolume(逻辑体);第二步是将盒子摆放到正确位置,变为PhysicalVolume(物理体)。
构建盒子又分为两步,第一步是确定盒子形状,第二步是确定盒子的材料等属性。
形状在Geant4中被称为Solid。
在Geant4中提供了多种固有的形状,如球形、长方体、锥体等,可以在$G4INSTALL/source/geometry/solids里面查找。
用户也可以通过G4VSolid类构建自己的形状,参见:
$G4INSTALL/source/geometry/management/include/。
此外,对于一些复杂的形状,用户也可以利用基本形状通过交并补等布尔运算方式完成,布尔运算的方式请参考$G4INSTALL/source/geometry/solids/Boolean。
确定了盒子形状后,就是设置盒子的材料、磁场等属性。
这些属性的设置通过G4LogicalVolume类来完成,设置方法如下:
G4LogicalVolume(G4VSolid*pSolid,定义材料
1)基本概念
自然界中,材料(化合物,混合物)一般是由元素组成,而元素由同位素组成.Geant4中有三个类用来定义探测器材料的.
类G4Element描述了原子属性:
原子量,原子核中质子数,原子质量,壳层能量,还有每个原子的散射截面等.
类G4Material描述了材料的宏观属性:
密度,状态,温度,压强,还有辐射长度,平均自由程,dE/dx等.
2)定义单质材料
如下例,给出材料名称,密度,摩尔质量和原子量,定义了液态氩.
a,density);
a);
density=*g/cm3;
G4Material*Air=newG4Material("Air",density,ncomponents=2);
Air->AddElement(elN,fractionmass=70*perCent);
Air->AddElement(elO,fractionmass=30*perCent);
4.指定粒子
1)一般概念
Geant4能够模拟多种粒子.
基本粒子:
电子,质子,和gamma等.
短寿命的共振粒子:
媒质介子和delta重子.
核子:
氘,alpha粒子和重离子等.
夸克,D夸克和胶子.
G4ParticleDefinition类提供了粒子的定义,而且每种粒子都有自己的类.粒子主要分为6个大类:
轻子(lepton)
介子(meson)
强子(baryon)
波色子(boson)
短寿命粒子(shortlived)
离子(ion)
G4ParticleDefinition类包含了单个粒子的属性:
名称,质量,带电电荷,自旋等.其中大部分的属性都不可修改,除非重新建立库.Geant4定义了上百种粒子用于不同的物理过程,在一般应用中,用户不需要自己定义粒子.粒子在连接的过程中注册启用了,用户不须要(也不能)自行执行注册粒子.
2)指定粒子和物理过程
G4VUserPhysicsList类让用户可以指定粒子以及它们的物理过程,用户还可以指定截断参数.
一个用户从G4VUserPhysicsList中创建自己的类要利用以下几个步骤:
ConstructParticle():
调用粒子
ConstructPhysics():
调用粒子的物理过程
SetCuts():
设置粒子的截断值
用户利用ConstructParticle()来调用所需要的粒子的函数,如用户需要质子和geantino,代码如下:
们是:
G4BosonConstructor
G4LeptonConstructor
G4MesonConstructor
G4BarionConstructor
G4IonConstructor
G4ShortlivedConstructor
使用方法如下例:
在一般的模拟程序中,用户可以为所有的粒子设定一个截断值.如下:
下:
这种情况下,由于Geant4的物理过程(特别是计算能量损失的物理过程)是根据特定的截断值编写的,它们输出就会改变,所以用户应该特别小心.
为不同粒子设定不同截断值的例子如下:
指定物理过程
1)物理过程
物理过程描述了粒子与材料的相互作用.Geant4中提供了电磁,强子和其他的反应过程.有7个物理过程大类:
电磁物理过程(electromagnetic)
强子物理过程(hadronic)
输运过程(transportation)
衰减(decay)
光学过程(optical)
光轻子-强子过程(photolepton_hadron)
参数化过程(parameterisation)
G4VProcess是最基本的物理过程的类,每一个物理过程有三个"DoIt"方式来描述:
AtRestDoIt
AlongStepDoIt
PostStepDoIt
还有三个响应方式:
AtRestGetPhysicalInteractionLength
AlongStepGetPhysicalInteractionLength
PostStepGetPhysicalInteractionLength
下面给出了用于单个物理过程的基本的类:
G4VAtRestProcess(仅适合于"AtRestDoIt"方式的物理过程)
G4VContinuousProcess(仅适合于"AlongStepDoIt"方式的物理过程)
G4VDiscreteProcess(仅适合于"PostStepDoIt"方式的物理过程)
另外4个类(如G4VContinuousDiscreteProcess)用于复杂的物理过程.
2)指定物理过程
用户通过G4VUserPhysicsList来调用模拟程序中的粒子以及它们的物理过程.用户通过ConstructPhysics()方式利用G4VUserPhysicsList为每一个所调用的粒子创建自己的物理过程类.
i)添加输运方式
如果没有添加粒子的输运方式,程序就不能描述粒子在时空的输运,以及不能记录粒子输运过程中的轨迹,所以用户就必须为所有的粒子调用G4Transportation.如下:
产生初始事件
1)初始事件
G4VUserPrimaryGeneratorAcrion可以让用户创建自己的初始事件类.用户提供初始事件的状态,如:
出射粒子的种类,出射能量,方向等.如下:
G4ParicleGun用来给用户确定出射粒子的动能和位置.方式如下:
voidSetParticleDefinition(G4ParticleDefinition*)
voidSetParticleMomentum(G4ParticleMomentum)
voidSetParticleMomentumDirection(G4ThreeVector)
voidSetParticleEnergy(G4doule)
voidSetParticleTime(G4double)
voidSetParticlePosition(G4ThreeVector)
voidSetParticlePolarization(G4ThreeVector)
voidSetNumberOfParticles(G4int)
执行模拟程序
1.命令总目录
/control/UI控制命令.
/units/单位.
/geometry/几何形状控制命令.
/tracking/轨迹和步长控制命令.
/event/事件控制命令.
/run/运行控制命令.
/random/随机数状态控制命令.
/particle/粒子控制命令.
/process/物理过程控制命令.
/hits/灵敏区和采样
/gun/粒子源控制命令.
/vis/可视化命令.
2.一些常用命令
1)/control/execute
说明:
执行一个宏文件.
2)/control/loop
说明:
多次执行宏文件
3)/units/list
说明:
列出所有存在的量纲.
4)/tracking/verbose
说明:
设置记录粒子轨迹信息的级别.
5)/run/beamOn
说明:
开始运行模拟程序.如果没有初始化G4内核,它将自动初始化.默认运行的事件数为1,第二第三个参数可以让用户在每次事件结束后执行一个宏文件.如果第二个参数(例:
宏文件名)存在,但第三个参数不存在,这样所有的事件都是执行这个宏文件.
6)/process/list
说明:
列出所有的物理过程名称.
7)/process/activate(inactivate)
说明:
激活(停止)物理过程,激活(停止)粒子运行.
name:
物理过程或类型的名称.
particle:
粒子名称[all:
所有的粒子]
8)/hits/list
说明:
列出灵敏区.
9)/gun/particle
说明:
源粒子设置.(默认为geantino)(出射离子)
10)/gun/energy
说明:
设定出射粒子的动能.
11)/gun/number
说明:
设置出射粒子的个数.
12)/vis/open
说明:
/vis/open[][]
在画图系统建立一个面,该面的名称自动给出.第二个参数给出窗口大小.
13)/vis/scene/create
说明:
/vis/scene/create[]创建一个当前使用的空的作图面.
14)/vis/scene/add/axes
说明:
/vis/scene/add/axes[][][][][]
默认值:
0001m在(x0,y0,z0)画出给定长度的坐标轴.
15)/vis/scene/add/hits
说明:
在作图面上添加碰撞.
16)/vis/scene/add/trajectories
说明:
/vis/scene/add/trajectories[drawing-mode]在作图面上添加粒子轨迹.
17)/vis/scene/add/volume
说明:
/vis/scene/add/volume[]
[][]
在作图面上添加物理块.
参数1:
几何块名称(默认"world").
参数2:
拷贝数(默认-1).如果是负值,选择第一个物理块
参数3:
下一级的深度(默认:
G4Scene:
:
UNLIMITED(-1)).
18)/vis/scene/endOfEventAction
说明:
/vis/scene/endOfEventAction[accumulate|refresh]
参数1:
下一次事件的轨迹图直接画在上一次事件结束时的图上
参数2:
刷新后画出当前事件轨迹图
19)/vis/viewer/create
说明:
/vis/viewer/create[][][]
为指定的作图面设置观察面,默认为当前的作图面.
20)/vis/viewer/flush
说明:
/vis/viewer/flush[]
是/vis/viewer/refresh+/vis/viewer/update的复合命令.用来刷新和初始化作图系统.用/vis/viewer/list命令显示的名称来指定观察面.
21)/vis/viewer/refresh
说明:
/vis/viewer/refresh[]
刷新观察面,使用当前观察面,可以刷新/vis/viewer/list命令列出的观察面.
22)/vis/viewer/zoom
说明:
/vis/viewer/zoom[]把观察对象放大多少倍.
23)/vis/viewer/zoomTo
说明:
/vis/viewer/zoomTo[]把观察对像放大到多少倍.
24)/vis/viewer/set/style
说明:
/vis/viewer/set/stylew[ireframe]|s[urface]
25)/vis/viewer/set/viewpointThetaPhi
说明:
/vis/viewer/set/viewpointThetaPhi[][][deg|rad]设定观察方向.
26)/vis/viewer/set/viewpointVector
说明:
/vis/viewer/set/viewpointVector[][][]设定观察方向.