Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4IT.cc
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//
27// Author: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr)
28//
29// History:
30// -----------
31// 10 Oct 2011 M.Karamitros created
32//
33// -------------------------------------------------------------------
34
35#include "G4IT.hh"
36#include "G4KDTree.hh"
37#include "G4ITBox.hh"
38#include "G4Track.hh"
39#include "G4TrackList.hh"
41
42using namespace std;
43
44//------------------------------------------------------------------------------
45//
46// Static functions
47//
48G4IT* GetIT(const G4Track* track)
49{
50 return (dynamic_cast<G4IT*>(track->GetUserInformation()));
51}
52
53G4IT* GetIT(const G4Track& track)
54{
55 return (dynamic_cast<G4IT*>(track.GetUserInformation()));
56}
57
58template<>
60 fPoint->SetNode(nullptr);
61}
62
63//------------------------------------------------------------------------------
64//
65// Constructors / Destructors
66//
69 fpTrack(nullptr),
70 fpPreviousIT(nullptr),
71 fpNextIT(nullptr),
72 fpTrackingInformation(new G4TrackingInformation())
73{
74 fpITBox = nullptr;
75 fpKDNode = nullptr;
76 fpTrackNode = nullptr;
77 fParentID_A = 0;
78 fParentID_B = 0;
79}
80
81// Use only by inheriting classes
82G4IT::G4IT(const G4IT& /*right*/) :
84 fpTrack(nullptr),
85 fpPreviousIT(nullptr),
86 fpNextIT(nullptr),
87 fpTrackingInformation(new G4TrackingInformation())
88{
89 fpITBox = nullptr;
90 fpKDNode = nullptr;
91 fpTrackNode = nullptr;
92 fParentID_A = 0;
93 fParentID_B = 0;
94}
95
96// Should not be used
98{
99 G4ExceptionDescription exceptionDescription;
100 exceptionDescription
101 << "The assignment operator of G4IT should not be used, "
102 "this feature is not supported."
103 << "If really needed, please contact the developers.";
104 G4Exception("G4IT::operator=(const G4IT& right)",
105 "G4IT001",
107 exceptionDescription);
108
109 if (this == &right) return *this;
110
111 fpTrack = nullptr;
112 fpITBox = nullptr;
113 fpPreviousIT = nullptr;
114 fpNextIT = nullptr;
115 fpKDNode = nullptr;
116 fParentID_A = 0;
117 fParentID_B = 0;
118 fpTrackingInformation = nullptr;
119 fpTrackNode = nullptr;
120
121 return *this;
122}
123
126 fpPreviousIT(0),
127 fpNextIT(0),
128 fpTrackingInformation(new G4TrackingInformation())
129{
130 fpITBox = 0;
131 fpTrack = aTrack;
132 fpKDNode = nullptr;
133 fpTrackNode = nullptr;
134 fParentID_A = 0;
135 fParentID_B = 0;
137}
138
140{
141 if(fpITBox)
142 {
143 fpITBox->Extract(this);
144 fpITBox = nullptr;
145 }
146
147 if(fpTrackNode)
148 {
149 delete fpTrackNode;
150 fpTrackNode = nullptr;
151 }
152
153 if(fpKDNode)
154 {
155 InactiveNode(fpKDNode);
156 fpKDNode = nullptr;
157 }
158}
159
161{
162 TakeOutBox();
163
164 if(fpTrackingInformation)
165 {
166 delete fpTrackingInformation;
167 fpTrackingInformation = nullptr;
168 }
169
170// Note :
171// G4ITTrackingManager will delete fTrackNode.
172// fKDNode will be deleted when the KDTree is rebuilt
173}
174
175//------------------------------------------------------------------------------
176///
177// Methods
178///
179
180G4bool G4IT::operator<(const G4IT& right) const
181{
182 if (GetITType() == right.GetITType())
183 {
184 return (this->diff(right));
185 }
186 else
187 {
188 return (GetITType() < right.GetITType());
189 }
190 return false;
191}
192
193G4bool G4IT::operator==(const G4IT& right) const
194{
195 if (GetITType() == right.GetITType())
196 {
197 return this->equal(right);
198 }
199 return false;
200}
201
202G4bool G4IT::operator!=(const G4IT& right) const
203{
204 return !(this->operator==(right));
205}
206
207double G4IT::operator[](int i) const
208{
209 return fpTrack->GetPosition()[i];
210}
211
212//------------------------------------------------------------------------------
213
215{
216 if (fpTrack) return GetTrack()->GetPosition();
217 return *(new G4ThreeVector());
218}
219
221{
222 if (fpTrack)
223 {
224 fpTrackingInformation->RecordCurrentPositionNTime(fpTrack);
225 }
226}
227
229{
230 return fpTrackingInformation->GetPreStepGlobalTime();
231}
232
234{
235 return fpTrackingInformation->GetPreStepLocalTime();
236}
237
239{
240 return fpTrackingInformation->GetPreStepPosition();
241}
242
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
G4IT * GetIT(const G4Track *track)
Definition: G4IT.cc:48
void InactiveNode(G4KDNode_Base *)
Definition: G4KDNode.cc:57
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
void Extract(G4IT *)
Definition: G4ITBox.cc:86
Definition: G4IT.hh:88
G4bool operator!=(const G4IT &right) const
Definition: G4IT.cc:202
virtual G4bool equal(const G4IT &right) const =0
const G4ThreeVector & GetPreStepPosition() const
Definition: G4IT.cc:238
void TakeOutBox()
Definition: G4IT.cc:139
virtual const G4ITType GetITType() const =0
G4double GetPreStepGlobalTime() const
Definition: G4IT.cc:228
G4double GetPreStepLocalTime() const
Definition: G4IT.cc:233
G4Track * fpTrack
Definition: G4IT.hh:167
G4IT & operator=(const G4IT &)
Definition: G4IT.cc:97
G4bool operator==(const G4IT &right) const
Definition: G4IT.cc:193
virtual ~G4IT()
Definition: G4IT.cc:160
G4IT()
Definition: G4IT.cc:67
const G4ThreeVector & GetPosition() const
Definition: G4IT.cc:214
double operator[](int i) const
Definition: G4IT.cc:207
G4bool operator<(const G4IT &right) const
Definition: G4IT.cc:180
void RecordCurrentPositionNTime()
Definition: G4IT.cc:220
virtual G4bool diff(const G4IT &right) const =0
G4Track * GetTrack()
Definition: G4IT.hh:218
virtual ~G4KDNode()
const G4ThreeVector & GetPosition() const
G4VUserTrackInformation * GetUserInformation() const
G4double GetPreStepLocalTime() const
G4double GetPreStepGlobalTime() const
void RecordCurrentPositionNTime(G4Track *)
const G4ThreeVector & GetPreStepPosition() const