ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4VTouchable.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4VTouchable.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
// G4VTouchable
27
//
28
// Class description:
29
//
30
// Base class for `touchable' objects capable of maintaining an
31
// association between parts of the geometrical hierarchy (volumes
32
// &/or solids) and their resultant transformation.
33
//
34
// Utilisation:
35
// -----------
36
// A touchable is a geometrical volume (solid) which has a unique
37
// placement in a detector description. It is an abstract base class which
38
// can be implemented in a variety of ways. Each way must provide the
39
// capabilities of obtaining the transformation and solid that is described
40
// by the touchable.
41
//
42
// All G4VTouchable implementations must respond to the two following
43
// "requests":
44
//
45
// 1) GetTranslation and GetRotation that return the components of the
46
// volume's transformation.
47
//
48
// 2) GetSolid that gives the solid of this touchable.
49
//
50
//
51
// Additional capabilities are available from implementations with more
52
// information. These have a default implementation that causes an exception.
53
//
54
// Several capabilities are available from touchables with physical volumes:
55
//
56
// 3) GetVolume gives the physical volume.
57
//
58
// 4) GetReplicaNumber or GetCopyNumber gives the copy number of the
59
// physical volume, either if it is replicated or not.
60
//
61
// Touchables that store volume hierarchy (history) have the whole stack of
62
// parent volumes available. Thus it is possible to add a little more state
63
// in order to extend its functionality. We add a "pointer" to a level and a
64
// member function to move the level in this stack. Then calling the above
65
// member functions for another level, the information for that level can be
66
// retrieved.
67
//
68
// The top of the history tree is, by convention, the world volume.
69
//
70
// 5) GetHistoryDepth gives the depth of the history tree.
71
//
72
// 6) GetReplicaNumber/GetCopyNumber, GetVolume, GetTranslation and
73
// GetRotation each can be called with a depth argument.
74
// They return the value of the respective level of the touchable.
75
//
76
// 7) MoveUpHistory(num) moves the current pointer inside the touchable
77
// to point "num" levels up the history tree. Thus, eg, calling
78
// it with num=1 will cause the internal pointer to move to the mother
79
// of the current volume.
80
// NOTE: this method MODIFIES the touchable.
81
//
82
// An update method, with different arguments is available, so that the
83
// information in a touchable can be updated:
84
//
85
// 8) UpdateYourself takes a physical volume pointer and can additionally
86
// take a NavigationHistory.
87
88
// Created: Paul Kent, August 1996
89
// --------------------------------------------------------------------
90
#ifndef G4VTOUCHABLE_HH
91
#define G4VTOUCHABLE_HH
92
93
#include "
G4Types.hh
"
94
95
class
G4VPhysicalVolume
;
96
class
G4VSolid
;
97
class
G4NavigationHistory
;
98
99
#include "
G4RotationMatrix.hh
"
100
#include "
G4ThreeVector.hh
"
101
102
class
G4VTouchable
103
{
104
105
public
:
// with description
106
107
G4VTouchable
();
108
virtual
~G4VTouchable
();
109
// Constructor and destructor.
110
111
virtual
const
G4ThreeVector
&
GetTranslation
(
G4int
depth=0)
const
= 0;
112
virtual
const
G4RotationMatrix
*
GetRotation
(
G4int
depth=0)
const
= 0;
113
// Accessors for translation and rotation.
114
virtual
G4VPhysicalVolume
*
GetVolume
(
G4int
depth=0)
const
;
115
virtual
G4VSolid
*
GetSolid
(
G4int
depth=0)
const
;
116
// Accessors for physical volumes and solid.
117
118
virtual
G4int
GetReplicaNumber
(
G4int
depth=0)
const
;
119
inline
G4int
GetCopyNumber
(
G4int
depth=0)
const
;
120
virtual
G4int
GetHistoryDepth
()
const
;
121
virtual
G4int
MoveUpHistory
(
G4int
num_levels=1);
122
// Methods for touchables with history.
123
124
virtual
void
UpdateYourself
(
G4VPhysicalVolume
* pPhysVol,
125
const
G4NavigationHistory
*
history
=
nullptr
);
126
// Update method.
127
128
public
:
// without description
129
130
// virtual void ResetLevel();
131
132
virtual
const
G4NavigationHistory
*
GetHistory
()
const
;
133
// Should this method be deprecated ? It is used in G4Navigator!
134
};
135
136
#include "G4VTouchable.icc"
137
138
#endif
geant4
tree
geant4-10.6-release
source
geometry
management
include
G4VTouchable.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:17
using
1.8.2 with
ECCE GitHub integration