三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

不只是安装:用 Geant4 B1 示例快速上手粒子物理模拟(Ubuntu 20.04 环境)

不只是安装:用 Geant4 B1 示例快速上手粒子物理模拟(Ubuntu 20.04 环境)

不只是安装:用 Geant4 B1 示例快速上手粒子物理模拟(Ubuntu 20.04 环境)

第一次打开 Geant4 的可视化界面时,那些闪烁的粒子轨迹和复杂的几何结构可能让人既兴奋又困惑。作为高能物理模拟的黄金标准工具,Geant4 的强大功能背后是陡峭的学习曲线。本文将带您跳过枯燥的配置阶段,直接通过 B1 示例理解粒子模拟的核心逻辑——从代码结构到物理过程的可视化解读。

1. 解剖 B1 示例:从目录结构到物理过程

B1 示例位于examples/basic/B1目录,这个简单的初级模拟包含了 Geant4 项目的典型结构:

B1/ ├── CMakeLists.txt ├── exampleB1.in ├── include/ │ ├── B1ActionInitialization.hh │ ├── B1DetectorConstruction.hh │ ├── B1EventAction.hh │ ├── B1PrimaryGeneratorAction.hh │ └── B1RunAction.hh └── src/ ├── B1ActionInitialization.cc ├── B1DetectorConstruction.cc ├── B1EventAction.cc ├── B1PrimaryGeneratorAction.cc └── B1RunAction.cc

关键文件的作用:

  • CMakeLists.txt:构建系统的核心配置文件,定义了:

    find_package(Geant4 REQUIRED) # 查找Geant4库 include(${Geant4_USE_FILE}) # 加载Geant4设置 add_executable(exampleB1 ...) # 定义可执行文件 target_link_libraries(exampleB1 ${Geant4_LIBRARIES}) # 链接库
  • include/ 和 src/:典型的C++头文件与实现分离结构,每个类对应一个物理过程:

    • DetectorConstruction:定义模拟的几何世界
    • PrimaryGeneratorAction:控制粒子源
    • Run/EventAction:处理模拟事件

2. 构建与运行:理解编译背后的逻辑

build目录执行cmake ../时,系统会:

  1. 检查 Geant4 依赖项(如OpenGL、QT)
  2. 生成适合当前系统的Makefile
  3. 通过make编译时,实际发生了:
    • 将C++源码转换为机器码
    • 链接Geant4的核心库(G4global, G4geometry等)
    • 生成可执行文件exampleB1

运行示例时添加-m参数可以指定多线程模式:

./exampleB1 -m 4 # 使用4个线程

注意:如果遇到GL/gl.h缺失错误,需安装libgl1-mesa-dev

sudo apt install libgl1-mesa-dev

3. 可视化界面操作指南

成功运行后出现的QT界面包含以下功能区域:

组件功能快捷键
3D视图显示几何体和粒子轨迹鼠标拖动旋转
控制面板开始/暂停模拟Space
参数调整修改粒子能量/类型需在代码中预设
视图选项切换线框/实体模式F5/F6

通过右键菜单可以:

  • 高亮选中特定粒子轨迹
  • 测量几何体尺寸
  • 保存当前视角为EPS/PDF

典型问题排查

  • 如果界面卡顿:尝试关闭抗锯齿(在DetectorConstruction中设置)
  • 轨迹显示异常:检查EventAction中的绘图标志位
  • 几何体缺失:确认材料定义是否完整

4. 从代码到物理:理解模拟的核心要素

B1 示例模拟的是电子穿过铅板的过程,关键参数在PrimaryGeneratorAction.cc中定义:

// 设置粒子类型为电子(e-) fParticleGun->SetParticleDefinition(G4Electron::Definition()); // 能量设置为1 MeV fParticleGun->SetParticleEnergy(1.*MeV);

几何定义在DetectorConstruction.cc中:

G4Box* solidWorld = new G4Box("World", 1*m, 1*m, 1*m); // 1m³的真空世界 G4Box* solidTarget = new G4Box("Target", 5*cm, 5*cm, 1*cm); // 5cm铅板

物理过程通过PhysicsList自动加载:

  • 电磁相互作用(电离、轫致辐射)
  • 多次散射模型
  • 能量沉积计算

5. 进阶修改:定制你的第一个模拟

尝试以下修改来深入理解系统:

  1. 更换粒子类型

    // 改用质子模拟 #include "G4Proton.hh" fParticleGun->SetParticleDefinition(G4Proton::Definition());
  2. 增加几何复杂度

    // 在铅板后添加塑料探测器 G4VSolid* det = new G4Tubs("Detector", 0, 10*cm, 1*cm, 0, 360*deg);
  3. 记录更多数据

    // 在EventAction中增加能量沉积记录 G4AnalysisManager* analysis = G4AnalysisManager::Instance(); analysis->FillH1(0, edep);

修改后需要重新编译:

make clean && make -j$(nproc)

6. 性能优化技巧

对于更复杂的模拟,这些参数调整能显著提升效率:

参数配置文件推荐值作用
切分阈值DetectorConstruction0.7*mm几何体细分粒度
截止能量PhysicsList0.1*MeV停止跟踪低能粒子
存储轨迹SteppingAction仅高能粒子减少内存占用
多线程数main()CPU核心数-1并行计算

run.mac中添加这些命令可以批量设置:

/run/setCut 0.7 mm /run/initialize /run/beamOn 1000

通过top命令监控内存使用,优化后的B1示例在Ryzen 7处理器上可以达到每秒约5000个事件的处理速度。

← 返回列表