Full pattern summation of X-ray powder diffraction data as
described in Chipera and Bish (2002)
powdR is an implementation of the full pattern summation approach to
quantitative mineralogy from X-ray powder diffraction data (Chipera and
Bish 2002, 2013; Eberl 2003).
powdR has several advantages over the excel based implementations of
full pattern summation such as FULLPAT (Chipera and Bish 2002) and
RockJock (Eberl 2003). First, computation is faster and, when
quantifying multiple samples, can be used in combination with other
for parralel processing. Secondly, powdR can be run via a
application, which offers a user friendly interface for fast and
iterative mineral quantification. Lastly, R represents a powerful tool
for data manipulation, allowing users to creatively adapt, pre-treat and
visualise their data.
The stable version of
powdR is on CRAN:
Alternatively, the development version can be downloaded from GitHub
#Install devtools if you don't already have it on your machineinstall.packages("devtools")devtools::install_github('benmbutler/powdR')
library(powdR)#> powdR: Full Pattern Summation of X-Ray Powder Diffraction Data#Load some soils to quantifydata(soils)#Load a powdRlib reference library of pure patternsdata(minerals)#Quantify a sampleq <- fps(lib = minerals,smpl = soils$sandstone,refs = minerals$phases$phase_id,std = "QUA.1")#>#> -Aligning sample to the internal standard#> -Interpolating library to same 2theta scale as aligned sample#> -Optimising...#> -Removing negative coefficients and reoptimising...#> -Computing phase concentrations#> -Internal standard concentration unknown. Assuming phases sum to 100 %#> ***Full pattern summation complete***#Inspect the phase concentrations (summarised by name)q$phases_grouped#> phase_name phase_percent#> 1 Illite 1.2599#> 2 K-feldspar 1.2666#> 3 Kaolinite 1.3476#> 4 Organic-Matter 41.2340#> 5 Plagioclase 1.1540#> 6 Quartz 53.7379#Inspect the quantificationplot(q, wavelength = "Cu")
plot(q, wavelength = "Cu", interactive = TRUE) provides
an interactive plot for better inspection of the fit. More detailed
usage instructions are provided in the package vignette.
powdR via the shiny app, use
run_powdR(). This loads the
application in your default web browser. The application has eight tabs:
powdRlibreference library from two .csv files: one for the XRPD measurements, and the other for the ID, name and reference intensity ratio of each pattern.
powdRlibreference library .
powdRafpsobjects to be edited via addition or removal of reference patterns to the fitting process.
Chipera, Steve J., and David L. Bish. 2002. “FULLPAT: A full-pattern quantitative analysis program for X-ray powder diffraction using measured and calculated patterns.” Journal of Applied Crystallography 35 (6): 744–49. https://doi.org/10.1107/S0021889802017405.
———. 2013. “Fitting Full X-Ray Diffraction Patterns for Quantitative Analysis: A Method for Readily Quantifying Crystalline and Disordered Phases.” Advances in Materials Physics and Chemistry 03 (01): 47–53. https://doi.org/10.4236/ampc.2013.31A007.
Eberl, D. D. 2003. “User’s guide to ROCKJOCK - A program for determining quantitative mineralogy from powder X-ray diffraction data.” Boulder, CA: USGS.
powdRafps objects, respectively) contain
inputs component. This provides a list of each of the arguments (including defaults) used to
produce the fit.
summarise_mineralogy() is a new function that creates a summary table from lists containing
A comprehensive reference library of pure phases from the RockJock computer software is now
provided as an example
powdRlib object called
rockjock. This library covers most clay,
non-clay and amorphous phases that may be encountered in soil samples. The library can be
loaded into the global environment via
data(rockjock). Data of synthetic mineral mixtures
are also now provided in the
rockjock_mixtures data, which can be used to test the accuracy
of full pattern summation via the
afps() now accept "L-BFGS-B" in the
solver argument. If selected, this uses
L-BFGS-B optimisation constrained so that parameters cannot be lower than zero.
fps() now contains an optional
shift argument, identical to that already implemented in
afps(). This defines the 2$\theta$ range within with a grid-search algorithm can optimise the
aligment of standards to the sample. If not defined in the function call it defaults to 0.
afps() now have a
shift_res argument which accepts a single integer to define
the increase in resolution used during grid search shifting. Higher values facilitate finer
shifts at the expense of longer computation. If not defined in the function call it defaults
afps() now have a logical
manual_align argument which specifies whether to
manually align the sample to the value specified in the
align argument (
manual_align = TRUE),
or optimise the alignment based on a maximum shift defined in the
manual_align = FALSE).
afps() now have a logical
harmonise argument which specifies whether to
automatically harmonise the sample and library onto the same 2$\theta$ scale via linear interpolation.
lod argument of
afps(), now simply represents an estimate of the limit of detection of
the selected internal standard defined by the
std argument. The function then uses the reference
intensity ratios to estimate limits of detection for all other phases.
fps() now contains an optional
remove_trace argument that allows the user to exclude phases
below a small trace value that would unlikely be detected. Default = 0.
subset() is a new function that allows simple subsetting of a
run_powdR() shiny app now contains tabs for subsetting a
powdRlib object via
powdRafps objects, and video tutorials.
baseline (>= 1.2) and
shinyWidgets (>= 0.4.3) in
fps() now accepts "NNLS" in the
solver argument. If "NNLS" (non-negative least
squares) is selected, the algorithm uses non negative least squares instead of
minimising an objective function. This is a much faster alternative but less
accurate for samples containing amorphous phases.
bkg() is a new function that allows for backgrounds to be fitted to XRPD data.
It is a wrapper of the
baseline::baseline.fillPeaks() method, and the output is
afps() is a new function that automates the process of full pattern
summation by firstly selecting samples from the reference library (using NNLS) and
then excluding those estimated to be below detection limit. The output is a
plot() methods for
The shiny application behind
run_powdR() has been updated to accept "NNLS", and
now includes tabs for background fitting (using
bkg()) and automated full pattern