Class AreaCoord<DG extends DataGeom>

  • All Implemented Interfaces:
    Coord

    public abstract class AreaCoord<DG extends DataGeom>
    extends java.lang.Object
    implements Coord
    Coord implementation for Area (shape) values. It can currently work with shapes specified as strings using (a subset of) the STC-S syntax referenced by TAP 1.0, and as floating point arrays using the CIRCLE, POLYGON and POINT xtypes defined in DALI 1.1.

    The serialisation to floating point array is in three parts:

    1. characteristic (typically central) position in data space (2 elements for plane coords, 3 elements for sky coords)
    2. type code (1 element, equal to an integer)
    3. data array giving area details (variable length, interpretation dependent on type code)
    The point of storing the characteristic position is so that that position can be extracted for each row, for use in a point cloud to benefit from the standard machinery for auto-ranging, selection by region etc. Note that to decode this position information, a DataGeom supplied from the getAreaDataGeom(DG) method must be used.
    Since:
    27 Mar 2020
    Author:
    Mark Taylor
    See Also:
    DALI 1.1 section 3.3, TAP 1.0 section 6
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      static AreaCoord<PlaneDataGeom> createPlaneCoord​(InputMeta meta, boolean isRequired)
      Constructs a custom AreaCoord instance for use with Plane plot type.
      static AreaCoord<SkyDataGeom> createSkyCoord​(InputMeta meta, boolean isRequired)
      Constructs a custom AreaCoord instance for use with Sky plot type.
      static AreaCoord<SphereDataGeom> createSphereCoord​(InputMeta meta, boolean isRequired)
      Constructs a custom AreaCoord instance for use with Sphere plot type.
      abstract DG getAreaDataGeom​(DG baseGeom)
      Returns a DataGeom that can be used to read position data from objects serialized by this coordinate.
      Input[] getInputs()
      Returns specifications of the one or more input values the user supplies to provide the data values for this coord.
      StorageType getStorageType()
      Returns a code indicating how the quantity defined by this object is stored internally and presented to the plotting classes.
      java.util.function.Function<java.lang.Object[],​double[]> inputStorage​(uk.ac.starlink.table.ValueInfo[] infos, uk.ac.starlink.table.DomainMapper[] dms)
      Provides a function to turn a quantity in the user view to a plotting view object.
      boolean isRequired()
      Indicates whether this item must have a non-blank value in order for a plot to be possible.
      Area readAreaCoord​(Tuple tuple, int icol)
      Reads an Area value from an appropriate field in a given Tuple.
      protected abstract void writeDataPos​(Area area, double[] dpos)
      Writes the position in data coordinates of the characteristic (typically central) point of a given area object into the start of a supplied array.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • writeDataPos

        protected abstract void writeDataPos​(Area area,
                                             double[] dpos)
        Writes the position in data coordinates of the characteristic (typically central) point of a given area object into the start of a supplied array.
        Parameters:
        area - area object
        dpos - coordinate array into which characteristic position data coords are written
      • getAreaDataGeom

        public abstract DG getAreaDataGeom​(DG baseGeom)
        Returns a DataGeom that can be used to read position data from objects serialized by this coordinate. The returned DataGeom instance is based on a given instance; it may inherit some behaviour (for instance coordinate rotation in case of a SkyDataGeom).
        Parameters:
        baseGeom - DataGeom instance providing context behaviour
        Returns:
        data geom
      • getInputs

        public Input[] getInputs()
        Description copied from interface: Coord
        Returns specifications of the one or more input values the user supplies to provide the data values for this coord.
        Specified by:
        getInputs in interface Coord
        Returns:
        one or more items describing the user input values for this quantity
      • getStorageType

        public StorageType getStorageType()
        Description copied from interface: Coord
        Returns a code indicating how the quantity defined by this object is stored internally and presented to the plotting classes.
        Specified by:
        getStorageType in interface Coord
        Returns:
        storage type enum instance
      • isRequired

        public boolean isRequired()
        Description copied from interface: Coord
        Indicates whether this item must have a non-blank value in order for a plot to be possible.
        Specified by:
        isRequired in interface Coord
        Returns:
        if true, values must be supplied to make a plot
      • inputStorage

        public java.util.function.Function<java.lang.Object[],​double[]> inputStorage​(uk.ac.starlink.table.ValueInfo[] infos,
                                                                                           uk.ac.starlink.table.DomainMapper[] dms)
        Description copied from interface: Coord
        Provides a function to turn a quantity in the user view to a plotting view object.

        The supplied infos and domainMappers arrays correspond to (have the same length as) this object's Inputs array, and may influence the return values. However, Coord instances that always behave the same way (for instance whose Input Domains have fixed DomainMappers) are free to ignore these arguments.

        The returned function converts an array of per-input user values to a storable object of the type corresponding to the result of Coord.getStorageType(); the return value of the returned function is never null.

        Specified by:
        inputStorage in interface Coord
        Parameters:
        infos - per-input array of column input metadata
        dms - per-input array of input value->domain value mappers
        Returns:
        input values to storage object conversion function, or null if such conversions will never be possible
      • readAreaCoord

        public Area readAreaCoord​(Tuple tuple,
                                  int icol)
        Reads an Area value from an appropriate field in a given Tuple.
        Parameters:
        tuple - tuple
        Returns:
        icol index of column in tuple corresponding to this coord
      • createPlaneCoord

        public static AreaCoord<PlaneDataGeom> createPlaneCoord​(InputMeta meta,
                                                                boolean isRequired)
        Constructs a custom AreaCoord instance for use with Plane plot type.
        Parameters:
        meta - user coordinate metadata
        isRequired - true iff this coordinate is required for plot
        Returns:
        new instance
      • createSkyCoord

        public static AreaCoord<SkyDataGeom> createSkyCoord​(InputMeta meta,
                                                            boolean isRequired)
        Constructs a custom AreaCoord instance for use with Sky plot type.
        Parameters:
        meta - user coordinate metadata
        isRequired - true iff this coordinate is required for plot
        Returns:
        new instance
      • createSphereCoord

        public static AreaCoord<SphereDataGeom> createSphereCoord​(InputMeta meta,
                                                                  boolean isRequired)
        Constructs a custom AreaCoord instance for use with Sphere plot type. Note this assumes that the supplied Tuples have the radial coordinate directly after the area coordinate.
        Parameters:
        meta - user coordinate metadata
        isRequired - true iff this coordinate is required for plot
        Returns:
        new instance