Source code for easistrain.EDD.detector_fit

from typing import Callable, Dict, Sequence, Union
from typing_extensions import Literal

import h5py
import numpy

from easistrain.EDD.io import save_fit_data, save_fit_params
from easistrain.EDD.utils import fit_detector_data

Detector = Literal["horizontal", "vertical"]

DETECTORS: Sequence[Detector] = ["horizontal", "vertical"]


[docs] def fit_all_peaks_and_save_results( nbPeaksInBoxes: Sequence[int], rangeFit: Dict[Detector, Sequence[int]], patterns: Dict[Detector, numpy.ndarray], scanNumbers: Dict[Detector, Union[str, int]], saving_dest: h5py.Group, group_format: Callable[[int], str], ): fitParams = {"horizontal": numpy.array(()), "vertical": numpy.array(())} uncertaintyFitParams = { "horizontal": numpy.array(()), "vertical": numpy.array(()), } for i, nb_peaks in enumerate(nbPeaksInBoxes): fit_line_group = saving_dest.create_group( group_format(i) ) ## create group for each calibration peak for detector in DETECTORS: fit_min, fit_max = ( rangeFit[detector][2 * i], rangeFit[detector][2 * i + 1], ) scanNumber = scanNumbers[detector] channels = numpy.arange(fit_min, fit_max) raw_data = patterns[detector][fit_min:fit_max] assert isinstance(raw_data, numpy.ndarray) ( background, fitted_data, boxFitParams, uncertaintyBoxFitParams, ) = fit_detector_data( channels=channels, raw_data=raw_data, nb_peaks=nb_peaks, boxCounter=i, scanNumber=int(scanNumber), detectorName=detector, ) save_fit_data( fit_line_group, detector, channels, raw_data, background, fitted_data ) # Accumulate fit parameters of this box fitParams[detector] = numpy.append(fitParams[detector], boxFitParams) uncertaintyFitParams[detector] = numpy.append( uncertaintyFitParams[detector], uncertaintyBoxFitParams ) fit_params_group = saving_dest.create_group("fitParams") return save_fit_params(fit_params_group, fitParams, uncertaintyFitParams)