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.

%matplotlib nbagg

# first the imports

import os

from math import pi

import pylab



# local import
from soleil import *
# 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")
# 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))
                                          )
                    )
# 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
# execute the calibration

#calibration(json, params)
pylab.show()