当前位置: 首页 > news >正文

Day 06 动作类的初始化类------以B1为例

Day 06 动作类的初始化类------以B1为例

一、B1ActionInitialization继承G4VUserActionInitialization类

这个G4VUserActionInitialization类中有两个虚函数:Build()BuildForMaster()。该类是一个抽象类,用来实例化所有的动作类的。

在顺序执行下,Build()会被G4RunManager调用;多线程模式下,Build()会被G4WorkerRunManager调用,BuildForMaster()会被G4MTRunManager调用。

若继承G4VUserActionInitialization类,就要重写这两个虚函数。Build()多线程和顺序模式都会被调用来初始化动作类,BuildForMaster()只会在多线程被调用取初始化动作类。

二、在BuildForMaster()中唯一需要去初始化的只有runAction动作类,其他动作类在Build()内即可,runAction动作类也需要在Build()中进行初始化
# BuildForMaster();自己写程序时,这里多半不需要动
void B1ActionInitialization::BuildForMaster() const
{# 范式(标准模式,配套使用)B1RunAction* runAction = new B1RunAction; # 创建指针SetUserAction(runAction);  # 用SetUserAction方法进行调用,通过runManager的方法进行调用
}# Build(),若想要跟踪时,可以在这里添加trackingAction
void B1ActionInitialization::Build() const
{# 该指针在这个方法中后面没有被需要(调用)所以可以直接newSetUserAction(new B1PrimaryGeneratorAction); # runAction指针在eventAction初始化中被调用这个参数,这个参数需要被传于,所以需要setB1RunAction* runAction = new B1RunAction;SetUserAction(runAction);B1EventAction* eventAction = new B1EventAction(runAction);SetUserAction(eventAction);SetUserAction(new B1SteppingAction(eventAction));
}

对于程序而言必须要有DetectorConstruction.cc类、PrimaryGeneratorAction.cc类。其余依情况添加。若让程序支持多线程,则B1ActionInitialization类也是必须存在的。

三、exampleB1.cc主程序文件:

前面build()里面包含primaryGeneratorAction、B1RunAction、B1EventAction、B1SteppingAction等,唯独没有

B1DetectorConstruction,这个动作类在主程序文件中被初始化:

G4RunManager* runManager = new G4RunManager;
# 告诉runManager我们的detector是什么样的
runManager->SetUserInitialization(new B1DetectorConstruction());# 例子:用户自己写的physics  list
G4VModularPhysicsList* physicsList = new QBBC;
physicsList->SetVerboseLevel(1);
runManager->SetUserInitialization(physicsList);#告诉runmanager初始化是什么样子的
runManager->SetUserInitialization(new B1ActionInitialization());

G4RunManager是用来管理一个run的,是一个管理类的方法,在主函数(程序)中进行创建实现,唯一一个需要被手动创造的管理类。当被创建时,其他的管理类会被自动创造,若被释放时,其他管理类被自动释放。

对于顺序模式下:必须提供G4VUserPrimaryGeneratorAction(粒子源)、G4VUserDetectorConstruction(模型)、G4VUserPhysicsList(告诉它PhysicsList是什么样的);为实现项目,还可以提供5个动作类:G4VUserRunAction、G4VUserEventAction、G4VUserStackingAction、G4VUserTrackingAction、G4VUserSteppingAction。

可以使用G4VUserActionInitialization初始化6个动作类。

对于多线程模式下:必须提供G4VUserDetectorConstruction(模型)、G4VUserPhysicsList,且必须使用G4VUserActionInitialization初始化动作类。

G4WorkerRunManager

G4MTRunManager(多线程下的)管理各个进程的WorkerManRunager

http://www.dtcms.com/a/389856.html

相关文章:

  • 面试题:对数据库如何进行优化?
  • samurai 点选分割 box分割
  • 计算机架构的总线协议中的等待状态是什么?
  • C++:入门基础(1)
  • ACD智能分配:服务延续和专属客服设置
  • 自监督学习分割
  • 抛弃自定义模态框:原生Dialog的实力
  • LangGraph 简单入门介绍
  • Docker 部署 DzzOffice:服务器 IP 转发功能是否需要开启
  • 无人机避障——卡内基梅隆大学(CMU)CERLAB 无人机自主框架复现
  • 正点原子zynq_FPGA-初识ZYNQ
  • Vue3中对比ref,reactive,shallowRef,shallowReactive
  • 通过Freemark渲染数据到Word里并生成压缩包
  • Vue 项目中使用 AbortController:解决请求取消、超时与内存泄漏问题
  • 设置管家婆服务器开机自动启动
  • ubuntu20 安装 ros2 foxy
  • 二分查找(二分查找算法)
  • 贪心算法应用:超图匹配问题详解
  • Hadoop3.3.5搭建指南(双NN版本)
  • 如何正确写Controller?参数校验、异常处理
  • 线性代数:LU与Cholesky分解
  • 饮用水在线监测设备:实时、精准地捕捉水体中的关键参数,为供水安全提供全方位保障
  • 【环境搭建】Conda安装教程
  • Java与机器学习的结合:库与应用!
  • DHCP基本原理及实验(ENSP配置)
  • 高系分十一:软件需求工程
  • MCP Server Chart AntV 项目解析
  • 2025药物市场调研分析案例(模板资源分享)
  • 飞网出口网关:安全便捷地访问受限资源
  • 大模型训练的三大显存优化策略