ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4SmartVoxelNode.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4SmartVoxelNode.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 // G4SmartVoxelNode
27 //
28 // Class description:
29 //
30 // A node in the smart voxel hierarchy - a `slice' of space along a given
31 // axis between given minima and maxima. Note that the node is not aware
32 // of its position - this information being available/derivable by the
33 // node's owner(s) (voxelheaders).
34 //
35 // Member Data:
36 //
37 // G4int fminEquivalent
38 // G4int fmaxEquivalent
39 // - Min and maximum nodes with same contents. Set by constructor
40 // and set methods.
41 // std::vector<G4int> fcontents
42 // - Vector of no.s of volumes inside the node.
43 
44 // 18.04.01, G.Cosmo - Migrated to STL vector
45 // 12.07.95, P.Kent - Initial version
46 // --------------------------------------------------------------------
47 #ifndef G4SMARTVOXELNODE_HH
48 #define G4SMARTVOXELNODE_HH
49 
50 #include "G4Types.hh"
51 #include <vector>
52 
53 using G4SliceVector = std::vector<G4int>;
54 
56 {
57  public: // with description
58 
59  G4SmartVoxelNode(G4int pSlice = 0) : fminEquivalent(pSlice),
60  fmaxEquivalent(pSlice) {}
61  // Constructor. Create an empty node with slice number pSlice.
62  // This number is not stored, but used to provide defaults for the
63  // minimum and maximum equivalent node numbers.
64 
66  // Destructor. No actions.
67 
68  inline G4int GetVolume(G4int pVolumeNo) const;
69  // Return contained volume number pVolumeNo.
70  // Note: starts from 0 and no bounds checking performed.
71 
72  inline void Insert(G4int pVolumeNo);
73  // Add the specified volume number to the contents.
74 
75  inline size_t GetNoContained() const;
76  // Return the number of volumes inside the node.
77 
78  inline size_t GetCapacity() const;
79  // Return the maximum capacity of the buffer.
80 
81  inline void Reserve(G4int noSlices);
82  // Reserve memory in the vector of slices according to the specified
83  // quantity, relative to the maximum number of slices.
84 
85  inline void Shrink();
86  // Shrink buffer capacity to actual size to reduce wasted memory.
87 
88  inline G4int GetMaxEquivalentSliceNo() const;
89  // Return the maximum slice (node/header) number with the same contents,
90  // and with all intermediate slice also having the same contents.
91  inline void SetMaxEquivalentSliceNo(G4int pMax);
92  // Set the maximum slice number (as above).
93  inline G4int GetMinEquivalentSliceNo() const;
94  // Return the minimum slice (node/header) number with the same contents,
95  // and with all intermediate nodes also having the same contents.
96  inline void SetMinEquivalentSliceNo(G4int pMin);
97  // Set the minimum slice number (as above).
98 
99  G4bool operator == (const G4SmartVoxelNode& v) const;
100  // Equality operator.
101 
102  private:
103 
107 };
108 
109 #include "G4SmartVoxelNode.icc"
110 
111 #endif