Geant4学习记录(一)
解析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学习记录(一)相关推荐
- Geant4学习记录(二)A
放射性衰变-rdecay01 PhysicsList.cc ConstructParticle():构造粒子.所有在模拟中需要的粒子的静态成员函数在此方法中调用. ConstructProcess() ...
- Geant4学习记录(二)B
运行实例(Co60) –> Event 0 starts. G4Track Information: Particle = Co60, Track ID = 1, Parent ID = 0 S ...
- Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...
- HTML5与CSS3权威指南之CSS3学习记录
title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...
- springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis
本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...
- 【Cmake】Cmake学习记录
Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...
- ASP.NETCore学习记录(一)
ASP.NETCore学习记录(一) asp.net core介绍 Startup.cs ConfigureServices Configure 0. ASP.NETCore 介绍 ASP.N ...
- Android开发技术周报176学习记录
Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...
- add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX
Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...
最新文章
- 【题单 - 数学专题】最大公约数
- 两条曲线所围成的面积_人教版数学六年级上册 5.3:圆的面积(一) 微课视频|知识点|课件解析|同步练习...
- 编译gtk+程序报错gcc: pkg-config --cflags --libs gtk+-2.0: 没有那个文件或目录
- UA MATH566 统计理论1 充分统计量
- 【赠书】图神经网络优质书籍,送你3本进行学习
- PPT 下载 | 龙创悦动游臣隽:数据在游戏行业的落地应用实践
- RabbitMQ管理(3)——Web端管理
- C#与mongoDB初始环境搭建
- vue 生命周期_Vue生命周期小白看了都会的
- 【转】OWIN是什么?
- Give Candies【快速幂+欧拉】
- java和js实现电话号码部分隐藏
- override(C# 参考)
- Reverse Pairs
- 学习Web前端,前景无限光明?
- 最新linux 编程视频教程下载
- ZTE 5G UPF 性能白皮书
- 计算机多道程序设计是指什么,多道程序设计是什么意思?
- kernelbase故障模块_kernelbase.dll故障怎么解决
- Flash 原版官网下载
热门文章
- 全网最全python爬虫精进(体系学习)学完可就业(附源代码)
- 【Kevin Learn QMUI】--> QMUISlider
- 怎么恢复佳能C300摄像机误删除或格式化的MXF视频
- [FPGA入门笔记](四):倍频器和分频器的实现
- 《量子力学教程》曾谨言著,第二章课后习题作业2.4画图题
- 【今日CV 计算机视觉论文速览 第102期】Fri, 19 Apr 2019
- 拼音相关→PinyinUtils.
- wpa_supplicant 常用操作及其wpa_cli无法运行的原因Could not connect to wpa_supplicant
- 一个屌丝程序猿的人生(二十八)
- Redhat 7.2操作系统上Oracle 12C R2 RAC安装配置