Decomposing a CW-OSL or LM-OSL decay curve to a given number of first-order exponential components using a combination of differential evolution and Levenberg-Marquardt algorithm suggested by Bluszcz and Adamiec (2006).
decomp(Sigdata, delay.off = c(0,0), ncomp = 2,
constant = TRUE, typ = "cw", control.args = list(),
weight = FALSE, plot = TRUE, log = "x", lwd = 2,
curve.no = NULL, SAR.Cycle = NULL, irr.dose = NULL,
outfile = NULL, transf = TRUE)
Return an invisible list containing the following elements:
return 0 if fit succeeds, else 1
a matrix containing time, signal, and fitted signal values for each component
optimized parameters for the decay curve
estimated constant component, it returns 0
if constant=FALSE
minimized objective for the decay curve
figure of merit value for the decay curve in percent
matrix(required): a two-column matrix (i.e., stimulation time and photon count values)
vector(with default): a two-elment vector indicating the "Delay" and "Off"
values of the decay curves, i.e., delay.off[1]=Delay
,delay.off[2]=Off
integer(with default): number of decomposed components
logical(with default): logical value indicating if a constant component should be subtracted from the decay curve
character(with default): type of a decay curve (i.e., typ="cw"
or typ="lm"
)
list(with default): arguments used in the differential evolution algorithm, see details
logical(with default): logical value indicating if the fit should be performed using a weighted procedure
logical(with default): logical value indicating if the results should be plotted
character(with default): a character string which contains "x" if the x axis is to be logarithmic, "y" if the y axis is to be logarithmic and "xy" or "yx" if both axes are to be logarithmic
numeric(with default): width of curves (lines)
numeric(optional): decay curve number
numeric(optional): SAR cycle of the decay curve, Example: SAR.Cycle="R1"
numeric(optional): irradiation dose of the decay curve
character(optional): if specified, decomposed signal values will be written to a CSV file named "outfile"
and saved to the current work directory
logical(with default): do not use (for backward compatibility purpose)
Function decomp decomposes an OSL decay curve to a specified number of components using a combination of differential evolution and Levenberg-Marquardt algorithm. Both CW-OSL and LM-OSL decay curves can be decomposed.
For a CW-OSL decay curve, the fitting model (Bluszcz and Adamiec, 2006) is:
I(t)=a1*b1*exp(-b1*t)+...+ak*bk*exp(-bk*t)
,
where k=1, 2, ..., 7
, I(t)
is the luminescence intensity as a function of time, a
is the number of trapped electrons, and b
is the detrapping rate. The constant component is c
if constant=TRUE
.
For a LM-OSL decay curve, the fitting model (Bulur, 2000) is:
I(t)=a1*b1*(t/P)*exp[-b1*t^2/(2*P)]+...+ak*bk*(t/P)*exp[-bk*t^2/(2*P)]
,
where k=1, 2, ..., 7
, and I(t)
is the luminescence intensity as a function of time, P
is the total stimulation time, a
is the number of trapped electrons, and b
is the detrapping rate. The constant component is c*(t/P)
if constant=TRUE
.
Parameters are initialized using a differential evolution method suggested by Bluszcz and Adamiec (2006), then the Levenberg-Marquardt algorithm (minpack: Fortran 90 version by John Burkardt, freely available at https://people.sc.fsu.edu/~jburkardt/f_src/minpack/minpack.html) will be performed to optimize the parameters. If weight=TRUE
, the photon counts will be assumed to follow a Possion distribution with a standard error equal to the square root of the number of photon counts, and the decay curve will be fitted using a weighted procedure. Setting weight=TRUE
gives more weight to photon counts from slower decaying components.
Arguments in control.args
that control the differential evolution algorithm include:
(1) factor: the number of population members, np=factor*ncomp
, default factor=20
;
(2) f: a weighting factor that lies between 0
and 1.2
, default f=0.5
;
(3) cr: a crossover constant that lies between 0
and 1
, default cr=0.99
;
(4) maxiter: maximum number of iterations, default maxiter=500
;
(5) tol: tolerance for stopping the iteration, the procedure will be terminated if
all relative standard deviations of parameters are smaller than tol
, defalut tol=0.1
.
Bluszcz A, 1996. Exponential function fitting to TL growth data and similar applications. Geochronometria, 13: 135-141.
Bluszcz A, Adamiec G, 2006. Application of differential evolution to fitting OSL decay curves. Radiation Measurements, 41(7-8): 886-891.
Bulur E, 2000. A simple transformation for converting CW-OSL curves to LM-OSL curves. Radiation Measurements, 32(2): 141-145.
Differential evolution algorithm, https://en.wikipedia.org/wiki/Differential_evolution
Jain M, Murray AS, Boetter-Jensen L, 2003. Characterisation of blue-light stimulated luminescence components in different quartz samples: implications for dose measurement. Radiation Measurements, 37(4-5): 441-449.
More JJ, 1978. "The Levenberg-Marquardt algorithm: implementation and theory," in Lecture Notes in Mathematics: Numerical Analysis, Springer-Verlag: Berlin. 105-116.
Further reading
Adamiec G, 2005. OSL decay curves-relationship between single- and multiple-grain aliquots. Radiation Measurements, 39(1): 63-75.
Balian HG, Eddy NW, 1977. Figure-of-merit (FOM), an improved criterion over the normalized chi-squared test for assessing goodness-of-fit of gamma-ray spectral peaks. Nuclear Instruments and Methods, 145(2): 389-95.
Choi JH, Duller GAT, Wintle AG, 2006. Analysis of quartz LM-OSL curves. Ancient TL, 24(1): 9-20.
Li SH, Li B, 2006. Dose measurement using the fast component of LM-OSL signals from quartz. Radiation Measurements, 41(5): 534-541.
Peng J, Dong ZB, Han FQ, Han YH, Dai XL, 2014. Estimating the number of components in an OSL decay curve using the Bayesian Information Criterion. Geochronometria, 41(4): 334-341.
Signaldata; pickBINdata; fastED
### Example 1:
data(Signaldata)
decomp(Signaldata$lm,ncomp=3,typ="lm",
control.args=list(maxiter=10))
### Example 2 (not run):
# data(BIN)
# obj_pickBIN <- pickBINdata(BIN, Position=2, Run=2, view=TRUE,
# LType="OSL", force.matrix=TRUE)
# decomp(obj_pickBIN$BINdata[[1]], ncomp=2, log="xy")
Run the code above in your browser using DataLab