This project is maintained by Marco A. Lopez-Sanchez - Last update (website): 2018/12/05

GrainSizeTools is a free, open-source, cross-platform script written in Python that provides several tools for (1) estimating average grain size in polycrystalline materials, (2) characterizing the nature of the distribution of grain sizes (either from apparent distributions or approximating 3D grain size distributions via stereology), and (3) estimating differential stress via paleopizometers. The script requires as the input the areas of the grain profiles measured grain-by-grain on planar sections and does not require previous experience with Python programming language (see documentation below and FAQ). For users with coding skills, the script is organized in a modular way facilitating the reuse and code extension.

Last release: v2.0.2 released (2018/10/05). DOI
IMPORTANT! Versions 2.0+ are only compatible with Python 3.5 or higher and include new features and changes that make it incompatible with previous versions.

Features at a glance


You can download the script at the following sites:

View project on GitHub



Estimate the distribution of apparent grain size using linear, logarithmic, or square root scales.

Estimate the area-weighted apparent grain size distribution

Estimate normalized apparent grain size distributions using the mean, the median, or the frequency peak as normalized factor. In the example above normalized to median =1

Estimate of the actual (3D) grain size distribution and volume of a particular grain size fraction using the Saltykov method

Estimate of the shape of the grain size distribution using the two-step method

Boxplots comparing different unimodal grain size distributions

Citation guidelines

In case you need references, the following are available:

Script reference
Lopez-Sanchez, Marco A. (2018). GrainSizeTools: a Python script for grain size analysis and paleopiezometry based on grain size. Journal of Open Source Software, 3(30), 863,

Frequency peak apparent grain size based on the Gaussian kernel density estimator
Lopez-Sanchez MA and Llana-Fúnez S (2015) An evaluation of different measures of dynamically recrystallized grain size for paleopiezometry or paleowattmetry studies. Solid Earth 6, 475-495.

Two-step method
Lopez-Sanchez MA and Llana-Fúnez (2016) An extension of the Saltykov method to quantify 3D grain size distributions in mylonites. Journal of Structural Geology, 93, 149-161.

Saltykov method
The procedure implemented in the GrainSizeTools script is partially based on the general formulation developed by Sahagian and Proussevitch (1998) J. Volcanol. Geotherm. Res. 84, 173–196., but taken the midpoints of the classes instead as described in the Appendix A in Lopez-Sanchez and Llana-Fúnez (2016)


GrainSizeTools script is licensed under the Apache License, Version 2.0 (the "License")

The documentation of GrainSizeTools script is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0).

Community guidelines


Copyright © 2018 Marco A. Lopez-Sanchez

Information presented on this website and the documentation of the script is provided without any express or implied warranty and may include technical inaccuracies or typing errors; the author reserve the right to modify or enhance the content of this website as well as the documentation of the script at any time without previous notice. This webpage and the documentation is not liable for the content of external links.

Hosted on GitHub Pages — This website was created with Typora