This is an old revision of the document!
Table of Contents
FitAllB
FitAllB is tailored to do centre-of-mass (COM) refinements of grain orientations, positions and strain tensors from far-field images of a polycrystalline material. The name FitAllB originates because the routine fits all Bi (1), the grain specific reciprocal space metrics, which contain information about the strain states of the individual grains.
It was written by Jette Oddershede, formerly at DTU in Denmark and now working for Xnovo Technology ApS. The source code, along with a complete manual is available online at https://github.com/FABLE-3DXRD/FitAllB.
Jette Oddershede, Søren Schmidt, Henning Friis Poulsen, Henning Osholm Sørensen, Jonathan Wright and Walter Reimers, Determining grain resolved stresses in polycrystalline materials using three-dimensional X-ray diffraction, J. Appl. Cryst. 43, 539-549 (2010) doi: 10.1107/S0021889810012963
Capabilities
Taken from the manual:
The aim is to be able to handle several hundred illuminated grains and obtain the strain tensors to an accuracy of 10−4. The strain tensors are output both in the Cartesian grain coordinate system relative to the grain orientation and in the sample system for overall comparisons, and if the components of the stiffness tensor C are provided, the stress tensors in the same two representations will also be output.
FitAllB includes an error estimation routine to give standard deviations of all refined parameters. In addition the relative volumes of the grains (from the peak intensities with the possibility to take absorption effects into account) are refined, so in principle a 3D orientation and stress/strain map of the polycrystal can be obtained using tessellation.
Lately an algorithm to extract the peak widths(median 2θ and η) for each grain has been added as an indicator of intragranular orientation and/or strain gradients.
Application to DAC experiments
In DAC experiments, FitAllB is a second stage refinement. You use FitAllB after finding and indexeding your grains with another piece of software.
Usage
FitAllB
fitallb.py is the script that allow you to refine grains positions and orientations and to compute the strain tensor in the sample. To make it work, you need :
- the GrainSpotter file (.log)
- the original peaks list (.flt)
- the parameters of the phase (from imageD11, .prm)
- the structure file for your phase (.cif)
- optionally, a res file, but i don't really know what that is so I don't use it;
- the input file (.inp)
The input file should have this look :
title 'title' log_file grains.log flt_file peaks_t50.flt par_file Olivine.prm structure_file Forsterite.cif #res_file .cif sgno 62 # w_step 0.5 w_limit -28 28 bg 0 dety_size 2048 detz_size 2048 #beampol_factor 0 #beampol_factor 0 # crystal_system orthorombic stress 0 #abs_mu 0 abs_xlim 0.1 abs_ylim 0.1 # xyz 1 # Fit cms positions on farfield rod 1 # Fit orientations and thus Rodrigues vectors on farfield eps 1 # Fit strain tensors on farfield do 0# Fit cell parameters # fixx 0 fixy 0 fixz 0 #rej_ia 1 rej_vol 42 rej_resmean 10 rej_resmedian 5 min_refl 7 # tol_grain 1e-2
(I don't know how to add a whole file in the wiki or to formate the text so it don't look great…but you can get it from the edit page i guess. Or I can send the input file to you.)
In this input file, edit the part about the different related files and the one about your experiment conditions and then use :
fitallb.py -i inputfilename.inp
In reaction, fitallb will run several fits in the teminal and if it succeed to refine your grain, it will end with a 'normal termination of fitallb'. Then you have a new folder in the folder you are currently working in, named after your input file. In this new folder are all the output file fitallb created during the run. As I understand it now, the most usefull output files are the _final.gff and the _rej files.
The _final.gff file contains the final results of the refinement, with the new grains positions, orientations, stress tensor,… This is the one you need to keep going with the data processing. The _rej file list all the peaks rejected during the refinement and tell you why they were rejeced. Most of the time it is a problem of intensity or internal angle (ia).
Now, about the parameters of the refinement, these are the four lines begining by rej_ and the min_refl line (maybe also the tol_grain line but it didn't do much in my tests..).
rej_ia is for internal angle, meaning the difference between the position of the measured peak and the position of the theoretical peak corresponding. In my data, I have hard time decreasing it below 2° but I read that C. Langrand happend to have a maximum of 0.2° in internal angle misorientation.
rej_vol is linked to the intensity relativly to the volume of the grain (?) and reject peaks with a too weak intensity. By default, it was set at 10 but I need to increase it for my data. I succeeded to go up to 41 before fitallb crashed and it still rejecting a lot of peaks because of intensity.
rej_resmean and rej_resmedian are refined quantity (as I understand it, it correspond to how important is the correction fitallb need to do during refinement) and should be as small as possible. The difference between the two is the reference they used : rej_resmedian reject peaks that contribute to the residual by a value more than ten times the mediann; rej_resmean reject peaks that contribute to the residual by a value ten times higher the mean.
min_refl is the minimum number of peaks you need to validate a grain. As it is a refinement step, during each run the grains will loose the 'bad' peaks. If they go below the min_refl threshold, they are rejected.
reported crashs
- I don't remember the exact error message, but it happen that fitallb say it can't read the input file. Most of the time it come from a typo in the called files name or because the file called is not in the current folder.
- “maximum call reached” : happen when fitallb need too much refinement loops to complete the calculation and is not powerfull enough to do it completly (?). Decrease your rej_ia, rej_vol or increase min_refl to fix it.
- “singular matrix” : no idea about what it means…But same as before, decrease your rej_ia, rej_vol or increase min_refl to fix it.
Fitgloball
fitgloball.py is a script linked to fitallb that do the same kind of things : refining grains. I used it only for refining cell parameters.
It is working the same way as fitallb, with the same input file, just change d0 to 1 instead of 0 to ask the script to refine the cell parameters.
A good advice to use it to refine cell parameters is to index grains with only the lowest tth (where it's easy for GrainSpotter to index peaks) and then use fitgloball on these 'perfect' grains. Then you can get back these refined cell parameters to run ID11 for the gve file and then keep going with GraainSpotter, fitallb,…
