source: trunk/source/geometry/navigation/include/G4VoxelNavigation.hh@ 1349

Last change on this file since 1349 was 1347, checked in by garnier, 15 years ago

geant4 tag 9.4

File size: 7.4 KB
Line 
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: G4VoxelNavigation.hh,v 1.8 2010/11/04 12:13:30 japost Exp $
28// GEANT4 tag $Name: geant4-09-04-ref-00 $
29//
30//
31// class G4VoxelNavigation
32//
33// Class description:
34//
35// Utility for navigation in volumes containing only G4PVPlacement
36// daughter volumes for which voxels have been constructed.
37
38// History:
39// - Created. Paul Kent, Aug 96
40// --------------------------------------------------------------------
41#ifndef G4VOXELNAVIGATION_HH
42#define G4VOXELNAVIGATION_HH
43
44#include "geomdefs.hh"
45#include "G4NavigationHistory.hh"
46#include "G4NavigationLogger.hh"
47#include "G4AffineTransform.hh"
48#include "G4VPhysicalVolume.hh"
49#include "G4LogicalVolume.hh"
50#include "G4VSolid.hh"
51#include "G4ThreeVector.hh"
52
53#include "G4BlockingList.hh"
54
55class G4VoxelSafety;
56
57// Required for inline implementation
58//
59#include "G4AuxiliaryNavServices.hh"
60
61// Required for voxel handling & voxel stack
62//
63#include <vector>
64#include "G4SmartVoxelProxy.hh"
65#include "G4SmartVoxelNode.hh"
66#include "G4SmartVoxelHeader.hh"
67
68class G4VoxelNavigation
69{
70 public: // with description
71
72 G4VoxelNavigation();
73 virtual ~G4VoxelNavigation();
74
75 G4SmartVoxelNode* VoxelLocate( G4SmartVoxelHeader* pHead,
76 const G4ThreeVector& localPoint );
77
78 virtual G4bool LevelLocate( G4NavigationHistory& history,
79 const G4VPhysicalVolume* blockedVol,
80 const G4int blockedNum,
81 const G4ThreeVector& globalPoint,
82 const G4ThreeVector* globalDirection,
83 const G4bool pLocatedOnEdge,
84 G4ThreeVector& localPoint );
85
86 virtual G4double ComputeStep( const G4ThreeVector& globalPoint,
87 const G4ThreeVector& globalDirection,
88 const G4double currentProposedStepLength,
89 G4double& newSafety,
90 G4NavigationHistory& history,
91 G4bool& validExitNormal,
92 G4ThreeVector& exitNormal,
93 G4bool& exiting,
94 G4bool& entering,
95 G4VPhysicalVolume *(*pBlockedPhysical),
96 G4int& blockedReplicaNo );
97
98 virtual G4double ComputeSafety( const G4ThreeVector& globalpoint,
99 const G4NavigationHistory& history,
100 const G4double pMaxLength=DBL_MAX );
101
102 inline G4int GetVerboseLevel() const;
103 void SetVerboseLevel(G4int level);
104 // Get/Set Verbose(ness) level.
105 // [if level>0 && G4VERBOSE, printout can occur]
106
107 inline void CheckMode(G4bool mode);
108 // Run navigation in "check-mode", therefore using additional
109 // verifications and more strict correctness conditions.
110 // Is effective only with G4VERBOSE set.
111
112 inline void EnableBestSafety( G4bool flag= false );
113 // Enable best-possible evaluation of isotropic safety
114
115 protected:
116
117 G4double ComputeVoxelSafety( const G4ThreeVector& localPoint ) const;
118 G4bool LocateNextVoxel( const G4ThreeVector& localPoint,
119 const G4ThreeVector& localDirection,
120 const G4double currentStep );
121
122 G4SmartVoxelNode* VoxelLocateLight( G4SmartVoxelHeader* pHead,
123 const G4ThreeVector& localPoint ) const;
124
125 private: // Logging functions
126
127 void PreComputeStepLog (const G4VPhysicalVolume* motherPhysical,
128 G4double motherSafety,
129 const G4ThreeVector& localPoint);
130 void AlongComputeStepLog(const G4VSolid* sampleSolid,
131 const G4ThreeVector& samplePoint,
132 const G4ThreeVector& sampleDirection,
133 const G4ThreeVector& localDirection,
134 G4double sampleSafety,
135 G4double sampleStep);
136 void PostComputeStepLog (const G4VSolid* motherSolid,
137 const G4ThreeVector& localPoint,
138 const G4ThreeVector& localDirection,
139 G4double motherStep,
140 G4double motherSafety);
141 void ComputeSafetyLog (const G4VSolid* solid,
142 const G4ThreeVector& point,
143 G4double safety,
144 G4bool banner);
145 inline void PrintDaughterLog (const G4VSolid* sampleSolid,
146 const G4ThreeVector& samplePoint,
147 G4double sampleSafety,
148 G4double sampleStep);
149 protected:
150
151 G4BlockingList fBList;
152 // Blocked volumes
153
154 //
155 // BEGIN Voxel Stack information
156 //
157
158 G4int fVoxelDepth;
159 // Note: fVoxelDepth==0+ => fVoxelAxisStack(0+) contains axes of voxel
160 // fVoxelDepth==-1 -> not in voxel
161
162 std::vector<EAxis> fVoxelAxisStack;
163 // Voxel axes
164
165 std::vector<G4int> fVoxelNoSlicesStack;
166 // No slices per voxel at each level
167
168 std::vector<G4double> fVoxelSliceWidthStack;
169 // Width of voxels at each level
170
171 std::vector<G4int> fVoxelNodeNoStack;
172 // Node no point is inside at each level
173
174 std::vector<G4SmartVoxelHeader*> fVoxelHeaderStack;
175 // Voxel headers at each level
176
177 G4SmartVoxelNode* fVoxelNode;
178 // Node containing last located point
179
180 //
181 // END Voxel Stack information
182 //
183
184 G4VoxelSafety *fpVoxelSafety;
185 // Helper object for Voxel Safety
186
187 G4bool fCheck;
188 G4bool fBestSafety;
189
190 G4NavigationLogger* fLogger;
191 // Verbosity logger
192};
193
194#include "G4VoxelNavigation.icc"
195
196#endif
Note: See TracBrowser for help on using the repository browser.