Source code for blissoda.id06.utils

from typing import List

import numpy
from silx.io.url import DataUrl

from ..import_utils import unavailable_type

try:
    from bliss.scanning.scan import Scan as BlissScanType
except ImportError as ex:
    BlissScanType = unavailable_type(ex)


def _gonio2pyFAI(angles: numpy.ndarray) -> numpy.ndarray:
    """Convert goniometer angles (orientation 3: counter-clockwise, origin at beam center, in degree 0-360) to azimuthal angles
    in pyFAI's coordinate system (counter-clockwise, origin at horizontal, radians -pi+pi)
    """
    return numpy.deg2rad(-((angles + 180) % 360))


[docs] def get_data_url(scan: BlissScanType, lima_name: str) -> str: filename = scan.scan_info.get("filename") scan_number = scan.scan_info.get("scan_nb") data_url = DataUrl( file_path=filename, data_path=f"/{scan_number}.1/measurement/{lima_name}" ) return data_url.path()
[docs] def get_positions(start: float, step: float, npts: int) -> List[float]: # Shift positions by step / 2 so that bins land in the middle of two positions new_start = start + step / 2 gonio_positions = numpy.arange(new_start, new_start + npts * step, step) return _gonio2pyFAI(gonio_positions).tolist()
[docs] def is_multigeometry(scan: BlissScanType) -> bool: return scan.scan_info.get("type") == "fscan" and scan.scan_info["save"]