Source code for blissoda.fluo.parameters.utils.detectors
import logging
import warnings
from typing import List
from typing import Optional
from typing import Sequence
from typing import Union
from . import defaults
logger = logging.getLogger(__name__)
[docs]
def get_detector_names(
detectors: Optional[Sequence[Union[int, str]]] = None,
detector_numbers: Optional[Sequence[int]] = None,
detector_names: Optional[Sequence[str]] = None,
instrument_name: Optional[str] = None,
) -> List[str]:
# Check mutually exclusive arguments
provided = [
detectors is not None,
detector_numbers is not None,
detector_names is not None,
]
if sum(provided) > 1:
raise ValueError(
"Arguments 'detectors', 'detector_numbers', and 'detector_names' are mutually exclusive."
)
# Handle deprecated arguments
if detector_numbers is not None:
msg = "'detector_numbers' is deprecated; use 'detectors' instead."
warnings.warn(msg, DeprecationWarning, stacklevel=2)
logger.warning(msg)
detectors = detector_numbers
if detector_names is not None:
msg = "'detector_names' is deprecated; use 'detectors' instead."
warnings.warn(msg, DeprecationWarning, stacklevel=2)
logger.warning(msg)
detectors = detector_names
name_format = defaults.MCA_NAME_FORMAT.get(instrument_name)
names: List[str] = []
for det in detectors:
if isinstance(det, int):
if not name_format:
raise ValueError(
f"No MCA name format is known for instrument {instrument_name!r}"
)
names.append(name_format.format(det))
elif isinstance(det, str):
names.append(det)
else:
raise TypeError(f"Detector must be int or str, got {type(det)}")
return names