Package net.imglib2
Class KDTree<T>
- java.lang.Object
-
- net.imglib2.KDTree<T>
-
- Type Parameters:
T- type of values stored in the tree.
- All Implemented Interfaces:
java.lang.Iterable<T>,EuclideanSpace,IterableRealInterval<T>,RealInterval
public class KDTree<T> extends java.lang.Object implements EuclideanSpace, IterableRealInterval<T>
KDTree to access values at RealLocalizable positions.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classKDTree.DimComparator<L extends RealLocalizable>Compare RealLocalizables by comparing their coordinates in dimension d.classKDTree.KDTreeCursorprotected static classKDTree.SamplerNode<T>A KDTreeNode that stores its value as a Sampler.protected static classKDTree.ValueNode<T>A KDTreeNode that stores its value as a reference.
-
Constructor Summary
Constructors Constructor Description KDTree(java.util.List<T> values, java.util.List<L> positions)Construct a KDTree from the elements in the given list.KDTree(IterableRealInterval<T> interval)Construct a KDTree from the elements of the givenIterableRealInterval.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description KDTree.KDTreeCursorcursor()Returns aRealCursorthat iterates with optimal speed without calculating the location at each iteration step.KDTreeNode<T>getRoot()Get the root node.java.lang.ObjectiterationOrder()Returns the iteration order of thisIterableRealInterval.KDTree.KDTreeCursorlocalizingCursor()Returns aRealLocalizableIteratorthat calculates its location at each iteration step.protected <L extends RealLocalizable>
KDTree.ValueNode<T>makeNode(java.util.List<L> elements, int i, int j, int d)protected <L extends RealLocalizable>
KDTree.ValueNode<T>makeNode(java.util.List<L> positions, int i, int j, int d, java.util.List<T> values, int[] permutation)Construct the tree by recursively adding nodes.protected <L extends RealLocalizable>
KDTree.ValueNode<T>makeNode(java.util.ListIterator<L> first, java.util.ListIterator<L> last, int d)protected <L extends RealLocalizable>
KDTree.ValueNode<T>makeNode(java.util.ListIterator<L> first, java.util.ListIterator<L> last, int d, java.util.List<T> values, int[] permutation)Construct the tree by recursively adding nodes.protected KDTree.SamplerNode<T>makeSamplerNode(java.util.List<RealCursor<T>> elements, int i, int j, int d)Construct the tree by recursively adding nodes.intnumDimensions()Gets the space's number of dimensions.voidrealMax(double[] m)Write the maximum of each dimension into double[].doublerealMax(int d)Get the maximum in dimension d.voidrealMax(RealPositionable m)Sets aRealPositionableto the maximum of thisIntervalvoidrealMin(double[] m)Write the minimum of each dimension into double[].doublerealMin(int d)Get the minimum in dimension d.voidrealMin(RealPositionable m)Sets aRealPositionableto the minimum of thisIntervallongsize()Returns the number of elements in thisFunction.java.lang.StringtoString()java.lang.StringtoString(KDTreeNode<T> left, java.lang.String indent)protected static <L extends RealLocalizable>
booleanverifyDimensions(java.util.List<L> positions, int n)Check whether all positions in the positions list have dimension n.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface net.imglib2.IterableRealInterval
firstElement, iterator
-
Methods inherited from interface net.imglib2.RealInterval
maxAsDoubleArray, maxAsRealPoint, minAsDoubleArray, minAsRealPoint
-
-
-
-
Field Detail
-
n
protected final int n
the number of dimensions.
-
root
protected final KDTreeNode<T> root
-
size
protected final long size
the number of nodes in the tree.
-
min
protected final double[] min
minimum of each dimension.
-
max
protected final double[] max
maximum of each dimension.
-
-
Constructor Detail
-
KDTree
public KDTree(java.util.List<T> values, java.util.List<L> positions)
Construct a KDTree from the elements in the given list.Note that the constructor can be called with the same list for both
values == positionsifT extends RealLocalizable.- Parameters:
values- a list of valuespositions- a list of positions corresponding to the values
-
KDTree
public KDTree(IterableRealInterval<T> interval)
Construct a KDTree from the elements of the givenIterableRealInterval.- Parameters:
interval- elements in the tree are obtained by iterating this
-
-
Method Detail
-
verifyDimensions
protected static <L extends RealLocalizable> boolean verifyDimensions(java.util.List<L> positions, int n)
Check whether all positions in the positions list have dimension n.- Returns:
- true, if all positions have dimension n.
-
makeNode
protected <L extends RealLocalizable> KDTree.ValueNode<T> makeNode(java.util.List<L> positions, int i, int j, int d, java.util.List<T> values, int[] permutation)
Construct the tree by recursively adding nodes. The sublist of positions between indices i and j (inclusive) is split at the median element with respect to coordinates in the given dimension d. The median becomes the new node which is returned. The left and right partitions of the sublist are processed recursively and form the left and right subtrees of the node.- Parameters:
positions- list of positionsi- start index of sublist to processj- end index of sublist to processd- dimension along which to split the sublistvalues- list of values corresponding to permuted positionspermutation- the index of the values element at index k is permutation[k]- Returns:
- a new node containing the subtree of the given sublist of positions.
-
makeNode
protected <L extends RealLocalizable> KDTree.ValueNode<T> makeNode(java.util.ListIterator<L> first, java.util.ListIterator<L> last, int d, java.util.List<T> values, int[] permutation)
Construct the tree by recursively adding nodes. The sublist of positions between iterators first and last is split at the median element with respect to coordinates in the given dimension d. The median becomes the new node which is returned. The left and right partitions of the sublist are processed recursively and form the left and right subtrees of the node.- Parameters:
first- first element of the sublist of positionslast- last element of the sublist of positionsd- dimension along which to split the sublistvalues- list of values corresponding to permuted positionspermutation- the index of the values element at index k is permutation[k]- Returns:
- a new node containing the subtree of the given sublist of positions.
-
makeNode
protected <L extends RealLocalizable> KDTree.ValueNode<T> makeNode(java.util.List<L> elements, int i, int j, int d)
SeemakeNode(List, int, int, int, List, int[]). Here, no values are attached to the nodes (or rather the positions are the values).- Parameters:
elements- list of elements (positions and values at the same time)i- start index of sublist to processj- end index of sublist to processd- dimension along which to split the sublist
-
makeNode
protected <L extends RealLocalizable> KDTree.ValueNode<T> makeNode(java.util.ListIterator<L> first, java.util.ListIterator<L> last, int d)
SeemakeNode(ListIterator, ListIterator, int, List, int[]). Here, no values are attached to the nodes (or rather the positions are the values).- Parameters:
first- first element of the sublist to processlast- last element of the sublist to processd- dimension along which to split the sublist
-
makeSamplerNode
protected KDTree.SamplerNode<T> makeSamplerNode(java.util.List<RealCursor<T>> elements, int i, int j, int d)
Construct the tree by recursively adding nodes. The sublist of elements between indices i and j (inclusive) is split at the median element with respect to coordinates in the given dimension d. The median becomes the new node which is returned. The left and right partitions of the sublist are processed recursively and form the left and right subtrees of the node. (The elements of the list are RealCursors which provide coordinates and values.)- Parameters:
elements- list of elements (positions and values at the same time)i- start index of sublist to processj- end index of sublist to processd- dimension along which to split the sublist- Returns:
- a new node containing the subtree of the given sublist of elements
-
getRoot
public KDTreeNode<T> getRoot()
Get the root node.- Returns:
- the root node.
-
numDimensions
public int numDimensions()
Description copied from interface:EuclideanSpaceGets the space's number of dimensions.- Specified by:
numDimensionsin interfaceEuclideanSpace
-
toString
public java.lang.String toString(KDTreeNode<T> left, java.lang.String indent)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
realMin
public double realMin(int d)
Description copied from interface:RealIntervalGet the minimum in dimension d.- Specified by:
realMinin interfaceRealInterval- Parameters:
d- dimension- Returns:
- minimum in dimension d.
-
realMin
public void realMin(double[] m)
Description copied from interface:RealIntervalWrite the minimum of each dimension into double[].- Specified by:
realMinin interfaceRealInterval
-
realMin
public void realMin(RealPositionable m)
Description copied from interface:RealIntervalSets aRealPositionableto the minimum of thisInterval- Specified by:
realMinin interfaceRealInterval
-
realMax
public double realMax(int d)
Description copied from interface:RealIntervalGet the maximum in dimension d.- Specified by:
realMaxin interfaceRealInterval- Parameters:
d- dimension- Returns:
- maximum in dimension d.
-
realMax
public void realMax(double[] m)
Description copied from interface:RealIntervalWrite the maximum of each dimension into double[].- Specified by:
realMaxin interfaceRealInterval
-
realMax
public void realMax(RealPositionable m)
Description copied from interface:RealIntervalSets aRealPositionableto the maximum of thisInterval- Specified by:
realMaxin interfaceRealInterval
-
size
public long size()
Description copied from interface:IterableRealIntervalReturns the number of elements in this
Function.- Specified by:
sizein interfaceIterableRealInterval<T>- Returns:
- number of elements
-
iterationOrder
public java.lang.Object iterationOrder()
Description copied from interface:IterableRealIntervalReturns the iteration order of thisIterableRealInterval. If the returned object equals (Object.equals(Object)) the iteration order of anotherIterableRealIntervalf then they can be copied by synchronous iteration. That is, having anIteratoron this and anotherIteratoron f, moving both in synchrony will point both of them to corresponding locations in their source domain. In other words, this and f have the same iteration order and means and the same number of elements.- Specified by:
iterationOrderin interfaceIterableRealInterval<T>- Returns:
- the iteration order of this
IterableRealInterval. - See Also:
FlatIterationOrder
-
cursor
public KDTree.KDTreeCursor cursor()
Description copied from interface:IterableRealIntervalReturns a
RealCursorthat iterates with optimal speed without calculating the location at each iteration step. Localization is performed on demand.Use this where localization is required rarely/ not for each iteration.
- Specified by:
cursorin interfaceIterableRealInterval<T>- Returns:
- fast iterating iterator
-
localizingCursor
public KDTree.KDTreeCursor localizingCursor()
Description copied from interface:IterableRealIntervalReturns a
RealLocalizableIteratorthat calculates its location at each iteration step. That is, localization is performed with optimal speed.Use this where localization is required often/ for each iteration.
- Specified by:
localizingCursorin interfaceIterableRealInterval<T>- Returns:
- fast localizing iterator
-
-