Source code for ewoksfluo.tasks.sum_fit_results

from typing import Sequence

from ewokscore import Task

from .. import nexus
from .utils import compute_summed_fractions, compute_summed_parameters, save_summed_dict

DEFAULTS = {
    "livetime_uri_template": "instrument/{}/live_time",
    "livetime_reference_value": 1,
}


[docs] class SumFitResults( Task, input_names=[ "fit_results_uris", "scan_uri", "output_uri", ], optional_input_names=["livetime_uri_template", "livetime_reference_value"], output_names=["summed_results_uri"], ): """Add fit results of multiple detectors"""
[docs] def run(self) -> None: start_time = nexus.now() params = {**DEFAULTS, **self.get_input_values()} fit_results_uris: Sequence[str] = params["fit_results_uris"] scan_uri: str = params["scan_uri"] livetime_uri_template: str = params["livetime_uri_template"] livetime_reference_value: float = params["livetime_reference_value"] output_uri: str = params["output_uri"] # Result URI's are expected to look like this # processed_data.h5::/results/fit/<detector_name>/results detector_names = [ [s for s in uri.split("/") if s][-2] for uri in fit_results_uris ] livetime_uris = [ f"{scan_uri}/{livetime_uri_template.format(name)}" for name in detector_names ] ( summed_parameters, summed_uncertainties, has_massfractions, ) = compute_summed_parameters( fit_results_uris, livetime_uris, livetime_reference_value ) if has_massfractions: summed_fractions = compute_summed_fractions( fit_results_uris, livetime_uris, livetime_reference_value, summed_parameters, ) else: summed_fractions = None with nexus.save_in_ewoks_process( output_uri, start_time, process_config={"livetime_reference_value": livetime_reference_value}, default_levels=("results", "sumfit"), ) as process_group: results_group = process_group.create_group("results") results_group.attrs["NX_class"] = "NXcollection" param_group = save_summed_dict( results_group, "parameters", summed_parameters ) error_group = save_summed_dict( results_group, "uncertainties", summed_uncertainties ) # Add `errors` links for name in param_group: param_group[f"{name}_errors"] = error_group[name] if summed_fractions is not None: save_summed_dict(results_group, "massfractions", summed_fractions) self.outputs.summed_results_uri = ( f"{results_group.file.filename}::{results_group.name}" )