Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VoxelLimits.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// G4VoxelLimits
27//
28// Class description:
29//
30// Represents limitation/restrictions of space, where restrictions
31// are only made perpendicular to the cartesian axes.
32//
33// Member data:
34//
35// G4double fxAxisMin,fxAxisMax
36// G4double fyAxisMin,fyAxisMax
37// G4double fzAxisMin,fzAxisMax
38// - The min and max values along each axis. +-kInfinity if not restricted.
39
40// 13.07.95, P.Kent - Initial version.
41// --------------------------------------------------------------------
42#ifndef G4VOXELLIMITS_HH
43#define G4VOXELLIMITS_HH
44
45#include "G4Types.hh"
46#include "geomdefs.hh"
47
48#include "G4ThreeVector.hh"
49
50#include <assert.h>
51
53{
54 public: // with description
55
57 // Constructor - initialise to be unlimited. Volume unrestricted.
58
60 // Destructor. No actions.
61
62 void AddLimit(const EAxis pAxis, const G4double pMin, const G4double pMax);
63 // Restrict the volume to between specified min and max along the
64 // given axis. Cartesian axes only, pMin<=pMax.
65
67 // Return maximum x extent.
69 // Return maximum y extent.
71 // Return maximum z extent.
72
74 // Return minimum x extent.
76 // Return minimum y extent.
78 // Return minimum z extent.
79
80 G4double GetMaxExtent(const EAxis pAxis) const;
81 // Return maximum extent of volume along specified axis.
82 G4double GetMinExtent(const EAxis pAxis) const;
83 // Return minimum extent of volume along specified axis.
84
86 // Return true if the x axis is limited.
88 // Return true if the y axis is limited.
90 // Return true if the z axis is limited.
91
93 // Return true if limited along any axis
94 G4bool IsLimited(const EAxis pAxis) const;
95 // Return true if the specified axis is restricted/limited.
96
97 G4bool ClipToLimits(G4ThreeVector& pStart, G4ThreeVector& pEnd) const;
98 // Clip the line segment pStart->pEnd to the volume described by the
99 // current limits. Return true if the line remains after clipping,
100 // else false, and leave the vectors in an undefined state.
101
102 G4bool Inside(const G4ThreeVector& pVec) const;
103 // Return true if the specified vector is inside/on boundaries of limits.
104
105 G4int OutCode(const G4ThreeVector& pVec) const;
106 // Calculate the `outcode' for the specified vector.
107 // Intended for use during clipping against the limits
108 // The bits are set given the following conditions:
109 // 0 pVec.x()<fxAxisMin && IsXLimited()
110 // 1 pVec.x()>fxAxisMax && IsXLimited()
111 // 2 pVec.y()<fyAxisMin && IsYLimited()
112 // 3 pVec.y()>fyAxisMax && IsYLimited()
113 // 4 pVec.z()<fzAxisMin && IsZLimited()
114 // 5 pVec.z()>fzAxisMax && IsZLimited()
115
116 private:
117
118 G4double fxAxisMin = -kInfinity, fxAxisMax = kInfinity;
119 G4double fyAxisMin = -kInfinity, fyAxisMax = kInfinity;
120 G4double fzAxisMin = -kInfinity, fzAxisMax = kInfinity;
121};
122
123#include "G4VoxelLimits.icc"
124
125std::ostream& operator << (std::ostream& os, const G4VoxelLimits& pLim);
126 // Print the limits to the stream in the form:
127 // "{(xmin,xmax) (ymin,ymax) (zmin,zmax)}"
128 // Replace (xmin,xmax) by (-,-) when not limited.
129
130#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
std::ostream & operator<<(std::ostream &os, const G4VoxelLimits &pLim)
G4double GetMinExtent(const EAxis pAxis) const
G4int OutCode(const G4ThreeVector &pVec) const
G4bool IsYLimited() const
G4bool ClipToLimits(G4ThreeVector &pStart, G4ThreeVector &pEnd) const
G4double GetMinZExtent() const
void AddLimit(const EAxis pAxis, const G4double pMin, const G4double pMax)
G4bool IsXLimited() const
G4double GetMaxExtent(const EAxis pAxis) const
G4bool IsLimited(const EAxis pAxis) const
G4double GetMaxYExtent() const
G4bool Inside(const G4ThreeVector &pVec) const
G4double GetMaxZExtent() const
G4double GetMinYExtent() const
G4double GetMinXExtent() const
G4bool IsZLimited() const
G4bool IsLimited() const
G4double GetMaxXExtent() const
EAxis
Definition: geomdefs.hh:54