Add detector architecture + isotropic detectors

This commit is contained in:
Pim Nelissen
2026-03-03 09:48:20 +01:00
parent 41a8ca95b3
commit c98000dfd8
10 changed files with 179 additions and 13 deletions

View File

View File

@ -0,0 +1,20 @@
from pg_rad.inputparser.specs import DetectorSpec
from .detectors import IsotropicDetector, AngularDetector
class DetectorBuilder:
def __init__(
self,
detector_spec: DetectorSpec,
):
self.detector_spec = detector_spec
def build(self) -> IsotropicDetector | AngularDetector:
if self.detector_spec.is_isotropic:
return IsotropicDetector(
self.detector_spec.name,
self.detector_spec.eff
)
else:
raise NotImplementedError("Angular detector not supported yet.")

View File

@ -0,0 +1,38 @@
from abc import ABC
class BaseDetector(ABC):
def __init__(
self,
name: str,
eff: float
):
self.name = name
self.eff = eff
def get_efficiency(self):
pass
class IsotropicDetector(BaseDetector):
def __init__(
self,
name: str,
eff: float | None = None
):
super().__init__(name, eff)
def get_efficiency(self, energy):
return self.eff
class AngularDetector(BaseDetector):
def __init__(
self,
name: str,
eff: float | None = None
):
super().__init__(name, eff)
def get_efficiency(self, angle, energy):
pass