# Class GKQuantiler

java.lang.Object
uk.ac.starlink.ttools.filter.GKQuantiler

All Implemented Interfaces:
  `Quantiler`

public class GKQuantiler extends Object implements Quantiler
Quantiler based on the method of Greenwald and Kanna, via the implementation in https://github.com/DataDog/sketches-java. It's not that fast and not that accurate, but it can cope with any number of samples.

Since:
  3 Dec 2020
Author:
  Mark Taylor
See Also:
  - Greenwald and Kanna paper

## Field Summary

Fields
Modifier and Type
Field
Description
`static final double`
`DFLT_RANK_ACCURACY`
Default rank accuracy.

## Constructor Summary

Constructors
Constructor
Description
`GKQuantiler()`
Constructor with default accumulator.
`GKQuantiler(GKArray gkArray)`
Constructor with custom accumulator.

## Method Summary

Modifier and Type
Method
Description
`void`
`acceptDatum(double value)`
Accepts a value to accumulate for quantile calculations.
`void`
`addQuantiler(Quantiler other)`
Merges the state of another compatible accumulator into this one; the effect is as if all the `Quantiler.acceptDatum(double)` calls that were made on `other` had been made on this one.
`double`
`getValueAtQuantile(double quantile)`
Returns the value at a given quantile.
`void`
`ready()`
Call after all data has been accumulated and before quantiles are to be calculated.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### DFLT_RANK_ACCURACY

public static final double DFLT_RANK_ACCURACY
Default rank accuracy.

See Also:
  - Constant Field Values

## Constructor Details

### GKQuantiler

public GKQuantiler()
Constructor with default accumulator.

### GKQuantiler

public GKQuantiler(GKArray gkArray)
Constructor with custom accumulator.

## Method Details

### acceptDatum

public void acceptDatum(double value)
Description copied from interface: `Quantiler`
Accepts a value to accumulate for quantile calculations. NaN values are ignored.

Specified by:
  `acceptDatum` in interface `Quantiler`
Parameters:
  `value` - value to accumulate

### addQuantiler

public void addQuantiler(Quantiler other)
Description copied from interface: `Quantiler`
Merges the state of another compatible accumulator into this one; the effect is as if all the `Quantiler.acceptDatum(double)` calls that were made on `other` had been made on this one.

Specified by:
  `addQuantiler` in interface `Quantiler`
Parameters:
  `other` - compatible quantiler to merge with this

### ready

public void ready()
Description copied from interface: `Quantiler`
Call after all data has been accumulated and before quantiles are to be calculated.

Specified by:
  `ready` in interface `Quantiler`

### getValueAtQuantile

public double getValueAtQuantile(double quantile)
Description copied from interface: `Quantiler`
Returns the value at a given quantile.

Specified by:
  `getValueAtQuantile` in interface `Quantiler`
Parameters:
  `quantile` - value in the range 0..1
Returns:
  value at quantile, or NaN if no data