uk.ac.starlink.ttools.plot2.layer
Class StandardKernel1dShape

java.lang.Object
  extended by uk.ac.starlink.ttools.plot2.layer.StandardKernel1dShape
All Implemented Interfaces:
Kernel1dShape

@Equality
public abstract class StandardKernel1dShape
extends Object
implements Kernel1dShape

Implementation class for Kernel1dShapes based on evaluating symmetric functions over a limited extent.

Since:
12 Mar 2015
Author:
Mark Taylor

Field Summary
static StandardKernel1dShape COS
          Cosine kernel shape.
static StandardKernel1dShape COS2
          Cosine squared kernel shape.
static Kernel1d DELTA
          Delta function kernel.
static StandardKernel1dShape EPANECHNIKOV
          Epanechnikov (parabola) kernel shape.
static StandardKernel1dShape LINEAR
          Linear (triangular) kernel shape.
static StandardKernel1dShape SQUARE
          Rectangular kernel shape.
 
Constructor Summary
protected StandardKernel1dShape(String name, String description, double normExtent, boolean isSquare)
          Constructor.
 
Method Summary
 Kernel1d createFixedWidthKernel(double width)
          Creates a fixed width kernel with a given nominal width.
 Kernel1d createKnnKernel(double k, boolean isSymmetric, int minWidth, int maxWidth)
          Creates an adaptive kernel that uses a K-nearest-neighbours algorithm to determine local smoothing width, so that the width of the kernel is determined by the distance (number of 1-pixel bins) within which the given number k of samples is found.
static Kernel1d createSymmetricNormalisedKernel(double[] levels, boolean isSquare)
          Creates a symmetric normalised kernel based on a fixed array of function values.
static StandardKernel1dShape createTruncatedGaussian(double truncSigma)
          Returns a kernel shape based on the Gaussian function with truncation at a given number of standard deviations.
protected abstract  double evaluate(double x)
          Returns the point value of the function defining this shape at a point a given absolute fraction of the nominal width from the center.
 String getDescription()
          Returns a short description for this shape.
 String getName()
          Returns a one-word name for this shape.
 double getNormalisedExtent()
          Returns the extent of a kernel with this shape of unit nominal width.
static Kernel1dShape[] getStandardOptions()
          Returns an array of the generally recommended kernel shape options.
 boolean isSquare()
          Indicates whether this shape has features which are intentionally non-smooth and should be portrayed as such.
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

SQUARE

public static final StandardKernel1dShape SQUARE
Rectangular kernel shape.


LINEAR

public static final StandardKernel1dShape LINEAR
Linear (triangular) kernel shape.


EPANECHNIKOV

public static final StandardKernel1dShape EPANECHNIKOV
Epanechnikov (parabola) kernel shape.


COS

public static final StandardKernel1dShape COS
Cosine kernel shape.


COS2

public static final StandardKernel1dShape COS2
Cosine squared kernel shape.


DELTA

public static final Kernel1d DELTA
Delta function kernel. Convolution of a function with this kernel leaves it unaffected.

Constructor Detail

StandardKernel1dShape

protected StandardKernel1dShape(String name,
                                String description,
                                double normExtent,
                                boolean isSquare)
Constructor.

Parameters:
name - kernel shape name
description - short description
normExtent - kernel extent for unit nominal width
isSquare - true iff kernel is considered non-smooth
Method Detail

evaluate

protected abstract double evaluate(double x)
Returns the point value of the function defining this shape at a point a given absolute fraction of the nominal width from the center. Calling this method for values of x out of the range 0<=x<=getNormalisedExtent() has an undefined effect; the function value is assumed symmetric and zero for larger absolute values.

Parameters:
x - normalised absolute distance in range 0..normExtent
Returns:
function value at x

getNormalisedExtent

public double getNormalisedExtent()
Returns the extent of a kernel with this shape of unit nominal width. The value of the evaluate(x) method for x greater than the value returned from this method is taken to be zero.


isSquare

public boolean isSquare()
Indicates whether this shape has features which are intentionally non-smooth and should be portrayed as such. This non-smoothness applies either within the extent or at its edge.

Returns:
true iff there are non-smooth features that should be visible

getName

public String getName()
Returns a one-word name for this shape.

Specified by:
getName in interface Kernel1dShape
Returns:
name

getDescription

public String getDescription()
Returns a short description for this shape.

Specified by:
getDescription in interface Kernel1dShape
Returns:
description

createFixedWidthKernel

public Kernel1d createFixedWidthKernel(double width)
Description copied from interface: Kernel1dShape
Creates a fixed width kernel with a given nominal width. The width is some kind of characteristic half-width in one direction of the smoothing function. It is in units of grid points (array element spacing). It would generally be less than or equal to the kernel's extent.

Specified by:
createFixedWidthKernel in interface Kernel1dShape
Parameters:
width - half-width
Returns:
new kernel

createKnnKernel

public Kernel1d createKnnKernel(double k,
                                boolean isSymmetric,
                                int minWidth,
                                int maxWidth)
Description copied from interface: Kernel1dShape
Creates an adaptive kernel that uses a K-nearest-neighbours algorithm to determine local smoothing width, so that the width of the kernel is determined by the distance (number of 1-pixel bins) within which the given number k of samples is found.

The nearest neighbour search may be symmetric or asymmetric. In the asymmetric case, the kernel width is determined separately for the positive and negative directions along the axis.

Minimum and maximum smoothing widths are also supplied as bounds on the smoothing width for the case that the samples are very dense or very spread out (the latter case covers the edge of the data region as well). If minWidth==maxWidth, the result is a fixed-width kernel.

Specified by:
createKnnKernel in interface Kernel1dShape
Parameters:
k - number of nearest neighbours included in the distance that characterises the smoothing
isSymmetric - true for bidirectional KNN search, false for unidirectional
minWidth - minimum smoothing width
maxWidth - maximum smoothing width
Returns:
new kernel

toString

public String toString()
Overrides:
toString in class Object

getStandardOptions

public static Kernel1dShape[] getStandardOptions()
Returns an array of the generally recommended kernel shape options.

Returns:
kernel shape options

createTruncatedGaussian

public static StandardKernel1dShape createTruncatedGaussian(double truncSigma)
Returns a kernel shape based on the Gaussian function with truncation at a given number of standard deviations.

Parameters:
truncSigma - number of sigma at which to truncate the kernel
Returns:
new kernel shape

createSymmetricNormalisedKernel

public static Kernel1d createSymmetricNormalisedKernel(double[] levels,
                                                       boolean isSquare)
Creates a symmetric normalised kernel based on a fixed array of function values. The levels array gives a list of the values at x=0, 1 (and -1), 2 (and -2), ....

Parameters:
levels - kernel function values on 1d grid starting from 0
isSquare - true iff the kernel is considered non-smooth
Returns:
new kernel


Copyright © 2015 Central Laboratory of the Research Councils. All Rights Reserved.