ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VoxelLimits.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VoxelLimits.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 // 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 
56  G4VoxelLimits();
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 
66  G4double GetMaxXExtent() const;
67  // Return maximum x extent.
68  G4double GetMaxYExtent() const;
69  // Return maximum y extent.
70  G4double GetMaxZExtent() const;
71  // Return maximum z extent.
72 
73  G4double GetMinXExtent() const;
74  // Return minimum x extent.
75  G4double GetMinYExtent() const;
76  // Return minimum y extent.
77  G4double GetMinZExtent() const;
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 
85  G4bool IsXLimited() const;
86  // Return true if the x axis is limited.
87  G4bool IsYLimited() const;
88  // Return true if the y axis is limited.
89  G4bool IsZLimited() const;
90  // Return true if the z axis is limited.
91 
92  G4bool IsLimited() const;
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 
121 };
122 
123 #include "G4VoxelLimits.icc"
124 
125 std::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