Source code for jacscanomaly.criteria

from __future__ import annotations

from dataclasses import dataclass

from .models import CandidateQuality


[docs] @dataclass(frozen=True) class CandidateCriteria: """ Quality criteria used to accept/reject anomaly candidates. All thresholds are optional. Any criterion set to ``None`` is ignored. """ min_dchi2: float | None = None min_n_eff: float | None = None min_n_contrib: int | None = None min_n_window: int | None = None min_longest_run: int | None = None max_peak_frac: float | None = None def accepts(self, *, dchi2: float, quality: CandidateQuality) -> bool: if self.min_dchi2 is not None and dchi2 < float(self.min_dchi2): return False if self.min_n_eff is not None and quality.n_eff < float(self.min_n_eff): return False if self.min_n_contrib is not None and quality.n_contrib < int(self.min_n_contrib): return False if self.min_n_window is not None and quality.n_window < int(self.min_n_window): return False if self.min_longest_run is not None and quality.longest_run < int(self.min_longest_run): return False if self.max_peak_frac is not None and quality.peak_frac > float(self.max_peak_frac): return False return True