Files
pg-rad/tests/test_fluence_rate.py
2026-03-20 09:26:10 +01:00

71 lines
1.7 KiB
Python

import numpy as np
import pytest
from pg_rad.inputparser.parser import ConfigParser
from pg_rad.landscape.director import LandscapeDirector
from pg_rad.physics.fluence import phi
@pytest.fixture
def isotropic_detector():
from pg_rad.detector.detector import load_detector
return load_detector('dummy')
@pytest.fixture
def phi_ref(test_landscape, isotropic_detector):
source = test_landscape.point_sources[0]
r = np.linalg.norm(np.array([0, 0, 0]) - np.array(source.pos))
A = source.activity * 1E6
b = source.isotope.b
mu_air = source.isotope.mu_mass_air * test_landscape.air_density
mu_air *= 0.1
eff = isotropic_detector.get_efficiency(source.isotope.E)
return A * eff * b * np.exp(-mu_air * r) / (4 * np.pi * r**2)
@pytest.fixture
def test_landscape():
test_yaml = """
name: Test landscape
speed: 8.33
acquisition_time: 1
path:
length: 1000
segments:
- straight
sources:
test_source:
activity_MBq: 100
position: [0, 100, 0]
isotope: Cs137
gamma_energy_keV: 661
detector: dummy
"""
cp = ConfigParser(test_yaml).parse()
landscape = LandscapeDirector.build_from_config(cp)
return landscape
def test_single_source_fluence(phi_ref, test_landscape, isotropic_detector):
s = test_landscape.point_sources[0]
r = np.linalg.norm(np.array([0, 0, 0]) - np.array(s.pos))
phi_calc = phi(
r,
s.activity*1E6,
s.isotope.b,
s.isotope.mu_mass_air,
test_landscape.air_density,
isotropic_detector.get_efficiency(s.isotope.E)
)
assert pytest.approx(phi_calc, rel=1E-6) == phi_ref