ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
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
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
geant4
tree
geant4-10.6-release
source
geometry
navigation
include
G4VoxelSafety.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:17
using
1.8.2 with
ECCE GitHub integration