Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4KDNode.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id: G4KDNode.hh 64057 2012-10-30 15:04:49Z gcosmo $
27//
28// Author: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr)
29//
30// WARNING : This class is released as a prototype.
31// It might strongly evolve or even disapear in the next releases.
32//
33// History:
34// -----------
35// 10 Oct 2011 M.Karamitros created
36//
37// -------------------------------------------------------------------
38
39#ifndef G4KDNODE_HH
40#define G4KDNODE_HH
41
42#include <list>
43
44class G4KDTree;
45
46/**
47 * G4KDNode stores one entity in G4KDTree
48 * This class is for internal use only
49 */
51{
52
53public :
54 // For root node :
55 // parent = 0, axis = 0, side = 0
56 G4KDNode(G4KDTree*, const double* /*position*/, void* /*data*/,
57 G4KDNode* /*parent*/, int axis0);
58 virtual ~G4KDNode();
59
60 inline G4KDTree* GetTree();
61 inline void SetTree(G4KDTree*);
62
63 inline const double* GetPosition();
64
65 int GetDim();
66
67 inline int GetAxis();
68 inline void* GetData();
69 inline void SetData(void*);
70 inline G4KDNode* GetParent();
71 inline G4KDNode* GetLeft();
72 inline G4KDNode* GetRight();
73
74 G4KDNode* FindParent(const double* x0);
75 G4KDNode* Insert(const double* p, void* data);
76
77 int Insert(G4KDNode* newNode, double* p);
78 int Insert(G4KDNode* newNode, const double& x, const double& y, const double& z);
79 int Insert(G4KDNode* newNode);
80
81 void InactiveNode();
82 void PullSubTree();
83 void RetrieveNodeList(std::list<G4KDNode*>& node_list);
84
85protected :
86
87 int SetPosition(const double* newposition);
88
89 //°°°°°°°°°°°
90 // Members
91 //°°°°°°°°°°°
92 double* fPosition;
93 int fAxis; // axis : x, y, z ...
94 void *fData;
95 int fSide ; // left/right
96 /* fSide == 0 : Is the root node
97 * fSide == -1 : It is the left of the parent node
98 * fSide == 1 : It is the right of the parent node
99 */
100
103 /* Left : fLeft->fPosition[axis] < this->fPosition[axis]
104 * Right : fRight->fPosition[axis] > this->fPosition[axis]
105 * Root node : fParent = 0
106 */
107private :
108 G4KDNode(const G4KDNode& right);
109 G4KDNode& operator=(const G4KDNode& right);
110};
111
113{
114 return fAxis;
115}
116
117inline void* G4KDNode::GetData()
118{
119 return fData;
120}
121
122inline void G4KDNode::SetData(void* data)
123{
124 fData = data;
125}
126
127inline const double* G4KDNode::GetPosition()
128{
129 return fPosition;
130}
131
133{
134 return fParent;
135}
136
138{
139 return fLeft;
140}
141
143{
144 return fRight;
145}
146
148{
149 return fTree;
150}
151
152inline void G4KDNode::SetTree(G4KDTree* tree)
153{
154 fTree = tree;
155}
156
157#endif // G4KDNODE_HH
void InactiveNode()
Definition: G4KDNode.cc:120
virtual ~G4KDNode()
Definition: G4KDNode.cc:107
void SetTree(G4KDTree *)
Definition: G4KDNode.hh:152
G4KDNode * fLeft
Definition: G4KDNode.hh:102
void * fData
Definition: G4KDNode.hh:94
void PullSubTree()
Definition: G4KDNode.cc:220
void RetrieveNodeList(std::list< G4KDNode * > &node_list)
Definition: G4KDNode.cc:240
G4KDNode * FindParent(const double *x0)
Definition: G4KDNode.cc:138
G4KDTree * GetTree()
Definition: G4KDNode.hh:147
int GetDim()
Definition: G4KDNode.cc:112
G4KDNode * GetLeft()
Definition: G4KDNode.hh:137
void SetData(void *)
Definition: G4KDNode.hh:122
G4KDNode * GetParent()
Definition: G4KDNode.hh:132
G4KDTree * fTree
Definition: G4KDNode.hh:101
int SetPosition(const double *newposition)
Definition: G4KDNode.cc:125
G4KDNode * GetRight()
Definition: G4KDNode.hh:142
const double * GetPosition()
Definition: G4KDNode.hh:127
int GetAxis()
Definition: G4KDNode.hh:112
int fAxis
Definition: G4KDNode.hh:93
void * GetData()
Definition: G4KDNode.hh:117
double * fPosition
Definition: G4KDNode.hh:92
G4KDNode * fParent
Definition: G4KDNode.hh:102
G4KDNode * fRight
Definition: G4KDNode.hh:102
G4KDNode * Insert(const double *p, void *data)
Definition: G4KDNode.cc:156
int fSide
Definition: G4KDNode.hh:95