Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions | Protected Attributes
G4KDNode Class Reference

#include <G4KDNode.hh>

Public Member Functions

 G4KDNode (G4KDTree *, const double *, void *, G4KDNode *, int axis0)
 
virtual ~G4KDNode ()
 
G4KDTree * GetTree ()
 
void SetTree (G4KDTree *)
 
const double * GetPosition ()
 
int GetDim ()
 
int GetAxis ()
 
void * GetData ()
 
void SetData (void *)
 
G4KDNode * GetParent ()
 
G4KDNode * GetLeft ()
 
G4KDNode * GetRight ()
 
G4KDNode * FindParent (const double *x0)
 
G4KDNode * Insert (const double *p, void *data)
 
int Insert (G4KDNode *newNode, double *p)
 
int Insert (G4KDNode *newNode, const double &x, const double &y, const double &z)
 
int Insert (G4KDNode *newNode)
 
void InactiveNode ()
 
void PullSubTree ()
 
void RetrieveNodeList (std::list< G4KDNode * > &node_list)
 

Protected Member Functions

int SetPosition (const double *newposition)
 

Protected Attributes

double * fPosition
 
int fAxis
 
void * fData
 
int fSide
 
G4KDTree * fTree
 
G4KDNode * fLeft
 
G4KDNode * fRight
 
G4KDNode * fParent
 

Detailed Description

G4KDNode stores one entity in G4KDTree This class is for internal use only

Definition at line 50 of file G4KDNode.hh.

Constructor & Destructor Documentation

G4KDNode::G4KDNode ( G4KDTree *  tree,
const double *  position,
void *  data,
G4KDNode *  parent,
int  axis0 
)

Definition at line 71 of file G4KDNode.cc.

References fAxis, fSide, and SetPosition().

Referenced by Insert().

72  :
73  fPosition(0), fData(data), fTree(tree),
74  fLeft(0), fRight(0), fParent(parent)
75 {
76  fSide = 0;
77  fAxis = axis;
79 }
G4KDNode * fLeft
Definition: G4KDNode.hh:102
int fAxis
Definition: G4KDNode.hh:93
void * fData
Definition: G4KDNode.hh:94
double * fPosition
Definition: G4KDNode.hh:92
int fSide
Definition: G4KDNode.hh:95
G4KDTree * fTree
Definition: G4KDNode.hh:101
G4KDNode * fParent
Definition: G4KDNode.hh:102
int SetPosition(const double *newposition)
Definition: G4KDNode.cc:125
G4KDNode * fRight
Definition: G4KDNode.hh:102
const XML_Char const XML_Char * data
G4KDNode::~G4KDNode ( )
virtual

Definition at line 107 of file G4KDNode.cc.

References fPosition.

108 {
109  delete[] fPosition;
110 }
double * fPosition
Definition: G4KDNode.hh:92

Member Function Documentation

G4KDNode * G4KDNode::FindParent ( const double *  x0)

Definition at line 138 of file G4KDNode.cc.

References fAxis, fLeft, fPosition, and fRight.

Referenced by Insert().

139 {
140  G4KDNode* aParent = 0 ;
141  G4KDNode* next = this ;
142  int split = -1 ;
143  while(next)
144  {
145  split = next->fAxis ;
146  aParent = next ;
147 
148  if(x0[split] > next->fPosition[split])
149  next = next->fRight ;
150  else
151  next = next->fLeft ;
152  }
153  return aParent ;
154 }
G4KDNode * fLeft
Definition: G4KDNode.hh:102
int fAxis
Definition: G4KDNode.hh:93
double * fPosition
Definition: G4KDNode.hh:92
G4KDNode * fRight
Definition: G4KDNode.hh:102
int G4KDNode::GetAxis ( )
inline

Definition at line 112 of file G4KDNode.hh.

References fAxis.

Referenced by G4KDTree::__NearestInRange(), G4KDTree::__NearestToNode(), and G4KDTree::__NearestToPosition().

113 {
114  return fAxis;
115 }
int fAxis
Definition: G4KDNode.hh:93
void * G4KDNode::GetData ( )
inline

Definition at line 117 of file G4KDNode.hh.

References fData.

Referenced by G4KDTree::__Clear_Rec(), G4KDTree::__NearestToNode(), G4KDTree::__NearestToPosition(), and GetData().

118 {
119  return fData;
120 }
void * fData
Definition: G4KDNode.hh:94
int G4KDNode::GetDim ( )

Definition at line 112 of file G4KDNode.cc.

References fTree, and G4KDTree::GetDim().

113 {
114  if(fTree)
115  return fTree->GetDim();
116  else
117  return -1;
118 }
G4KDTree * fTree
Definition: G4KDNode.hh:101
int GetDim()
Definition: G4KDTree.hh:143
G4KDNode * G4KDNode::GetLeft ( )
inline

Definition at line 137 of file G4KDNode.hh.

References fLeft.

Referenced by G4KDTree::__Clear_Rec(), G4KDTree::__NearestInRange(), G4KDTree::__NearestToNode(), and G4KDTree::__NearestToPosition().

138 {
139  return fLeft;
140 }
G4KDNode * fLeft
Definition: G4KDNode.hh:102
G4KDNode * G4KDNode::GetParent ( )
inline

Definition at line 132 of file G4KDNode.hh.

References fParent.

133 {
134  return fParent;
135 }
G4KDNode * fParent
Definition: G4KDNode.hh:102
const double * G4KDNode::GetPosition ( )
inline
G4KDNode * G4KDNode::GetRight ( )
inline

Definition at line 142 of file G4KDNode.hh.

References fRight.

Referenced by G4KDTree::__Clear_Rec(), G4KDTree::__NearestInRange(), G4KDTree::__NearestToNode(), and G4KDTree::__NearestToPosition().

143 {
144  return fRight;
145 }
G4KDNode * fRight
Definition: G4KDNode.hh:102
G4KDTree * G4KDNode::GetTree ( )
inline

Definition at line 147 of file G4KDNode.hh.

References fTree.

148 {
149  return fTree;
150 }
G4KDTree * fTree
Definition: G4KDNode.hh:101
void G4KDNode::InactiveNode ( )

Definition at line 120 of file G4KDNode.cc.

References fData.

Referenced by InactiveNode().

121 {
122  fData = 0 ;
123 }
void * fData
Definition: G4KDNode.hh:94
G4KDNode * G4KDNode::Insert ( const double *  p,
void *  data 
)

Definition at line 156 of file G4KDNode.cc.

References fAxis, FindParent(), fLeft, fPosition, fRight, fSide, fTree, and G4KDNode().

Referenced by G4KDTree::Build(), Insert(), and G4KDTree::Insert().

157 {
158  G4KDNode* aParent = FindParent(p);
159  // TODO check p == aParent->pos
160  // Exception
161 
162  G4KDNode* newNode = new G4KDNode(fTree, p, data, aParent,
163  aParent->fAxis +1 < fTree->fDim? aParent->fAxis+1:0);
164 
165  if(p[aParent->fAxis] > aParent->fPosition[aParent->fAxis])
166  {
167  aParent->fRight = newNode ;
168  newNode->fSide = 1 ;
169  }
170  else
171  {
172  aParent->fLeft = newNode ;
173  newNode->fSide = -1 ;
174  }
175 
176  return newNode ;
177 }
G4KDNode * fLeft
Definition: G4KDNode.hh:102
const char * p
Definition: xmltok.h:285
int fAxis
Definition: G4KDNode.hh:93
G4KDNode * FindParent(const double *x0)
Definition: G4KDNode.cc:138
double * fPosition
Definition: G4KDNode.hh:92
int fSide
Definition: G4KDNode.hh:95
G4KDTree * fTree
Definition: G4KDNode.hh:101
G4KDNode * fRight
Definition: G4KDNode.hh:102
G4KDNode(G4KDTree *, const double *, void *, G4KDNode *, int axis0)
Definition: G4KDNode.cc:71
const XML_Char const XML_Char * data
int G4KDNode::Insert ( G4KDNode *  newNode,
double *  p 
)

Definition at line 180 of file G4KDNode.cc.

References fAxis, FindParent(), fLeft, fParent, fPosition, fRight, fSide, and fTree.

181 {
182  G4KDNode* aParent = FindParent(p);
183  // TODO check p == aParent->pos
184  // Exception
185 
186  newNode->fAxis = aParent->fAxis +1 < fTree->fDim? aParent->fAxis+1:0;
187  newNode->fParent = aParent ;
188 
189  if(p[aParent->fAxis] > aParent->fPosition[aParent->fAxis])
190  {
191  aParent->fRight = newNode ;
192  newNode->fSide = 1 ;
193  }
194  else
195  {
196  aParent->fLeft = newNode ;
197  newNode->fSide = -1 ;
198  }
199 
200  newNode->fRight = 0;
201  newNode->fLeft = 0;
202 
203  return 0 ;
204 }
G4KDNode * fLeft
Definition: G4KDNode.hh:102
const char * p
Definition: xmltok.h:285
int fAxis
Definition: G4KDNode.hh:93
G4KDNode * FindParent(const double *x0)
Definition: G4KDNode.cc:138
double * fPosition
Definition: G4KDNode.hh:92
int fSide
Definition: G4KDNode.hh:95
G4KDTree * fTree
Definition: G4KDNode.hh:101
G4KDNode * fParent
Definition: G4KDNode.hh:102
G4KDNode * fRight
Definition: G4KDNode.hh:102
int G4KDNode::Insert ( G4KDNode *  newNode,
const double &  x,
const double &  y,
const double &  z 
)

Definition at line 206 of file G4KDNode.cc.

References Insert(), test::x, and z.

207 {
208  double p[3] ;
209  p[0] = x;
210  p[1] = y ;
211  p[2] = z ;
212  return Insert(newNode, p);
213 }
G4double z
Definition: TRTMaterials.hh:39
const char * p
Definition: xmltok.h:285
G4KDNode * Insert(const double *p, void *data)
Definition: G4KDNode.cc:156
int G4KDNode::Insert ( G4KDNode *  newNode)

Definition at line 215 of file G4KDNode.cc.

References fPosition, and Insert().

216 {
217  return Insert(newNode, newNode->fPosition);
218 }
G4KDNode * Insert(const double *p, void *data)
Definition: G4KDNode.cc:156
double * fPosition
Definition: G4KDNode.hh:92
void G4KDNode::PullSubTree ( )

Definition at line 220 of file G4KDNode.cc.

References fLeft, fParent, fRight, fSide, and fTree.

221 {
222  if(fParent)
223  {
224  if(fSide == -1)
225  {
226  fParent->fLeft = 0;
227  }
228  else
229  fParent->fRight = 0;
230  }
231  if(fLeft) fLeft -> PullSubTree();
232  if(fRight) fRight-> PullSubTree();
233 
234  fParent = 0 ;
235  fRight = 0 ;
236  fLeft = 0 ;
237  fTree = 0 ;
238 }
G4KDNode * fLeft
Definition: G4KDNode.hh:102
int fSide
Definition: G4KDNode.hh:95
G4KDTree * fTree
Definition: G4KDNode.hh:101
G4KDNode * fParent
Definition: G4KDNode.hh:102
G4KDNode * fRight
Definition: G4KDNode.hh:102
void PullSubTree()
Definition: G4KDNode.cc:220
void G4KDNode::RetrieveNodeList ( std::list< G4KDNode * > &  node_list)

Definition at line 240 of file G4KDNode.cc.

References fLeft, fRight, and RetrieveNodeList().

Referenced by RetrieveNodeList().

241 {
242  output.push_back(this);
243 
244  if(fLeft)
245  fLeft->RetrieveNodeList(output);
246 
247  if(fRight)
248  fRight->RetrieveNodeList(output);
249 }
G4KDNode * fLeft
Definition: G4KDNode.hh:102
void RetrieveNodeList(std::list< G4KDNode * > &node_list)
Definition: G4KDNode.cc:240
G4KDNode * fRight
Definition: G4KDNode.hh:102
void G4KDNode::SetData ( void *  data)
inline

Definition at line 122 of file G4KDNode.hh.

References fData.

Referenced by G4KDTree::__Clear_Rec().

123 {
124  fData = data;
125 }
void * fData
Definition: G4KDNode.hh:94
const XML_Char const XML_Char * data
int G4KDNode::SetPosition ( const double *  newposition)
protected

Definition at line 125 of file G4KDNode.cc.

References fPosition, and fTree.

Referenced by G4KDNode().

126 {
127  if(!newposition) return -1;
128  if(!fPosition)
129  {
130  fPosition = new double[fTree->fDim];
131  }
132 
133  memcpy(fPosition, newposition, fTree->fDim * sizeof(double));
134 
135  return 0;
136 }
double * fPosition
Definition: G4KDNode.hh:92
G4KDTree * fTree
Definition: G4KDNode.hh:101
void G4KDNode::SetTree ( G4KDTree *  tree)
inline

Definition at line 152 of file G4KDNode.hh.

References fTree, and gammaraytel::tree.

153 {
154  fTree = tree;
155 }
tuple tree
Definition: gammaraytel.py:4
G4KDTree * fTree
Definition: G4KDNode.hh:101

Field Documentation

int G4KDNode::fAxis
protected

Definition at line 93 of file G4KDNode.hh.

Referenced by FindParent(), G4KDNode(), GetAxis(), and Insert().

void* G4KDNode::fData
protected

Definition at line 94 of file G4KDNode.hh.

Referenced by GetData(), InactiveNode(), and SetData().

G4KDNode* G4KDNode::fLeft
protected

Definition at line 102 of file G4KDNode.hh.

Referenced by FindParent(), GetLeft(), Insert(), PullSubTree(), and RetrieveNodeList().

G4KDNode * G4KDNode::fParent
protected

Definition at line 102 of file G4KDNode.hh.

Referenced by GetParent(), Insert(), and PullSubTree().

double* G4KDNode::fPosition
protected

Definition at line 92 of file G4KDNode.hh.

Referenced by FindParent(), GetPosition(), Insert(), SetPosition(), and ~G4KDNode().

G4KDNode * G4KDNode::fRight
protected

Definition at line 102 of file G4KDNode.hh.

Referenced by FindParent(), GetRight(), Insert(), PullSubTree(), and RetrieveNodeList().

int G4KDNode::fSide
protected

Definition at line 95 of file G4KDNode.hh.

Referenced by G4KDNode(), Insert(), and PullSubTree().

G4KDTree* G4KDNode::fTree
protected

Definition at line 101 of file G4KDNode.hh.

Referenced by GetDim(), GetTree(), Insert(), PullSubTree(), SetPosition(), and SetTree().


The documentation for this class was generated from the following files: