Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR proposes a completely different algorithm to find the FWHM.
The old algorithm estimated the FWHM by finding the closest values to the half maximum value. This meant that it could easily make mistakes when spectra had multiple peaks (see plots below).
The new algorithm starts from the maximum value and then moves left (then right) until it finds the first value that falls below the half maximum value. This means it will never be fooled by multiple peaks
(left plot is the old algorithm and right plot is the new one)
With the old algorithm, it was very had to determine when the FWHM overlapped with the wavelength range. This means that the right-hand side value (
HWHM.r
) was not actually at half maximum but was the lowest value to the right of the FWHM.With the new algorithm, it's trivial to detect such cases and
peakshape()
now accordingly returnsNA
when the FWHM range overlaps with the wavelength range.(left plot is the old algorithm and right plot is the new one)
The new algorithm is slower (spends 150% of the time spent before) than the old one but I may still be able to improve it a bit(fixed by ffeb760)