Source code for ewoksfluo.tasks.sum_detectors.sum_results_stack
import logging
from typing import List
from ewokscore import Task
from ewokscore.model import BaseOutputModel
from pydantic import Field
from ..math import format_expression_template
from ..models import FluoInputs
from .sum_utils import detector_weight_iterator_stack
from .sum_utils import save_summed_xrf_results
_logger = logging.getLogger(__name__)
[docs]
class Outputs(BaseOutputModel):
bliss_scan_uris: List[str] = Field(
description="Bliss scan URI.",
examples=["/data/dataset.h5::/1.1", "/data/dataset.h5::/2.1"],
)
output_root_uri: str = Field(
description="Output NXentry URI.", examples=["/results/dataset.h5::/1.1"]
)
xrf_results_uri: str = Field(
description="Output NXprocess results URI.",
examples=["/results/dataset.h5::/1.1/sum/results"],
)
[docs]
class SumXrfResultsStack(Task, input_model=Inputs, output_model=Outputs):
"""Add XRF stack results of multiple detectors"""
[docs]
def run(self) -> None:
weight_expressions = [
format_expression_template(
self.inputs.detector_normalization_template, name
)
for name in self.inputs.detector_names
]
for weight_expression, detector_name in zip(
weight_expressions, self.inputs.detector_names
):
_logger.info(
"Detector %r weights for summing XRF results: %s",
detector_name,
weight_expression,
)
detector_weights = detector_weight_iterator_stack(
self.inputs.bliss_scan_uris, weight_expressions
)
process_config = {
"detector_normalization_template": self.inputs.detector_normalization_template
}
self.outputs.xrf_results_uri = save_summed_xrf_results(
self.inputs.xrf_results_uris,
detector_weights,
self.inputs.output_root_uri,
process_config,
)
self.outputs.bliss_scan_uris = self.inputs.bliss_scan_uris
self.outputs.output_root_uri = self.inputs.output_root_uri