See also the write-up for Luminescence v1.3.0 on the REPLAY website.
fit_DoseResponseCurve()In function fit_DoseReponseCurve() we modified how weights are
handled. Up to v1.2.1, the default for fit.weights used a normalised
inverse standard error approach, under the assumption that
uncertainties scale with the dose. In hindsight, this appears to be
short-sighted and not very well justified: individual relative
uncertainties typically do not scale with the dose, but are
independent except in exceptional cases. In consequence, we modified
what values fit.weights accepts to accommodate the old and new
approach. This has three immediate consequences:
fit.weights is no longer logical, but
either character ("inverse_var", "inverse_std", or
"norm_inverse_std"), numeric, or NULL (no weights);fit_DoseReponseCurve() will differ, as the
new default use inverse variance instead;These changes affect the numerical output of the following functions:
fit_DoseResponseCurve(), analyse_SAR.CWOSL(), analyse_SAR.TL(),
analyse_baSAR(), analyse_pIRIRSequence(), calc_Lamothe2003(),
calc_Huntley2006(), plot_DRCSummary(), plot_DetPlot().
Although the changes in the numerical output may be inconvenient, we
strongly advise updating regardless. The old results can still be
reproduced using option fit.weights = "norm_inverse_std" in the
affected functions.
The fit.method parameters have undergone some renaming to make them
more rigorous (#1604):
EXP is now called SSE (single saturating exponential);
similarly, EXP+LIN and EXP OR LIN are now SSE+LIN and
SSE OR LIN, respectivelyEXP+EXP is now called DSE (double saturating exponential)The previous method names are still functional, but will now raise a deprecation warning.
These changes also affect the following functions:
analyse_SAR.CWOSL(), analyse_SAR.TL(), analyse_baSAR(),
analyse_pIRIRSequence(), analyse_Al2O3C_CrossTalk(),
analyse_Al2O3C_ITC(), calc_Huntley2006(), plot_GrowthCurve().
Internally, the following model parameters have been renamed so they are consistent between models when they have a physical meaning (#1604):
SSE, SSE+LIN and SSE OR LIN: the a, b and c
parameters are now called N, D0 and Di, respectivelyDSE: the a1, a2, b1, b2 parameters are now called
N1,N2,D01andD02`, respectivelyGOK: the b parameter is now called D0OTOR: the Dint parameter is now called DiOTORX: the a parameter is now called DiThe output object data frame was expanded to contain columns for the
D63 and D80 parameters used by OTOR and OTORX. Along with
this, we modified the uncertainty calculation for Dc, R, D63,
and D80: now we calculate the 25% and the 75% quantiles (in the
“LOWER” and “UPPER” columns for each of those parameters) instead of
returning the standard deviation, which did not make much sense. This
means that the column R.ERROR is no longer available. Please note
that the output table was also updated in analyse_SAR.CWOSL() and
subsequent functions. As long as you access column values using their
names rather than indices, these changes should not affect your
existing scripts.
In function calc_MinDose() we changed how the sigmab argument
should be expressed in the log = FALSE case. Up to v1.2.1, it was
required to be specified in the same absolute units used for the De
values. From now on, it must be expressed in relative units as a ratio
(e.g. 0.2 for 20 %). This makes the interpretation of the argument
consistent between logged and unlogged models (#1548).
Plotting an object generated by analyse_SAR.CWOSL() via
plot_RLum() (or just plot()) will no longer produce an abanico
plot, but will redraw the plots originally created by
analyse_SAR.CWOSL(). This will work only for objects generated by
the current package version, while the previous behaviour is
maintained for objects generated by version up to 1.2.1. In any case,
Abanico plots can still be created by calling plot_AbanicoPlot()
directly (#1589).
The summary keywords accepted by the plotting functions have been
made uniformed throughout the package to match those used by
calc_Statistics() (#1618):
sdrel, sdabs, serel and seabs that were used by
plot_Histogram() and plot_RadialPlot() are no longer recognised,
and will be silently ignored; they have been replaced by sd.rel,
sd.abs, se.rel and se.abs, respectively.weighted$mean and weighted$median that were used by
plot_DRTResults() have been replaced by mean.weighted and
median.weighted.analyse_SAR.NCF() implements the natural sensitivity
correction for the assessment of single aliquot regeneration based
palaeodoses, proposed originally by Singhvi et al. (2011) and later
implemented in Matlab by Kaushal et al. (2022). This is currently in
beta, pending more testing on real data (#1091).analyse_baSAR()analyse_IRSAR.RF()RF_nat.lim and RF_reg.lim arguments are now checked to have
the expected length (1 or 2 elements) to avoid crashes that occurred
when they were misspecified (#1621).analyse_SAR.CWOSL()The default value for the background_integral argument has changed
from NA to NULL. In v1.2.0 NA acquired the distinct meaning “do
not subtract the background integral”, so using it as the implicit
default changed user-facing behaviour. Switching the default to NULL
restores the behaviour present up to v1.1.2, where integrals are
applied only when both signal and background integrals are provided,
and specifying only the signal integral results in no integrals being
applied (#1526).
The plot_singlePanels argument produced no plots when set to 7 or 8
(#1558).
The dose.points and dose.points.test arguments are now better
validated, and a clearer error message will be reported if
misspecified (#1583).
apply_EfficiencyCorrection()spectral.efficiency now directly supports a CSV-file
input.calc_Huntley2006()calc_MinDose()If init.values is provided and log = TRUE, the sigma parameter
is now initialised as sigma / mu instead of log(sigma). The
previous approach failed silently when sigma < 1, as the logarithm
produced out-of-bounds parameter values, with the effect of leaving
all parameters at their initial values (#1527; thanks to
@MarijnvanderMeij for reporting and suggesting a fix).
The confidence intervals stored in the RLum.Results object are now
always in the natural units, independently of the log argument
(#1533; thanks to @MarijnvanderMeij for reporting).
calc_OSLLxTxRatio()The SN_RATIO_TnTx value was wrongly returned as Inf if
use_previousBG was set to TRUE and background_integral = NA. Now
the function will return NA in this case, as stated in the function
documentation (#1554).
The computation of LxTx has been fixed to compute the contribution
of the Tx background correctly when use_previousBG = TRUE. This
should result in very minor differences if the background counts for
the Lx and Tx curves are similar (#1565).
The new od_rates argument activates an alternative approach for
error estimation of Lx/Tx ratios based on Bluszcz, Adamiec and Herr
(2015). This argument is also supported by analyse_SAR.CWOSL(),
analyse_pIRIRSequence(), and analyse_FadingMeasurement() (#1390;
thanks to @andrzejbluszcz for providing the mathematical description,
contributing code and checking the implementation).
calc_SourceDoseRate()The predict argument has been extended to handle backwards and
forward prediction.
The function has been corrected so that, in case multiple measurement
dates, the predict argument will be applied to the last date, as
specified by the manual (#1609).
If multiple values are provided for calib.date when predict is
used, only the last calibration date specified will be applied. This
ensures that the source dose rates are computed consistently, rather
than depending on R’s recycling rules for vectors (#1611).
calc_Statistics()weight.calc argument have been changed to
align to the terminology used in fit_DoseResponseCurve(). Therefore,
option "square" is now called "inverse_var", and "reciprocal" is
now called "inverse_std". The previous names will continue to work,
but will now raise a deprecation warning (#1615).convert_Second2Gray()fit_DoseResponseCurve()Argument fit.weights now supports a numeric vector as input. This
gives more control over the fitting process and enables better
comparison with other software, such as Python’s SciPy. In this case,
the vector must be of the same length as the number of data points to
fit, which is typical the number of LxTx points (#1536).
The fit.weights argument was reimplemented to different approaches
for the weight computation. These can be specified by the keywords
"inverse_var" (the new default, corresponding to 1/sigma^2),
"inverse_std" and "norm_inverse_std" (corresponding to the default
up to v1.2.1). Moreover, NULL disables weights, while a numeric
input enables the definition of own weights (#1539).
The "QDR" fit method is now less likely to fail due to an invalid
choice of the starting point for the uniroot() function (#1541).
The starting value of one of the parameters of the SSE model has
been tweaked to remove a dependency of the results from the random
values used during the Monte Carlo steps. This should make the results
more stable, in particular for mode = "extrapolation". This change
may introduce some minor differences to the result of this function
and of other functions that depend on it (#1550).
Vectors containing the starting values for some fitting parameters
used during the Monte Carlo runs are no longer generated for
fit.method = "QDR" and "GOK", as they were unused in those models.
This affects the state of the random number generator, so very minor
numerical differences in the results are to be expected (#1568).
The models used to generate sensible starting points for "SSE",
“DSE”,“SSE+LIN”,“GOK”,“OTOR”and“OTORX”models now consider theLxTx`
errors as weights, which may improve the fitting in cases when the
data to fit is highly irregular due to very large errors (#1570).
From the documentation, it was not always clear that the function
expects columns with values in a particular order and does not look up
column names (at least not all). Now the function is a little bit more
flexible and automatically orders columns in the required order if
column names that would somewhat match the expectations are used. As a
positive side effect, the LxTx table produced by analyse_SAR.CWOSL()
can be now inserted as input without further modification. (#1591;
thanks to @DirkMittelstrass for reporting).
Minor adjustment of the terminal feedback for better text alignment.
Plus, remove reporting Dc for OTOR in favour of D63 (Dc is still
accessible in the output).
Method “DSE” gains a Di parameter in the model for the offset
(#1604).
Method “DSE” used to compute a starting point from 50 random points generated from the input data with the goal of finding a robust initialization point for the final fitting. However, this was not used, so those computations were effectively discarded. This has been fixed, and this should provide more robustness for this method (#1605).
fit_EmissionSpectra()frame argument of length 0 is
used (#1602).get_RLum()subset argument returns an empty list by
setting verbose = FALSE. The verbose argument is also exposed in
the subset() method for RLum.Analysis objects (#1587; thanks to
@DirkMittelstrass for highlighting the problem).merge_RLum.Results()flatten argument, which allows to control
whether list elements should be flattened into a single list when
merging (#1593).plot_AbanicoPlot()The summary text is no longer overprinted when multiple datasets are
given as input and summary.pos is one of "left", "center" or
"right" (#1575).
The function no longer crashes when z.0 is misspecified (#1579).
plot_DetPlot()dose_rate_source argument to the
analysis function via the analyse_function.control argument, as in
analyse_function.control = list(dose_rate_source = 4.07) (#1561).plot_DoseResponseCurve()The error bars had been missing for extrapolation and alternate
mode since v1.1.0. This error was introduced with commit cf299831 and
remained unnoticed due to lack of graphical snapshots (a3ed7744).
Add ... support for arguments lwd_drc, lty_drc, and col_drc to
enable further customisation of the dose-response curve.
The function can now print the dose-response curves from an
RLum.Results' object created byanalyse_SAR.CWOSL()` (#1592; thanks
to @DirkMittelstrass for reporting).
The function crashed with a
object of type 'closure' is not subsettable error if the fit could
not be established and an object named histogram was present in the
workspace or exposed in the namespace by another package.
plot_DRTResults()summary.pos = "sub" was
regressed in v1.2.0, resulting in the summary statistics being printed
one line down from their intended position (#1613).plot_KDE()The default background colour was incorrectly set to NA, which in
some cases, such as when plotting to a png file or in RStudio (at
least on MacOS), corresponds to a transparent background. This could
cause the KDE plot to appear to be drawn over an existing plot
(#1556).
The summary text is no longer overprinted when multiple datasets are
given as input and summary.pos is one of "left", "center" or
"right" (#1575).
plot_RadialPlot()The summary text is no longer overprinted when multiple datasets are
given as input and summary.pos is one of "left", "center" or
"right" (#1575).
The function no longer crashes if centrality is set to a numerical
value of length shorter than the number of input datasets (#1577).
plot_RLum.Results()The function can now plot objects generated by
fit_DoseResponseCurve() instead of returning silently. This also
allows using plot_RLum() on those objects to obtain the same output
of plot_DoseResponseCurve() (#1550).
Plotting an object produced by calc_AliquotSize() now supports that
function’s full range of plot customisation arguments via ...
(#1585).
Plotting an object generated by analyse_SAR.CWOSL() will no longer
call plot_AbanicoPlot() but will redraw the plots originally created
by analyse_SAR.CWOSL() (#1589).
plot_RLum.Data.Spectrum()If the function was called with plot.type = "interactive", the error
plot.new has not been called yet appeared in the terminal. This was
a regression introduced in v1.1.2, and has now been fixed.
If the column names are replaced by the index, the default y-axis
label is now preset to “Channel index”, but it can be overwritten
using the ylab function argument. This should avoid cases where the
user overlooks the warning and struggles to understand the axis
values.
The plot.type = "transect" now scales the y-axis automatically (can
be overwritten with zlim).
The plot.type = "transect" gained support for a few new arguments:
add (to add additional transects to an existing plot), smooth
(basic curve smoothing), transect_mode to control the integration
method (sum the default, mean, median, min, max)
For plot.type = "multiple.lines" the number of legend entries is
limited to 30 to avoid excessive overplotting; it can be overwritten
by setting legend.text.
plot_ViolinPlot()summary.pos are now respected (#1596).read_Daybreak2R()info element (#1563; thanks to @andrzejbluszcz for the code
contribution).remove_RLum()See also the write-up for Luminescence v1.2.1 on the REPLAY website.
analyse_IRSAR.RF()n.MC = 1. This was spotted by the
valgrind memory debugger run by CRAN, and triggered a request to
resubmit the package (#1479).analyse_SAR.TL()integral_input argument was not sufficiently validated when
checking for deprecated arguments (#1483).calc_OSLLxTxRatio()The computation of sigmab was overaccounting the contribution of the
background integral as it generated sub-intervals that overlapped by
one element (the last value in an interval with the first of the
next). It was also mistakenly computing abs(var(Y.i) - mean(Y.i))
when instead it should have truncated negative values to zero, as in
max(var(Y.i) - mean(Y.i), 0): this means that if the data follows a
Poisson distribution, sigmab will be computed to be 0, instead of a
possibly large positive value. These changes affect results generated
by analyse_baSAR(), analyse_FadingMeasurement(),
analyse_SAR.CWOSL(), analyse_pIRIRSequence() and plot_DetPlot()
as they call this function (#1491, #1495; thanks to @AndrzejBluszcz
for reporting and fixing).
Errors are now computed also when background_integral = NA. When
this feature was first introduced in v1.2.0, errors were set to NA,
which in turn led to miscomputing the De.error as 0. Now, instead,
the error calculation simplifies to the error component coming from
the signal integral, so that downstream uses (for example, in
analyse_SAR.CWOSL()) can produce a correct De.error. Note that
when background_integral = NA, sigmab is returned as NA, as
Galbraith’s method of computing it cannot be applied (#1504; thanks to
Annette Kadereit for reporting).
calc_TLLxTxRatio()calc_WodaFuchs()convert_CW2HMi(), convert_CW2LMi(), convert_CW2PMi()approx() decided to keep. We believe that instead the user
should be in charge of removing duplicated values, so that they can
better assess which should be kept or why there are duplicates at all
(#1485).fit_OSLLifeTimes()The function will remove any NA or NaN values from signal_range
before using it (#1497).
The function wrongly rejected inputs such as signal_range = 1:2 due
to incorrect argument validation. Note, however, that now the function
will check the number of values set in signal_range, and produce an
error (instead of a warning) if more than 2 values are specified
(#1506).
The function no longer crashes if arguments of length 0 (such as
NULL) are passed via ... (#1514).
fit_ThermalQuenching()nlsLM() (#1512).normalise_RLum()norm = NA was used (#1489; thanks to
@JohannesFriedrich for reporting).plot_DRT()A regression introduced in v1.2.0 caused the summary text to appear in black instead of colour for the very specific case of a dataset that contained a number of points equal to the total number of datasets in the input list (#1516).
When a list of datasets was provided, x-axis ticks were drawn only up to the size of the first dataset (#1518).
A regression introduced in v1.1.2 caused the na.rm argument to
behave in the opposite way as expected. This has been corrected so
that the default setting of na.rm = FALSE will not remove the NA
values. Moreover, the function no longer crashes if all errors are
NA and na.rm = FALSE (#1520).
The function no longer crashes if the input data frames don’t have names or if they contain a different number of columns (#1522).
plot_KDE()use_DRAC()verify_SingleGrainData()See also the write-up for Luminescence v1.2.0 on the REPLAY website.
All import functions will now always append the detector used to the
recordType slot of the RLum.Data.Curve object generated, for
consistency with what has always been done by read_XSYG2R(). The
following functions have been modified to support this new behaviour:
read_Daybreak2R()read_PSL2R()read_RF2R()read_SPE2()Risoe.BINfileData2RLum.Data.Curve() In most cases, this is the
string “(PMT)” for BIN/BINX, PSL and Daybreak files; in the
remaining cases the string “(NA)” is appended. The following example
files have been updated to reflect these changes:ExampleData.RLum.AnalysisExampleData.portableOSL As a consequence of these changes, default
titles for curve plots will now also contain the detector string.
This may potentially disrupt code that uses strict equality (==)
when selecting curves based on their recordType (#1275, #1286).Function read_XSYG2R() will now prepend an underscore to the
recordType slot of the RLum.Data.Curve object generated from an
XSYG file for all objects after the first curve in a record. This will
allow an easier way to differentiate the curves to analyse (for
example, “OSL (UVVIS”) from those that are not useful in the analysis
(for example, “_OSL (NA)“) (#1276).
The @info slot returned by function read_XSYG2R() no longer
contains a name field: this has been replaced by sequenceName, to
differentiate it from the newly-added recordName (#1239, #1387).
Functions calc_OSLLxTxRatio(), calc_OSLLxTxDecomposed(),
calc_TLLxTxRatio() and analyse_SAR.TL() return two extra columns,
SN_RATIO_LnLx and SN_RATIO_TnTx, in their result object. This may
disrupt code that relies on column indices instead of column names
(#1281, #1330, #1436).
See this post on the REPLAY website for more information and advice on how to deal with these changes.
normalise_RLum(): This function enables a fast normalisation of
RLum.Data.Curve-class, RLum.Data.Spectrum-class,
RLum.Data.Image-class and their combination in RLum.Analysis-class
objects. Normalisation was already possible for plotting (e.g.,
plot_RLum.Data.Curve(…, norm = TRUE)), which uses an internal
function called .normalise_curves() to do the job. With
normalise_RLum() we expose this functionality to RLum-class
objects and enable a convenient normalisation of values that might
come in handy in same cases. Normalised values are only count values.
Currently implemented is normalisation via keywords, such as "max",
"min", "first", "last", "huot", "intensity". Additionally,
the function supports normalisation to a positive number (#1250 by
@RLumSK, #1300).
read_BINXLOG2R(): This function enables the salvaging of log files
created by a Risø reader into R as RLum.Analysis-class. It also
allows for exporting these files into a BIN/BINX format. While the
function has been tested on a few examples, it is important to note
that log files are not a well-defined data format. This function is
intended for use in cases where you have a corrupted BIN/BINX file but
a complete log file is still available. Supported log formats are TL,
OSL, and IRSL curves. All other formats are ignored (#1241 by @RLumSK;
thanks to Michael Kenzler for bringing this to our attention).
Functions github_branches(), github_commits(), github_issues(),
is.RLum(), is.RLum.Analysis(), is.RLum.Data(),
is.RLum.Data.Curve(), is.RLum.Data.Image(),
is.RLum.Data.Spectrum() and is.RLum.Results() (deprecated since
1.1.2) have been removed (#1242).
Function install_DevelopmentVersion() has been removed as it relied
on the now deprecated devtools::install_github(). Equivalent
functionality is available via
pak::pkg_install("R-Lum/Luminescence") (#1453).
analyse_Al2O3C_CrossTalk()The signal_integral argument was silently ignored (#1428).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).
analyse_Al2O3C_ITC()The function used to output a suppressed error message instead of validating the input ahead of that (#1256).
The signal_integral argument was silently ignored (#1428).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).
analyse_Al2O3C_Measurement()integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).analyse_baSAR()The function has been updated to use fit_DoseResponseCurve() and
plot_DoseResponseCurve() instead of plot_GrowthCurve(). This
should not have any visible difference other than the renaming of two
arguments: output.plot has been renamed to plot_drc, while
output.plotExtended has been renamed to plot_extended. The older
names will still work but generate a deprecation warning (#1244).
Arguments signal.integral, background.integral,
signal.integral.Tx and background.integral.Tx have been renamed to
signal_integral, background_integral, signal_integral_Tx and
background_integral_Tx, respectively. The older names will still
work but generate a deprecation warning (#1290).
The function no longer crashes if aliquot_range specifies
non-positive indices or if source_doserate = 0 (#1424, #1426).
analyse_FadingMeasurement()The plots were affected by a bug in plot_RLum.Analysis(), so that
the output was unnecessarily split over two pages (#1247).
Arguments signal.integral and background.integral have been
renamed to signal_integral, background_integral, respectively. The
older names will still work but generate a deprecation warning
(#1290).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).
analyse_IRSAR.RF()slide$squared_residuals field of the @data slot in the
RLum.Results object returned by the function is no longer a 1-column
matrix, but a plain numeric vector (#1254).analyse_pIRIRSequence()Arguments signal.integral.min, signal.integral.max,
background.integral.min and background.integral.max have been
replaced by signal_integral and background_integral: each of them
now defines a vector of channels for the respective integrals. The
older names will still work but generate a deprecation warning
(#1290).
The function crashed if called on an empty list (#1372).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).
analyse_portableOSL()Argument signal.integral has been renamed to signal_integral. The
older name will still work but generates a deprecation warning
(#1290).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).
analyse_SAR.CWOSL()If mode = "alternate", the dose value is no longer reset
automatically. If the first dose point was > 0, the function detected
a dose-recovery test and automatically reset this dose point to 0.
While this is likely convenient in 9 out of 10 cases, it caused
trouble if the mode = "alternate" (passed on to
fit_DoseResponseCurve()) because it modified the first dose point
and this required additional handling afterwards. Please keep in mind
that you have to redefine the recuperation reference in such a case:
this is wanted and not a bug (fixed in commit 9ff29bf).
The order of columns in the rejection.criteria data frame that is
output by the function has been changed so that the UID column
appears now first. This is meant to facilitate seeing visually to what
aliquot each criteria belongs to. While the UID values are
random-looking alphanumeric values, they can identify univocally an
aliquot also after merge operations (#1172).
A new argument, dose_rate_source, was added to allow users to
specify a value for the source dose rate and display values in Gy,
rather than seconds. Previously, this was only possible by using a
factor with the dose.points argument. However, setting it manually
was particularly inconvenient if the dose points were already
extracted automatically, as it required users to insert dose values
manually regardless of the automated extraction. This argument is also
available in other functions that wrap around analyse_SAR.CWOSL()
(fixed in commit 4fc985d).
The function warns if the most common curve type (which is the one used in the analysis) matches multiple record types, as this may be a sign that the user has forgotten to select the correct set of curves to analyze (#1269).
A new signal-to-noise ratio rejection criterion has been added, with
default threshold of 50 (controllable by setting the sn.ratio
parameter in the rejection.criteria list to a different value). By
default it uses the signal-to-noise value computed for the natural
curve, but a different curve can be specified via the sn_reference
parameter in the rejection.criteria list (#1284).
Arguments signal.integral.min, signal.integral.max,
background.integral.min and background.integral.max have been
replaced by signal_integral, background_integral,
signal_integral_Tx and background_integral_Tx: each of them now
defines a vector of channels for the respective integrals. The older
names will still work but generate a deprecation warning (#1290).
When rejection criteria are set to NA, in the plot we now only show
the value calculated (say, 1.1) instead of incorrectly showing NAs
for both the sign and the threshold (as in 1.1 NA NA) which would
look ugly and confusing (#1318).
The rejection criteria for the highest dose points was not considered
correctly, and in most cases validated to "FAILED" even for
thresholds set to NA or Inf (fixed in commit 3562bca).
It is now possible to consider value uncertainties in the computation
of some rejection criteria (currently only recycling.ratio,
recuperation.rate and exceed.max.point) by setting
consider.uncertainties = TRUE in the rejection.criteria list. This
is disabled by default to preserve existing behaviour (#1325).
The function now supports setting background_integral = NA, in which
case no background integral is subtracted (#1385; thanks to Annette
Kadereit for reporting).
If the function processes a list of objects, as is the typical scenario, the aliquot number (not the position number) is returned. The aliquot number represents the consecutive number of objects processed.
Add support to control the legend size and the legend symbols via
legend.cex and legend.pch (fixed in commit 9ec687d).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).
When OSL.component is specified, the function now checks that the
input object was actually processed by
OSLdecomposed::RLum.OSL_decomposition(), in order to return a
warning message when that is not the case (#1464).
Curves with recordType starting with _ are automatically removed.
This allows to analyse an XSYG file directly without (in many cases)
any manual intervention required. This behaviour can be changed by
setting argument method_control = list(auto_curve_removal = FALSE)
(#1468).
analyse_SAR.TL()Argument signal.integral has been renamed to signal_integral. The
older name will still work but generate a deprecation warning (#1290).
The integral_input argument now accepts options “channel” (as
before) and “measurement” (instead of “temperature”). This was done to
uniform the choices accepted by the argument throughout the package.
The older name will still work but generates a deprecation warning
(#1396).
apply_EfficiencyCorrection()RLum.Data.Spectrum object (#1402).calc_AverageDose()RLum.Results returned now contains a $data field to store the
input data for consistency with similar functions, and two columns
have been appended to the end of the $summary field for internal use
(#1455).calc_CobbleDoseRate()input has been renamed to object. The older name will
still work but generates a deprecation warning (#1434).calc_CommonDose()sigmab > 1 when
log = FALSE due to excessively strict input validation (#1343).calc_FiniteMixture()n.components = 1:3,
enforcing the usage of n.components = 2:3 instead. This check, added
in v1.1.0, was unnecessarily stringent and has been reverted (#1458).calc_gSGC()n.MC is set to 0 (#1327).calc_MaxDose()bootstrap = TRUE were not transformed
back to the original scale before being returned to the user (#1351).calc_MinDose()The function now set non-positive De values to NA when log = TRUE,
which used to lead to a crash when combined with bootstrap = TRUE
(#1313).
The bootstrap results stored in the @data$bootstrap$pairs$gamma
matrix are now correctly converted to the normal scale for log models.
This fixes a regression introduced in v1.0.0, which caused those
values to be stored in the log scale (#1345).
The function now stores the bootstrap results in the summary slot
when bootstrap = TRUE. Moreover, summary results are printed to the
terminal also when using bootstrap (#1336; thanks to @feldsparlover
and Arindam Biswas for reporting and to Marijn van der Meij for
checking the implementation).
The function crashed when bootstrapping with bs.N = 1. Now the
bs.N parameter is silently reset to 2 in that case, although such
low values are discouraged as they may trigger a warning during loess
fitting (#1355).
The computation of frequencies of bootstrap replicates has been fixed to be sample-wise, while before it was mistakenly computed as a cumulative sum over all samples. In our tests, the difference in results produced by the two implementations appears to be minimal (#1374).
calc_OSLLxTxDecomposed()SN_RATIO_LnLx and SN_RATIO_TnTx (containing NA) for
consistency with the output produced by calc_OSLLxTxRatio() (#1330).calc_OSLLxTxRatio()The data frame returned by the function now contains two additional
columns, SN_RATIO_LnLx and SN_RATIO_TnTx. This is the
signal-to-noise ratio for the respective shine-down curves for Lx
and Tx (#1281).
Arguments signal.integral, background.integral,
signal.integral.Tx and background.integral.Tx have been renamed to
signal_integral, background_integral, signal_integral_Tx and
background_integral_Tx, respectively. The older names will still
work but generate a deprecation warning (#1290).
The function can now accept lists for its Lx.data and Tx.data
arguments, in which case it will self-call. This can simplify using
the function, as it’s no longer necessary to write a loop to process
all records (#1299).
The function now supports setting signal_integral to a chosen set of
channels while setting background_integral = NA. In this case, no
background integral is subtracted and the error calculation and the
signal-to-noise ratio will report NA values (#1375).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of time or
temperature, in which case the function performs an automatic
conversion to channels (#1396).
calc_TLLxTxRatio()Argument signal.integral has been renamed to signal_integral. The
older name will still work but generate a deprecation warning (#1290).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of
temperature, in which case the function performs an automatic
conversion to channels (#1396).
combine_De_Dr()Age_range argument contained missing
values (#1378).convert_CW2pHMi() and convert_CW2pPMi()correct_PMTLinerarity()The function, introduced in v1.1.2, unintentionally came with a major
flaw, in that it did nothing on a single RLum.Data.Curve() object
(fixed in commit 1d978cf).
If the channel resolution was not changing, the function produced
NaN values even in cases where dead time was not corrected (fixed in
commit 1d978cf).
convert_Concentration2DoseRate()Argument input has been renamed to object. The older name will
still work but generates a deprecation warning (#1434).
The interpolation of attenuation values has been corrected so that it will not unexpectedly fail if a non-integer value for the grain size is provided, as long as it’s in the valid range (#1444; thanks to Christina Neudorf for reporting).
convert_CW2p*()values has been renamed to object. The older name will
still work but generates a deprecation warning (#1434).convert_Second2Gray()dose_rate argument is now better validated (#1439).convert_SG2MG()The function crashed if used on an object resulting from a subset
operation, as it used the rownames (which may no longer correspond to
row indices) to index into the METADATA slot (#1415).
The function now exits cleanly instead of crashing if more than one input filenames are provided (#1446).
extract_IrradiationTimes()position field in its info object (#1466).fit_CWCurve()values has been renamed to object. The older name will
still work but generates a deprecation warning (#1434).fit_DoseResponseCurve()The C++ implementation of the GOK function has been tweaked to avoid
some repeated computations in a loop. Given the different ordering of
computations (although mathematically equivalent), there will be small
differences in the numerical output when fit.method = "GOK" is used
(#1277).
The fit message reported is now also stored in the @info slot of the
object returned by the function (#1362).
The function now consistently returns the material specific parameter
R for OTOR and OTORX and its uncertainty (fixed in commit
9b4d6bd).
fit_LMCurve()Arguments values and values.bg have been renamed to object and
object.bg, respectively. The older names will still work but
generate a deprecation warning (#1434).
The function now checks that the number of data points provided is large enough to fit the requested number of components (#1448).
get_RLum()RLum.Analysis object (#1271).merge_RLum.Risoe.BINfileData()input.objects has been renamed to objects. The older name
will still work but generates a deprecation warning (#1434).merge_RLum.Data.Spectrum()plot_AbanicoPlot()RLum.Results object generated by
calc_AverageDose(), calc_CentralDose(), calc_MaxDose(),
calc_MinDose() or calc_FiniteMixture(), one or more lines (and
corresponding labels) for the relevant results will be automatically
drawn, unless explicitly suppressed by setting line = NA (#1452).plot_DetPlot()When operating on a list with the default setting of
multicore = TRUE, the function limits the size of the parallel
cluster to the number of list elements to process (#1258).
Arguments signal.integral.min, signal.integral.max,
background.integral.min and background.integral.max have been
replaced by signal_integral, background_integral,
signal_integral_Tx and background_integral_Tx: each of them now
defines a vector of channels for the respective integrals. The older
names will still work but generate a deprecation warning (#1290).
The function now supports the integral_input argument, which can be
set to either "channel" (default) and "measurement". When the
latter is used, the integrals can be specified in terms of seconds, in
which case the function performs an automatic conversion to channels
(#1396).
plot_DRTResults()values has been renamed to object. The older name will
still work but generates a deprecation warning (#1434).plot_RLum.Analysis()plot_RLum.Data.Curve()cex didn’t account of the par.local
argument, thus affecting curve plots generated by
plot_RLum.Analysis() (#1347).plot_RLum.Data.Spectrum()The norm argument is no longer limited to just "min" and "max"
but now supports all options provided by normalise_RLum() (#1303).
The function now returns NULL (instead of producing an empty plot or
crashing) whenever the normalisation step replaces all values with
zeroes, which can happen if the normalisation term used is 0, for
example when the bg.spectrum argument is used and norm = "min"
(#1305).
Setting log = "z" will produce a warning if the data contains
non-positive values (for example after background subtraction or
normalisation) before setting those values to NA. This avoids
producing infinities or NaN values that would lead to crashes for some
plot types (#1307).
plot_FilterCombinations()The interactive mode did not accept all plotting options from the default (non-interactive) mode (fixed in commit c27a656).
If the function was used on a shiny server, the plot showed only after the app was closed (fixed in commit c27a656).
plot_GrowthCurve()sample has been renamed to object. The older name will
still work but generates a deprecation warning (#1434).plot_KDE()plot_RadialPlot()If the error column contains zero values, they are reset to the
smallest between the non-zero errors in the dataset and 10-9. This
avoids a crash when using the argument centrality = "mean.weighted",
which is the default for this function (#1314).
The weighted median used to compute the central values when
centrality = "median.weighted" now uses the precision as weight
(similarly to what is done for the weighted mean), while before it
incorrectly used the error (#1323).
read_BIN2R()The function could crash if called with do.call() and some
particularly odd inputs (#1260).
The function now throws an error instead of returning NULL when a
file with the wrong extension is read (#1393).
The function will now look for files recursively if the path to a directory is provided (#1393).
read_Daybreak2R()The function struggled with variable header lengths (#1262; thanks to @andrzejbluszcz for reporting).
The function will no longer crash if the data point entries have more than four columns (thanks to @andrzejbluszcz for reporting).
The import of binary .DAT files has been overhauled and made more
correct; moreover, the function accepts both .DAT and .dat
extensions for binary inputs, and supports DataType=Command records
in ASCII files (#1263, #1266; thanks to @andrzejbluszcz for
contributing code and datasets).
Trying to import multiple files by specifying a directory name failed because the generated path missed a directory separator (#1264).
read_PSL2R()NULL instead of throwing an error if a
directory is provided and no PSL files are found within it (#1393).read_RF2R()NULL if a list
containing elements other than character strings is provided (#1393).read_SPE2R()NULL if the
filename provided does not exist (#1393).read_XSYG2R()Attributes from the record level are now all included in the @info
slot, as long as they do not duplicate the attributes from the curve
level. Hence, those attributes are now available for filtering (#1239;
thanks to @DirkMittelstrass for reporting).
The function could crash if called with do.call() and some
particularly odd inputs (#1260).
remove_RLum()NULL records when an invalid
record.id was specified, which in turn could cause a crash when
displaying the object to the terminal (#1380).report_RLum()do.call() and some
particularly odd inputs (#1260).subset_SingleGrainData()The internal function .normalise_curve() received support to
normalise by the minimum value ("min"), the first value ("first"),
the channel length ("intensity") or a positive number (e.g, 2.2).
These new settings are automatically available to
plot_RLum.Analysis() and the plot_RLum.Data.*() functions (#1250,
#1300).
All the read_*() functions now process and validate the file
argument through the same internal helper function. This allows them
to support single and multiple files, URLs and directory paths
(#1393).
The package no longer depends on RcppArmadillo. This has no visible
impact to the user other than a small reduction in the package size
(#1254).
The show method for an RLum.Analysis-class object would fail if the
record slot contained NULL elements (fixed in commit f1846c5c).
The package has now reached 100% coverage! The test-coverage workflow action has been updated so that any decrease in coverage will be marked as a failure (#548).
See also the write-up for Luminescence v1.1.2 on the REPLAY website.
This package version requires R >= 4.4
The functions CW2pHMi(), CW2pLM(), CW2pLMi() and CW2pPMi()
(deprecated since 1.0.0) have been removed, but their functionality
remains in the corresponding convert_CW2*() functions (#992).
Functions github_commits(), github_branches() and
github_issues() are now deprecated and will be removed in a future
release (#1026).
Functions is.RLum(), is.RLum.Data(), is.RLum.Data.Curve(),
is.RLum.Data.Spectrum(), is.RLum.Data.Image(),
is.RLum.Analysis() and is.RLum.Results(), and are now deprecated
and will be removed in a future release. The best way of testing
whether an object is of a given type is by using the inherits()
function, as in inherits(object, "RLum.Data.Curve") (#1034).
analyse_Al2O3C_CrossTalk()The function no longer crashes if dose_point is misspecified
(#1073).
The function no longer crashes when called on an RLum.Analysis
object rather than on a list of them (#1182).
analyse_Al2O3C_Measurement()"OSL (UVVIS)" or "TL (UVVIS)"
(#1232).analyse_baSAR()The function no longer crashes if all objects in the input list are removed because empty (#1041).
The dose response curves are no longer overplotted when there are fewer than 1000 MCMC iterations (#1058).
analyse_FadingMeasurement()The function no longer crashes when called on an object with missing originator (#1130, #1154).
When called with a list containing object with multiple classes, the message produced reports the correct number of objects removed from the analysis (#1132).
The function no longer crashes if the normalisation term is zero, which should never happen in real-life analyses, but it may occur if the input data is somewhat malformed (#1144).
The function no longer crashes when attempting to remove undesired
objects from a list-like class that overloads the [<- S3 method
(#1236).
analyse_IRSAR.RF()The function no longer crashes when n.MC = NULL is used with the
FIT method (#1055).
The function has been optimized to be faster during the bootstrap and
sliding phases for the SLIDE and VSLIDE methods, with speed-ups in
the region of 45% (#1210, #1230).
analyse_pIRIRSequence()The names in the curves legend are no longer cut off (#1206).
Labels and legend in the rejection criteria plot are better positioned and no longer cut off (#1208).
The dashed lines in the summarised DRC plot have been extended to reach the outer box instead of leaving small white gaps at the extremes (#1215).
The space around the plots when using plot_singlePanels = FALSE has
been reduced, so that plots can be a bit more detailed (#1219).
analyse_portableOSL()The size of the contour labels for mode = "surface" can now be
controlled with the ... argument labcex and scale with cex
(#1075).
The size of the interpolation grid can be controlled via the ...
arguments nx and ny (#1077).
The coord argument is now better validated to avoid a crash in case
of misspecification (#1097).
analyse_SAR.CWOSL()Empty subplots are inserted when onlyLxTxTable = TRUE to preserve
the usual plot ordering. This prevents a crash that would otherwise
occur if the option was set from analyse_pIRIRSequence() (#1186).
The function crashed when applied to an object generated by
OSLdecomposition::RLum.OSL_decomposition() with plot = TRUE; this
was a regression introduced in v1.1.0 (#1188; thanks to
@DirkMittelstrass for reporting).
The visualisation of the ‘Checks’ (former rejection criteria) was not
very intuitive. To improve the situation, we now display correct
inequality symbols, such as <= or >= instead of <> (which was
meant to be understood as a comparator). Furthermore, the recycling
ratio now shows better the threshold depending on whether the ratio is
smaller or larger than one.
The function crashed if the rejection.criteria list specified a
NULL value for recuperation_reference (#1204).
The space around the plots when using plot_onePage = TRUE has been
reduced, so that plots can be a bit more detailed (#1219).
The labels in the rejection criteria plot are now shortened only when the available horizontal space is not wide enough (#1222).
bin_RLum.Data()bin_size (for RLum.Data.Curve), bin_size.row
and bin_size.col (for RLum.Data.Spectrum) has been made stricter,
so that invalid values produce an error (#1104).calc_AliquotSize()The function no longer hangs when grain.size is set to a small value
and its minimum and maximum values are the same (#1114).
The number of MC iteration is now correctly reported in the plot subtitle (#1115).
The function now validates the MC.iter argument to avoid an ugly
crash if a non-positive value is provided (#1124).
The function now better validates its grain.size argument (#1152).
calc_CentralDose()calc_CosmicDoseRate()NA values in its input
arguments (#1101).calc_EED_Model()A crash that occurred with a small number of simulation was fixed (#1051).
The error message in case of failed surface interpolation is now clearer and more complete (#1053).
calc_FadingCorr()g_value is an RLum.Results
object with an unsupported originator instead of returning NULL
(#1136).calc_FiniteMixture()The function no longer crashes if the De column contains zeros or missing values (#1146, #1148).
The legend for the components is positioned consistently also at cex
values other than 1 and is drawn also when pdf.colors = "gray"
(#1175).
calc_HomogeneityTest()calc_Huntley()calc_OSLLxTxRatio()Lx.data and Tx.data arguments are now better validated
(#1178).calc_SourceDoseRate()calc_Statistics()calc_Statistics() (#1160).combine_De_Dr()method_control argument (#1038).fit_CWCurve()If model fitting failed but an object named fit was present in the
workspace, the function tried to use that one, which would lead to a
crash or to unexpected results (#1081).
The output.table field of the RLum.Results object returned now
contains only columns corresponding to the components effectively
fitted (#1083).
fit_EmissionSpectra()fit_OSLLifeTimes()The function throws a warning when the fit fails (#1005).
The function makes better use of the plot area, leaving smaller margins around the plot (#1011).
install_DevelopmentVersion()github_branches() function (#1079).plot_AbanicoPlot()A warning was raised if the function returned early (for example due to invalid inputs) and the graphical device was off (#1001).
The function now validates the frame argument in order to avoid
crashing on misspecified values (#1036).
The function no longer crashes when a small plot.ratio value is
specified (#1062).
The function now validates the zlim argument to avoid a crash if
negative values are used with log.z = TRUE (#1063).
The legend text now scales better at high cex values (#1066).
If summary.pos contains multiple valid positions, the first one is
used rather than generating warnings and not showing the summary
(#1093).
plot_DoseResponseCurve()The plot symbols are now correctly assigned for
mode = "extrapolation" and in the legend. If reg_points_pch is
specified, it must now be a vector of 3 elements, corresponding to the
symbols to use for normal points, point 0 and repeated points,
respectively (#1072).
The baseline line in the sensitivity plot has been extended to reach the outer box instead of leaving small white gaps at the extremes (#1213).
The space around the plots has been reduced, so that plots can be a bit more detailed (#1219).
plot_DRTResponse()graphics::arrows() when datasets having wildly different
distributions are plotted (#1184).plot_Histogram()summary.pos to one of “left”, “center”
or “right” and normal_curve = TRUE resulted in the summary table not
being visible (#1118).plot_KDE()Space at the bottom of the plot is no longer added when the boxplot is
not plotted because values.cumulative = FALSE (#1110).
The plot title and subtitle now respect the cex option (#1112).
The function now better validates its input arguments (#1158).
plot_RadialPlot()The function avoids some possible overprinting at the extremes of the z-axis labels and draws lines at the extremes of the ellipse (#1013).
The appearance of the y-axis ticks has been improved in the case when the y-axis is particularly narrow (#1060).
If summary.pos contains multiple valid positions, use the first one
rather than generating warnings and not showing the summary (#1093).
The functionality of the stats argument had regressed in version
1.1.1, and now has been restored (#1106).
The function better validates the zlim argument, to avoid crashes on
misspecified axis limits if log.z = TRUE (#1140).
The function now always returns invisibly the list of plot parameters,
independently of the value of the output argument. This change made
that argument redundant, so it was removed. This should have no impact
on users; if specified, it will be ignored (#1142).
The function stops with an error instead of crashing if the input contains only 1 data point (#1150).
The function reports a message instead of throwing a warning when
adding a line with negative value if log.z = TRUE (#1164, #1168).
The summary text and line labels now scale better at high cex values
(#1170).
The function no lonver crashes if central.value is a non-positive
value when log.z = TRUE (#1173).
Some graphical artifacts related to the 2-sigma bar, which would
appear for extreme settings of the central.value argument have been
fixed (#1194).
plot_RLum.Analysis()Setting records_max to a value larger than the number of curves no
longer generates spurious legend entries (#1017).
The function now supports plotting of RLum.Data.Image objects
contained in its records (#1028).
plot_RLum.Data.Image()The function now supports the ... argument mtext (#1031).
The positioning of axis ticks and labels in raster and contour plots of low-resolution images has been improved, and pixel numbering starts consistently from 1 (#1191).
The function gained support for the arguments digits and
scientific. Moreover, it is possible to specify multiple plot titles
in main. Thanks to @Zink-Antoine for the contribution (#1197).
plot_RLum.Data.Spectrum()The function doesn’t crash anymore if bg.spectrum is used and ylim
specifies an interval that doesn’t contain any background channels
(#1019).
The function doesn’t crash anymore if the value of frames given is
too large when plot.type = "multiple.lines" (#1021).
The legend text now scales better at high cex values (#1068).
The function now makes better use of the plot area by setting smaller margins and reducing the spacing between axis elements (#1070).
read_PSL2R()pattern argument to refine the list of files
to read when a directory path is specified (#1099).read_SPE2R()frame.range is misspecified
(#1138).subset.Risoe.BINfileData().RESERVED slot (if present) to keep
only the elements selected (#1089).verify_SingleGrainData()RLum.Analysis-class objects. Now a
warning and NULL is returned.The ExampleData.portableOSL file has been updated with surface
coordinates (#1095).
Documentation for all example data (including synthetic datasets) is now more easily findable from RStudio (#1166; thanks to @DirkMittelstrass for reporting).
See also the write-up for Luminescence v1.1.1 on the REPLAY website.
correct_PMTLinearity(): A helper function to correct luminescence
signals measured with a PMT for count linearity (#920).Functions calc_Kars2008() (defunct since 0.9.26),
Analyse_SAR.OSLdata() (since 1.0.0), PSL2Risoe.BINfileData()
(since 1.0.0) and Second2Gray() (since 1.0.0) have been removed from
the package. Their functionality can be found in functions
calc_Huntley2006(), analyse_SAR.CWOSL(),
convert_PSL2Risoe.BINfileData() and convert_Second2Gray(),
respectively.
Function get_Risoe.BINfileData() has been removed as it was not used
and provided no benefits to the user (#945).
NULL value
instead of silently ignoring it (#946).analyse_Al2O3C_ITC()analyse_Al2O3C_Measurement()cross_talk_argument as a numeric
vector of length 3, as was already documented (#930).analyse_SAR.CWOSL()NA as its recordType
(#867).apply_CosmicRayRemoval()The method argument of smooth_RLum() was not reachable via ...
as the apply_CosmicRayRemoval() already has an argument called
method. Now the ... argument is called method_smooth_RLum and
works as expected (9b27467).
The function crashed if method = “Pych”andMARGIN = 1` were
specified. The function now better validates its inputs and no longer
returns invisibly but normally (#987).
calc_AliquotSize()calc_Huntley2006()n.MC argument, this was also used in the fitting
of the dose response curve. This was not the expected behaviour, and
resulted in poor performance (a 2x slowdown for n.MC = 10000). This
regression was introduced in version 1.0.0 (#867).calc_MaxDose()sigmab was set to a very small value (#898).calc_MinDose()The function crashed when bootstrapping with bs.M = 1. Now the
bs.M parameter is silently reset to 2 in that case, although such
low values are discouraged as they may trigger a warning during loess
fitting (#900).
The function crashed when all rows in the input data set contained
NA values (#915).
calc_Statistics()fit_CWCurve()fit_DoseResponseCurve()The object returned now contains an additional .De.raw column to
store the calculated De value computed by the fitting function “as
is”, without setting meaningless results to NA. The De and
.De.raw columns differ only for mode = "interpolation", where the
first sets the De to NA if negative, while the latter doesn’t. It is
then up to the user to decide what to do with those values, bearing in
mind that they may be arbitrary when negative (#957).
The message reported for fit.method = "QDR" now states correctly
whether the fit succeeded or failed (#961).
The computation of De.MC, De.Error and HPDI for
mode = "interpolation" has been modified to account correctly for
possible negative De values resulting from the fit (#963).
Previously, a single NA value in the Monte Carlo results prevented
the computation of Highest Density Intervals (HPDI). This limitation
has been removed, and now HPDIs are reported in more cases (#976).
The columns of the results$De data frame are now reported in a
different order; an additional “Mode” column reports the value of the
mode argument; columns meant for internal use have been moved to the
end and their names are now prefixed with . (#974).
fit_LMCurve()log = "x" is
specified and the lowest value is set to 0 threw the correct warning
but actually did nothing (38e4324).fit_OSLLifeTimes()signal_range argument doesn’t contain
negative values instead of crashing (#896).get_RLum()The function doesn’t crash anymore on RLum.Analysis objects if using
the record.id argument removes all available records (#873).
An internal optimization increased the performance of the function.
The difference is not perceivable on single calls to get_RLum(), but
the change brings a visible speed up when merge_RLum() is called
over a sufficiently large number of RLum.Analysis objects (#875).
merge_Risoe.BINfileData()verbose to allow disabling the output
from read_BIN2R() and write_R2BIN() (#950).plot_AbanicoPlot()The positioning of the y-axis label has been improved to be centred around the zero line (#847). The z-axis tickmarks and labels are better drawn at non-default cex values (#865).
The minor grid lines were drawn incorrectly in a rotated plot (#849).
Some plot elements didn’t scale correctly at non-default cex values (#861, #879).
The frame argument is now respected also when the plot is rotated
(#863).
The weighted median is computed correctly when summary = "median"
and summary.method = "weighted" are used (#905).
plot_DoseResponseCurve()We added support for the log graphical parameter, which can be used
if the fit was obtained with mode other than "extrapolation" (#820).
The normal curve drawn as part of the histogram plot could appear very jagged or even as a straight line, as it could happen that too few points were actually used when drawing the curve (#843).
The legend symbols did not match anymore the plotted regeneration/dose
points. This also affected functions such as analyse_SAR.CWOSL() and
analyse_pIRIRSequence() (9ba54e65).
The legend positioning can now be controlled via the ... argument
legend.pos (#959).
plot_DRCSummary()plot_DRTResults()Points didn’t scale correctly at non-default cex values (#879).
Option summary = "weighted$median" is now officially supported
(#905).
plot_Histogram()summary = "median.weighted" is now officially supported
(#905).plot_KDE()Outlier points didn’t scale correctly at non-default cex values
(#879).
The weighted median is computed correctly when summary = "median"
and summary.method = "weighted" are used (#905).
plot_RadialPlot()summary = "median.weighted" is now officially supported
(#905).plot_Risoe.BINfileData()Input arguments are validate more strictly to avoid unexpected crashes in case of misspecification (#964).
The x-axis label for TL curves now reports temperature rather than time, consistently with the data shown (#971).
plot_RLum.Analysis()cex settings
(#854).plot_RLum.Data.Curve()interactive that enables
interactive plotting of curves using plotly::plot_ly(). It requires
the suggested package 'plotly' to be installed (e4746eaa).plot_RLum.Data.Spectrum()Types image and contour gained more control of the contour line
labels through the argument labcex.
For plot types "image" and "multiple.lines" the ... logical
argument legend was added.
Plot type "image" further gained a legend with support through ...
for legend.pos, legend.horiz and n_breaks to control the number
of colours in the graphic.
read_BIN2R()FNAME metadata field is no longer left empty if the BIN-file
didn’t specify one, but it’s populated with the BIN-file name without
extension. This is the behaviour that was present up to version
0.9.26, but version 1.0.0 had regressed it (#928).read_XSYG2R()correct_PMTLinearity() (#920).smooth_RLum()method = "Carter_etal_2018". This is
helpful to ensure that the dark-background counts signals measured by
a photomultiplier tube follow a Poisson statistic, and smooths
non-conforming values according to an average over four neighbours
(#921).trim_RLum.Data()trim_range
argument exceeded the number of channels available (#871).use_DRAC()See also the write-up for Luminescence v1.1.0 on the REPLAY website.
remove_SignalBackground(): A user-friendly method to subtract
background signals from various curves in RLum.Analysis objects
without resorting to lapply() loops. Depending on the record type,
the function identifies pairs of curves; for instance, if in a
sequence, a TL curve is immediately followed by another TL curve,
the second curve is recognised as the background signal, subtracted
using merge_RLum() and subsequently removed from the object (if
desired). Alternatively, a set of potential background curves can be
specified.
remove_RLum(): This function further completes the set of methods
that can handle and modify RLum-class objects. It operates on
RLum.Analysis objects or a list of such objects to remove unwanted
records from datasets. Although the function calls get_RLum() and
relies on its functionality, the new implementation facilitates a more
logical workflow and analysis pipeline.
.as.latex.table(): Converts RLum.Results objects where suitable to
LaTeX ready tables, for instance, objects produced by use_DRAC().
The function has been present in the package as an internal function
for many years; now it is exported and better linked to make it
discoverable.
RF70Curves is a new dataset consisting of two IR-RF curves measured
with the RF70 protocol. This new dataset provides a more realistic
example for analyse_IRSAR.RF().Function get_Quote() is no longer exported, but remains available as
an internal function. This is unlikely to affect any user of the
package, as the function was only meant to report a random quote at
startup (#644).
In the functions fit_DoseResponseCurve() and plot_GrowthCurve(),
the fit.method option LambertW was replaced by the more correct
term OTOR.
Argument cex.global has been removed from plot_DoseResponseCurve()
(and consequently also from plot_GrowthCurve()), and if set it will
be silently ignored. Users can set the cex graphical parameter via
... in its place (#831).
The fit.method and fit.advanced arguments of function
fit_LMCurve() have been removed. The default fitting method has been
changed from port to LM, and support for the port algorithm has
been removed. From now on, argument fit.method is silently ignored,
unless fit.method = 'port' is used, in which case a deprecation
warning is thrown (#793).
The fundamental physical constants used in the package (such as
Boltzmann constant, Planck constant, etc.) have been uniformed to
those reported in the NIST Reference on Constants, Units and
Uncertainty. This may affect
the numerical results of the following functions: calc_FastRatio(),
calc_Huntley2006(), calc_SourceDoseRate(),
calc_ThermalLifetime(), convert_Activity2Concentration(),
convert_Wavelength2Energy(), fit_CWCurve(), fit_LMCurve(),
fit_SurfaceExposure(), fit_ThermalQuenching() (#693).
analyse_baSAR()analyse_FadingMeasurement()The function crashed if the number of Lx and Tx curves was not
equal when structure = c("Lx", "Tx"), which is the default. The
check that the number of points within each pair of curves has also
been improved, and the function now produces more helpful error
messages (#616).
The function tests are now less rigorous for different Lx and Tx
sizes. While they should match, numerical rounding issues in the data
returned by the measurement devices could previously result in
rejection of records, although this had no actual meaning for the data
analysis.
analyse_IRSAR.RF()The legend and subtitle texts now scale better at non-default cex settings (#803).
The printing of progress bars and messages to the terminal can now be
controlled via the ... argument verbose. Previously this could
only be done via the txtProgressBar argument (which is still
supported), but the new option makes the interface consistent with
most other functions (#805).
The mtext and cex options are respected if method = "None"
(#807).
The residual plot correctly respects the logarithmic transformation of
the x-axis when log = "x" or log = "xy" are specified (#814,
#825).
The function now deals correctly also with input objects containing multiple curves (#816).
The residual indicator rectangle, which is drawn when method is
either SLIDE or VSLIDE, is also drawn when log = "x" (#821).
The plotting of the density is silently disabled if n.MC = NULL,
which avoids a spurious warning (#823).
analyse_pIRIRSequence()cex graphical argument, and its plot
output has been subtly improved thanks to various fixes that have
occurred especially in plot_DoseResponseCurve() (#831).analyse_portableOSL()The function now returns an error if mode is something other than
"profile" or "surface".
The mode argument was not respected when operating over a list of
objects (#673).
The function crashed when using mode = "surface" if the plotting
limits were too tight and left only one point (#675).
The check on the validity of the signal.integral argument has been
improved, and now it occurs only once, so at most one warning is
raised if the argument is set to a value exceeding the valid range
(#678, #680).
The function returns a clearer message when no x-coordinates were
measured and mode = "surface" was used (#682).
The cex and type graphical parameters can now configured via the
... argument (#684).
The expected sequence pattern of the input object is validated more thoroughly to avoid crashes in case of misspecification (#687).
The graphical ... argument contour never produced a meaningful
contour plot due to an internal error (#686). Along, arguments
contour_nlevels and contour_col are now supported through ... to
better control the number and colour of contour lines.
analyse_SAR.CWOSL()Add support for fit.method = 'OTORX' following the changes in
fit_DoseResponseCurve(); this change includes the new argument
dose.points.test that is only of use in combination with the OTORX
fit.
Add new graphical output if the measurements were single grain measurements, in such case a disc with the position and grain number marked in shown. This plot replaces the IRSL curve check plot, but only for single grain data (#797).
The rejection criteria plot was rewritten and now provides an easier to grasp visual feedback (#797, #798).
The IRSL/Single Grain panel swapped place with the rejection
criteria panel; the plot numbers remained unchanged to avoid
regression.
More code optimisation for better readability (#802)
analyse_SAR.TL()sequence.structure argument ensures that a “SIGNAL”
entry has been specified (#779).calc_AliquotSize()The new argument sample_carrier.diameter allows to specify a value
for the diameter of the sample carrier, which up to now was hardcoded
to the very common 9.8 mm size (#623).
Several graphical parameters can now configured via ... arguments,
so that the plot appearance can be fully customized (#671).
calc_AverageDose()... as advertised. Now custom settings are
respected (#658).calc_FiniteMixture()The function doesn’t crash anymore if the n.components argument
specifies non-consecutive values (#691).
The function sometimes failed to plot some of the densities when the number of components was set to a value of 8 or more (#704).
The density plots would not always be coloured completely, but
especially for high values of sigmab there would be an unfilled area
at the base of the densities (#706).
If the very first iteration over the components during plotting was
skipped, then the function crashed as a quantity computed only in that
iteration was not available. This happened for very specific
combinations of sigmab and n.components (#708).
Another crash occurred when height of the largest density curve could
not be estimated due to the presence of too many NA values in the
intermediate computations (#710).
The check for significance of each component added to the model has been corrected to be more statistically rigorous (#703).
Blank gaps appearing to the sides of the proportion of components plot for high number of components have been removed (#713), as well as extra slices appearing due to rounding errors (#715).
The plot can be better configured via the new plot.criteria argument
to control whether the statistical criteria curves should be drawn.
Moreover, support for the ... options has been added: cex to
control the overall scaling, main.densities, main.proportions and
main.criteria to set the subplot titles (#717).
Plots are now generated even when results contain NA values, as they
in general don’t affect the plot. However, when that happens we report
it in the plot subtitle (#718).
calc_Huntley2006()Support was added for multicore computations via the cores argument,
and for the nls-fitting control options maxiter and trace.
The fitting of the simulated curve with the GOK model has been made
more robust: when an initial fit of the model fails, the fit is
attempted again with 10 different values for D0 and the best fit is
used. This should reduce the number of occasions in which the error
message “Could not fit simulated model curve, check suitability of
model and parameters” is reported (#660).
The function crashed if all simulated Lx/Tx values were identical and
approximately zero, which could happen if the rhop argument was set
to a large enough value (#725).
An error message has been improved so that it doesn’t suggest setting the ‘fit.bounds = FALSE’ argument if it has already been set (#729).
The computation of the x-axis limits has been improved to avoid having
too much unused horizontal space, especially for
mode = "extrapolation" (#731).
The scaling of the plot can now be controlled via the cex argument
(#735).
The plot margins are set more precisely and avoid the summary text to be cut off (#737).
calc_MinDose()calc_OSLLxTxRatio()The function returned a warning for wrong integral settings for the
Tx curve even if no Tx curve was provided.
The function does not check any more of different object types for
Lx.data and Tx.data but validate objects for allowed types (this
should have no user-visible effects).
convert_Concentration2DoseRate()extract_IrradiationTimes()The function tries a little bit harder to extract the correct duration of TL steps, rendering the data output hopefully a little bit more intelligible (#651).
The function gained a new argument called return_same_as_input, with
default value of FALSE. If set to TRUE, the input object (usually
an RLum.Analysis object or a list of them) is returned with
updated info elements for IRR_TIME and TIMESINCEIRR. This makes
the RLum.Analysis object compatible with functions that explicitly
search for those two objects, such as those in the
'OSLdecomposition' package (#752).
fit_DoseResponseCurve()The function now allocates less memory for storing intermediate values (#610).
Add initial support for OTORX fitting following Lawless and
Timar-Gabor 2024 (#677). The code implementation follows the Python
reference by jll2
with an addition for an allowed offset parameter a set if
fit.force_through_origin = FALSE. This also enables to support
mode = "extrapolation" (thanks to John Lawless for his input).
The code of the function was optimised in several places to improve code readability and reduce redundant calls.
The models for EXP, EXP+LIN, EXP+EXP and GOK are now available
in C++. This cut the required computation times in half in benchmark
scenarios. More importantly, this performance scales with the number
of Monte Carlo runs.
fit_EmissionSpectra()fit_LMCurve()If the user asks logarithmic scaling in the y-axis, using either
log = "y" or log = "xy", this is now ignored when plotting
residuals and component contributions (#755).
The plot has been slightly reworked to reduce the cases of “margin too
large” errors and to work better at high settings of cex (#757).
Missing values in the input data are now silently removed (#759, #763).
The plotting of residuals, component contributions and legend can now be disabled, and the legend position can be controlled (#785).
The error computed when using option fit.calcError = TRUE is now
returned correctly, instead of being left to NA (#789).
Argument bg.subtraction also accepts the option "none" to disable
background subtraction even if values.bg is provided (#795).
fit_SurfaceExposure()mu when a list of input data is provided
(#667).fit_ThermalQuenching()The trace option, which can be specified via the method_control
argument, is now respected.
The model now get internally reformulated into a mathematically equivalent expression that is easier to fit. This should reduce the number of occasions when the function fails to find a valid solution and improve the uncertainty estimation (#696).
get_RLum()subset can now be provided as a character that
represents a logical expression. Before, it always required a logical
expression, but this may lead to odd effects due to the early
evaluation happening in R and might not be wanted. Providing subset
as a character is now a viable workaround in those situations.import_Data()merge_RLum.Data.Curve()plot_DetPlot()multicore = FALSE
(#742).plot_DoseResponseCurve()The response curve always tries to the get the 0 point in the mode
interpolation and alternate (#677).
Minor graphical polish to limit overplotting and also plot a density
curve for the L_n/T_n signal.
If mode = "alternate", the message that the equivalent dose could
not be fitted is no longer shown.
Argument cex.global has been removed and will be silently ignored
(#831).
plot_DRCSummary()fit.method = 'OTORX' following the change in
fit_DoseResponseCurve() (#677).plot_DRTResults()The summary and legend texts now scale better at non-default cex settings (#765).
Argument given.dose is better validated against misspecifications,
and setting it to 0 is equivalent to leaving it at its default NULL
value, which corresponds to avoiding data normalization (#767, #799).
The function crashed when multiple inputs were used with
boxplot = TRUE and all preheat values were identical (#769).
Plot title, summary text and legend are now better positioned (#773, #774, #781).
A bug in the way colours and symbols are assigned to plot points has been fixed (#777).
The horizontal axis doesn’t include anymore a spurious extra tick that didn’t correspond to any aliquot (#783).
plot_GrowthCurve()Add support for fit.method = 'OTORX' following the change in
fit_DoseResponseCurve() (#677).
Argument cex.global has been removed and will be silently ignored
(#831).
plot_Histogram()The function now doesn’t produce warnings when the input consists of a single-column data frame, as it assumes that the De error is 10^-9 (#744).
The right margin is now smaller when errors are not plotted, as there is no need to leave space for the standard error axis (#748).
The summary text now scales better at non-default cex settings (#750).
plot_KDE()The function validates its input values more thoroughly (#635).
Setting summary.pos to one of “left”, “center” or “right” resulted
in the summary table not being visible (#642).
Argument output has been removed, and it will be ignored if set
(#700).
plot_RadialPlot()The function validates its input values more thoroughly (#639).
The legend text now scales better at non-default cex settings (#746).
plot_RLum.Data.Curve()We added comprehensive support for base R plotting arguments utilised
by plot.default() and par(). This enhancement ensures that all
available arguments are fully supported (#646).
The function gained a new logical argument named auto_scale. When
set in conjunction with either xlim or ylim, this argument
automatically adjusts the plot range to align with the corresponding
settings for xlim or ylim. For instance, if a user intends to plot
OSL curves but initially selects the xlim range c(10:30) to
examine the background, the initial count values may be excessively
large, resulting in limited visibility. With the introduction of the
auto_scale option, the ylim values are automatically adjusted to
compensate for this scenario. The auto_scale argument is also
accessible through plot_RLum.Analysis() and plot_RLum() (#646).
plot_RLum.Data.Spectrum()The channel-wise background subtraction was essentially broken if a background spectrum with the same setting was provided. The function always calculated the arithmetic mean. This was fixed, and the manual updated accordingly.
If a background spectrum was provided, the behaviour of the plot
output was sometimes hard to understand without knowledge of the
underlying code. This behaviour was improved and now ylim will also
affect the background spectrum if bg.channels = NULL (the default).
The function could crash if column names were missing and the 1bg.spectrum` argument was used (#726).
read_TIFF2R()The argument file can now be provided as a list or a character
vector.
The function gained a new logical argument called merge2stack that
can be used if file is either a list or a character vector of
length > 1. If set to TRUE, images are combined into one image
stack.
read_XSYG2R()A redundant computation has been removed, and the function is now marginally faster on files where the detector is not a spectrometer (#753).
Prepare import for an updated version of LexStudio2 (>=v2.31.1) where
the horizontal hardware binning finally works after >10 years, but
the changes introduce a lot of NaN values that would cause a crash
of the function.
Minor code refactoring for a small speed boost if spectrometer measurements are imported.
scale_GammaDose()plot_singlePanels now works as documented, that is it
produces all plots in a single page when set to FALSE (default), and
one plot per page when set to TRUE (#698).sort_RLum()The sorting mechanism for RLum.Analysis objects has been enhanced.
It now enables sorting based on multiple parameters, including sorting
all available info_elements in a prioritised manner (#606, #620).
Sorting now works on a list of RLum.Analysis objects. If the list
contains elements of a different type, they are passed through
unchanged. The output is again a list (#620).
structure_RLum().pid and info as lists within the data frame. The
function is primarily used internally to facilitate a rapid
exploration of RLum.Analysis object structures. However, the change
may potentially break existing code in extremely rare circumstances.template_DRAC()use_DRAC() to fail.use_DRAC()The function now checks for DRAC specific URL parts if a custom URL is provided; this avoids long searches for unspecific errors.
Due to the internal masking of submitted values, the initial row order got mixed up; regression from #438. The order is maintained and the row index corrected; in other words, the masking should now be again invisible to the user.
verify_SingleGrainData()read_XSYG2R()
contained positions in its info field (#740).write_R2TIFF()create_UID() has undergone further
optimisation for speed, resulting in a significant performance
improvement. Additionally, it now generates a hash value with a
consistent length instead of a time stamp with a random number.