mirror of
https://github.com/pim-n/pg-rad
synced 2026-03-11 19:58:11 +01:00
Add isotope lookup dictionary, so isotopes can be loaded from string in config.
This commit is contained in:
@ -2,9 +2,8 @@
|
|||||||
__ignore__ = ["logger"]
|
__ignore__ = ["logger"]
|
||||||
|
|
||||||
from pg_rad.isotopes import isotope
|
from pg_rad.isotopes import isotope
|
||||||
from pg_rad.isotopes import presets
|
|
||||||
|
|
||||||
from pg_rad.isotopes.isotope import (Isotope,)
|
from pg_rad.isotopes.isotope import (CS137, Isotope, get_isotope,
|
||||||
from pg_rad.isotopes.presets import (CS137,)
|
preset_isotopes,)
|
||||||
|
|
||||||
__all__ = ['CS137', 'Isotope', 'isotope', 'presets']
|
__all__ = ['CS137', 'Isotope', 'get_isotope', 'isotope', 'preset_isotopes']
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
from typing import Dict, Type
|
||||||
|
|
||||||
from pg_rad.physics.attenuation import get_mass_attenuation_coeff
|
from pg_rad.physics.attenuation import get_mass_attenuation_coeff
|
||||||
|
|
||||||
|
|
||||||
@ -25,3 +27,24 @@ class Isotope:
|
|||||||
self.E = E
|
self.E = E
|
||||||
self.b = b
|
self.b = b
|
||||||
self.mu_mass_air = get_mass_attenuation_coeff(E / 1000)
|
self.mu_mass_air = get_mass_attenuation_coeff(E / 1000)
|
||||||
|
|
||||||
|
|
||||||
|
class CS137(Isotope):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(
|
||||||
|
name="Cs-137",
|
||||||
|
E=661.66,
|
||||||
|
b=0.851
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
preset_isotopes: Dict[str, Type[Isotope]] = {
|
||||||
|
"CS137": CS137
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_isotope(isotope_str: str) -> Isotope:
|
||||||
|
"""Lazy factory function to create isotope objects."""
|
||||||
|
if isotope_str not in preset_isotopes:
|
||||||
|
raise ValueError(f"Unknown isotope: {isotope_str}")
|
||||||
|
return preset_isotopes[isotope_str]()
|
||||||
|
|||||||
@ -1,10 +0,0 @@
|
|||||||
from .isotope import Isotope
|
|
||||||
|
|
||||||
|
|
||||||
class CS137(Isotope):
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__(
|
|
||||||
name="Cs-137",
|
|
||||||
E=661.66,
|
|
||||||
b=0.851
|
|
||||||
)
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from .objects import BaseObject
|
from .objects import BaseObject
|
||||||
from pg_rad.isotopes.isotope import Isotope
|
from pg_rad.isotopes.isotope import Isotope, get_isotope
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -11,16 +11,16 @@ class PointSource(BaseObject):
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
activity: int,
|
activity_MBq: int,
|
||||||
isotope: Isotope,
|
isotope: str,
|
||||||
pos: tuple[float, float, float] = (0, 0, 0),
|
position: tuple[float, float, float] = (0, 0, 0),
|
||||||
name: str | None = None,
|
name: str | None = None,
|
||||||
color: str = 'red'
|
color: str = 'red'
|
||||||
):
|
):
|
||||||
"""A point source.
|
"""A point source.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
activity (int): Activity A in MBq.
|
activity_MBq (int): Activity A in MBq.
|
||||||
isotope (Isotope): The isotope.
|
isotope (Isotope): The isotope.
|
||||||
pos (tuple[float, float, float], optional):
|
pos (tuple[float, float, float], optional):
|
||||||
Position of the PointSource.
|
Position of the PointSource.
|
||||||
@ -37,16 +37,17 @@ class PointSource(BaseObject):
|
|||||||
if name is None:
|
if name is None:
|
||||||
name = f"Source {self.id}"
|
name = f"Source {self.id}"
|
||||||
|
|
||||||
super().__init__(pos, name, color)
|
super().__init__(position, name, color)
|
||||||
|
|
||||||
self.activity = activity
|
self.activity = activity_MBq
|
||||||
self.isotope = isotope
|
self.isotope: Isotope = get_isotope(isotope)
|
||||||
|
|
||||||
logger.debug(f"Source created: {self.name}")
|
logger.debug(f"Source created: {self.name}")
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
|
x, y, z = self.position
|
||||||
repr_str = (f"PointSource(name={self.name}, "
|
repr_str = (f"PointSource(name={self.name}, "
|
||||||
+ f"pos={(self.x, self.y, self.z)}, "
|
+ f"pos={(x, y, z)}, "
|
||||||
+ f"A={self.activity} MBq), "
|
+ f"A={self.activity} MBq), "
|
||||||
+ f"isotope={self.isotope.name}.")
|
+ f"isotope={self.isotope.name}.")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user