CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
KDTreeLinkerAlgo< DATA > Class Template Reference

#include <KDTreeLinkerAlgo.h>

Public Member Functions

void build (std::vector< KDTreeNodeInfo< DATA > > &eltList, const KDTreeBox &region)
 
void build (std::vector< KDTreeNodeInfoT< DATA, DIM > > &eltList, const KDTreeBoxT< DIM > &region)
 
void clear ()
 
void clear ()
 
bool empty ()
 
bool empty ()
 
 KDTreeLinkerAlgo ()
 
 KDTreeLinkerAlgo ()
 
void search (const KDTreeBox &searchBox, std::vector< DATA > &resRecHitList)
 
void search (const KDTreeBoxT< DIM > &searchBox, std::vector< KDTreeNodeInfoT< DATA, DIM > > &resRecHitList)
 
int size ()
 
int size ()
 
 ~KDTreeLinkerAlgo ()
 
 ~KDTreeLinkerAlgo ()
 

Private Member Functions

void addSubtree (const KDTreeNodeT< DATA, DIM > *current)
 
void clearTree ()
 
void clearTree ()
 
KDTreeNodeT< DATA, DIM > * getNextNode ()
 
int medianSearch (int low, int high, int treeDepth)
 
int medianSearch (int low, int high, int treeDepth)
 
int recBuild (int low, int hight, int depth)
 
KDTreeNodeT< DATA, DIM > * recBuild (int low, int hight, int depth, const KDTreeBoxT< DIM > &region)
 
void recSearch (int current, float dimCurrMin, float dimCurrMax, float dimOtherMin, float dimOtherMax)
 
void recSearch (const KDTreeNodeT< DATA, DIM > *current, const KDTreeBoxT< DIM > &trackBox)
 

Private Attributes

std::vector< DATA > * closestNeighbour
 
std::vector< KDTreeNodeInfoT< DATA, DIM > > * closestNeighbour
 
std::vector< KDTreeNodeInfo< DATA > > * initialEltList
 
std::vector< KDTreeNodeInfoT< DATA, DIM > > * initialEltList
 
KDTreeNodes< DATA > nodePool_
 
KDTreeNodeT< DATA, DIM > * nodePool_
 
int nodePoolPos_
 
int nodePoolSize_
 
KDTreeNodeT< DATA, DIM > * root_
 

Detailed Description

template<typename DATA>
class KDTreeLinkerAlgo< DATA >

Definition at line 13 of file KDTreeLinkerAlgo.h.

Constructor & Destructor Documentation

template<typename DATA , unsigned DIM>
KDTreeLinkerAlgo< DATA, DIM >::KDTreeLinkerAlgo ( )

Definition at line 180 of file KDTreeLinkerAlgo.h.

Referenced by KDTreeLinkerAlgo< DATA >::addSubtree().

180 {}
template<typename DATA , unsigned DIM>
KDTreeLinkerAlgo< DATA, DIM >::~KDTreeLinkerAlgo ( )

Definition at line 183 of file KDTreeLinkerAlgo.h.

References KDTreeLinkerAlgo< DATA >::clear().

Referenced by KDTreeLinkerAlgo< DATA >::addSubtree().

183  {
184  clear();
185 }
template<typename DATA>
KDTreeLinkerAlgo< DATA >::KDTreeLinkerAlgo ( )
template<typename DATA>
KDTreeLinkerAlgo< DATA >::~KDTreeLinkerAlgo ( )

Member Function Documentation

template<typename DATA, unsigned DIM>
void KDTreeLinkerAlgo< DATA, DIM >::addSubtree ( const KDTreeNodeT< DATA, DIM > *  current)
private

Definition at line 222 of file KDTreeLinkerAlgoT.h.

References KDTreeLinkerAlgo< DATA >::clear(), KDTreeLinkerAlgo< DATA >::clearTree(), KDTreeLinkerAlgo< DATA >::closestNeighbour, KDTreeNodeT< DATA, DIM >::info, KDTreeLinkerAlgo< DATA >::KDTreeLinkerAlgo(), KDTreeNodeT< DATA, DIM >::left, KDTreeLinkerAlgo< DATA >::nodePool_, KDTreeLinkerAlgo< DATA >::nodePoolPos_, KDTreeLinkerAlgo< DATA >::nodePoolSize_, KDTreeNodeT< DATA, DIM >::right, KDTreeLinkerAlgo< DATA >::root_, and KDTreeLinkerAlgo< DATA >::~KDTreeLinkerAlgo().

Referenced by KDTreeLinkerAlgo< DATA >::recSearch().

223 {
224  // By construction, current can't be null
225  // assert(current != 0);
226 
227  if ((current->left == nullptr) && (current->right == nullptr)) // leaf
228  closestNeighbour->push_back(current->info);
229  else { // node
230  addSubtree(current->left);
231  addSubtree(current->right);
232  }
233 }
KDTreeNodeT< DATA, DIM > * right
KDTreeNodeT< DATA, DIM > * left
std::vector< DATA > * closestNeighbour
void addSubtree(const KDTreeNodeT< DATA, DIM > *current)
KDTreeNodeInfoT< DATA, DIM > info
template<typename DATA>
void KDTreeLinkerAlgo< DATA >::build ( std::vector< KDTreeNodeInfo< DATA > > &  eltList,
const KDTreeBox region 
)

Definition at line 61 of file KDTreeLinkerAlgo.h.

References KDTreeLinkerAlgo< DATA >::initialEltList, KDTreeLinkerAlgo< DATA >::nodePool_, KDTreeLinkerAlgo< DATA >::recBuild(), and KDTreeLinkerAlgo< DATA >::size().

Referenced by KDTreeLinkerTrackEcal::buildTree(), KDTreeLinkerTrackHcal::buildTree(), KDTreeLinkerPSEcal::buildTree(), HGCalImagingAlgo::findAndAssignClusters(), HGCalCLUEAlgo::makeClusters(), HGCalImagingAlgo::makeClusters(), and psClasses.BuildThread::run().

61  {
62  if (!eltList.empty()) {
63  initialEltList = &eltList;
64 
65  size_t size = initialEltList->size();
66  nodePool_.build(size);
67 
68  // Here we build the KDTree
69  int root = recBuild(0, size, 0);
70  assert(root == 0);
71 
72  initialEltList = nullptr;
73  }
74 }
int recBuild(int low, int hight, int depth)
std::vector< KDTreeNodeInfo< DATA > > * initialEltList
KDTreeNodes< DATA > nodePool_
template<typename DATA, unsigned DIM>
void KDTreeLinkerAlgo< DATA, DIM >::build ( std::vector< KDTreeNodeInfoT< DATA, DIM > > &  eltList,
const KDTreeBoxT< DIM > &  region 
)

Definition at line 86 of file KDTreeLinkerAlgoT.h.

References DIM, KDTreeNodeInfoT< DATA, DIM >::dims, mps_fire::i, KDTreeLinkerAlgo< DATA >::initialEltList, checklumidiff::l, funct::m, pfDeepBoostedJetPreprocessParams_cfi::median, KDTreeLinkerAlgo< DATA >::medianSearch(), KDTreeLinkerAlgo< DATA >::nodePool_, KDTreeLinkerAlgo< DATA >::nodePoolSize_, KDTreeLinkerAlgo< DATA >::recBuild(), KDTreeLinkerAlgo< DATA >::root_, KDTreeLinkerAlgo< DATA >::size(), and std::swap().

88 {
89  if (!eltList.empty()) {
90  initialEltList = &eltList;
91 
92  size_t size = initialEltList->size();
93  nodePoolSize_ = size * 2 - 1;
95 
96  // Here we build the KDTree
97  root_ = recBuild(0, size, 0, region);
98 
99  initialEltList = nullptr;
100  }
101 }
int recBuild(int low, int hight, int depth)
std::vector< KDTreeNodeInfo< DATA > > * initialEltList
KDTreeNodes< DATA > nodePool_
KDTreeNodeT< DATA, DIM > * root_
template<typename DATA , unsigned DIM>
void KDTreeLinkerAlgo< DATA, DIM >::clear ( void  )
template<typename DATA>
void KDTreeLinkerAlgo< DATA >::clear ( )
template<typename DATA , unsigned DIM>
void KDTreeLinkerAlgo< DATA, DIM >::clearTree ( )
private

Definition at line 188 of file KDTreeLinkerAlgo.h.

References KDTreeLinkerAlgo< DATA >::nodePool_.

Referenced by KDTreeLinkerAlgo< DATA >::addSubtree(), and KDTreeLinkerAlgo< DATA >::clear().

188  {
189  nodePool_.clear();
190 }
KDTreeNodes< DATA > nodePool_
template<typename DATA>
void KDTreeLinkerAlgo< DATA >::clearTree ( )
private
template<typename DATA>
bool KDTreeLinkerAlgo< DATA >::empty ( )
inline
template<typename DATA>
bool KDTreeLinkerAlgo< DATA >::empty ( void  )
inline

Definition at line 31 of file KDTreeLinkerAlgoT.h.

31 {return nodePoolPos_ == -1;}
template<typename DATA , unsigned DIM>
KDTreeNodeT< DATA, DIM > * KDTreeLinkerAlgo< DATA, DIM >::getNextNode ( )
private

Definition at line 276 of file KDTreeLinkerAlgoT.h.

References KDTreeLinkerAlgo< DATA >::nodePool_, and KDTreeLinkerAlgo< DATA >::nodePoolPos_.

Referenced by KDTreeLinkerAlgo< DATA >::recBuild().

277 {
278  ++nodePoolPos_;
279 
280  // The tree size is exactly 2 * nbrElts - 1 and this is the total allocated memory.
281  // If we have used more than that....there is a big problem.
282  // assert(nodePoolPos_ < nodePoolSize_);
283 
284  return &(nodePool_[nodePoolPos_]);
285 }
KDTreeNodes< DATA > nodePool_
template<typename DATA , unsigned DIM>
int KDTreeLinkerAlgo< DATA, DIM >::medianSearch ( int  low,
int  high,
int  treeDepth 
)
private

Definition at line 78 of file KDTreeLinkerAlgo.h.

References KDTreeNodeInfo< DATA >::dim, mps_fire::i, KDTreeLinkerAlgo< DATA >::initialEltList, checklumidiff::l, funct::m, pfDeepBoostedJetPreprocessParams_cfi::median, and std::swap().

Referenced by KDTreeLinkerAlgo< DATA >::build(), and KDTreeLinkerAlgo< DATA >::recBuild().

78  {
79  int nbrElts = high - low;
80  int median = (nbrElts & 1) ? nbrElts / 2 : nbrElts / 2 - 1;
81  median += low;
82 
83  int l = low;
84  int m = high - 1;
85 
86  while (l < m) {
87  KDTreeNodeInfo<DATA> elt = (*initialEltList)[median];
88  int i = l;
89  int j = m;
90 
91  do {
92  // The even depth is associated to dim1 dimension
93  // The odd one to dim2 dimension
94  if (treeDepth & 1) {
95  while ((*initialEltList)[i].dim[1] < elt.dim[1])
96  i++;
97  while ((*initialEltList)[j].dim[1] > elt.dim[1])
98  j--;
99  } else {
100  while ((*initialEltList)[i].dim[0] < elt.dim[0])
101  i++;
102  while ((*initialEltList)[j].dim[0] > elt.dim[0])
103  j--;
104  }
105 
106  if (i <= j) {
108  i++;
109  j--;
110  }
111  } while (i <= j);
112  if (j < median)
113  l = i;
114  if (i > median)
115  m = j;
116  }
117 
118  return median;
119 }
std::vector< KDTreeNodeInfo< DATA > > * initialEltList
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
template<typename DATA>
int KDTreeLinkerAlgo< DATA >::medianSearch ( int  low,
int  high,
int  treeDepth 
)
private
template<typename DATA >
int KDTreeLinkerAlgo< DATA >::recBuild ( int  low,
int  hight,
int  depth 
)
private

Definition at line 198 of file KDTreeLinkerAlgo.h.

References KDTreeNodeInfo< DATA >::data, egammaForCoreTracking_cff::depth, KDTreeNodeInfo< DATA >::dim, info(), KDTreeLinkerAlgo< DATA >::medianSearch(), and KDTreeLinkerAlgo< DATA >::nodePool_.

Referenced by KDTreeLinkerAlgo< DATA >::build(), and KDTreeLinkerAlgo< DATA >::recBuild().

198  {
199  int portionSize = high - low;
200  int dimIndex = depth & 1;
201 
202  if (portionSize == 1) { // Leaf case
203  int leaf = nodePool_.getNextNode();
204  const KDTreeNodeInfo<DATA> &info = (*initialEltList)[low];
205  nodePool_.right[leaf] = 0;
206  nodePool_.median[leaf] = info.dim[dimIndex]; // dimCurrent
207  nodePool_.dimOther[leaf] = info.dim[1 - dimIndex];
208  nodePool_.data[leaf] = info.data;
209  return leaf;
210 
211  } else { // Node case
212 
213  // The even depth is associated to dim1 dimension
214  // The odd one to dim2 dimension
215  int medianId = medianSearch(low, high, depth);
216  float medianVal = (*initialEltList)[medianId].dim[dimIndex];
217 
218  // We create the node
219  int nodeInd = nodePool_.getNextNode();
220  nodePool_.median[nodeInd] = medianVal;
221 
222  ++depth;
223  ++medianId;
224 
225  // We recursively build the son nodes
226  int left = recBuild(low, medianId, depth);
227  assert(nodeInd + 1 == left);
228  nodePool_.right[nodeInd] = recBuild(medianId, high, depth);
229 
230  return nodeInd;
231  }
232 }
static const TGPicture * info(bool iBackgroundIsBlack)
int recBuild(int low, int hight, int depth)
KDTreeNodes< DATA > nodePool_
int medianSearch(int low, int high, int treeDepth)
template<typename DATA , unsigned DIM>
KDTreeNodeT< DATA, DIM > * KDTreeLinkerAlgo< DATA, DIM >::recBuild ( int  low,
int  hight,
int  depth,
const KDTreeBoxT< DIM > &  region 
)
private

Definition at line 290 of file KDTreeLinkerAlgoT.h.

References egammaForCoreTracking_cff::depth, DIM, KDTreeBoxT< DIM >::dimmax, KDTreeBoxT< DIM >::dimmin, KDTreeLinkerAlgo< DATA >::getNextNode(), KDTreeLinkerAlgo< DATA >::initialEltList, KDTreeNodeT< DATA, DIM >::left, KDTreeLinkerAlgo< DATA >::medianSearch(), KDTreeLinkerAlgo< DATA >::recBuild(), KDTreeNodeT< DATA, DIM >::right, and KDTreeNodeT< DATA, DIM >::setAttributs().

294 {
295  int portionSize = high - low;
296 
297  // By construction, portionSize > 0 can't happend.
298  // assert(portionSize > 0);
299 
300  if (portionSize == 1) { // Leaf case
301 
303  leaf->setAttributs(region, (*initialEltList)[low]);
304  return leaf;
305 
306  } else { // Node case
307 
308  // The even depth is associated to dim1 dimension
309  // The odd one to dim2 dimension
310  int medianId = medianSearch(low, high, depth);
311 
312  // We create the node
314  node->setAttributs(region);
315 
316 
317  // Here we split into 2 halfplanes the current plane
318  KDTreeBoxT<DIM> leftRegion = region;
319  KDTreeBoxT<DIM> rightRegion = region;
320  unsigned thedim = depth % DIM;
321  auto medianVal = (*initialEltList)[medianId].dims[thedim];
322  leftRegion.dimmax[thedim] = medianVal;
323  rightRegion.dimmin[thedim] = medianVal;
324 
325  ++depth;
326  ++medianId;
327 
328  // We recursively build the son nodes
329  node->left = recBuild(low, medianId, depth, leftRegion);
330  node->right = recBuild(medianId, high, depth, rightRegion);
331 
332  return node;
333  }
334 }
KDTreeNodeT< DATA, DIM > * right
KDTreeNodeT< DATA, DIM > * left
std::array< float, DIM > dimmin
int recBuild(int low, int hight, int depth)
std::vector< KDTreeNodeInfo< DATA > > * initialEltList
KDTreeNodeT< DATA, DIM > * getNextNode()
#define DIM
std::array< float, DIM > dimmax
void setAttributs(const KDTreeBoxT< DIM > &regionBox, const KDTreeNodeInfoT< DATA, DIM > &infoToStore)
int medianSearch(int low, int high, int treeDepth)
template<typename DATA >
void KDTreeLinkerAlgo< DATA >::recSearch ( int  current,
float  dimCurrMin,
float  dimCurrMax,
float  dimOtherMin,
float  dimOtherMax 
)
private

Definition at line 131 of file KDTreeLinkerAlgo.h.

References KDTreeLinkerAlgo< DATA >::closestNeighbour, pfDeepBoostedJetPreprocessParams_cfi::median, KDTreeLinkerAlgo< DATA >::nodePool_, and std::swap().

Referenced by KDTreeLinkerAlgo< DATA >::recSearch(), and KDTreeLinkerAlgo< DATA >::search().

132  {
133  // Iterate until leaf is found, or there are no children in the
134  // search window. If search has to proceed on both children, proceed
135  // the search to left child via recursion. Swap search window
136  // dimension on alternate levels.
137  while (true) {
138  int right = nodePool_.right[current];
139  if (nodePool_.isLeaf(right)) {
140  float dimCurr = nodePool_.median[current];
141 
142  // If point inside the rectangle/area
143  // Use intentionally bit-wise & instead of logical && for better
144  // performance. It is faster to always do all comparisons than to
145  // allow use of branches to not do some if any of the first ones
146  // is false.
147  if ((dimCurr >= dimCurrMin) & (dimCurr <= dimCurrMax)) {
148  float dimOther = nodePool_.dimOther[current];
149  if ((dimOther >= dimOtherMin) & (dimOther <= dimOtherMax)) {
150  closestNeighbour->push_back(nodePool_.data[current]);
151  }
152  }
153  break;
154  } else {
155  float median = nodePool_.median[current];
156 
157  bool goLeft = (dimCurrMin <= median);
158  bool goRight = (dimCurrMax >= median);
159 
160  // Swap dimension for the next search level
161  std::swap(dimCurrMin, dimOtherMin);
162  std::swap(dimCurrMax, dimOtherMax);
163  if (goLeft & goRight) {
164  int left = current + 1;
165  recSearch(left, dimCurrMin, dimCurrMax, dimOtherMin, dimOtherMax);
166  // continue with right
167  current = right;
168  } else if (goLeft) {
169  ++current;
170  } else if (goRight) {
171  current = right;
172  } else {
173  break;
174  }
175  }
176  }
177 }
std::vector< DATA > * closestNeighbour
KDTreeNodes< DATA > nodePool_
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
void recSearch(int current, float dimCurrMin, float dimCurrMax, float dimOtherMin, float dimOtherMax)
template<typename DATA, unsigned DIM>
void KDTreeLinkerAlgo< DATA, DIM >::recSearch ( const KDTreeNodeT< DATA, DIM > *  current,
const KDTreeBoxT< DIM > &  trackBox 
)
private

Definition at line 162 of file KDTreeLinkerAlgoT.h.

References KDTreeLinkerAlgo< DATA >::addSubtree(), KDTreeLinkerAlgo< DATA >::closestNeighbour, DIM, KDTreeBoxT< DIM >::dimmax, KDTreeBoxT< DIM >::dimmin, mps_fire::i, KDTreeNodeT< DATA, DIM >::info, KDTreeNodeT< DATA, DIM >::left, KDTreeLinkerAlgo< DATA >::recSearch(), and KDTreeNodeT< DATA, DIM >::right.

164 {
165  /*
166  // By construction, current can't be null
167  assert(current != 0);
168 
169  // By Construction, a node can't have just 1 son.
170  assert (!(((current->left == 0) && (current->right != 0)) ||
171  ((current->left != 0) && (current->right == 0))));
172  */
173 
174  if ((current->left == nullptr) && (current->right == nullptr)) {//leaf case
175 
176  // If point inside the rectangle/area
177  bool isInside = true;
178  for( unsigned i = 0; i < DIM; ++i ) {
179  const auto thedim = current->info.dims[i];
180  isInside *= thedim >= trackBox.dimmin[i] && thedim <= trackBox.dimmax[i];
181  }
182  if( isInside ) closestNeighbour->push_back(current->info);
183 
184  } else {
185 
186  bool isFullyContained = true;
187  bool hasIntersection = true;
188  //if region( v->left ) is fully contained in the rectangle
189  for( unsigned i = 0; i < DIM; ++i ) {
190  const auto regionmin = current->left->region.dimmin[i];
191  const auto regionmax = current->left->region.dimmax[i];
192  isFullyContained *= ( regionmin >= trackBox.dimmin[i] &&
193  regionmax <= trackBox.dimmax[i] );
194  hasIntersection *= ( regionmin < trackBox.dimmax[i] && regionmax > trackBox.dimmin[i]);
195  }
196  if( isFullyContained ) {
197  addSubtree(current->left);
198  } else if ( hasIntersection ) {
199  recSearch(current->left, trackBox);
200  }
201  // reset flags
202  isFullyContained = true;
203  hasIntersection = true;
204  //if region( v->right ) is fully contained in the rectangle
205  for( unsigned i = 0; i < DIM; ++i ) {
206  const auto regionmin = current->right->region.dimmin[i];
207  const auto regionmax = current->right->region.dimmax[i];
208  isFullyContained *= ( regionmin >= trackBox.dimmin[i] &&
209  regionmax <= trackBox.dimmax[i] );
210  hasIntersection *= ( regionmin < trackBox.dimmax[i] && regionmax > trackBox.dimmin[i]);
211  }
212  if( isFullyContained ) {
213  addSubtree(current->right);
214  } else if ( hasIntersection ) {
215  recSearch(current->right, trackBox);
216  }
217  }
218 }
KDTreeNodeT< DATA, DIM > * right
KDTreeNodeT< DATA, DIM > * left
std::array< float, DIM > dimmin
std::vector< DATA > * closestNeighbour
void addSubtree(const KDTreeNodeT< DATA, DIM > *current)
#define DIM
KDTreeNodeInfoT< DATA, DIM > info
std::array< float, DIM > dimmax
void recSearch(int current, float dimCurrMin, float dimCurrMax, float dimOtherMin, float dimOtherMax)
template<typename DATA>
void KDTreeLinkerAlgo< DATA >::search ( const KDTreeBox searchBox,
std::vector< DATA > &  resRecHitList 
)

Definition at line 122 of file KDTreeLinkerAlgo.h.

References KDTreeLinkerAlgo< DATA >::closestNeighbour, KDTreeBox::dim1max, KDTreeBox::dim1min, KDTreeBox::dim2max, KDTreeBox::dim2min, KDTreeLinkerAlgo< DATA >::empty(), and KDTreeLinkerAlgo< DATA >::recSearch().

Referenced by HGCalCLUEAlgo::calculateLocalDensity(), HGCalImagingAlgo::calculateLocalDensity(), HGCalImagingAlgo::findAndAssignClusters(), BeautifulSoup.SoupStrainer::search(), KDTreeLinkerPSEcal::searchLinks(), KDTreeLinkerTrackHcal::searchLinks(), and KDTreeLinkerTrackEcal::searchLinks().

122  {
123  if (!empty()) {
124  closestNeighbour = &recHits;
125  recSearch(0, trackBox.dim1min, trackBox.dim1max, trackBox.dim2min, trackBox.dim2max);
126  closestNeighbour = nullptr;
127  }
128 }
std::vector< DATA > * closestNeighbour
void recSearch(int current, float dimCurrMin, float dimCurrMax, float dimOtherMin, float dimOtherMax)
template<typename DATA, unsigned DIM>
void KDTreeLinkerAlgo< DATA, DIM >::search ( const KDTreeBoxT< DIM > &  searchBox,
std::vector< KDTreeNodeInfoT< DATA, DIM > > &  resRecHitList 
)

Definition at line 149 of file KDTreeLinkerAlgoT.h.

References KDTreeLinkerAlgo< DATA >::closestNeighbour, KDTreeLinkerAlgo< DATA >::recSearch(), and KDTreeLinkerAlgo< DATA >::root_.

151 {
152  if (root_) {
153  closestNeighbour = &recHits;
154  recSearch(root_, trackBox);
155  closestNeighbour = nullptr;
156  }
157 }
std::vector< DATA > * closestNeighbour
KDTreeNodeT< DATA, DIM > * root_
void recSearch(int current, float dimCurrMin, float dimCurrMax, float dimOtherMin, float dimOtherMax)
template<typename DATA>
int KDTreeLinkerAlgo< DATA >::size ( void  )
inline
template<typename DATA>
int KDTreeLinkerAlgo< DATA >::size ( void  )
inline

Member Data Documentation

template<typename DATA>
std::vector<DATA>* KDTreeLinkerAlgo< DATA >::closestNeighbour
private
template<typename DATA>
std::vector<KDTreeNodeInfoT<DATA,DIM> >* KDTreeLinkerAlgo< DATA >::closestNeighbour
private

Definition at line 51 of file KDTreeLinkerAlgoT.h.

template<typename DATA>
std::vector<KDTreeNodeInfo<DATA> >* KDTreeLinkerAlgo< DATA >::initialEltList
private
template<typename DATA>
std::vector<KDTreeNodeInfoT<DATA,DIM> >* KDTreeLinkerAlgo< DATA >::initialEltList
private

Definition at line 52 of file KDTreeLinkerAlgoT.h.

template<typename DATA>
KDTreeNodes<DATA> KDTreeLinkerAlgo< DATA >::nodePool_
private
template<typename DATA>
KDTreeNodeT<DATA,DIM>* KDTreeLinkerAlgo< DATA >::nodePool_
private

Definition at line 45 of file KDTreeLinkerAlgoT.h.

template<typename DATA>
int KDTreeLinkerAlgo< DATA >::nodePoolPos_
private
template<typename DATA>
int KDTreeLinkerAlgo< DATA >::nodePoolSize_
private
template<typename DATA>
KDTreeNodeT<DATA,DIM>* KDTreeLinkerAlgo< DATA >::root_
private