G4-DESCSS/utils/check.py
2022-10-16 17:16:25 +08:00

81 lines
2.6 KiB
Python

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_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()