This tutorial is for the calibration of an Xpad_flat on the Soleil Diffabs Diffractometer.
The calibration data is a scan on the delta motor with a CeO2 calibrant.
[1]:
%matplotlib nbagg
# first the imports
from typing import Iterator, List, NamedTuple, Text, Tuple
import os
import functools
from collections import namedtuple
from math import pi
import numpy
import pylab
import pyFAI
from h5py import Dataset, File
from pyFAI.gui import jupyter
# local import
from soleil import *
[2]:
# temporary until the ruch is ON
ROOT = os.path.join("/home", "experiences", "instrumentation", "picca", "data", "99160066", "2016", "Run2")
PUBLISHED = os.path.join("/home", "experiences", "instrumentation", "picca", "data", "99160066", "published-data")
[3]:
# do a calibration with a well centered sample.
# TODO recuperer le point de départ à partir des ponis de référence.
# TODO ajouter le diagramme complet à la fin.
# TODO ajout du mask pour la calibration
json = os.path.join(PUBLISHED, "calibration", "calibration.json")
distance = Length(3.606331e-01)
poni1 = Length(1.314012e-01)
poni2 = Length(3.613907e-02)
rot1 = Angle(0)
rot2_scale = pi / 180.0 # convert degree to radian
rot2_offset = Angle(0.328063469162) # radian
rot3 = Angle(7.19961198098e-07)
params = Calibration(os.path.join(PUBLISHED, "calibration", "XRD18keV_26.nxs"),
DatasetPathWithAttribute("interpretation", b"image"),
DatasetPathContains("scan_data/actuator_1_1"),
[0, 3, 6],
Calibrant("CeO2"),
Detector("Xpad_flat"),
Wavelength(6.8877e-11),
CalibrationParameters(Parameter[Length]("dist", distance, (distance, distance)),
Parameter[Length]("poni1", poni1, (poni1, poni1)),
Parameter[Length]("poni2", poni2, (poni2, poni2)),
Parameter[Angle]("rot1", rot1, (rot1, rot1)),
Parameter[float]("rot2_scale", rot2_scale, (rot2_scale, rot2_scale)),
Parameter[Angle]("rot2_offset", rot2_offset, (rot2_offset-0.5, rot2_offset+0.5)),
Parameter[Angle]("rot3", rot3, (rot3, rot3))
)
)
[4]:
# save all the ref as images in order to do the calibration with
# pyFAI-calib[2].
# temporary until pyFAI-calib2 can read from NeXuS files.
save_as_edf(params, os.path.join(PUBLISHED, "calibration"))
/home/experiences/instrumentation/picca/data/99160066/published-data/calibration/XRD18keV_26.nxs_00.edf
/home/experiences/instrumentation/picca/data/99160066/published-data/calibration/XRD18keV_26.nxs_03.edf
/home/experiences/instrumentation/picca/data/99160066/published-data/calibration/XRD18keV_26.nxs_06.edf
[5]:
# execute the calibration
#calibration(json, params)
[6]:
import pylab
pylab.show()
[ ]: