///|
/// 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
}