其他分享
首页 > 其他分享> > Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

作者:互联网

Geant4是由欧洲核子研究组织基于C++面向对象技术开发的蒙特卡罗应用软件包,用于模拟粒子在物质中输运的物理过程。由于具有良好的通用性和扩展能力,Geant4在涉及微观粒子与物质相互作用的诸多领域获得了广泛应用。
ICRP110_HumanPhantoms

Geant4的基本概念

HEP中的模拟是“虚拟现实”。仿真既可用于在研发阶段帮助设计探测器,又可用于物理研究中了解探测器的响应。为了创建这样的虚拟现实,我们需要对粒子间的相互作用几何形状材料进行建模,以便将基本粒子传播到检测器中。我们还需要描述检测器生成原始数据的灵敏度。
Geant4是面向对象的工具包,它提供了在高能物理和其他领域进行仿真所需的功能。面向对象的好处有:

  1. 易于开发和维护
  2. 很好的模块化
  3. 协作者方便阅读和理解

讲述Geant4概念之前,先来看一个示例(B1):

int main(int argc,char** argv)  //程序开始
{
  // Detect interactive mode (if no arguments) and define UI session
  // 如果执行文件后面没有脚本文件,则开启可视化界面
  G4UIExecutive* ui = 0;    
  if ( argc == 1 ) {
    ui = new G4UIExecutive(argc, argv);
  }

  // Optionally: choose a different Random engine...
  // G4Random::setTheEngine(new CLHEP::MTwistEngine);
  
  // Construct the default run manager
  // 产生一个运行管理对象runManager,采用默认类型
  auto* runManager =
    G4RunManagerFactory::CreateRunManager(G4RunManagerType::Default);

  // Set mandatory initialization classes
  //
  // Detector construction
  // 用定义的运行管理对象
  runManager->SetUserInitialization(new B1DetectorConstruction());

  // Physics list
  // 创建物理过程对象physicsList
  G4VModularPhysicsList* physicsList = new QBBC;
  physicsList->SetVerboseLevel(1);  // 设置物理过程的详细级别为1级
  runManager->SetUserInitialization(physicsList); // 初始化运行管理对象runManager的物理过程
    
  // User action initialization
  runManager->SetUserInitialization(new B1ActionInitialization());  // 初始化B1示例中行为类
  
  // Initialize visualization
  // 初始化可视化管理对象visManager
  G4VisManager* visManager = new G4VisExecutive;
  // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance.
  // G4VisManager* visManager = new G4VisExecutive("Quiet");
  visManager->Initialize();   // 初始化可视化管理对象

  // Get the pointer to the User Interface manager
  G4UImanager* UImanager = G4UImanager::GetUIpointer();   // 获取指向可视化界面管理器的指针

  // Process macro or start UI session
  // 如果运行程序时输入了运行脚本文件,则运行为批处理模式;否则,则运行可视化界面
  if ( ! ui ) { 
    // batch mode
    G4String command = "/control/execute "; // 用户界面命令
    G4String fileName = argv[1];  // 记录脚本文件名称
    UImanager->ApplyCommand(command+fileName);  //执行用户界面命令
  }
  else { 
    // interactive mode 
    UImanager->ApplyCommand("/control/execute init_vis.mac");
    ui->SessionStart(); // 开始可视化界面
    delete ui;  // 释放执行对象ui内存
  }

  // Job termination
  // Free the store: user actions, physics_list and detector_description are
  // owned and deleted by the run manager, so they should not be deleted 
  // in the main() program !
  
  delete visManager;  // 释放可视化管理器内存
  delete runManager;  // 释放运行管理对象内存
}

从B1示例的主函数中我们可以看到,Geant4的运行是依靠RunEventTrackStep这几个部分组成的:
geant4的结构
具体的运行过程为:
geant4运行流程
下面开始逐个介绍其每部分的作用以及含义:

Run

和现实中我们做实验一样,run表示在实验中发射一束粒子。当运行一个run后,以下信息在这个run结束前不能更改:

某种意义上讲,一个run是一系列相同情况下event的集合。

Event

在开始运行之前,一个event包含了某种被定义的粒子,每个粒子被存入stack中,当粒子发射完,stack为空时,该event结束。
G4Event类表示一个event。 在结束时有以下能够收集以下信息:

Track

Track是存放每个粒子的信息,StepTrack的小段信息,但是Track不是Step的集合。Track在以下情况被析构(Delete):

Track在以下三个类中产生:

Step

Step具有两个点(Begin of step point,End of step point),还有粒子的“增量”信息(Step的能量损失,Step所花费的飞行时间等)。
每个点都知道粒子信息,如果步骤受体积边界限制,则端点物理上位于边界上,并且逻辑上属于下一个体积。
Step

Trajectory

TrajectoryTrack历史的记录。 它将轨道完成的所有步骤的一些信息存储为G4TrajectoryPoint类的对象。
由于内存消耗的角度来看,建议不要存储Trajectory中产生的次级粒子的轨迹。
用户可以从G4VTrajectoryG4VTrajectoryPoint基类创建自己的轨迹类,以存储对模拟有用的任何其他信息。

Geant4运行的基本流程

Geant4运行流程

如何开始Geant4

初始化

  1. 定义物质和几何体结构
  2. 定义粒子、物理过程以及加载需要的反应截面表
    初始化

运行

  1. 导入几何体结构
    Beam On

  2. 循环Event
    – 若多于一个run,则配置不同几何体
    Event

用户需要定义的类

几个简单的输入输出流(G4cout,G4cerr,G4endl)

G4coutG4cerrG4endlG4ios.hh中定义,这些对象封装了机器/操作系统/编译器依赖。就像普通的std :: coutstd :: cerrstd :: endl一样使用它们。一些GUI使用这些ostream对象来保留自己的缓冲日志文件。不推荐使用std :: cin。 某些GUI无法正确处理std :: cin,使用用户定义的UI命令获取输入。

强制用户定义类

设置环境变量

这些操作在安装Geant4时理应设置好!

[ming@localhost geant4make]$ $G4SYSTEM
bash: Linux-g++: command not found...

[ming@localhost Desktop]$ cd $G4INSTALL
[ming@localhost geant4make]$ pwd
/usr/local/share/Geant4-10.7.1/geant4make

[ming@localhost geant4make]$ cd $G4WORKDIR
bash: cd: /home/ming/geant4_workdir: No such file or directory

[ming@localhost geant4make]$ cd $CLHEP_BASE_DIR 
[ming@localhost local]$ pwd
/usr/local

[ming@localhost ~]$ cd $G4LEVELGAMMADATA
[ming@localhost PhotonEvaporation5.7]$ pwd
/usr/local/share/Geant4-10.7.1/data/PhotonEvaporation5.7

还有一些其他变量,例如GUIVISROOT等!

主程序

Geant4不提供main(),需要用户自己编写。
主程序中,必须包含以下几个部分:

可视化

在主程序中,根据计算机环境,构造Geant4提供的G4UIsession具体类,并调用其sessionStart()方法来进行可视化,Geant4提供以下几种可视化的方式:

根据您的计算机环境从G4VVisManager派生用户自己的具体类。Geant4提供图形驱动程序的接口:

定义Detector

G4VUserDetectorConstruction抽象基类派生用户自己的具体类。
用户要在虚函数Construct()中定义以下内容:

可以选择定义探测器元素的可视化属性。

选择物理过程

Geant4没有任何默认的粒子或过程,即使对于粒子传输,也必须明确定义它。
G4VUserPhysicsList抽象基类派生用户自己的具体类:

Geant4提供了许多实用程序类/函数。

产生初级粒子

G4VUserPrimaryGeneratorAction抽象基类派生用户的具体类,将G4Event对象传递给一个或多个主要生成器具体类对象,这些对象生成主要顶点和主要粒子,Geant4提供了三个粒子生成器:

用户可选类

必须在用户的main()中构造所有用户行为类,这些类的方法在Beam On期间被调用,并且必须将其设置为RunManager

G4UserRunAction

G4UserEventAction

G4UserStackingAction

G4UserTrackingAction

G4UserSteppingAction

参考资料:
GettingStarted
B1

标签:粒子,定义,用户,工具包,ming,可选类,可视化,Geant4
来源: https://blog.csdn.net/sinat_33249803/article/details/116067709