Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4FastTrack.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//
27// $Id$
28//
29// $Id:
30//---------------------------------------------------------------
31//
32// G4FastTrack.hh
33//
34// Description:
35// Keeps the current track information and special features
36// for Parameterised Simulation Models.
37//
38// History:
39// Oct 97: Verderi && MoraDeFreitas - First Implementation.
40//
41//---------------------------------------------------------------
42
43
44#ifndef G4FastTrack_h
45#define G4FastTrack_h
46
47#include "G4VSolid.hh"
48#include "G4LogicalVolume.hh"
49#include "G4Region.hh"
50#include "G4AffineTransform.hh"
51#include "G4Track.hh"
52#include "G4Navigator.hh"
53
54//---------------------------
55// For possible future needs:
56//---------------------------
58
59
60//-------------------------------------------
61//
62// G4FastTrack class
63//
64//-------------------------------------------
65
66// Class Description:
67// The G4FastTrack provides you access to the current G4Track,
68// gives simple access to envelope related features (G4Region,
69// G4LogicalVolume, G4VSolid, G4AffineTransform references between
70// the global and the envelope local coordinates systems) and
71// simple access to the position, momentum expressed in the
72// envelope coordinate system. Using those quantities and the
73// G4VSolid methods, you can for example easily check how far you
74// are from the envelope boundary.
75//
76
77
79{
80public: // without description
81 //------------------------
82 // Constructor/Destructor
83 //------------------------
84 // Only one Constructor. By default the envelope can
85 // be placed n-Times. If the user is sure that it'll be
86 // placed just one time, the IsUnique flag should be set
87 // TRUE to avoid the G4AffineTransform re-calculations each
88 // time we reach the envelope.
89 G4FastTrack(G4Envelope *anEnvelope,
90 G4bool IsUnique);
92
93 //------------------------------------------------------------
94 // The fast simulation manager uses the SetCurrentTrack
95 // method to setup the current G4FastTrack object
96 //------------------------------------------------------------
97 void SetCurrentTrack(const G4Track&, const G4Navigator* a = 0);
98
99 //------------------------------------------------------------
100 // The fast simulation manager uses the OnTheBoundaryButExiting
101 // method to test if the particle is leaving the envelope.
102 //------------------------------------------------------------
104
105 //----------------------------------
106 // Informations useful to the user :
107 // General public get functions.
108 //----------------------------------
109
110public: // with Description
111
112 const G4Track* GetPrimaryTrack() const;
113 // Returns the current G4Track.
114
115 G4Envelope* GetEnvelope() const;
116 // Returns the Envelope G4Region pointer.
117
119 // Returns the Envelope G4LogicalVolume pointer.
120
122 // Returns the Envelope G4VPhysicalVolume pointer.
123
124 G4VSolid* GetEnvelopeSolid() const;
125 // Returns the Envelope G4VSolid pointer.
126
127 //-----------------------------------
128 // Primary track informations in the
129 // Envelope coordinate system.
130 //-----------------------------------
131
133 // Returns the particle position in envelope coordinates.
134
136 // Returns the particle momentum in envelope coordinates.
137
139 // Returns the particle direction in envelope coordinates.
140
142 // Returns the particle polarization in envelope coordinates.
143
144 //------------------------------------
145 // 3D transformation of the envelope:
146 //------------------------------------
147 // Global -> Local
148
150 // Returns the envelope Global -> Local G4AffineTransform
151
152 // Local -> Global
154 // Returns the envelope Local -> Global G4AffineTransform
155
156 //-----------------
157 // Private members
158 //-----------------
159private:
160
161 // Current G4Track pointer
162 const G4Track* fTrack;
163
164 //------------------------------------------------
165 // Records the Affine/InverseAffine transformation
166 // of the envelope.
167 //------------------------------------------------
168 void FRecordsAffineTransformation(const G4Navigator*);
169 G4bool fAffineTransformationDefined;
170 G4Envelope* fEnvelope;
171 G4bool fIsUnique;
172 G4LogicalVolume* fEnvelopeLogicalVolume;
173 G4VPhysicalVolume* fEnvelopePhysicalVolume;
174 G4VSolid* fEnvelopeSolid;
175 G4ThreeVector fLocalTrackPosition,
176 fLocalTrackMomentum,
177 fLocalTrackDirection,
178 fLocalTrackPolarization;
179 G4AffineTransform fAffineTransformation,
180 fInverseAffineTransformation;
181};
182
183
184// -----------------
185// -- Inline methods
186// -----------------
187
189{
190 return fEnvelope;
191}
192
194{
195 return fEnvelopeLogicalVolume;
196}
197
199{
200 return fEnvelopePhysicalVolume;
201}
202
204{
205 return fEnvelopeSolid;
206}
207
209{
210 return fTrack;
211}
212
214{
215 return fLocalTrackPosition;
216}
217
219{
220 return fLocalTrackMomentum;
221}
222
224{
225 return fLocalTrackDirection;
226}
227
229{
230 return fLocalTrackPolarization;
231}
232
234{
235 return &fAffineTransformation;
236}
237
239{
240 return &fInverseAffineTransformation;
241}
242
244{
245 // tests if particle are on the boundary and leaving.
246 return GetEnvelopeSolid()->
247 DistanceToOut(GetPrimaryTrackLocalPosition(),
249}
250
251#endif
G4Region G4Envelope
Definition: G4FastTrack.hh:57
bool G4bool
Definition: G4Types.hh:67
G4ThreeVector GetPrimaryTrackLocalPosition() const
Definition: G4FastTrack.hh:213
G4Envelope * GetEnvelope() const
Definition: G4FastTrack.hh:188
const G4Track * GetPrimaryTrack() const
Definition: G4FastTrack.hh:208
G4ThreeVector GetPrimaryTrackLocalPolarization() const
Definition: G4FastTrack.hh:228
const G4AffineTransform * GetInverseAffineTransformation() const
Definition: G4FastTrack.hh:238
G4VPhysicalVolume * GetEnvelopePhysicalVolume() const
Definition: G4FastTrack.hh:198
G4ThreeVector GetPrimaryTrackLocalDirection() const
Definition: G4FastTrack.hh:223
G4ThreeVector GetPrimaryTrackLocalMomentum() const
Definition: G4FastTrack.hh:218
G4VSolid * GetEnvelopeSolid() const
Definition: G4FastTrack.hh:203
G4bool OnTheBoundaryButExiting() const
Definition: G4FastTrack.hh:243
G4LogicalVolume * GetEnvelopeLogicalVolume() const
Definition: G4FastTrack.hh:193
void SetCurrentTrack(const G4Track &, const G4Navigator *a=0)
Definition: G4FastTrack.cc:68
const G4AffineTransform * GetAffineTransformation() const
Definition: G4FastTrack.hh:233