前面简单总结了探测器的定义及其相应相关的入门知识,通过前面的学习,基本了解了探测器相关类的知识。在前面提到过,有三个必须的类由用户自己定义,一个是探测器相关的定义,一个是物理列表的使用,包括指定粒子和物理过程的选择,在一个就是初始粒子的产生,现在继续学习第二个内容,物理列表的选择与构造。我整理的逻辑是结合例子看G4学习手册,简单学习一些常见的类,准备把例子中的一些实例都简单的过一遍。
write by jack in hubei 2019.7.28 9:17
G4VuserPhysicsList 是用户必要的基类,在这个类中,所有将被用于模拟的粒子和物理过程必须定义。截断范围参数也应该在这个类中定义。
用户必须创建一个由G4VuserPhysicsList 派生的类并实现下列纯虚方法:
ConstructParticle() : 粒子构造
ConstructProcess() : 物理过程构造并向相关粒子注册这些过程
SetCuts() : 为所有粒子设定一个截断值
ConstructParticle()是一个纯虚方法,所有在模拟中的需要的粒子的静态成员函数应在这个方法中调用。这保证了那些粒子的对象将被建立。注意用户必须定义初级粒子和其他所有可能出现的次级粒子。
Geant4 为用户提供了各种类型的粒子:
普通粒子,如电子,质子,gamma
短寿命共振粒子,如矢量介子和 delta 重子
原子核,如氚核,α粒子和重离子
夸克,底夸克,胶子
每个粒子都由各自的类来描述,这些类都是由 G4ParticleDefinition 派生的。这些粒子主要分为 6 类:轻子,介子,重子,玻色子,短寿命粒子,离子。
G4ParticleDefinition中有用于区分每个粒子的属性,如,名字,质量,电荷,自旋,等等。这些属性中,大部分是“只读”的,用户要对这些属性进行更改,就必须重建库。
每个粒子类代表一个独立的粒子,并且,每个类都有一个唯一的静态对象 ,例如, G4Electron 代表电子,它的唯一对象是 G4Electron::theElectron 。指向这个对象的指针可以通过静态方法 G4Electron::ElectronDefinition() 获取。
缺省情况下,Geant4 提供了超过 100 种粒子用于各种物理过程。在通常的应用程序中,用户不需要定义他自己的粒子。
由于粒子是 singleton 粒子类的静态对象,这些对象在 main() 函数执行之前自动被实例化。然而,你必须显式的声明那些将被你的应用程序使用的粒子类,否则,编译程序不能识别哪些类是你需要的,结果将是没有粒子将被实例化。
为了避免红外发散,一些电磁过程要求设定一份低阈,在阈值以下,将不产生任何次级粒子。因此,gamma,电子和正电子要求设定一个阈值。阈值的定义为距离,或者截断范围,它将自动的转化为对应于不同介质的截断能量。这个阈值应该在用户初始化部分用G4VUserPhysicsList 的 SetCuts() 方法定义。
产物的阈值应在SetCuts()中定义,它是 G4VUserPhysicsList 类中的纯虚方法。粒子,材料,物理过程的构造应在SetCuts()之前。在通常的应用程序中,G4RunManager关心这个顺序。
“唯一截断范围值”的思想是G4 中的一个重要特性,它用一个一致的方法处理截断值。对于多数应用来说,用户只要确定一个截断范围值,这个值将以同样的方式用于gamma,电子,正电子。在这种情况下,可以用SetCutsWithDefault() 方法,它由基类 G4VuserPhysicsList 提供,它有一个 defaultCutValue 成员作为缺省截断范围值。 SetCutsWithDefault() 使用这个值。
可以对 gamma,电子和正电子设定不同的截断范围值,并且对不同的几何区域设置不同的截断范围值。在这种情况下,必须非常小心,因为 Geant4 进程(特别是能量损失)是遵循“唯一截断范围值”的模式设计的。
物理过程描述粒子如何与物质相互作用。G4中提供了7个大类描述这些过程
(1)电磁相互作用 (2)强相互作用 (3)输运 (4)衰变 (5)可见光 (6)photolepton (7)参数化相互作用
所有这些物理过程的基类都是G4VProcess。他的虚方法:
所有这些物理过程的基类都是 G4VProcess 。他的虚方法AtRestDoIt , AlongStepDoIt ,和PostStepDoIt和对应的方法
AtRestGetPhysicalInteractionLength , AlongStepGetPhysicalInteractionLength ,PostStepGetPhysicalInteractionLength
和在它们的派生类中描述了这些物理过程的行为。
G4VUserPhysicsList 是"必要的用户类"的一个基类,在这个类中,所有模拟中需要的物理过程和粒子必须被注册。用户必须构造一个从 G4VUserPhysicsList 类派生的类,并且实现它的纯虚方法 ConstructProcess()。
下面是为光子注册电磁作用过程的实例:
上面内容是G4用户手册和源码中归纳总结的,关于物理列表的使用,等后续遇到实际的例子在进行分析总结!