From f09c1d4407f897477e82bbef42e692d348162977 Mon Sep 17 00:00:00 2001 From: YiHui Liu Date: Mon, 16 May 2022 18:08:47 +0800 Subject: [PATCH] add: simulation result, Particle Definition; change: model format; add: template class for PrimaryGeneratorAction; add: random algorithm in PrimaryGeneratorAction; --- CMakeLists.txt | 7 ++- G4.code-workspace | 7 ++- README.md | 89 +++++++++++++++++-------------- assets/model.txt | 66 ++++++++++------------- debug.txt | 1 - docs/simu-gcri.png | Bin 0 -> 23686 bytes docs/simu-gcrp.png | Bin 0 -> 28015 bytes docs/simu-tp.png | Bin 0 -> 22234 bytes include/ActionInitialization.h | 5 +- include/Particle.h | 69 ++++++++++++++++++++++++ include/PrimaryGeneratorAction.h | 11 ++-- main.cpp | 6 +++ src/ActionInitialization.cpp | 23 +++++++- src/DetectorConstruction.cpp | 4 -- src/PrimaryGeneratorAction.cpp | 83 ++++++++++++++++++++++++++-- utils/check.py | 83 ++++++++++++++++++++++++++++ 16 files changed, 358 insertions(+), 96 deletions(-) create mode 100644 docs/simu-gcri.png create mode 100644 docs/simu-gcrp.png create mode 100644 docs/simu-tp.png create mode 100644 include/Particle.h create mode 100644 utils/check.py diff --git a/CMakeLists.txt b/CMakeLists.txt index dc14bbb..f6cce1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,9 +5,9 @@ project(DESCSS) option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) + find_package(Geant4 REQUIRED ui_all vis_all) else() - find_package(Geant4 REQUIRED) + find_package(Geant4 REQUIRED) endif() include(${Geant4_USE_FILE}) @@ -20,7 +20,10 @@ add_executable(DESCSS main.cpp ${sources} ${headers}) target_link_libraries(DESCSS ${Geant4_LIBRARIES}) set(DESCSS_SCRIPTS + debug.mac + electron.mac vis.mac + assets/model.txt ) foreach(_script ${DESCSS_SCRIPTS}) diff --git a/G4.code-workspace b/G4.code-workspace index 220a01e..38cfd23 100644 --- a/G4.code-workspace +++ b/G4.code-workspace @@ -105,7 +105,12 @@ "wcsv_ntuple": "cpp", "bufobj": "cpp", "aidas": "cpp", - "element": "cpp" + "element": "cpp", + "colorf": "cpp", + "cid": "cpp", + "mem": "cpp", + "sout": "cpp", + "typedefs": "cpp" } } } \ No newline at end of file diff --git a/README.md b/README.md index e9ee44b..91d5006 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ $$ 两者同时进行拟合与比较,同时考虑简洁性,除`H`以外,其余元素均采用双指数模型,`H`采用简化模型。 #### 俘获辐射带 -1. 电子[^5] +1. 电子[^5] 在轨道较高($L>2.5$)的内带中,电子能谱中有$\sim64\%$符合指数分布,$\sim4\%$符合幂律分布。 但在本例中,轨道较低($L\sim1.06$),因此使用指数模型$j = j_0e^{-\frac{E}{E_0}}$和幂律模型$j=j_0E^{-\alpha}$进行拟合,随后使用`Origin Lab`对两者进行`BIC test`,最终选用指数模型$j_0=1.333680\times10^6,\ E_0=0.0824$。 @@ -124,7 +124,7 @@ $$

-2. 质子 +2. 质子 与电子保持一致,幂律模型修改为$j=j_0(E-\beta)^{-\alpha}$,进行`BIC test`,最终选用幂律模型$j_0=559.76377,\ \alpha=2.40873,\ \beta=-1.53424$。
@@ -154,34 +154,34 @@ $$ |:--------:|:--------------------------------------------------------------------:|:-------:|:-----------------------:|:-----------------------:|:-----------------------:|:-------:|:-----------:| | $e^{-}$ | $j=j_0e^{-\frac{E}{E_0}}$ | 0.98107 | 0.1 | 10 | 9.23242E+11 | 923242 | 999999.8096 | | `p` | $j=j_0(E-\beta)^{-\alpha}$ | 0.99883 | 50 | 1000 | 42853994.15 | 100000 | 428.5399415 | -| `H` | $\frac{C_1\beta^{\alpha-1}}{pc}\left(\frac{pc}{pc+C_2}\right)^{C_3}$ | 0.98915 | 200 | 100000 | 12854310.92 | 100000 | 128.5431092 | -| `He` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98936 | 200 | 100000 | 1718828.12 | 100000 | 17.1882812 | -| `Li` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99755 | 200 | 100000 | 12982.36284 | 100000 | 0.129823628 | -| `Be` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99708 | 200 | 100000 | 6687.159271 | 100000 | 0.066871593 | -| `B` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99569 | 200 | 100000 | 17093.65985 | 100000 | 0.170936599 | -| `C` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98936 | 200 | 100000 | 52245.07239 | 100000 | 0.522450724 | -| `N` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98892 | 200 | 100000 | 13564.66838 | 100000 | 0.135646684 | -| `O` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98936 | 200 | 100000 | 48807.93662 | 100000 | 0.488079366 | -| `F` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99323 | 200 | 100000 | 1122.681148 | 100000 | 0.011226811 | -| `Ne` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99014 | 200 | 100000 | 8065.236798 | 100000 | 0.080652368 | -| `Na` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99263 | 200 | 100000 | 1865.503552 | 100000 | 0.018655036 | -| `Mg` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98972 | 200 | 100000 | 10928.24228 | 100000 | 0.109282423 | -| `Al` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99217 | 200 | 100000 | 1938.943418 | 100000 | 0.019389434 | -| `Si` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98873 | 200 | 100000 | 8262.870777 | 100000 | 0.082628708 | -| `P` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99183 | 200 | 100000 | 413.5749377 | 100000 | 0.004135749 | -| `S` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98873 | 200 | 100000 | 1659.707 | 100000 | 0.01659707 | -| `Cl` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99087 | 200 | 100000 | 371.7198798 | 100000 | 0.003717199 | -| `Ar` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99432 | 200 | 100000 | 751.2576633 | 100000 | 0.007512577 | -| `K` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98963 | 200 | 100000 | 466.3178791 | 100000 | 0.004663179 | -| `Ca` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98935 | 200 | 100000 | 1161.134206 | 100000 | 0.011611342 | -| `Sc` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99251 | 200 | 100000 | 231.3722059 | 100000 | 0.002313722 | -| `Ti` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.9934 | 200 | 100000 | 828.6605823 | 100000 | 0.008286606 | -| `V` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99424 | 200 | 100000 | 403.8859746 | 100000 | 0.00403886 | -| `Cr` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99313 | 200 | 100000 | 783.4909673 | 100000 | 0.00783491 | -| `Mn` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99385 | 200 | 100000 | 570.5548534 | 100000 | 0.005705549 | -| `Fe` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99351 | 200 | 100000 | 6024.476681 | 100000 | 0.060244767 | -| `Co` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99426 | 200 | 100000 | 20.89166947 | 100000 | 0.000208917 | -| `Ni` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99231 | 200 | 100000 | 292.8131737 | 100000 | 0.002928132 | +| `H` | $\frac{C_1\beta^{\alpha-1}}{pc}\left(\frac{pc}{pc+C_2}\right)^{C_3}$ | 0.98915 | 220 | 100000 | 12854310.92 | 100000 | 128.5431092 | +| `He` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98936 | 220 | 100000 | 1720188.128 | 100000 | 17.20188128 | +| `Li` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99755 | 220 | 100000 | 12988.97006 | 100000 | 0.129889701 | +| `Be` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99708 | 220 | 100000 | 6691.176848 | 100000 | 0.066911768 | +| `B` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99569 | 220 | 100000 | 17105.83698 | 100000 | 0.17105837 | +| `C` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98936 | 220 | 100000 | 52286.55444 | 100000 | 0.522865544 | +| `N` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98892 | 220 | 100000 | 13576.5542 | 100000 | 0.135765542 | +| `O` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98936 | 220 | 100000 | 48846.63508 | 100000 | 0.488466351 | +| `F` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99323 | 220 | 100000 | 1123.492483 | 100000 | 0.011234925 | +| `Ne` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99014 | 220 | 100000 | 8071.585382 | 100000 | 0.080715854 | +| `Na` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99263 | 220 | 100000 | 1866.8702 | 100000 | 0.018668702 | +| `Mg` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98972 | 220 | 100000 | 10936.4597 | 100000 | 0.109364597 | +| `Al` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99217 | 220 | 100000 | 1940.381408 | 100000 | 0.019403814 | +| `Si` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98873 | 220 | 100000 | 8269.257173 | 100000 | 0.082692572 | +| `P` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99183 | 220 | 100000 | 413.8897994 | 100000 | 0.004138898 | +| `S` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98873 | 220 | 100000 | 1660.990128 | 100000 | 0.016609901 | +| `Cl` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99087 | 220 | 100000 | 372.0271181 | 100000 | 0.003720271 | +| `Ar` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99432 | 220 | 100000 | 751.7977189 | 100000 | 0.007517977 | +| `K` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98963 | 220 | 100000 | 466.7118907 | 100000 | 0.004667119 | +| `Ca` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.98935 | 220 | 100000 | 1161.900661 | 100000 | 0.011619007 | +| `Sc` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99251 | 220 | 100000 | 231.5541271 | 100000 | 0.002315541 | +| `Ti` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.9934 | 220 | 100000 | 829.2810844 | 100000 | 0.008292811 | +| `V` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99424 | 220 | 100000 | 404.1724078 | 100000 | 0.004041724 | +| `Cr` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99313 | 220 | 100000 | 784.0902938 | 100000 | 0.007840903 | +| `Mn` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99385 | 220 | 100000 | 570.9732265 | 100000 | 0.005709732 | +| `Fe` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99351 | 220 | 100000 | 6028.059963 | 100000 | 0.0602806 | +| `Co` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99426 | 220 | 100000 | 20.90356212 | 100000 | 0.000209036 | +| `Ni` | $C_1e^{-C_2E}(1-e^{-C_3E+C_4})$ | 0.99231 | 220 | 100000 | 292.9961042 | 100000 | 0.002929961 |
@@ -212,17 +212,9 @@ $$ 2. `Acceptance-Rejection Method`(`ARM`) 对于一个在$[a, b]$的分布,设其概率密度函数(PDF)为$F(x)$,首先生成一个均匀分布随机数$X \sim U(x_{min}, x_{max})$,随后独立生成另一个均匀分布随机数$Y \sim U(y_{min}, y_{max})$,如果$Y \le F(X)$,则保留$X$,保留下来的$X$满足$F(x)$的分布。 -`ITM`也被称为反演法,关键是需要获取累积分布函数的逆函数,效率较高;`ARM`本质上是一种模拟算法,效率较低,但是适应性更广,特别是对于一些复杂分布函数。`GCR`质子和俘获辐射粒子的模型有三类,其中`GCR`质子的函数较为简单,其余两类较为复杂,因此分别采用`ITM`和`ARM`。 +`ITM`也被称为反演法,关键是需要获取累积分布函数的逆函数,效率较高;`ARM`本质上是一种模拟算法,效率很低,但是适应性更广,特别是对于一些复杂分布函数。 -
- -| $F(E)$ | $\int F(E)\mathrm{d}E$ | $C(x)=\int_a^xF(u)\mathrm{d}u$ | $C^{-1}(y)$ | -|:--------------------------:|:------------------------------------------:|:----------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------:| -| $j=j_0(E-\beta)^{-\alpha}$ | $\frac{j_0(E-\beta)^{1-\alpha}}{1-\alpha}$ | $\frac{j_0}{1-\alpha}\left((x-\beta)^{1-\alpha}-(a-\beta)^{1-\alpha}\right)$ | $\sqrt[1-\alpha]{\frac{(y+C)(1-\alpha)}{j_0}}+\beta,\ C=\frac{j_0(a-\beta)^{1-\alpha}}{1-\alpha}$ | - -
- -1. 位置生成 +1. 位置生成 而发射位置要求在球面上均匀分布。由于球面的面积元$\mathrm{d}\Omega=\sin\theta\mathrm{d}\phi\mathrm{d}\theta$是$\theta$的函数,如果位置向量$\vec{r}(\rho, \phi, \theta)$的$\phi$和$\theta$是在$\phi\in[0, 2\pi)$和$\theta\in[0, \pi]$上均匀分布,选取的点将会在两极较为密集(即),因此可以采用`ITM`方法生成$\theta$:$C^{-1}(z)=\cos^{-1}(z)$。 ```c double u = rand(); @@ -234,7 +226,7 @@ $$ double z = rho * cos(theta); ``` -2. 发射方向 +2. 发射方向 在`Geant4`中,假定粒子的位置矢量为$\vec{r}$,则以$\vec{r}$反方向作为$z$轴正方向建立右手坐标系,粒子的指向为: $$ P_x = -\sin\theta\cos\phi \\ @@ -243,6 +235,21 @@ P_z = -\cos\theta $$ 为了保证发射方向是朝向球面内,因此需要限制$\theta$的最大角度为$90^{\circ}$。 +3. 能量 +* `GCR`质子的函数较为简单,采用`ITM`;(下表中$j_0$已经归一化) +
+ + | $F(E)$ | $\int F(E)\mathrm{d}E$ | $C(x)=\int_a^xF(u)\mathrm{d}u$ | $C^{-1}(y)$ | + |:--------------------------:|:------------------------------------------:|:----------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------:| + | $j=j_0(E-\beta)^{-\alpha}$ | $\frac{j_0(E-\beta)^{1-\alpha}}{1-\alpha}$ | $\frac{j_0}{1-\alpha}\left((x-\beta)^{1-\alpha}-(a-\beta)^{1-\alpha}\right)$ | $\sqrt[1-\alpha]{\frac{(y+C)(1-\alpha)}{j_0}}+\beta,\ C=\frac{j_0(a-\beta)^{1-\alpha}}{1-\alpha}$ | + +
+
+* 俘获质子的函数较为复杂,使用`ARM`生成`100000`个随机数需要`12`分钟,效率满足要求; +
+* 其余俘获辐射粒子同样使用`ARM`,生成`100000`个随机数需要`4.5`分钟。 +
+ ## 空间站建模 1. 尺寸与分区[^6]
diff --git a/assets/model.txt b/assets/model.txt index 245715a..bc48252 100644 --- a/assets/model.txt +++ b/assets/model.txt @@ -1,37 +1,29 @@ -# GCR -125.89223, 44.00673, -0.000460574, 112356 -0.01815, 0.000297726, 0.00184, 0.49271 -0.000184794, 0.000389118, 0.0021, 0.49406 -0.0000953693, 0.000386546, 0.002, 0.48222 -0.000245835, 0.000383147, 0.00182, 0.45495 -0.000551454, 0.000297607, 0.00184, 0.49310 -0.000177397, 0.000347376, 0.00161, 0.43464 -0.000515269, 0.000297659, 0.00184, 0.49294 -0.0000121025, 0.000307953, 0.00208, 0.53260 -0.0000855093, 0.000299579, 0.00188, 0.50022 -0.0000200236, 0.000306074, 0.00204, 0.52582 -0.000107752, 0.000283677, 0.00197, 0.52149 -0.0000207575, 0.000304806, 0.00201, 0.52089 -0.0000809795, 0.000281074, 0.00191, 0.51232 -0.00000442291, 0.000303868, 0.00198, 0.51717 -0.0000162654, 0.000281067, 0.00191, 0.51235 -0.00000463438, 0.00033962, 0.00178, 0.46921 -0.00000956898, 0.000351681, 0.00199, 0.49986 -0.00000578307, 0.000336363, 0.00172, 0.45907 -0.0000109853, 0.000266092, 0.00154, 0.42213 -0.00000291072, 0.000344777, 0.00187, 0.48297 -0.0000104814, 0.000348052, 0.00193, 0.49105 -0.0000051388, 0.000351427, 0.00199, 0.49888 -0.0000098941, 0.000346998, 0.00191, 0.48874 -0.00000723814, 0.000349723, 0.00196, 0.49543 -0.0000592702, 0.000279954, 0.00175, 0.45382 -0.00000020753, 0.000283367, 0.0018, 0.46005 -0.00000284117, 0.000275123, 0.00168, 0.44440 - -# Trapped Electron -# j0 E0 -1333680 0.0824 - -# Trapped Proton -# j0 alpha beta -559.76377 2.40873 −1.53424 +559.76377, -1.53424, 2.40873, 1.5156509 +125.89223, 44.00673, -0.000460574, 112356, 361.781666 +0.01815, 0.000297726, 0.00184, 0.49271, 48.4143048 +0.000184794, 0.000389118, 0.0021, 0.49406, 0.3655716 +0.0000953693, 0.000386546, 0.002, 0.48222, 0.1883217 +0.000245835, 0.000383147, 0.00182, 0.45495, 0.4814399 +0.000551454, 0.000297607, 0.00184, 0.49310, 1.4715932 +0.000177397, 0.000347376, 0.00161, 0.43464, 0.382109 +0.000515269, 0.000297659, 0.00184, 0.49294, 1.3747775 +0.0000121025, 0.000307953, 0.00208, 0.53260, 0.0316204 +0.0000855093, 0.000299579, 0.00188, 0.50022, 0.2271729 +0.0000200236, 0.000306074, 0.00204, 0.52582, 0.0525426 +0.000107752, 0.000283677, 0.00197, 0.52149, 0.3078042 +0.0000207575, 0.000304806, 0.00201, 0.52089, 0.0546116 +0.0000809795, 0.000281074, 0.00191, 0.51232, 0.2327364 +0.00000442291, 0.000303868, 0.00198, 0.51717, 0.0116488 +0.0000162654, 0.000281067, 0.00191, 0.51235, 0.0467482 +0.00000463438, 0.00033962, 0.00178, 0.46921, 0.0104706 +0.00000956898, 0.000351681, 0.00199, 0.49986, 0.0211592 +0.00000578307, 0.000336363, 0.00172, 0.45907, 0.0131355 +0.0000109853, 0.000266092, 0.00154, 0.42213, 0.0327014 +0.00000291072, 0.000344777, 0.00187, 0.48297, 0.006517 +0.0000104814, 0.000348052, 0.00193, 0.49105, 0.0233399 +0.0000051388, 0.000351427, 0.00199, 0.49888, 0.0113753 +0.0000098941, 0.000346998, 0.00191, 0.48874, 0.022068 +0.00000723814, 0.000349723, 0.00196, 0.49543, 0.0160699 +0.0000592702, 0.000279954, 0.00175, 0.45382, 0.1696584 +0.00000020753, 0.000283367, 0.0018, 0.46005, 0.0005883 +0.00000284117, 0.000275123, 0.00168, 0.44440, 0.0082463 diff --git a/debug.txt b/debug.txt index 8824d44..e69de29 100644 --- a/debug.txt +++ b/debug.txt @@ -1 +0,0 @@ -22210 diff --git a/docs/simu-gcri.png b/docs/simu-gcri.png new file mode 100644 index 0000000000000000000000000000000000000000..60b7802a59843f82bda245a38240200d19fd2e35 GIT binary patch literal 23686 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 b&8mh+Y0Mp!H7LR6XG|LVboZvHnfm+-#FF>e literal 0 HcmV?d00001 diff --git a/docs/simu-tp.png b/docs/simu-tp.png new file mode 100644 index 0000000000000000000000000000000000000000..65068d9172cc2adea6c6c03986a3d7b93e1659c1 GIT binary patch literal 22234 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 B8$|#B literal 0 HcmV?d00001 diff --git a/include/ActionInitialization.h b/include/ActionInitialization.h index 7f3f7c7..791b0cd 100644 --- a/include/ActionInitialization.h +++ b/include/ActionInitialization.h @@ -3,12 +3,15 @@ #include "G4VUserActionInitialization.hh" +extern G4String particleType; + class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(); ~ActionInitialization() override; - void Build() const override; + void BuildForMaster() const override; + void Build() const; }; #endif diff --git a/include/Particle.h b/include/Particle.h new file mode 100644 index 0000000..77ffb41 --- /dev/null +++ b/include/Particle.h @@ -0,0 +1,69 @@ +#ifndef DESCSS_Particle_h +#define DESCSS_Particle_h + +#include "G4IonTable.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" +#include "globals.hh" + +class Particle { +public: + Particle(G4String name, G4int Z, G4int A) { + if (Z == 1) + ion = G4ParticleTable::GetParticleTable()->FindParticle("proton"); + else if (Z == 2) + ion = G4ParticleTable::GetParticleTable()->FindParticle("alpha"); + else + ion = G4IonTable::GetIonTable()->GetIon(Z, A, 0); + this->name = name; + this->Z = Z, this->A = A; + }; + void setC1(G4double v) { C1 = v; }; + void setC2(G4double v) { C2 = v; }; + void setC3(G4double v) { C3 = v; }; + void setC4(G4double v) { C4 = v; }; + void setSum(G4double v) { sum = v; }; + virtual G4double pdf(G4double E); + +protected: + G4ParticleDefinition* ion; + G4int Z, A; + G4String name; + G4double sum; + G4double C1, C2, C3, C4; +}; + +class TProton : public Particle { +public: + TProton(); + G4double pdf(G4double E) { + G4double C = C1 * pow(50 - C2, 1 - C3) / sum / (1 - C3); + return pow(sum * (C + y) * (1 - C3) / C1, 1 / (1 - C3)) + C2; + } +}; + +class GCRProton : public Particle { +public: + GCRProton(); + G4double pdf(G4double E) { + G4double pc = getPc(E); + G4double beta = getBeta(E); + return C1 * pow(beta, C2 - 1) * pow(pc / (pc + C3), C4) / pc / sum; + } + +private: + G4double M = 931.5; + G4double getPc(G4double E) { return sqrt(2 * M * E + E * E); } + G4double getBeta(G4double E) { + G4double pc = getPc(E); + return pc / sqrt(M * M + pc * pc); + } +}; + +class GCRIon : public Particle { +public: + GCRIon(); + G4double pdf(G4double E) { return C1 * exp(-C2 * E) * (1 - exp(-C3 * E + C4)) / sum; } +}; + +#endif \ No newline at end of file diff --git a/include/PrimaryGeneratorAction.h b/include/PrimaryGeneratorAction.h index a6f37e1..6680458 100644 --- a/include/PrimaryGeneratorAction.h +++ b/include/PrimaryGeneratorAction.h @@ -1,24 +1,27 @@ #ifndef DESCSS_PrimaryGeneratorAction_h #define DESCSS_PrimaryGeneratorAction_h -#include "G4ParticleGun.hh" #include "G4GeneralParticleSource.hh" +#include "G4ParticleGun.hh" #include "G4VUserPrimaryGeneratorAction.hh" #include "globals.hh" +class G4GeneralParticleSource; class G4ParticleGun; class G4Event; -class G4Box; +template class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(); + ~PrimaryGeneratorAction(); virtual void GeneratePrimaries(G4Event*); - const G4GeneralParticleSource* GetParticleGun() const { return fParticleGun; } + const T* GetParticleGun() const { return fParticleGun; } private: - G4GeneralParticleSource* fParticleGun; + G4String particleType; + T* fParticleGun = nullptr; }; #endif diff --git a/main.cpp b/main.cpp index 262f28f..e51f9cb 100644 --- a/main.cpp +++ b/main.cpp @@ -9,9 +9,15 @@ #include "G4VisExecutive.hh" #include "QBBC.hh" +extern G4String particleType; + int main(int argc, char** argv) { G4UIExecutive* ui = nullptr; if (argc == 1) ui = new G4UIExecutive(argc, argv); + if (argc >= 3) + particleType = argv[2]; + else + particleType = "TE"; G4MTRunManager* runManager = new G4MTRunManager; G4VisExecutive* visManager = new G4VisExecutive; diff --git a/src/ActionInitialization.cpp b/src/ActionInitialization.cpp index f563642..ae36d1f 100644 --- a/src/ActionInitialization.cpp +++ b/src/ActionInitialization.cpp @@ -1,8 +1,27 @@ #include "ActionInitialization.h" #include "PrimaryGeneratorAction.h" +#include -ActionInitialization::ActionInitialization() {} +#include "Randomize.hh" + +G4String particleType; + +class G4GeneralParticleSource; +class G4ParticleGun; + +ActionInitialization::ActionInitialization() { + G4long seed = time(NULL); + CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine()); + CLHEP::HepRandom::setTheSeed(seed); +} ActionInitialization::~ActionInitialization() {} -void ActionInitialization::Build() const { SetUserAction(new PrimaryGeneratorAction); } +void ActionInitialization::BuildForMaster() const {} + +void ActionInitialization::Build() const { + if (particleType == "TE") + SetUserAction(new PrimaryGeneratorAction); + else + SetUserAction(new PrimaryGeneratorAction); +} diff --git a/src/DetectorConstruction.cpp b/src/DetectorConstruction.cpp index deedaa8..84cd5af 100644 --- a/src/DetectorConstruction.cpp +++ b/src/DetectorConstruction.cpp @@ -17,8 +17,6 @@ DetectorConstruction::DetectorConstruction() {} DetectorConstruction::~DetectorConstruction() {} -std::ofstream dataFile("F:/Project/Geant4/DESCSS/debug.txt"); - static void ConstructSectionSphere(G4LogicalVolume* fMotherLogical, G4double zBias) { G4double pRadius = 2.8 * m / 2; G4double pRadius2 = 1.2 * m; @@ -255,7 +253,5 @@ G4VPhysicalVolume* DetectorConstruction::Construct() { // 大柱段 ConstructSectionBig(logicWorld, 0.815 * m); - dataFile << logicWorld->GetMass() / kg << std::endl; - return physicsWorld; } diff --git a/src/PrimaryGeneratorAction.cpp b/src/PrimaryGeneratorAction.cpp index 1bf72f9..c083a63 100644 --- a/src/PrimaryGeneratorAction.cpp +++ b/src/PrimaryGeneratorAction.cpp @@ -1,9 +1,86 @@ #include "PrimaryGeneratorAction.h" -PrimaryGeneratorAction::PrimaryGeneratorAction() { +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "Randomize.hh" + +PrimaryGeneratorAction::PrimaryGeneratorAction() { fParticleGun = new G4GeneralParticleSource(); } -PrimaryGeneratorAction::~PrimaryGeneratorAction() { delete fParticleGun; } +PrimaryGeneratorAction::PrimaryGeneratorAction() { + fParticleGun = new G4ParticleGun(); +} -void PrimaryGeneratorAction::GeneratePrimaries(G4Event* e) { fParticleGun->GeneratePrimaryVertex(e); } +template +PrimaryGeneratorAction::~PrimaryGeneratorAction() { + delete fParticleGun; +} + +std::string line; +G4double M = 931.5; +G4double C1, C2, C3, C4, sum; +std::ifstream modelFile("F:/Project/Geant4/DESCSS/assets/model.txt"); + +G4double randomPhi() { + G4double v = G4UniformRand(); + return 2 * pi * v; +} + +G4double randomTheta() { + G4double u = G4UniformRand(); + return std::acos(2 * u - 1); +} + +G4ThreeVector randomPos(G4double rho) { + G4double phi = randomPhi(); + G4double theta = randomTheta(); + + G4double x = rho * std::sin(theta) * std::cos(phi); + G4double y = rho * std::sin(theta) * std::sin(phi); + G4double z = rho * std::cos(theta); + + return G4ThreeVector(x, y, z); +} + +G4ThreeVector randomDir() { + G4double phi = randomPhi(); + G4double theta = randomTheta(); + + G4double x = -std::sin(theta) * std::cos(phi); + G4double y = -std::sin(theta) * std::sin(phi); + G4double z = -std::cos(theta); + + return G4ThreeVector(x, y, z); +} + +G4double ITM(G4double Emin, G4double Emax, G4double (*f)(G4double)) { + G4double x = G4UniformRand(); + return (*f)(x); +} + +G4double ARM(G4double Emin, G4double Emax, G4double (*f)(G4double)) { + G4double x, y; + while (true) { + x = G4UniformRand() * (Emax - Emin) + Emin; + y = G4UniformRand(); + if (y <= (*f)(x)) break; + } + return x; +} + +void PrimaryGeneratorAction::GeneratePrimaries(G4Event* e) { + fParticleGun->GeneratePrimaryVertex(e); +} + +void PrimaryGeneratorAction::GeneratePrimaries(G4Event* e) { + G4double E = 0; + G4double R = 15. * m; + G4ThreeVector pos = G4ThreeVector(); // randomPos(R); + G4ThreeVector dir = G4ThreeVector(); // randomDir(); + + fParticleGun->SetParticleEnergy(E); + fParticleGun->SetParticlePosition(pos); + fParticleGun->SetParticleMomentumDirection(dir); + fParticleGun->GeneratePrimaryVertex(e); +} diff --git a/utils/check.py b/utils/check.py new file mode 100644 index 0000000..386783f --- /dev/null +++ b/utils/check.py @@ -0,0 +1,83 @@ +import math +import numpy as np +from matplotlib import pyplot as plt + + +def trap_proton(): + def pdf(E, C1=559.76377, C2=-1.53424, C3=2.40873, sum=1.51565): + return C1 * pow(E - C2, -C3) / sum + pdf = np.vectorize(pdf) + + def pdf_int(E, C1=559.76377, C2=-1.53424, C3=2.40873, sum=1.5156509): + return C1 * math.pow(E - C2, 1 - C3) / (1 - C3) / sum + + def pdf_sum(E): + return pdf_int(E) - pdf_int(50) + + def pdf_inv(y, C1=559.76377, C2=-1.53424, C3=2.40873, sum=1.5156509): + return pow(sum * (pdf_int(50) + y) * (1 - C3) / C1, 1 / (1 - C3)) + C2 + + with open('debug.txt', 'r') as f: + data = f.readlines() + data = np.array([float(s) for s in data[0].split(', ')[:-1]]) + x = np.linspace(50, 1000, 1000) + + plt.plot(x, pdf(x), label="f(x)") + plt.hist(data, bins=np.linspace(50, 1000, 500), density=True, histtype='step', label="Simulation") + plt.legend() + plt.ylabel('Frequency') + plt.xlabel('Energy/(MeV)') + plt.savefig('docs/simu-tp.png', bbox_inches='tight') + + +def gcr_proton(): + M = 931.5 + + def get_pc(E): + return math.sqrt(2 * M * E + E * E) + + def get_beta(E): + pc = get_pc(E) + return pc / math.sqrt(M * M + pc * pc) + + def pdf(E, C1=125.89223, alpha=44.00673, C2=-0.000460574, C3=112356, sum=361.781665965026): + pc = get_pc(E) + beta = get_beta(E) + return C1 * math.pow(beta, alpha - 1) * math.pow(pc / (pc + C2), C3) / pc / sum + pdf = np.vectorize(pdf) + + with open('debug.txt', 'r') as f: + data = f.readlines() + + data = np.array([float(s) for s in data[0].split(', ')[:-1]]) + x = np.linspace(220, 1e5, 10000) + + plt.plot(x, pdf(x), label="f(x)") + plt.hist(data, bins=np.linspace(220, 1e5, 100), density=True, histtype='step', label="Simulation") + plt.legend() + plt.ylabel('Frequency') + plt.xlabel('Energy/(MeV)') + plt.savefig('docs/simu-gcrp.png', bbox_inches='tight') + + +def gcr_ion(): + def pdf(E, C1=0.01815, C2=0.000297726, C3=0.00184, C4=0.49271, sum=48.4143048): + return C1 * math.exp(-C2 * E) * (1 - math.exp(-C3 * E + C4)) / sum + pdf = np.vectorize(pdf) + + with open('debug.txt', 'r') as f: + data = f.readlines() + data = np.array([float(s) for s in data[0].split(', ')[:-1]]) + x = np.linspace(220, 1e5, 10000) + + plt.plot(x, pdf(x), label="f(x)") + plt.hist(data, bins=np.linspace(220, 1e5, 300), density=True, histtype='step', label="Simulation") + plt.legend() + plt.ylabel('Frequency') + plt.xlabel('Energy/(MeV)') + plt.savefig('docs/simu-gcri.png', bbox_inches='tight') + + +trap_proton() +gcr_proton() +gcr_ion()