Geant4 Cross Reference |
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 55 class G4VoxelSafety 56 { 57 public: // with description 58 59 G4VoxelSafety(); 60 ~G4VoxelSafety(); 61 62 G4SmartVoxelNode* VoxelLocate( G4SmartVoxelHeader* pHead, 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 76 G4double SafetyForVoxelHeader( const G4SmartVoxelHeader* pHead, 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 87 G4SmartVoxelNode* VoxelLocateLight( G4SmartVoxelHeader* pHead, 88 const G4ThreeVector& localPoint ) const; 89 private: 90 91 // BEGIN State - values used during computation of Safety 92 // 93 G4BlockingList fBlockList; 94 // Blocked volumes 95 96 G4LogicalVolume* fpMotherLogical = nullptr; 97 98 // BEGIN Voxel Stack information 99 // 100 G4int fVoxelDepth = -1; 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 119 G4SmartVoxelNode* fVoxelNode = nullptr; 120 // Node containing last located point 121 122 // 123 // END Voxel Stack information 124 125 G4bool fCheck = false; 126 G4int fVerbose = 0; 127 G4double kCarTolerance; 128 }; 129 130 #endif 131