# Geant4_Gamma_Person **Repository Path**: cyz_pers/Geant4_Gamma_Person ## Basic Information - **Project Name**: Geant4_Gamma_Person - **Description**: G4小作业,Cs137辐射小人 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2020-05-23 - **Last Updated**: 2024-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ------------------------------------------------------------------- ========================================================= 实验物理模拟与数据分析工具:Geant4实践作业 ========================================================= cyz ----------- 运行方法: cd path/cyz mkdir build cd build cmake .. make ./cyz run1.mac > out 可视化模式: ./cyz Idle> /run/beamOn 1 Idle> exit //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... .mac文件介绍: - init_vis.mac: 不加任何参数运行主程序时被调用,显示可视化界面 设置各种verbose,运行vis.mac文件和gps.mac文件。 - vis.mac: 配置可视化功能,绘制Volumn,调节视角 - gps.mac: 配置GeneratParticleSource(GPS),设置粒子种类,粒子 源位置,能量以及角分布 Note: 由于gps.mac中粒子源位置可调,只需要将第13行改为: /gps/position -100 0 -36.7 cm 即可将粒子源位置设置为距离人体1m处,重新产生模拟数据 - run1.mac: 在不打开可视化窗口的情况下(硬编码模式),运行程序。 产生10万个伽马射线。 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 数据输出: - cyz_data.root: 保存模拟后收集的数据,10个Columns,分别包含以下内容; - eventID - init_Direction_phi: gamma粒子初始方向的方位角phi - init_Direction_cosTheta: gamma粒子初始方向的天顶角的余弦值 - edep_H: gamma射线在头部的能量沉积 - edep_B: gamma射线躯干部(不包含四肢)的能量沉积 - center_H_x: gamma射线在头部能量沉积重心的x坐标 - center_H_y: gamma射线在头部能量沉积重心的y坐标 - center_H_z: gamma射线在头部能量沉积重心的z坐标 - center_B_x: gamma射线在躯干部能量沉积重心的x坐标 - center_B_y: gamma射线在躯干部能量沉积重心的y坐标 - center_B_z: gamma射线在躯干部能量沉积重心的z坐标 Note: 在src/cyzEventRunAction.cc::56行附近,有一条指令要求只记录穿过头部 或躯干部的事例(event),注释掉该行,则记录所有事例。其中,能量沉积为零的 事例对应的能量重心坐标为(nan,nan,nan) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 《实验物理模拟与数据分析工具》课程 ### Geant4作业结果报告 ## 程序说明 ### 文件构成 ```bash . ├── CMakeLists.txt ├── README ├── cyz.cc ├── gps.mac ├── include │ ├── cyzActionInitialization.hh │ ├── cyzAnalysis.hh │ ├── cyzDetectorConstruction.hh │ ├── cyzEventAction.hh │ ├── cyzPhysicsList.hh │ ├── cyzPrimaryGeneratorAction.hh │ ├── cyzRunAction.hh │ └── cyzSteppingAction.hh ├── init_vis.mac ├── run1.mac ├── src │ ├── cyzActionInitialization.cc │ ├── cyzDetectorConstruction.cc │ ├── cyzEventAction.cc │ ├── cyzPhysicsList.cc │ ├── cyzPrimaryGeneratorAction.cc │ ├── cyzRunAction.cc │ └── cyzSteppingAction.cc ├── tree.txt └── vis.mac ``` ### 探测器构建 构建了cyzDetectorConstruction类。 其中,头部、脖子、躯干、双腿的SolidVolume分别用G4Orb、G4Tubs、G4Box、G4Tubs实现,并将脖子的Tub使用了布尔差G4SubtractionSolid剔除了头部的部分。 使用G4LogicalVolume和G4PVPlacement将身体的各个部分放置到正确的位置。 可视化结果如下: image-20200512204452731 image-20200512204627626 image-20200512204825487 image-20200512204919670 image-20200512205022675 ### PhysicsList 构建了cyzPhysicsList类,继承自G4VModularPhysicsList()。 设置两种G4内置的电磁过程:G4EmStandardPhysics和G4EmLivermorePhysics ### 粒子源 构建了cyzPreimaryGeneratorAction类来设置粒子源。 在其中实例化了G4GeneralParticleSource类,诸如粒子种类、能量、角分布等信息使用宏命令等形式记录在gps.mac中: ```bash /gps/particle gamma /gps/position -50 0 -36.7 cm /gps/energy 0.662 MeV /gps/ang/type iso /gps/number 1 ``` ### 记录必要信息 构建了cyzRunAction、cyzEventAction、cyzActionInitialization、cyzSteppingAction类。 在cyzRunAction中实例化G4AnalysisManager类为analysisManager,并且通过该对象创建Ntuple,最后写入cya_data.root文件。 在cyzEventAction和cyzSteppingAction类中,判断粒子经过头部或躯干部,记录能量沉积以及位置,计算出对应等能量沉积重心,写入创建好的Ntuple中。 ### 可视化配置 可视化配置信息记录在vis.mac文件中。 ## 结果展示 使用G4EmStandardPhysics和G4EmLivermorePhysics物理列表得到的结果有一些差别,但由于时间关系,我没能查出这种差异的具体体现。 一下结果均为使用LivermorePhysics所得: ### 射线初始角分布 ```c++ TFile T("cyz_data.root"); ``` ```c++ TCanvas* Cphi = new TCanvas("Cphi"); cyz->Draw("init_Direction_phi","",""); cyz->Draw("init_Direction_phi","edep_H > 0.0001 || edep_B > 0.0001","same"); Cphi->Draw(); TCanvas* CcosTheta = new TCanvas("CcosTheta"); cyz->Draw("init_Direction_cosTheta","",""); cyz->Draw("init_Direction_cosTheta","edep_H > 0.0001 || edep_B > 0.0001","same"); CcosTheta->Draw(); TCanvas* Ccor = new TCanvas("Ccor"); cyz->Draw("init_Direction_phi:init_Direction_cosTheta"); Ccor->Draw(); ``` ![png](程序设计思路及成果报告.assets/output_1_0.png) ![png](程序设计思路及成果报告.assets/output_1_1.png) ![png](程序设计思路及成果报告.assets/output_1_2.png) 上面三幅图分别展示了gamma粒子在初始动量方向上的$\phi$和$cos\theta$分布呈均匀分布,以及两者之间没有关联性。前两幅图中交低的曲线对应在头部、躯干部有能量沉积的事例统计结果,可以大致看出,只有少部分朝向头部和躯干部的光子在对应区域内产生了能量沉积。 ### 能量沉积 ```c++ TCanvas* Eh = new TCanvas("Eh"); cyz->Draw("edep_H","",""); Eh->SetLogy(); Eh->Draw() ``` ![png](程序设计思路及成果报告.assets/output_2_0.png) ```c++ TCanvas* Eb = new TCanvas("Eb"); cyz->Draw("edep_B","",""); Eb->SetLogy(); Eb->Draw() ``` ![png](程序设计思路及成果报告.assets/output_3_0.png) ### 能量沉积重心分布 下面展示gamma光子在头部、躯干部的能量沉积分布。以三视图的形式呈现。 #### 头部 ```c++ TCanvas* c1 = new TCanvas("c1"); c1->Divide(2,2); c1->cd(1); cyz->Draw("center_H_z:center_H_x","","cont4z"); c1->cd(2); cyz->Draw("center_H_z:center_H_y","","cont4z"); c1->cd(3); cyz->Draw("center_H_y:center_H_x","","cont4z"); c1->Draw() ``` ![png](程序设计思路及成果报告.assets/output_4_0.png) 可以看到能量沉积在头部的分布基本呈均匀分布。 #### 躯干部 ```c++ TCanvas* c2 = new TCanvas("c2"); c2->Divide(2,2); c2->cd(1); cyz->Draw("center_B_z:center_B_x","","cont4z"); c2->cd(2); cyz->Draw("center_B_z:center_B_y","","cont4z"); c2->cd(3); cyz->Draw("center_B_y:center_B_x","","cont4z"); c2->Draw() ``` ![png](程序设计思路及成果报告.assets/output_5_0.png) 如图所示,可见从身体侧方发出的gamma辐射,能量会更多地沉积在与辐射源相近的一侧。而在zy平面上基本呈均匀分布。 ### 距离身体1m 将放射源放置在距离身体1m的位置后(更改gps.mac),获得相应的数据做图如下,可见,将放射源远离身体后,由于有效的空间角变小,能量沉积明显降低。 ![output_1_0](程序设计思路及成果报告.assets/output_1_0-9290551.png) ![output_1_1](程序设计思路及成果报告.assets/output_1_1-9290551.png) ![output_1_2](程序设计思路及成果报告.assets/output_1_2-9290551.png) ![output_2_0](程序设计思路及成果报告.assets/output_2_0-9290551.png) ![output_3_0](程序设计思路及成果报告.assets/output_3_0-9290551.png) ![output_4_0](程序设计思路及成果报告.assets/output_4_0-9290551.png) ![output_5_0](程序设计思路及成果报告.assets/output_5_0-9290551.png)