ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4IT.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4IT.cc
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"
40 #include "G4TrackingInformation.hh"
41 
42 using namespace std;
43 
44 //------------------------------------------------------------------------------
45 //
46 // Static functions
47 //
49 {
50  return (dynamic_cast<G4IT*>(track->GetUserInformation()));
51 }
52 
54 {
55  return (dynamic_cast<G4IT*>(track.GetUserInformation()));
56 }
57 
58 template<>
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
82 G4IT::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 
124 G4IT::G4IT(G4Track * aTrack) :
125  G4VUserTrackInformation("G4IT"),
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  {
156  fpKDNode = nullptr;
157  }
158 }
159 
161 {
162  TakeOutBox();
163 
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 //------------------------------------------------------------------------------
177 // Methods
179 
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 
194 {
195  if (GetITType() == right.GetITType())
196  {
197  return this->equal(right);
198  }
199  return false;
200 }
201 
203 {
204  return !(this->operator==(right));
205 }
206 
207 double 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  {
225  }
226 }
227 
229 {
231 }
232 
234 {
236 }
237 
239 {
241 }
242