When does it fade too much? Let’s talk about fading corrections.

by Sebastian Kreutzer (May 4, 2024)

Luminescence >= 0.9.0

Creative Commons License

Creative Commons
Attribution-NonCommercial-NoDerivatives 4.0
International License

1 Motivation

The fun part of developing research software is staying in contact with various people about data-related issues and problems related to the software you develop. This helps spot bugs and edge cases you may not have considered while writing the code. Plus, most of the time, I learn something new.

Unlike one would expect, I usually don’t get bothered with similar questions, but each request is unique. Except if it is not. This is typically the time to update the package manual or start writing a more elaborate response to address a frequently encountered problem.

2 The error message

The issue at hand today is related to questions about the function Luminescence::calc_FadingCorr(). More specifically, the message:

[calc_FadingCorr()] No solution found, return NULL. This usually happens for very large, unrealistic g-values.

Yes, the message read less clear in the past, but given the enquiries I’ve received  over time, after rephrasing it into the current shape, it still does not seem to point users to the  wanted direction.

So, what does the message mean? The message tells that the function could apply  the requested fading correction and its author believes it might relate to  a large \(g\)-value. Is the function author mistaken?

3 How does the fading correction work?

calc_FadingCorr() implements the Huntely & Lamothe (2001) model. This model corrects a given age for fading by finding the root of the following term:

\[ \frac{A_{f}}{A} = 1 - \kappa * \Big[ln(\frac{A}{t_c}) - 1\Big] \]

where \(\kappa\) is related to the \(g\)-value \[% of fading per decade\] as follows

\[ \kappa = \frac{\frac{\mathrm{g\_value}}{ln(10)}}{100} \]

\(A_{f}\) is the age \[ka\] affected by fading and \(A\) \[ka\] is the age after fading correction. \(t_c\) \[s\] (translated to ka internally) is the time between the irradiation and the prompt measurement. What the function does internally is to find a solution for

\[ 0 = 1 - \kappa * \Big[ln(\frac{A}{t_{c}}) - 1\Big] - \frac{A_{f}}{A} \] \(t_c\), \(A_f\) and the \(g-value\) (here \(\kappa\)) are known and hence the equation can be solved by find the correct \(A\) (the unfaded age).

Now, we can use this information to plot the evolution of an arbitrary age-corrected for fading as dependent on the \(g\)-value for different ages (\(A_f\), colour coded).

The plot shows that beyond a certain \(g\)-value no solution can be found anymore by the model as implemented. The threshold slightly depends on the chosen values for \(t_{c}\) (here set to 1) and the initial age (\(A_{f}\) affected by fading). At this point, the model encounters a limitation (uniroot() throws an error) and returns an error message, indicating that no further solution can be found beyond the specified $ g$-value threshold.

4 Practical implications

Beyond mathematical intricacies, a practical implication concerns the question: Is the fading correction suggested by Huntley and Lamothe

\(2001\) justified for samples with very high \(g\)-values?

Let’s go back to the graph above and imagine an age affected by fading of 10 ka (lower red line in the graph) and an assumed \(g\)-value of 7.5 %/decade for \(t_c = 1\). The fading correction would yield an unfaded age \(> 100\) ka, with a significant uncertainty (not shown in the graph).

Ultimately, you will decide whether such an age determination is practically beneficial. However, it might be prudent to consider exploring alternative methods.


Huntley, D.J., Lamothe, M., 2001. Ubiquity of anomalous fading in K-feldspars and the measurement and correction for it in optical dating. Canadian Journal of Earth Sciences, 38, 1093-1106.