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