0
点赞
收藏
分享

微信扫一扫

【G4基础05】2.5 How to Specify Physics Processes

小贴贴纸happy 2022-04-13 阅读 52
c++

文章目录


一、物理过程

Physics Processes描述粒子如何与材料相互作用。

  • GEANT4 提供了七大类别的过程
  • 所有物理过程都来自G4VProcess基类,其虚方法与对应方法描述物理过程在派生类中实现时的行为(详见5.2 Physics Processes)
虚方法对应方法
AtRestDoItAtRestGetPhysicalInteractionLength
AlongStepDoItAlongStepGetPhysicalInteractionLength
PostStepDoItPostStepGetPhysicalInteractionLength
  • 用于简单进程的专用基类:

复杂过程还包括另外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);
}
举报

相关推荐

0 条评论