Source code for ewoksfluo.tasks.sum_detectors.sum_results_stack

from typing import Sequence

from ewokscore import Task

from .sum_utils import detector_weight_iterator_stack
from .sum_utils import save_summed_xrf_results
from ..math import format_expression_template


DEFAULTS = {
    "detector_normalization_template": "1./<instrument/{}/live_time>",
}


[docs] class SumXrfResultsStack( Task, input_names=[ "xrf_results_uris", "bliss_scan_uris", "detector_names", "output_root_uri", ], optional_input_names=["detector_normalization_template"], output_names=["xrf_results_uri", "bliss_scan_uris", "output_root_uri"], ): """Add XRF stack results of multiple detectors"""
[docs] def run(self) -> None: params = {**DEFAULTS, **self.get_input_values()} xrf_results_uris: Sequence[str] = params["xrf_results_uris"] detector_names: Sequence[str] = params["detector_names"] bliss_scan_uris: Sequence[str] = params["bliss_scan_uris"] detector_normalization_template: str = params["detector_normalization_template"] output_root_uri: str = params["output_root_uri"] if len(detector_names) < 1: raise ValueError("Expected at least 1 detector to sum") weight_expressions = [ format_expression_template(detector_normalization_template, name) for name in detector_names ] detector_weights = detector_weight_iterator_stack( bliss_scan_uris, weight_expressions ) process_config = { "detector_normalization_template": detector_normalization_template } self.outputs.xrf_results_uri = save_summed_xrf_results( xrf_results_uris, detector_weights, output_root_uri, process_config ) self.outputs.bliss_scan_uris = bliss_scan_uris self.outputs.output_root_uri = output_root_uri