文章目录
一、物理过程
Physics Processes描述粒子如何与材料相互作用。
- GEANT4 提供了七大类别的过程
- 所有物理过程都来自G4VProcess基类,其虚方法与对应方法描述物理过程在派生类中实现时的行为(详见5.2 Physics Processes)
虚方法 | 对应方法 |
---|---|
AtRestDoIt | AtRestGetPhysicalInteractionLength |
AlongStepDoIt | AlongStepGetPhysicalInteractionLength |
PostStepDoIt | PostStepGetPhysicalInteractionLength |
- 用于简单进程的专用基类:
复杂过程还包括另外4个虚类,如G4VContinuousDiscreteProcess
二、管理proceses
- G4ProcessManager
- 包含一个粒子可执行的过程列表,有关于process调用顺序的信息,
- 以及哪种类型的DoIt方法对列表中的哪个process有效。
- 一个G4ProcessManager对象对应于一个粒子,并被附加到G4ParticleDefiniton类
- process顺序信息
- 通过AddProcess( )和SetProcessOrdering( )方法包括在内。
- 对于简单processes,可以使用AddAtRestProcess(),*AddContinuousProcess()和AddDiscreteProcess()*方法
- G4ProcessManager
- 可以在一个run里通过*ActivateProcess()和InActivateProcess()*方法打开和关闭一些processes
- 但必须在process注册后进行,因此不能用在PreInit阶段
- G4VUserPhysicsList 类
- 创建G4ProcessManager 对象
- 并将其附加到*ConstructParticle( )*方法中定义的所有粒子类
三、指定物理过程
- G4VUserPhysicsList是强制用户类的基类
- 用户必须创建一个从G4VUserPhysicsList派生的类并实现纯虚方法ConstructProcess( )
1. ConstructProcess()
//如果只需要G4Geantino粒子类,则只需要注册transportation过程
//ConstructProcess()方法将被实现如下:
void MyPhysicsList::ConstructProcess()
{
// Define transportation process
AddTransportation();
}
//这里在G4VUserPhysicsList类中提供了AddTransportation()方法
//用于将G4Transportation类注册到所有粒子类
G4Transportation类(和/或相关类)描述了粒子在空间和时间的运动,是tracking追踪粒子的强制类
2. G4PhysicsListHelper
- 在ConstructProcess( ) 方法中,物理过程应该创建并注册到每个粒子的G4ProcessManager实例
- 在G4ProcessManager中注册对于其他流程和粒子来说是一个复杂的过程,因为过程之间的关系对于某些过程是至关重要的。
- 为了简化注册过程,提供了G4PhysicsListHelper,用户不关心过程类型(即AtRest和/或Discrete和/或Continuous)或排序参数
void MyPhysicsList::ConstructProcess()
{
// Define transportation process
AddTransportation();
// electromagnetic processes
ConstructEM(); //创建电磁过程
}
void MyPhysicsList::ConstructEM() //声明电磁过程包括哪些过程
{
// Get pointer to G4PhysicsListHelper
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();//G4PhysicsListHelper的指针为ph
// Get pointer to gamma
G4ParticleDefinition* particle = G4Gamma::GammaDefinition();//gamma的指针为particle
// Construct and register processes for gamma
ph->RegisterProcess(new G4PhotoElectricEffect(), particle); //通过ph对particle分别创建多个过程
ph->RegisterProcess(new G4ComptonScattering(), particle);
ph->RegisterProcess(new G4GammaConversion(), particle);
ph->RegisterProcess(new G4RayleighScattering(), particle);
}