Class FilterUtils


  • public class FilterUtils
    extends Object
    A set of FeatureFilter algebraic operations.
    Since:
    1.2
    Author:
    Matthew Pocock, Thomas Down
    • Method Detail

      • areProperSubset

        public static boolean areProperSubset​(FeatureFilter sub,
                                              FeatureFilter sup)
        Determines if the set of features matched by sub can be proven to be a proper subset of the features matched by sup.

        If the filter sub matches only features that are matched by sup, then it is a proper subset. It is still a proper subset if it does not match every feature in sup, as long as no feature matches sub that is rejected by sup.

        Parameters:
        sub - the subset filter
        sup - the superset filter
        Returns:
        true if sub is a proper subset of sup
      • areDisjoint

        public static boolean areDisjoint​(FeatureFilter a,
                                          FeatureFilter b)
        Determines if two queries can be proven to be disjoint.

        They are disjoint if there is no element that is matched by both filters - that is, they have an empty intersection. Order of arguments to this method is not significant.

        Parameters:
        a - the first FeatureFilter
        b - the second FeatureFilter
        Returns:
        true if they are proved to be disjoint, false otherwise
      • extractOverlappingLocation

        public static Location extractOverlappingLocation​(FeatureFilter ff)
        Try to determine the minimal location which all features matching a given filter must overlap.
        Parameters:
        ff - A feature filter
        Returns:
        the minimal location which any features matching ff must overlap, or null if no proof is possible (normally indicates that the filter has nothing to do with location).
        Since:
        1.2
      • areEqual

        public static final boolean areEqual​(FeatureFilter f1,
                                             FeatureFilter f2)
        Decide if two feature filters accept exactly the same set of features.

        Two feature filters are equal if it can be proven that f1.accept(feature) == f2.accept(feature) for all values of feature. If areEqual returns false, this may indicate that they accept clearly different sets of features. It may also, howerver, indicate that the method was unable to prove that they were equal.

        Note that given a finite set of features, f1 and f2 may match the same sub-set of those features even if they are not equal.

        Parameters:
        f1 - the first filter
        f2 - the second filter
        Returns:
        true if they can be proven to be equivalent
      • byType

        public static final FeatureFilter byType​(String type)
        Construct a filter which matches features with a specific type value.
      • bySource

        public static final FeatureFilter bySource​(String source)
        Construct a filter which matches features with a specific source value.
      • overlapsLocation

        public static final FeatureFilter overlapsLocation​(Location loc)
        Construct a filter which matches features with locations contained by or overlapping the specified Location.
      • shadowOverlapsLocation

        public static final FeatureFilter shadowOverlapsLocation​(Location loc)
        Construct a filter which matches features with locations where the interval between the min and max positions are contained by or overlap the specified Location.
      • shadowContainedByLocation

        public static final FeatureFilter shadowContainedByLocation​(Location loc)
        Construct a filter which matches features with locations where the interval between the min and max positions are contained by the specified Location.
      • and

        public static final FeatureFilter and​(FeatureFilter[] filters)
        Constructs a new filter which matches the intersection of a set of filters.
      • or

        public static final FeatureFilter or​(FeatureFilter[] filters)
        Construct a new filter which matches the intersection of two filters.
      • hasAnnotation

        public static final FeatureFilter hasAnnotation​(Object key)
        Match features where the property key has been defined as having some value, regardless of the exact value.
      • byParent

        public static final FeatureFilter byParent​(FeatureFilter parentFilter)
        Match features where the parent feature matches the specified filter. This cannot match top-level features.
      • byAncestor

        public static final FeatureFilter byAncestor​(FeatureFilter ancestorFilter)
        Match features where at least one of the ancestors matches the specified filter. This cannot match top-level features.
      • byChild

        public static final FeatureFilter byChild​(FeatureFilter childFilter)
        Match features where at least one child feature matches the supplied filter. This does not match leafFeatures.
      • byDescendant

        public static final FeatureFilter byDescendant​(FeatureFilter descFilter)
        Match features where at least one decendant feature -- possibly but not necessarily an immediate child -- matches the specified filter.
      • onlyChildren

        public static final FeatureFilter onlyChildren​(FeatureFilter child)
        Construct a filter which matches features whose children all match the specified filter. This filter always matches leaf features.
      • onlyDescendants

        public static final FeatureFilter onlyDescendants​(FeatureFilter desc)
        Construct a filter which matches features whose decendants all match the specified filter. This filter always matches leaf features.
      • byPairwiseScore

        public static final FeatureFilter byPairwiseScore​(double minScore,
                                                          double maxScore)
        Match SeqSimilaritiy features with scores in the specified range.
      • byComponentName

        public static final FeatureFilter byComponentName​(String compName)
        Construct a filter which matches all features which implement the ComponentFeature interface and have a componentName property equal to the specified value
      • topLevel

        public static final FeatureFilter topLevel()
        Return a filter which matches all top-level features. These are features which are direct children of a Sequence rather than another Feature.
      • leaf

        public static final FeatureFilter leaf()
        Return a filter which matches features with zero children.
      • all

        public static final FeatureFilter all()
        Return a filter which matches all features.
      • none

        public static final FeatureFilter none()
        Return a filter which matches no features.
      • optimize

        public static final FeatureFilter optimize​(FeatureFilter filter)
        Attempts to reduce a FeatureFilter to an equivalent FeatureFilter with fewer terms.

        This will attempt to push all leaf constraints as far from the root of the filter expression as possible, in an attept to prove an empty or universal set. It will then propogate these through the logical operators in an attempt to reduce the entire expression to the empty or universal set. If filters can be combined (for example, overlapping constraints), then this will happen on the way.

        The resulting filter is guaranteed to accept exactly the same set of\ features that is accepted by the argument. In particular, areEqual(filter, optimize(filter)) is always true.

        Parameters:
        filter - the FeatureFilter to optimize
        Returns:
        an optimized version
      • transformFilter

        public static FeatureFilter transformFilter​(FeatureFilter ff,
                                                    FilterUtils.FilterTransformer trans)

        This is a general framework method for transforming one filter into another. This method will handle the logical elements of a query (and, or, not) and delegate all the domain-specific munging to a FilterTransformer object.

        The transformer could flip strands and locations of elements of a filter, add or remove attributes required in annotations, or systematically alter feature types or sources.

        Parameters:
        ff - the FeatureFilter to transform
        trans - a FilterTransformer encapsulating rules about how to transform filters
      • visitFilter

        public static Object visitFilter​(FeatureFilter filter,
                                         Visitor visitor)
                                  throws BioException
        Applies a visitor to a filter, and returns the visitor's result or null.
        Parameters:
        filter - the filter to scan
        visitor - the visitor to scan with
        Returns:
        the result of the visitor or null
        Throws:
        BioException - if the required walker could not be created