Source code for kbmod.filters
import abc
from kbmod.result_list import *
[docs]class Filter(abc.ABC):
    """The base class for derived filters on the ResultList."""
    def __init__(self, *args, **kwargs):
        pass
    @abc.abstractmethod
    def get_filter_name(self):
        pass
    @abc.abstractmethod
    def keep_row(self, row: ResultRow):
        pass 
[docs]class LHFilter(Filter):
    """A filter for result's likelihood."""
    def __init__(self, min_lh, max_lh, *args, **kwargs):
        """Create a ResultsLHFilter.
        Parameters
        ----------
        min_lh : ``float``
            Minimal allowed likelihood. Use None for no min filter.
            Using None is equivalent to using -math.inf.
        max_lh : ``float``
            Maximal allowed likelihood. Use None for no max filter.
            Using None is equivalent to using math.inf.
        Examples
        --------
        # r is a ResultRow with likelihood of 10.
        >>> LHFilter(5, 15).keep_row(r)
        True
        >>> LHFilter(20, 30).keep_row(r)
        False
        >>> LHFilter(None, 30).keep_row(r)
        True
        """
        super().__init__(*args, **kwargs)
        self.min_lh = min_lh
        self.max_lh = max_lh
[docs]    def get_filter_name(self):
        """Get the name of the filter.
        Returns
        -------
        str
            The filter name.
        """
        return f"LH_Filter_{self.min_lh}_to_{self.max_lh}" 
[docs]    def keep_row(self, row: ResultRow):
        """Determine whether to keep an individual row based on
        the likelihood.
        Parameters
        ----------
        row : ResultRow
            The row to evaluate.
        Returns
        -------
        bool
           An indicator of whether to keep the row.
        """
        lh = row.final_likelihood
        if self.min_lh is not None and lh < self.min_lh:
            return False
        if self.max_lh is not None and lh > self.max_lh:
            return False
        return True  
[docs]class NumObsFilter(Filter):
    """A filter for result's number of valid observations."""
    def __init__(self, min_obs, *args, **kwargs):
        """Create a ResultsNumObsFilter.
        Parameters
        ----------
        min_obs : ``int``
            The minimum number of valid observations needed.
        Examples
        --------
        # r is a ResultRow with 5 valid indices.
        >>> NumObsFilter(10).keep_row(r)
        False
        >>> NumObsFilter(2).keep_row(r)
        True
        """
        super().__init__(*args, **kwargs)
        self.min_obs = min_obs
[docs]    def get_filter_name(self):
        """Get the name of the filter.
        Returns
        -------
        str
            The filter name.
        """
        return f"MinObsFilter_{self.min_obs}" 
[docs]    def keep_row(self, row: ResultRow):
        """Determine whether to keep an individual row based on
        the number of valid observations.
        Parameters
        ----------
        row : ResultRow
            The row to evaluate.
        Returns
        -------
        bool
           An indicator of whether to keep the row.
        """
        return len(row.valid_indices) >= self.min_obs