前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >geant4入门讲解篇-2

geant4入门讲解篇-2

作者头像
梁佐佐
发布2020-09-04 17:22:50
发布2020-09-04 17:22:50
1.7K00
代码可运行
举报
文章被收录于专栏:人芳觅人芳觅
运行总次数:0
代码可运行

让我们继续以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的沉积能量和)。

代码语言:javascript
代码运行次数:0
运行
复制
 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结束时,当前所有入射粒子总的沉积能量也就得出来了。

代码语言:javascript
代码运行次数:0
运行
复制
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^~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人芳觅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档