建立一次模拟,在 G4
中称为一次Run;Run 建立后,需要对几何结构、物理过程进行初始化;初始化完成后就开始模拟过程了,首先发射一个粒子。在G4 中,发射一个(或一系列)粒子到所有次级粒子死亡的过程成为一次 Event。而每次发射的初始粒子则有粒子发射器进行控制。而在每一个event过程中,粒子与材料反应后会可能生成多个次级粒子,每个粒子都会有一条径迹,称之为
track;而每一个粒子(初始的或次级的)的径迹又是由很多步组成的,称之为step。
G4模拟的基本算法:
A Run
Start -> 初始化物理模型/几何模型-> An Event Start -> 调用粒子发射器发射粒子
-> A Track
Start
-> A Step Start
-> A Step End
-> Next Step
Start
-> ……
-> All Step End
-> A Track
End
-> Next Track Start
-> ……
-> All Track End
-> An
Event End -> Next Event Start
-> ……
-> All
Event End(All Primaries Shot) -> A Run End -> Next Run
Start
-> ……
1)
main()中应该包括的内容
Geant4是一个探测器模拟工具, 但它对于某个特定的模拟程序没有固定的main()函数, 用户在建立模拟程序的过程中需要提供自己的main()函数. 一个最基本的main()函数需要包括以下几个方面:
G4RunManager(模拟整个过程)
G4VUserDetectorConstruction(定义探测器材料, 几何形状,
灵敏区和读出方案)
G4VUserPhysicsList(定义粒子种类和物理过程, 还有截断参数)
G4VUserPrimaryGeneratorAction(定义了源粒子的种类, 能量, 出射方向等)
一个最简单的main()函数如下:
#include
"G4RunManager.hh"
#include
"G4UImanager.hh"
#include
"ExN01DetectorConstruction.hh"
#include
"ExN01PhysicsList.hh"
#include
"ExN01PrimaryGeneratorAction.hh"
int
main()
{
// Construct the default run
manager
G4RunManager* runManager = new
G4RunManager;
// set mandatory initialization
classes
runManager->SetUserInitialization(new
ExN01DetectorConstruction);
runManager->SetUserInitialization(new
ExN01PhysicsList);
// set mandatory user action
class
runManager->SetUserAction(new
ExN01PrimaryGeneratorAction);
// Initialize G4 kernel
runManager->Initialize();
// get the
pointer to the UI manager and set verbosities
G4UImanager* UI =
G4UImanager::GetUIpointer();
UI->ApplyCommand("/run/verbose
1");
UI->ApplyCommand("/event/verbose
1");
UI->ApplyCommand("/tracking/verbose
1");
// start a run
int numberOfEvent = 3;
runManager->BeamOn(numberOfEvent);
// job termination
delete runManager;
return 0;
}
main()首先生成一个
G4RunManager类,这个类是在主程序中用以初始化模拟信息,用来连接子程序,连接方式是通过
Set函数来完成。
例如:
BDetectorConstruction* detector = new
BDetectorConstruction;
runManager->SetUserInitialization(detector);
先构造一个探测器几何,再用 SET
函数初始化。
用 new申请的空间,在程序完成后需要释放空间,否则出错。注意:GEANT4中,在runManager上面说明的其他类会自动释放。所以不需要一一释放。
其他类按照重要性分为强制类和可选类。 其中几何结构类(DetectorConstruction)、物理设定类(PhysicsList)、源描述类(PrimaryGenerator)都属于强制类,缺少任一个程序都无法运行。而事件处理类(EventAction)、步数据处理类(SteppingAction)、径迹处理类
(TrackingAction)、运行处理类(RunAction)都属于可选类,用户可以通过设定这些类来获取感兴趣的数据,可以按照自己的需要添加。
包含强制类之后程序就可以运行了,但只能检验几何结构的完备性,所以为了获得数据必须设定可选类。
1.
Geant4的类结构
Geant4程序代码是根据这个类结构建立起来的, 类结构如下图所示.
下面就是Geant4中每个类的简单说明.
1) Run 和 Event
这些类与模拟事件相关,
产生次级粒子,
为粒子径迹模拟器提供粒子.
2) Tracking 和 Track
根据粒子在探测器材料中的物理过程模拟粒子运行的轨迹, 给出粒子特定时间段在空间的位置,
或者粒子空间时间的分布.
3)
Geometry, Magnetic Field 和CAD-Interface
这三个类就是用来描述探测器几何结构和探测器中电磁场的分布. 为了使探测器几何结构可以在CAD系统中进行修改, Geant4的几何体模型完全与ISO STEP标准一致. 将来Geant4中几何结构的设计将从程序设计中独立出来. 面向对象设计的方法可以让用户在不影响程序其他部分的同时改变几何参数和场.
4) Particle Definition
和 Matter
这两个类用于定义粒子和探测器材料.
5)
Physics
它提供了粒子与探测器材料相互作用时所发生物理过程的模型, 允许用户为每次反应或每个反应道添加物理模型. 用户根据粒子的种类,
探测器材料和能量范围选择不同的物理模型.
Geant4有电磁物理过程和强子物理过程模型, 同时也提供了散射截面数据库.
6) Hits 和Digitization
这个两个类用于对用户定义的灵敏区内的响应进行采样和分析.
7) Visualization
它显示了探测器几何形状,
粒子轨迹和碰撞过程.
由于采用了面向对象设计技术来设计可视化部分, 这允许用户独立开发可视化工具,
如: OpenGL
和 Op