# transmittance:transmittance normalised difference

Source:`R/filter-spct-ratios-fractions.r`

`Tfr_normdiff.Rd`

This function returns the transmittance normalized difference index for a given pair of wavebands of a filter spectrum.

## Usage

```
Tfr_normdiff(
spct,
w.band.plus,
w.band.minus,
scale.factor,
wb.trim,
use.cached.mult,
use.hinges,
...
)
# Default S3 method
Tfr_normdiff(
spct,
w.band.plus,
w.band.minus,
scale.factor,
wb.trim,
use.cached.mult,
use.hinges,
...
)
# S3 method for class 'filter_spct'
Tfr_normdiff(
spct,
w.band.plus = NULL,
w.band.minus = NULL,
scale.factor = 1,
wb.trim = getOption("photobiology.waveband.trim", default = TRUE),
use.cached.mult = FALSE,
use.hinges = NULL,
quantity = "mean",
naming = "short",
name.tag = NULL,
...
)
# S3 method for class 'filter_mspct'
Tfr_normdiff(
spct,
w.band.plus = NULL,
w.band.minus = NULL,
scale.factor = 1,
wb.trim = getOption("photobiology.waveband.trim", default = TRUE),
use.cached.mult = FALSE,
use.hinges = NULL,
quantity = "mean",
naming = "short",
name.tag = NULL,
...,
attr2tb = NULL,
idx = "spct.idx",
.parallel = FALSE,
.paropts = NULL
)
```

## Arguments

- spct
an object of class "filter_spct".

- w.band.plus, w.band.minus
waveband object(s) or a list(s) of waveband objects used to compute the additive and subtractive transmittance terms of the normalized difference index.

- scale.factor
numeric vector of length 1, or length equal to that of

`w.band`

. Numeric multiplier applied to returned values.- wb.trim
logical if TRUE wavebands crossing spectral data boundaries are trimmed, if FALSE, they are discarded

- use.cached.mult
logical indicating whether multiplier values should be cached between calls

- use.hinges
logical Flag indicating whether to insert "hinges" into the spectral data before integration so as to reduce interpolation errors at the boundaries of the wavebands.

- ...
other arguments (possibly ignored)

- quantity
character One of "total", "average" or "mean".

- naming
character one of "long", "default", "short" or "none". Used to select the type of names to assign to returned value.

- name.tag
character Used to tag the name of the returned values.

- attr2tb
character vector, see

`add_attr2tb`

for the syntax for`attr2tb`

passed as is to formal parameter`col.names`

.- idx
character Name of the column with the names of the members of the collection of spectra.

- .parallel
if TRUE, apply function in parallel, using parallel backend provided by foreach

- .paropts
a list of additional options passed into the foreach function when parallel computation is enabled. This is important if (for example) your code relies on external data or packages: use the .export and .packages arguments to supply them so that all cluster nodes have the correct environment set up for computing.

## Value

In the case of methods for individual spectra, a `numeric`

vector with name attribute set. The name is based on the name of the
wavebands unless a named list of wavebands is supplied in which case the
names of the list elements are used. "[Tfr:Tfr]" is appended if ```
quantity
= "total"
```

and "[Tfr(wl):Tfr(wl)]" if `quantity = "mean"`

or
`quantity = "average"`

.

A `data.frame`

is returned in the case of collections of spectra,
containing one column for each fraction definition, an index column with
the names of the spectra, and optionally additional columns with metadata
values retrieved from the attributes of the member spectra.

Fraction definitions are "assembled" from the arguments passed to
`w.band.num`

and `w.band.denom`

. If both arguments are lists of
waveband definitions, with an equal number of members, then the wavebands
are paired to obtain as many fractions as the number of wavebands in each
list. Recycling for wavebands takes place when the number of denominator
and numerator wavebands differ.

## Details

With the default `quantity = "mean"`

or
`quantity = "average"`

the ratio is based on
two **mean spectral photon transmittances**, one computed for each waveband.

$$\frac{\overline{\mathrm{Tfr}_\lambda}(s, wb_\mathrm{plus}) - \overline{\mathrm{Tfr}_\lambda}(s, wb_\mathrm{minus})}{\overline{\mathrm{Tfr}_\lambda}(s, wb_\mathrm{plus}) + \overline{\mathrm{Tfr}_\lambda}(s, wb_\mathrm{minus})}$$

If the argument is set to `quantity = "total"`

the fraction is based on
two **photon transmittances**, one computed for each waveband.

$$\frac{\mathrm{Tfr}(s, wb_\mathrm{plus}) - \mathrm{Tfr}(s, wb_\mathrm{minus})}{\mathrm{Tfr}(s, wb_\mathrm{plus}) + \mathrm{Tfr}(s, wb_\mathrm{minus})}$$

Only if the wavelength expanse of the two wavebands is the same, these two ratios are numerically identical.

## Methods (by class)

`Tfr_normdiff(default)`

: Default for generic function`Tfr_normdiff(filter_spct)`

: Method for`filter_spct`

objects`Tfr_normdiff(filter_mspct)`

: Calculates Tfr:Tfr from a`filter_mspct`

object.

## Note

The last two parameters control speed optimizations. The defaults
should be suitable in most cases. If you will use repeatedly the same SWFs
on many spectra measured at exactly the same wavelengths you may obtain
some speed up by setting `use.cached.mult =T RUE`

. However, be aware
that you are responsible for ensuring that the wavelengths are the same in
each call, as the only test done is for the length of the `w.length`

vector.

## See also

`normalized_diff_ind`

, accepts different summary
functions.

Other transmittance ratio functions:
`Tfr_fraction()`

,
`Tfr_ratio()`

## Examples

```
Tfr_normdiff(Ler_leaf_rflt.spct,
waveband(c(400,500), wb.name = "Blue"),
waveband(c(600,700), wb.name = "Red"))
#> Warning: 'Tfr_fraction' is not defined for objects of class reflector_spct
#> [1] NA
Tfr_normdiff(Ler_leaf_rflt.spct,
waveband(c(400,500), wb.name = "Blue"),
waveband(c(600,700), wb.name = "Red"),
quantity = "total")
#> Warning: 'Tfr_fraction' is not defined for objects of class reflector_spct
#> [1] NA
Tfr_normdiff(Ler_leaf_rflt.spct,
waveband(c(400,500), wb.name = "Blue"),
waveband(c(600,700), wb.name = "Red"),
quantity = "mean")
#> Warning: 'Tfr_fraction' is not defined for objects of class reflector_spct
#> [1] NA
```