ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4NavigationHistory.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4NavigationHistory.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 // G4NavigationHistory
27 //
28 // Class description:
29 //
30 // Responsible for maintenance of the history of the path taken through
31 // the geometrical hierarchy. Principally a utility class for use by the
32 // G4Navigator.
33 
34 // 25.07.96 - P.Kent Initial version. Services derived from
35 // requirements of G4Navigator.
36 // ----------------------------------------------------------------------
37 #ifndef G4NAVIGATIONHISTORY_HH
38 #define G4NAVIGATIONHISTORY_HH
39 
40 #include <assert.h>
41 #include <vector>
42 #include <iostream>
43 
44 #include "geomdefs.hh"
45 #include "geomwdefs.hh"
46 #include "G4AffineTransform.hh"
47 #include "G4VPhysicalVolume.hh"
48 #include "G4NavigationLevel.hh"
50 #include "G4Allocator.hh"
51 
53 {
54 
55  public: // with description
56 
57  friend std::ostream&
58  operator << (std::ostream& os, const G4NavigationHistory& h);
59 
61  // Constructor: sizes history lists & resets histories.
62 
64  // Destructor.
65 
67  // Copy constructor.
68 
70  // Assignment operator.
71 
72  inline void Reset();
73  // Resets history. It now does clear most entries.
74  // Level 0 is preserved.
75 
76  inline void Clear();
77  // Clears entries, zeroing transforms, matrices & negating
78  // replica history.
79 
80  inline void SetFirstEntry(G4VPhysicalVolume* pVol);
81  // Setup initial entry in stack: copies through volume transform & matrix.
82  // The volume is assumed to be unrotated.
83 
84  inline const G4AffineTransform& GetTopTransform() const;
85  // Returns topmost transform.
86 
87  inline const G4AffineTransform* GetPtrTopTransform() const;
88  // Returns pointer to topmost transform.
89 
90  inline G4int GetTopReplicaNo() const;
91  // Returns topmost replica no record.
92 
93  inline EVolume GetTopVolumeType() const;
94  // Returns topmost volume type.
95 
96  inline G4VPhysicalVolume* GetTopVolume() const;
97  // Returns topmost physical volume pointer.
98 
99  inline size_t GetDepth() const;
100  // Returns current history depth.
101 
102  inline size_t GetMaxDepth() const;
103  // Returns current maximum size of history.
104  // Note: MaxDepth of 16 mean history entries [0..15] inclusive.
105 
106  inline const G4AffineTransform& GetTransform(G4int n) const;
107  // Returns specified transformation.
108 
109  inline G4int GetReplicaNo(G4int n) const;
110  // Returns specified replica no record.
111 
112  inline EVolume GetVolumeType(G4int n) const;
113  // Returns specified volume type.
114 
115  inline G4VPhysicalVolume* GetVolume(G4int n) const;
116  // Returns specified physical volume pointer.
117 
118  inline void NewLevel(G4VPhysicalVolume* pNewMother,
119  EVolume vType = kNormal,
120  G4int nReplica = -1);
121  // Changes navigation level to that of the new mother.
122 
123  inline void BackLevel();
124  // Back up one level in history: from mother to grandmother.
125  // It does not erase history record of current mother.
126 
127  inline void BackLevel(G4int n);
128  // Back up specified number of levels in history.
129 
130  inline void *operator new(size_t);
131  // Override "new" for "G4Allocator".
132  inline void operator delete(void *aHistory);
133  // Override "delete" for "G4Allocator".
134 
135  private:
136 
137  inline void EnlargeHistory();
138  // Enlarge history if required: increase size by kHistoryStride.
139  // Note that additional history entries are `dirty' (non zero) apart
140  // from the volume history.
141 
142  private:
143 
144  std::vector<G4NavigationLevel>* fNavHistory;
145  // Pointer to the vector of navigation levels.
146 
147  size_t fStackDepth;
148  // Depth of stack: effectively depth in geometrical tree.
149 };
150 
151 #include "G4NavigationHistory.icc"
152 
153 #endif