解析Geant4的例子B4b

  • B4bActionInitiaization.cc:

物理模型初始化。我认为就是个清单,对粒子出射枪,RunAction,EventAction和SteppingAction都要进行SetUserAction就可以了。

对于B4bActionInitialization::Build(),多线程模式下,每个线程的工作器都使用这种方法,这些工作器的动作类是本地线程。

void B4bActionInitialization::BuildForMaster() {B4RunAction* runAction = new B4RunAction;SetUserAction(runAction);
/*  SetUserAction(new B4RunAction); */ //直接SetUserAction也可以}

对于B4bActionInitialization::BuildForMaster(),多线程模式下,运行动作类实例化为全局线程。

void B4bActionInitialization::Build() {SetUserAction(new B4PrimaryGeneratorAction);
SetUserAction(new B4RunAction);
SetUserAction(new B4EventAction);
B4DetectorConstruction* detectorConstruction = new B4DetectorConstruction;
SetUserAction(new B4SteppingAction(detectorConstruction));
}
  • B4DetectorConstruction.cc:
G4VPhysicalVolume* B4DetectorConstruction::Construct()  /*探测器创建类*/
{// Define materials DefineMaterials();// Define volumesreturn DefineVolumes();
}

先创建world,再创建轮廓形状Solid,再创建LogicalVolume,再创建PhysicalVolume.
最后总是返回PhysicalWorld.

  • B4PrimaryGeneratorAction.cc:

建立粒子枪,设置默认粒子类型,动能,方向和初始位置。

  • B4bRunAction.cc:

设置每个事例的打印ID。设置分析管理器,利用分析管理器创建直方图和元组。并在析构函数中将管理器删除(delete G4AnalysisManager::Instance();)。
在Run开始时,创建打开一个输出文件。
在Run结束时,判断是总线程还是局部线程,打印统计所得图表并写入输出文件中。关闭文件。
=>写一个返回值为G4Run类型(B4bRunData)的类,这个”值”可以画好图表。

  • B4bEventAction.cc:

在Event开始时,将B4bRunData重置。fEdep和fTrackLength是两个二维数组(有两个元素)。所以这时fEdep = {0, 0},fTrackLength = {0, 0}。

fEdep[0]和fTrackLength[0]分别是Absorber(吸收体)的能量沉积和路程。fEdep[1]和fTrackLength[1]是Gap的…

在Event结束时,对fEdep[ ]和fTrackLength[ ]的元素进行直方图和元组的填充。

  • B4bSteppingAction.cc:

获取B4bRunData中需要的探测器部分对应的体积,能量沉积和步长。

void B4bSteppingAction::UserSteppingAction(G4Step* step) {auto volume = step->GetPreStepPoint()->GetTouchableHandle()->GetVolume();auto edep = step->GetTotalEnergyDeposit();G4double steplength = 0.;if(step->GetTrack()->GetDefinition()->GetPDGCharge()!= 0) {steplength = step->GetStepLength();}

判定step前后点之间的volume与Absorber还是与Gap相等,然后对fEdep[ ]和fTracklength[ ]的0列或1列元素进行迭加。

auto runData = static_cast<B4bRunData>(G4RunManager::GetRunManager()->GetNonConstCurrentRun());
if(volume == detectorConstruction->GetAbsorberPV()) {runData->Add(kAbs,edep,tracklength);
}
if(volume==detectorConstruction->GetGapPV()) {runData->Add(kGap,edep,tracklength);
}
  • B4bRunData.cc:

规定了对fEdep[ ]和fTrackLength[ ]中各个元素的操作,包括初始化和直方图填充。

过程分析


Start:

由RunAction创建histogram,创建打开”B4”输出文件。

由EventAction将fEdep[ ]和fTrackLength[ ]各元素初始化为0。

由SteppingAction对fEdep[ ]和fTrackLength[ ]的第0列或第1列元素更新。

End:

由SteppingAction对fEdep[ ]和fTrackLength[ ]的两列元素进行n次更新(每次更新一列)

fEdep = {edep1, edep2}          fTrackLength = {tracklength1, tracklength2}

由EventAction画出histgram:

(一次EndOfEvent)

FillH1(0, edep1)  /*absorber能量沉积*/
FillH1(1, edep2)  /*gap能量沉积*/
FillH1(2, tracklength1)  /*absorber路程*/
FillH1(3, tracklength2)  /*gap路程*/

(n次EndOfEvent后)

FillH1(0, edep3) FillH1(1, edep4)    FillH1(2, tracklength3) FillH1(3, tracklength4)
FillH1(0, edep5)    FillH1(1, edep6)    FillH1(2, tracklength5) FillH1(3, tracklength6)
FillH1(0, edep7)    FillH1(1, edep8)    FillH1(2, tracklength7) FillH1(3, tracklength8)
.......

这样在0,1,2,3号图中分别都画好了histogram。

由RunAction判断是局部Run还是全局Run,输出各图的mean和rms值。

运行

创建exampleB4b可执行程序

$ cd $HOME/workdir/geant4/build-basic
$ mkdir build-B4 && cd build-B4
$ cmake ../../examples/basic/B4/B4b
$ make
$ ls
$ ./exampleB4b


Session:/run/beamOn 90
=>这样在B4b文件夹中就生成了B4.root

在B4.root所在的文件夹中打开一个命令窗口

$ root -l plotHisto.C

运行结果如下:

To Be Continued…

Geant4学习记录(一)相关推荐

  1. Geant4学习记录(二)A

    放射性衰变-rdecay01 PhysicsList.cc ConstructParticle():构造粒子.所有在模拟中需要的粒子的静态成员函数在此方法中调用. ConstructProcess() ...

  2. Geant4学习记录(二)B

    运行实例(Co60) –> Event 0 starts. G4Track Information: Particle = Co60, Track ID = 1, Parent ID = 0 S ...

  3. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  4. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  5. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  6. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  7. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  8. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  9. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX

    Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...

最新文章

  1. 【题单 - 数学专题】最大公约数
  2. 两条曲线所围成的面积_人教版数学六年级上册 5.3:圆的面积(一) 微课视频|知识点|课件解析|同步练习...
  3. 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录
  4. UA MATH566 统计理论1 充分统计量
  5. 【赠书】图神经网络优质书籍,送你3本进行学习
  6. PPT 下载 | 龙创悦动游臣隽:数据在游戏行业的落地应用实践
  7. RabbitMQ管理(3)——Web端管理
  8. C#与mongoDB初始环境搭建
  9. vue 生命周期_Vue生命周期小白看了都会的
  10. 【转】OWIN是什么?
  11. Give Candies【快速幂+欧拉】
  12. java和js实现电话号码部分隐藏
  13. override(C# 参考)
  14. Reverse Pairs
  15. 学习Web前端,前景无限光明?
  16. 最新linux 编程视频教程下载
  17. ZTE 5G UPF 性能白皮书
  18. 计算机多道程序设计是指什么,多道程序设计是什么意思?
  19. kernelbase故障模块_kernelbase.dll故障怎么解决
  20. Flash 原版官网下载

热门文章

  1. 全网最全python爬虫精进(体系学习)学完可就业(附源代码)
  2. 【Kevin Learn QMUI】--> QMUISlider
  3. 怎么恢复佳能C300摄像机误删除或格式化的MXF视频
  4. [FPGA入门笔记](四):倍频器和分频器的实现
  5. 《量子力学教程》曾谨言著,第二章课后习题作业2.4画图题
  6. 【今日CV 计算机视觉论文速览 第102期】Fri, 19 Apr 2019
  7. 拼音相关→PinyinUtils.
  8. wpa_supplicant 常用操作及其wpa_cli无法运行的原因Could not connect to wpa_supplicant
  9. 一个屌丝程序猿的人生(二十八)
  10. Redhat 7.2操作系统上Oracle 12C R2 RAC安装配置