通向GEANT4的结晶


作者: 丁雪峰 武汉大学 xfding@whu.edu.cn

如果有意见或者建议,欢迎评论或者发邮箱!

修改历史:

2013年1月4日 v0.1

最简单的探测器,几何粒子+无相互作用。

2013年1月9日 v0.1.2

添加了与Makefile相关的易错提示

2013年9月20日 v0.1.3

去掉无关紧要的部分。


正文

0 分节剧情

在这篇日志里,我会介绍一个可以执行的geant4程序的基本构成,让你对用来模拟探测器的geant4程序有一个整体的认识。如果你想知道如何安装geant4工具包,以及最简单的使用方法,请参考其它文章。事实上,最简单的方法,是请一位专业的师兄帮你安装配置好,你只要会用就行了。

1 简介

 什么是GEANT4?

GEANT4是一个工具包,它是由C++编写而成的类库。你通过include相应的头文件,并在编译时链接相应的库文件使用GEANT4.

我们用GEANT4做什么?

GEANT4一般用来给出探测器的性能。

探测器的性能包括(能量、位置、时间)分辨率、探测效率、排斥比等。

对于分辨率,探测器测量得到的值一般是以真实值为中心的高斯分布[1-1]。高斯分布的σ除以真实值就是探测器对这个量的分辨率。

对于探测效率和排斥比,举个例子,我想知道今天有多少尾号为2的车经过二桥。假设有100量这样的车通过了,探测器指看到了其中的97辆,那么探测效率就是97%。有10000辆尾号不是2的车经过了二桥,但是探测器把其中的1辆误当成尾号为2的了(这样最后探测器会告诉我有98辆这样的车),排斥比就是1/10000。

[1-1] 假设真实值的分布是δ函数。

什么是事例?

事例(Event),就是一件事情,一个故事。探测器记录探测结果时以事例为单位打包。

我们要探测的粒子的诞生标志着故事的开始。而这个粒子(以及所有由它衰变产生的次级粒子都)被吸收、停止、跑出我们关心的空间区域、被探测器探测到标志着故事的结束。

事例的开始是随意的,你可以从一个故事的中间开始记录这个故事。故事的结束也很随意——你可以说,我记不住那么多,就到这吧。

2 如何使用GEANT4做一个最简单的模拟?

在开始之前,我需要你记住三句话:

    GEANT4需要用户告诉它三件事

1) 探测器的几何是怎样的,即探测器各个部分的形状、材料、材料性质、相对位置是怎样的?

2) 每个事例的初级顶点是怎样的,即事例开始时有多少个粒子、每个粒子的种类、动量、能量是怎样的?

3) 每种粒子会发生什么物理过程,这些物理过程发生后会发生什么事情?

GEANT4提供了三个抽象类:G4VUserDetectorConstructionG4VUserPrimaryGeneratorActionG4VUserPhysicsList。你需要继承它们并分别实现它们的纯虚函数,即ConstructGeneratePrimariesConstructParticle ConstructProcessSetCuts

如何开始模拟?

你需要在main函数分别中new我上面提到的三个抽象类的子类,通过new G4RunManager拿到runManager的指针,并通过SetUserInitializaion和SetUserAction方法来把你的类告诉runManager,最后让runManager执行initialize(),并且执行beamOn(需要模拟的event的个数)。

如何定义探测器几何?

首先,我们需要定义材料、材料的性质(包括密度、对不同波长的gamma的吸收能力等)。

然后,需要定义探测器中所有组成部分的几何形状。注意几何形状没有相对位置的概念。

接下来,需要定义探测器中所有组成部分的材料。

接下来,需要定义探测器中所有组成部分的相对位置。

如何定义事例初级顶点?

最简单的情况,可以利用G4ParticleGun这个类。

首先,new一个particleGun。

然后,通过一系列set方法执行你要shoot的粒子的种类、能量、动量,以及初始位置。

最后,通过generatePrimaryEvent(G4Event* event)产生一个event,并把它传给自己的形参。

如何定义每种粒子会发生什么物理过程,这些物理过程发生后会发生什么事情?

首先,在ConstructParticle中把所有可能出现的粒子定义好

然后,在ConstructProcess中把所有定义过的粒子可能发生的物理过程定义好

最后,在SetCuts中为没种物理过程设置截断值。一般用默认值就可以,不需要更多的代码。



至此,本文完。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值