Source code for blissoda.demo.processors.utils.pyfai_calib
import json
from pathlib import Path
from typing import Optional
import numpy
from ....bliss_globals import current_session
from ....utils import directories
[docs]
def energy_wavelength(x):
"""keV to m and vice versa"""
return 12.398419843320026 * 1e-10 / x
DEFAULT_CALIB = {
"difflab6": {
"dist": 5e-2, # 5 cm
"poni1": 10e-2, # 10 cm
"poni2": 10e-2, # 10 cm
"rot1": numpy.radians(10), # 10 deg
"rot2": 0, # 0 deg
"rot3": 0, # 0 deg
"energy": 12, # 12 keV
"detector": "Pilatus1M",
},
# TODO: produce different data or fix PONI
"diffcam": {
"version": 5,
"poni": {
"poni_version": 2.1,
"dist": 5e-2, # 5 cm
"poni1": 10e-2, # 10 cm
"poni2": 10e-2, # 10 cm
"rot1": numpy.radians(10), # 10 deg
"rot2": 0, # 0 deg
"rot3": 0, # 0 deg
"detector": "detector",
"detector_config": {"pixel1": 75e-6, "pixel2": 75e-6},
"wavelength": energy_wavelength(12), # 12 keV
},
},
}
[docs]
def ensure_pyfai_config(detector_name: str, filename: Optional[str] = None) -> str:
"""Create pyFAI config if not available yet and returns its filename"""
if filename is not None:
config_path = Path(filename)
else:
processed_dir = directories.get_processed_dir(
current_session.scan_saving.filename
)
config_path = Path(processed_dir, "config", f"pyfaicalib_{detector_name}.json")
if not config_path.is_file():
config_path.parent.mkdir(parents=True, exist_ok=True)
config_path.write_text(json.dumps(DEFAULT_CALIB[detector_name]))
return str(config_path)