Source code for blissoda.demo.processors.fluo

import os
import shutil
from typing import Any
from typing import Dict
from typing import Optional
from typing import Tuple

from ...bliss_globals import current_session
from ...fluo.processor import FluoProcessor
from ...processor import BlissScanType
from ...resources import resource_filename
from ...utils import directories


[docs] class DemoFluoProcessor(FluoProcessor): def __init__( self, config: Optional[Dict[str, Any]] = None, defaults: Optional[Dict[str, Any]] = None, ) -> None: if defaults is None: defaults = dict() defaults.setdefault("instrument_name", "demo") # TODO: blissdemo worker cannot handle sub-processes so fit one detector for now defaults.setdefault("detectors", ["mca1_det2"]) super().__init__(config=config, defaults=defaults) self._set_demo_pymca_configs() self._last_future = None def _on_new_scan(self, scan: BlissScanType) -> Tuple[Optional[dict], Optional[Any]]: metadata, future = super()._on_new_scan(scan) self._last_future = future return metadata, future def _is_xrfmap(self, scan: BlissScanType) -> bool: if not scan.scan_info.get("save"): return False if scan.scan_info["type"] != "amesh": return False return True def _is_fluoxas(self, scan: BlissScanType) -> bool: return False def _is_mosaic_xrfmap(self, scan: BlissScanType) -> bool: return False def _set_demo_pymca_configs(self): root_dir = self._get_demo_config_dir(current_session.scan_saving.filename) dst_cfgfile = os.path.join(root_dir, "pymca.cfg") if os.path.exists(dst_cfgfile): return src_cfgfile = resource_filename("demo", "pymca.cfg") os.makedirs(os.path.dirname(dst_cfgfile), exist_ok=True) shutil.copyfile(src_cfgfile, dst_cfgfile) # Fit each detector separately self.pymca_configs = [dst_cfgfile] * len(self.xrf_names) def _get_demo_config_dir(self, dataset_filename: str) -> str: root_dir = self._get_demo_result_dir(dataset_filename) return os.path.join(root_dir, "config") def _get_demo_result_dir(self, dataset_filename: str) -> str: root_dir = directories.get_processed_dir(dataset_filename) return os.path.join(root_dir, "demo", "fluo")