Source code for ewoksfluo.tasks.normalization.norm_results

from typing import Optional

from ewokscore import Task
from ewokscore.task import TaskInputError

from .norm_utils import normalization_template
from .norm_utils import save_normalized_xrf_results
from .norm_utils import normalization_coefficient


[docs] class NormalizeXrfResults( Task, input_names=["xrf_results_uri", "bliss_scan_uri", "output_root_uri"], optional_input_names=[ "normalization_expression", "counter_normalization_template", "counter_name", "detector_normalization_template", "detector_name", ], output_names=["xrf_results_uri", "bliss_scan_uri", "output_root_uri"], ): """Normalize XRF results with raw scan counters. Typical normalizers are beam monitors and measurement (live) time. :param xrf_results_uri: URI to the group containing the XRF results to be corrected. Format: /path/to/file.h5::/path/to/results/group. :param bliss_scan_uri: URIs to the datasets to normalize the data with. Format: /path/to/file.h5::/path/to/normalizer/dataset. :param expression: Arithmetic expression to be used for normalization. :param counter_normalization_template: Arithmetic expression to be used for normalization. :param counter_name: To be used in :math:`counter_normalization_template`. :param detector_normalization_template: Arithmetic expression to be used for normalization :param detector_name: To be used in :math:`detector_normalization_template`. :param output_root_uri: URI to the HDF5 group where the results must be saved. Format: /path/to/file.h5::/entry :returns xrf_results_uri: URI to the nexus collection where the results were saved. """
[docs] def run(self): params = self.get_input_values() output_root_uri: str = params["output_root_uri"] xrf_results_uri: str = params["xrf_results_uri"] bliss_scan_uri: str = params["bliss_scan_uri"] expression: Optional[str] = params.get("normalization_expression") detector_name: Optional[str] = params.get("detector_name") counter_name: Optional[str] = params.get("counter_name") if not (expression or detector_name or counter_name): raise TaskInputError( "at least one of these is required: 'expression_template', 'counter_name' or 'detector_name'" ) counter_normalization_template: Optional[str] = params.get( "counter_normalization_template" ) detector_normalization_template: Optional[str] = params.get( "detector_normalization_template" ) normalization_expression = normalization_template( expression, counter_normalization_template, counter_name, detector_normalization_template, detector_name, ) coefficient = normalization_coefficient( bliss_scan_uri, normalization_expression ) process_config = {"normalization_expression": normalization_expression} self.outputs.xrf_results_uri = save_normalized_xrf_results( xrf_results_uri, coefficient, output_root_uri, process_config ) self.outputs.bliss_scan_uri = bliss_scan_uri self.outputs.output_root_uri = output_root_uri