geant4入门讲解篇-2
让我们继续以B1例子为主,讲解Geant4的模拟流程。如下图所示,Run是由多个Event组成的,PrimaryGenerator每执行一次,就会产生一个独立的Event,每个Event又是由多个Step组成的。Step是物理过程反应的最小模拟单元,从长度上可以小到nm甚至fm,可以通过蒙卡抽样得到当前传输粒子发生某种物理过程的信息,比如是否发生了光电效应,如果是,则会产生次级粒子即有动能的自由电子,然后继续模拟抽样该电子的物理过程,比如发生电离,沉积了多少能量等。
Geant4关键函数之间的流程关系
B1的物理过程列表用的是集成好的QBBC,包含了标准电磁相互作用过程和强子物理过程,只需要在主函数exampleB1.cc中声明调用即可。在定义好几何体之后,当又辐射粒子穿过几何体时,Geant4会根据辐射粒子的特性和几何体材料的特性进行物理过程的蒙卡抽样,通过Step给出所可能发生的物理过程。
Geant4最需要注意的地方在于根据用户的需求获得想要的信息,B1是想获得入射N个粒子后,Shape2获得多少剂量。获取信息,离不开SteppingAction.cc,step即G4Step,会给出几乎所有真实实验中可以给出的信息。
计算剂量,我们需要知道:
a. 每个粒子即Event会沉积多少能量,然后把所有粒子/Event的沉积能量相加,所有的沉积能量/Shape2质量=剂量;
b. 每个粒子与几何体相互作用时,Shape2中的每个Step沉积多少能量,然后把这些Step沉积能量相加给当前的Event。
在Geant4模拟中,我们通常是从小到大来获取统计这些能量信息:
a. 询问当前Step所处的位置是否属于Shape2几何体内,如果是,沉积能量edep相加给当前Event中的一个中间变量fEdep(在每个Event开始时,该变量fEdep初始化为0,用来统计当前Event下所有Step的沉积能量和)。
if (!fScoringVolume) {
const B1DetectorConstruction* detectorConstruction= static_cast<const B1DetectorConstruction*>(G4RunManager::GetRunManager()->GetUserDetectorConstruction());
fScoringVolume = detectorConstruction->GetScoringVolume();
// fScoringVolume=Shape2
}
// get volume of the current step
G4LogicalVolume*volume= step->GetPreStepPoint()->GetTouchableHandle()->GetVolume()->GetLogicalVolume();
// check if we are in scoring volume
if (volume != fScoringVolume) return;
// collect energy deposited in this step
G4double edepStep = step->GetTotalEnergyDeposit();
fEventAction->AddEdep(edepStep);
b. 在每个Event开始时,变量fEdep初始化为0,在结束时,将fEdep相加给Run中的变量“fEdep”,在Run结束时,当前所有入射粒子总的沉积能量也就得出来了。
void B1EventAction::BeginOfEventAction(const G4Event*)
{
fEdep = 0.;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void B1EventAction::EndOfEventAction(const G4Event*)
{
// accumulate statistics in run action
fRunAction->AddEdep(fEdep);
}
在接下来的教程系列中,我们将分别探究B1DetectorConstruction.cc、B1PrimaryGeneratorAction.cc、B1SteppingAction.cc 的实战应用。
喜欢的话,分享一下吧~^o^~
- WordPress主题开发:添加主题更新提醒功能
- WordPress主题开发:添加主题更新提醒功能
- ASP.NET2.0应用中定制安全凭证之实践篇
- Kaggle大神带你上榜单Top2%:点击预测大赛纪实(下)
- WordPress主题后台选项开发框架 Options Framework 介绍
- vc++ 在程序中运行另一个程序的方法
- 为Options Framework主题后台框架添加后台侧边栏
- ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)
- 弹出式模态窗体选择文本控件
- zookeeper 分布式锁服务
- QT Creator 快速入门教程 读书笔记(三)
- WordPress中添加自定义评论表情包的方法(附三套表情包下载)
- 使用新类型Nullable处理数据库表中null字段
- QT Creator 快速入门教程 读书笔记(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tomcat & Servlet的学习
- 快速优化 Web 性能的10 个手段
- Node.js 中的异步生成器和异步迭代
- JQuery的学习
- 网站图标开发指南
- 过滤器 & 监听器的学习
- 会话技术 & JSP 的学习
- 2万字,实战 Docker 部署:完整的前后端,主从热备高可用服务!!
- http & request & response的学习
- JavaScript 错误处理大全【建议收藏】
- Java8 用 Stream 快速实现List转Map 、分组、过滤等操作
- swoole框架异常处理
- 使用composer本地开发项目
- GDAL数据集写入空间坐标参考
- html & CSS & JavaScript的学习