ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VoxelSafety.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VoxelSafety.hh
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 // class G4VoxelSafety
28 //
29 // Class description:
30 //
31 // Utility for isotropic safety in volumes containing only G4PVPlacement
32 // daughter volumes for which voxels have been constructed.
33 
34 // History:
35 // - Created. John Apostolakis, 30 April 2010
36 // --------------------------------------------------------------------
37 #ifndef G4VOXELSAFETY_HH
38 #define G4VOXELSAFETY_HH
39 
40 #include "geomdefs.hh"
41 #include "G4NavigationHistory.hh"
42 #include "G4AffineTransform.hh"
43 #include "G4VPhysicalVolume.hh"
44 #include "G4LogicalVolume.hh"
45 #include "G4VSolid.hh"
46 #include "G4ThreeVector.hh"
47 
48 #include "G4BlockingList.hh"
49 
50 #include <vector> // Required for voxel handling & voxel stack
51 
52 class G4SmartVoxelNode;
53 class G4SmartVoxelHeader;
54 
56 {
57  public: // with description
58 
59  G4VoxelSafety();
61 
63  const G4ThreeVector& localPoint );
64 
65  G4double ComputeSafety( const G4ThreeVector& localPoint,
66  const G4VPhysicalVolume& currentPhysical,
67  G4double maxLength = DBL_MAX );
68 
69  inline G4int GetVerboseLevel() const { return fVerbose; }
70  inline void SetVerboseLevel(G4int level) { fVerbose = level; }
71  //
72  // If level>0 && G4VERBOSE, printout can occur
73 
74  protected:
75 
77  const G4ThreeVector& localPoint,
78  G4double maxLength,
79  const G4VPhysicalVolume& currentPhysical,
80  G4double distUpperDepth = 0.0,
81  G4double previousMinSafety = DBL_MAX
82  );
83 
84  G4double SafetyForVoxelNode( const G4SmartVoxelNode *curVoxelNode,
85  const G4ThreeVector& localPoint );
86 
88  const G4ThreeVector& localPoint ) const;
89  private:
90 
91  // BEGIN State - values used during computation of Safety
92  //
94  // Blocked volumes
95 
97 
98  // BEGIN Voxel Stack information
99  //
101  // Note: fVoxelDepth==0+ => fVoxelAxisStack(0+) contains axes of voxel
102  // fVoxelDepth==-1 -> not in voxel
103 
104  std::vector<EAxis> fVoxelAxisStack;
105  // Voxel axes
106 
107  std::vector<G4int> fVoxelNoSlicesStack;
108  // No slices per voxel at each level
109 
110  std::vector<G4double> fVoxelSliceWidthStack;
111  // Width of voxels at each level
112 
113  std::vector<G4int> fVoxelNodeNoStack;
114  // Node no point is inside at each level
115 
116  std::vector<const G4SmartVoxelHeader*> fVoxelHeaderStack;
117  // Voxel headers at each level
118 
120  // Node containing last located point
121 
122  //
123  // END Voxel Stack information
124 
125  G4bool fCheck = false;
128 };
129 
130 #endif