# `Nanodrop.Baseline`

Baseline correction using Rayleigh scattering turbidity model.

Fits turbidity baseline to:

    baseline(λ) = A / (λ + c)^4 + b

Using Levenberg-Marquardt nonlinear least squares over two segments
where peak contribution is minimal:
- 225-235nm (left edge, avoiding noisy low-wavelength data)
- 300-400nm (right side)

The corrected spectrum is simply: raw - baseline
A260 is read directly from the corrected spectrum.

# `correct`

```elixir
@spec correct(
  Nanodrop.Spectrum.t(),
  keyword()
) ::
  {Nanodrop.Spectrum.t(), Nanodrop.Spectrum.t(),
   Nanodrop.Functions.Turbidity.t()}
```

Corrects a spectrum for baseline using Rayleigh turbidity fit.

## Options

- `:windows` - List of `{min, max}` wavelength ranges for fitting
  (default: `[{225.0, 235.0}, {300.0, 400.0}]`)

Returns a tuple of `{spectrum, corrected_spectrum, turbidity}`:
- `spectrum` - the original input spectrum
- `corrected_spectrum` - baseline-subtracted spectrum
- `turbidity` - fitted turbidity parameters (%Turbidity{})

# `fit_turbidity`

Fits turbidity parameters using Levenberg-Marquardt over specified windows.

Model: A(λ) = A / (λ + c)^4 + b

Parameters:
- A (amplitude)
- c (wavelength offset)
- b (y-offset)

---

*Consult [api-reference.md](api-reference.md) for complete listing*
