:Author: Jérôme Kieffer :Date: 27/10/2015 :Keywords: Tutorials :Target: Scientists Calibration of a diffraction setup using the Command Line Interface (CLI) ========================================================================= The files needed for this cookbook can be downloaded on: http://www.silx.org/pub/pyFAI/cookbook/calibration/ You can download them to practice: .. code-block:: shell $ mkdir calibration $ cd calibration $ wget http://www.silx.org/pub/pyFAI/cookbook/calibration/LaB6_29.4keV.tif $ wget http://www.silx.org/pub/pyFAI/cookbook/calibration/F_K4320T_Cam43_30012013_distorsion.spline $ ls F_K4320T_Cam43_30012013_distorsion.spline LaB6_29.4keV.tif `The associated video is here `_ Review your calibration image ----------------------------- As viewer, try fabio_viewer from the FabIO package .. code-block:: shell $ fabio_viewer LaB6_29.4keV.tif .. figure:: fabio_viewer.png :align: center :alt: image You may need to pre-process your data, *pyFAI-average* is a tool to perform pixel-wise transformation. In this example, the image file was obtained using a "max filter" over 20 frames with pyFAI-average: .. code-block:: shell $ pyFAI-average -m max -F tif -o LaB6_29.4keV.tif ref_lab6_00??.edf Get all additional data ----------------------- * calibrant used: LaB6 according to the name of the file * the energy or the wavelength, 29.4keV according to the name of the file * detector geometry: there is a spline file along with the file * masks, dark, flat ... are not going to be used to keep things simple. Start pyFAI-calib ----------------- Use the man page (or --help) to see all options, or go to the :ref:`manpage` section. Here we just provide the energy, the detector disortion file and the calibrant options in addition to the image file. .. code-block:: shell $ pyFAI-calib -e 29.4 -s F_K4320T_Cam43_30012013_distorsion.spline -c LaB6 LaB6_29.4keV.tif FixedParameters(['wavelength']) ERROR:pyFAI.peak_picker:ControlPoint.load: No such file LaB6_29.4keV.npt INFO:pyFAI.massif:Image size is (2048, 2048) INFO:pyFAI.massif:Binning size is [2, 2] INFO:pyFAI.massif:Labeling found 7272 massifs. INFO:pyFAI.massif:Labeling found 7272 massifs. INFO:root:Please select rings on the diffraction image. In parenthesis, some modified shortcuts for single button mouse (Apple): * Right-click (click+n): try an auto find for a ring * Right-click + Ctrl (click+b): create new group with one point * Right-click + Shift (click+v): add one point to current group * Right-click + m (click+m): find more points for current group * Center-click or (click+d): erase current group * Center-click + 1 or (click+1): erase closest point from current group Please press enter when you are happy with your selection Pick peaks ---------- To perform the calibration one needs to create control points and assign them to rings. * Right click on a few (5) points in the inner-most ring which has the index number #0 * Increase the counter on the top right to change the ring number and pick a few more points on the corresponding ring (again with right click). .. figure:: pyFAI-calib_1.png :align: center :alt: image Review the group of peaks ------------------------- Press Enter in the terminal to do so... and check the ring assignment Once done with all groups, the position of the expected rings is overlaid to the diffraction image. You may need to unzoom to view them ! .. code-block:: shell Now fill in the ring number. Ring number starts at 0, like point-groups. Point group # a (4 points) (1315.9,1090.1) [default=0] Ring# Point group # b (5 points) (1302.0, 926.0) [default=0] Ring# Point group # c (2 points) (1085.3,1268.1) [default=0] Ring# Point group # d (2 points) ( 850.1,1083.3) [default=0] Ring# Point group # e (5 points) ( 965.1, 825.7) [default=0] Ring# Point group # f (4 points) ( 898.2,1315.9) [default=1] Ring# Point group # g (2 points) (1244.6, 733.6) [default=1] Ring# Point group # h (2 points) (1350.1, 821.9) [default=1] Ring# Optimization terminated successfully. (Exit mode 0) .. figure:: pyFAI-calib_2.png :align: center :alt: image Acquire some more control points -------------------------------- * Use *recalib* to extract a new set of control points, specify the number of rings, first a few of them then more * You may want to free/fix/bound some parameter then *refine* again .. code-block:: shell Fixed: wavelength Modify parameters (or ? for help)? recalib 6 [...] Fixed: wavelength Modify parameters (or ? for help)? recalib 15 [...] Fixed: wavelength Modify parameters (or ? for help)? recalib 25 .. figure:: pyFAI-calib_3.png :align: center :alt: image Visualize the integrated patterns --------------------------------- * integrate to view the integrated pattern * then extract a few extra rings ... * the geometry is displayed on the screen, and saved automatically in the poni-file .. code-block:: shell Fixed: wavelength Modify parameters (or ? for help)? integrate .. figure:: pyFAI-calib_4.png :align: center :alt: image Quit ---- .. code-block:: shell Fixed: wavelength Modify parameters (or ? for help)? quit $ .. code-block:: shell ls F_K4320T_Cam43_30012013_distorsion.spline LaB6_29.4keV.npt LaB6_29.4keV.tif LaB6_29.4keV.azim LaB6_29.4keV.poni LaB6_29.4keV.xy All different geometries have been saved into the LaB6_29.4keV.poni file and can directly be used with *pyFAI-integrate*. All control points are saved into LaB6_29.4keV.npt. **Final notes:** In this case the calibration is far from being good and it is likely the distortion file applied is not the proper one according to many the waves on the 2D integration pattern. If one flips up-down the spline file prior to the calibration, the residual error is twice lower but the goes far beyond this cookbook. Here is the diffraction pattern from a properly calibrated setup: .. figure:: pyFAI-calib_5.png :align: center :alt: image .. code-block:: python from pyFAI.spline import Spline s = Spline("F_K4320T_Cam43_30012013_distorsion.spline") ud = s.flipud() ud.write("flipud.spline")