simplify detector object. Add efficiency libraries and lookup interpolators

This commit is contained in:
Pim Nelissen
2026-03-20 09:21:40 +01:00
parent 1e81570cf4
commit 890570e148
11 changed files with 228 additions and 94 deletions

View File

@ -0,0 +1,43 @@
from importlib.resources import files
from pandas import read_csv
from pg_rad.utils.interpolators import (
get_field_efficiency, get_angular_efficiency
)
class Detector:
def __init__(
self,
name: str,
type: str,
is_isotropic: bool
):
self.name = name
self.type = type
self.is_isotropic = is_isotropic
def get_efficiency(self, energy_keV, angle=None):
f_eff = get_field_efficiency(self.name, energy_keV)
if self.is_isotropic or angle is None:
return f_eff
else:
f_eff = get_field_efficiency(self.name, energy_keV)
a_eff = get_angular_efficiency(self.name, energy_keV, *angle)
return f_eff * a_eff
def load_detector(name) -> Detector:
csv = files('pg_rad.data').joinpath('detectors.csv')
data = read_csv(csv)
dets = data['name'].values
if name in dets:
row = data[data['name'] == name].iloc[0]
return Detector(row['name'], row['type'], row['is_isotropic'])
else:
raise NotImplementedError(
f"Detector with name '{name}' not in detector library. Available:"
f"{', '.join(dets)}"
)