///|
/// Fit only user-selected background samples, then evaluate across all peaks.
/// True means include. No implicit automatic peak exclusion is performed.
pub fn masked_polynomial_baseline(
input : Spectrum,
selected : Array[Bool],
degree~ : Int32 = 2,
) -> BaselineResult raise SpectralError {
if selected.length() != input.length() {
raise Invalid("background mask length differs")
}
let axis : Array[Double] = []
let values : Array[Double] = []
for i in 0.. Array[Bool] raise SpectralError {
if intervals.length() == 0 || intervals.length() > 256 {
raise Budget("need 1..256 mask intervals")
}
let mask = Array::make(input.length(), false)
for interval in intervals {
let (left, right) = interval
finite(left, "mask left")
finite(right, "mask right")
if left > right {
raise Invalid("mask interval is reversed")
}
for i in 0..= left && input.axis[i] <= right {
mask[i] = true
}
}
}
mask
}