# 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将身体的各个部分放置到正确的位置。
可视化结果如下:
### 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();
```



上面三幅图分别展示了gamma粒子在初始动量方向上的$\phi$和$cos\theta$分布呈均匀分布,以及两者之间没有关联性。前两幅图中交低的曲线对应在头部、躯干部有能量沉积的事例统计结果,可以大致看出,只有少部分朝向头部和躯干部的光子在对应区域内产生了能量沉积。
### 能量沉积
```c++
TCanvas* Eh = new TCanvas("Eh");
cyz->Draw("edep_H","","");
Eh->SetLogy();
Eh->Draw()
```

```c++
TCanvas* Eb = new TCanvas("Eb");
cyz->Draw("edep_B","","");
Eb->SetLogy();
Eb->Draw()
```

### 能量沉积重心分布
下面展示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()
```

可以看到能量沉积在头部的分布基本呈均匀分布。
#### 躯干部
```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()
```

如图所示,可见从身体侧方发出的gamma辐射,能量会更多地沉积在与辐射源相近的一侧。而在zy平面上基本呈均匀分布。
### 距离身体1m
将放射源放置在距离身体1m的位置后(更改gps.mac),获得相应的数据做图如下,可见,将放射源远离身体后,由于有效的空间角变小,能量沉积明显降低。






