Increase the wavelength step in stored spectral data in featureless regions to save storage space.

## Usage

```
thin_wl(x, ...)
# Default S3 method
thin_wl(x, ...)
# S3 method for class 'generic_spct'
thin_wl(
x,
max.wl.step = 10,
max.slope.delta = 0.001,
span = 21,
col.names,
...
)
# S3 method for class 'source_spct'
thin_wl(
x,
max.wl.step = 10,
max.slope.delta = 0.001,
span = 21,
unit.out = getOption("photobiology.radiation.unit", default = "energy"),
...
)
# S3 method for class 'response_spct'
thin_wl(
x,
max.wl.step = 10,
max.slope.delta = 0.001,
span = 21,
unit.out = getOption("photobiology.radiation.unit", default = "energy"),
...
)
# S3 method for class 'filter_spct'
thin_wl(
x,
max.wl.step = 10,
max.slope.delta = 0.001,
span = 21,
qty.out = getOption("photobiology.filter.qty", default = "transmittance"),
...
)
# S3 method for class 'reflector_spct'
thin_wl(x, max.wl.step = 10, max.slope.delta = 0.001, span = 21, ...)
# S3 method for class 'solute_spct'
thin_wl(x, max.wl.step = 10, max.slope.delta = 0.001, span = 21, ...)
# S3 method for class 'raw_spct'
thin_wl(
x,
max.wl.step = 10,
max.slope.delta = 0.001,
span = 21,
col.names,
...
)
# S3 method for class 'cps_spct'
thin_wl(
x,
max.wl.step = 10,
max.slope.delta = 0.001,
span = 21,
col.names,
...
)
# S3 method for class 'object_spct'
thin_wl(
x,
max.wl.step = 10,
max.slope.delta = 0.001,
span = 21,
col.names,
...
)
# S3 method for class 'chroma_spct'
thin_wl(x, ...)
# S3 method for class 'calibration_spct'
thin_wl(x, ...)
# S3 method for class 'generic_mspct'
thin_wl(x, max.wl.step = 10, max.slope.delta = 0.001, span = 21, ...)
# S3 method for class 'chroma_mspct'
thin_wl(x, ...)
# S3 method for class 'calibration_mspct'
thin_wl(x, ...)
```

## Arguments

- x
An R object

- ...
additional named arguments passed down to

`f`

.- max.wl.step
numeric. Largest allowed wavelength difference between adjacent spectral values in nanometres (nm).

- max.slope.delta
numeric in 0 to 1. Largest allowed change in relative slope of the spectral quantity per nm between adjacent pairs of values.

- span
integer A peak (or valley) is defined as an element in a sequence which is greater (or smaller) than all other elements within a window of width span centred at that element. Use NULL for the global peak.

- col.names
character. Name of the column of

`x`

containing the spectral data to check against`max.slope.delta`

. Currently only one column supported.- unit.out
character Allowed values "energy", and "photon", or its alias "quantum".

- qty.out
character Allowed values "transmittance", and "absorbance".

## Value

An object of the same class as `x`

but with a reduced density of
wavelength values in those regions were slope is shallow and featureless.

## Details

The algorithm used for spectra is "naive" in an effort to keep it efficient. It works by iteratively attempting to delete every other observation along wavelengths, based on the criteria for maximum wavelength step and maximum relative step in the spectral variable between adjacent data values.

## Methods (by class)

`thin_wl(default)`

: Default for generic function`thin_wl(generic_spct)`

:`thin_wl(source_spct)`

:`thin_wl(response_spct)`

:`thin_wl(filter_spct)`

:`thin_wl(reflector_spct)`

:`thin_wl(solute_spct)`

:`thin_wl(raw_spct)`

:`thin_wl(cps_spct)`

:`thin_wl(object_spct)`

:`thin_wl(chroma_spct)`

:`thin_wl(calibration_spct)`

:`thin_wl(generic_mspct)`

:`thin_wl(chroma_mspct)`

:`thin_wl(calibration_mspct)`

:

## Note

The value of `max.slope.delta`

is expressed as relative change in
the slope of spectral variable per nanometre. This means that values
between 0.0005 and 0.005 tend to work reasonably well. The best value will
depend on the wavelength step of the input and noise in data. A moderate
smoothing before thinning can sometimes help in the case of noisy data.

The amount of thinning is almost always less than the value of criteria passed as argument as it is based on existing wavelength values. For example if we start with a spectrum with a uniform wavelength step of 1 nm, possible steps in the thinned spectrum are 2, 4, 8, 16, 32, etc. nm. The algorithm, does work with any step sizes, regular or variable in the input. Thinning is most effective for spectra with large "featureless" regions as the algorithm attempts not to discard information, contrary to smoothing or interpolation.

Local peaks and valleys are always preserved, using by default a span of 21
to search for them. See `find_peaks`

.

## See also

Other experimental utility functions:
`collect2mspct()`

,
`drop_user_cols()`

,
`uncollect2spct()`

## Examples

```
nrow(yellow_gel.spct)
#> [1] 425
wl_stepsize(yellow_gel.spct)
#> [1] 1 4
thinned.spct <- thin_wl(yellow_gel.spct)
nrow(thinned.spct)
#> [1] 233
wl_stepsize(thinned.spct)
#> [1] 1 18
```