Geant4不完全学习指南8(物理列表的使用)

前面简单总结了探测器的定义及其相应相关的入门知识,通过前面的学习,基本了解了探测器相关类的知识。在前面提到过,有三个必须的类由用户自己定义,一个是探测器相关的定义,一个是物理列表的使用,包括指定粒子和物理过程的选择,在一个就是初始粒子的产生,现在继续学习第二个内容,物理列表的选择与构造。我整理的逻辑是结合例子看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用户手册和源码中归纳总结的,关于物理列表的使用,等后续遇到实际的例子在进行分析总结!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值