mirror of
https://github.com/pim-n/pg-rad
synced 2026-03-22 21:48:11 +01:00
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
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)}"
|
|
)
|