OpenMC/openmc/data/dose/icrp74/generate_photon_effective_dose.py
Marco De Pietri 53d98ce71a
Add method on Material for computing photon contact dose rate (#3700)
Co-authored-by: Paul Romano <paul.k.romano@gmail.com>
2026-03-03 15:48:56 +00:00

69 lines
2.7 KiB
Python

from prettytable import PrettyTable
import numpy as np
# Data from Table A.1 (air kerma per fluence)
energy_a1 = np.array([
0.01, 0.015, 0.02, 0.03, 0.04, 0.05, 0.06, 0.08, 0.1, 0.15, 0.2,
0.3, 0.4, 0.5, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 4.0, 5.0, 6.0, 8.0, 10.0
])
air_kerma = np.array([7.43, 3.12, 1.68, 0.721, 0.429, 0.323, 0.289, 0.307, 0.371, 0.599, 0.856, 1.38,
1.89, 2.38, 2.84, 3.69, 4.47, 6.14, 7.55, 9.96, 12.1, 14.1, 16.1, 20.1, 24.0])
# Data from Table A.17 (effective dose per air kerma)
energy_a17 = np.array([
0.01, 0.015, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.15, 0.2, 0.3,
0.4, 0.5, 0.6, 0.8, 1.0, 2.0, 4.0, 6.0, 8.0, 10.0
])
dose_per_airkerma = {
'AP': np.array([
0.00653, 0.0402, 0.122, 0.416, 0.788, 1.106, 1.308, 1.407, 1.433, 1.394,
1.256, 1.173, 1.093, 1.056, 1.036, 1.024, 1.010, 1.003, 0.992, 0.993,
0.993, 0.991, 0.990
]),
'PA': np.array([
0.00248, 0.00586, 0.0181, 0.128, 0.370, 0.640, 0.846, 0.966, 1.019,
1.030, 0.959, 0.915, 0.880, 0.871, 0.869, 0.870, 0.875, 0.880, 0.901,
0.918, 0.924, 0.927, 0.929
]),
'RLAT': np.array([
0.00172, 0.00549, 0.0151, 0.0782, 0.205, 0.345, 0.455, 0.522, 0.554,
0.571, 0.551, 0.549, 0.557, 0.570, 0.585, 0.600, 0.628, 0.651, 0.728,
0.796, 0.827, 0.846, 0.860
]),
'LLAT': np.array([
0.00172, 0.00549, 0.0155, 0.0904, 0.241, 0.405, 0.528, 0.598, 0.628,
0.641, 0.620, 0.615, 0.615, 0.623, 0.635, 0.648, 0.670, 0.691, 0.757,
0.813, 0.836, 0.850, 0.859
]),
'ROT': np.array([
0.00326, 0.0153, 0.0462, 0.191, 0.426, 0.661, 0.828, 0.924, 0.961,
0.960, 0.892, 0.854, 0.824, 0.814, 0.812, 0.814, 0.821, 0.831, 0.871,
0.909, 0.925, 0.934, 0.941
]),
'ISO': np.array([
0.00271, 0.0123, 0.0362, 0.143, 0.326, 0.511, 0.642, 0.720, 0.749,
0.748, 0.700, 0.679, 0.664, 0.667, 0.675, 0.684, 0.703, 0.719, 0.774,
0.824, 0.846, 0.859, 0.868
])
}
# Interpolate air kerma onto energy grid for Table A.17
air_kerma = np.interp(energy_a17, energy_a1, air_kerma)
# Compute effective dose per fluence
dose_per_fluence = {
geometry: air_kerma * dose_per_airkerma
for geometry, dose_per_airkerma in dose_per_airkerma.items()
}
# Create table
table = PrettyTable()
table.field_names = ['Energy (MeV)', 'AP', 'PA', 'LLAT', 'RLAT', 'ROT', 'ISO']
table.float_format = '.7'
for i, energy in enumerate(energy_a17):
row = [energy]
for geometry in table.field_names[1:]:
row.append(dose_per_fluence[geometry][i])
table.add_row(row)
print('Photons: Effective dose per fluence, in units of pSv cm², for monoenergetic particles incident in various geometries.\n')
print(table.get_string(border=False))