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
G4ParallelWorldProcess.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4ParallelWorldProcess.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
//
27
//
28
//
29
//---------------------------------------------------------------
30
//
31
// G4ParallelWorldProcess.hh
32
//
33
// Description:
34
// This procss takes a parallel world and limits a step
35
// on the boundaries of volumes in the parallel world.
36
// It invokes sensitive detectors assigned in the parallel
37
// world.
38
// It switches a material (and a region if defined) in the
39
// assigned parallel world over the material (and the region)
40
// in the mass world.
41
//
42
//---------------------------------------------------------------
43
44
45
#ifndef G4ParallelWorldProcess_h
46
#define G4ParallelWorldProcess_h 1
47
48
#include "
globals.hh
"
49
class
G4Step
;
50
class
G4StepPoint
;
51
class
G4Navigator
;
52
class
G4TransportationManager
;
53
class
G4PathFinder
;
54
class
G4VTouchable
;
55
class
G4VPhysicalVolume
;
56
class
G4ParticleChange
;
57
#include "
G4VProcess.hh
"
58
#include "
G4FieldTrack.hh
"
59
#include "
G4TouchableHandle.hh
"
60
#include "
G4MultiNavigator.hh
"
61
62
//------------------------------------------
63
//
64
// G4ParallelWorldProcess class
65
//
66
//------------------------------------------
67
68
69
// Class Description:
70
71
class
G4ParallelWorldProcess
:
public
G4VProcess
72
{
73
public
:
// with description
74
75
//------------------------
76
// Constructor/Destructor
77
//------------------------
78
79
G4ParallelWorldProcess
(
const
G4String
& processName =
"ParaWorld"
,
80
G4ProcessType
theType =
fParallel
);
81
virtual
~G4ParallelWorldProcess
();
82
83
//--------------------------------------------------------------
84
// Set Paralle World
85
//--------------------------------------------------------------
86
87
void
SetParallelWorld
(
G4String
parallelWorldName);
88
void
SetParallelWorld
(
G4VPhysicalVolume
* parallelWorld);
89
90
//--------------------------------------------------------------
91
// Process interface
92
//--------------------------------------------------------------
93
94
void
StartTracking
(
G4Track
*);
95
96
//------------------------------------------------------------------------
97
// GetPhysicalInteractionLength() and DoIt() methods for AtRest
98
//------------------------------------------------------------------------
99
100
G4double
AtRestGetPhysicalInteractionLength
(
const
G4Track
&,
G4ForceCondition
*);
101
G4VParticleChange
*
AtRestDoIt
(
const
G4Track
&,
const
G4Step
&);
102
103
//------------------------------------------------------------------------
104
// GetPhysicalInteractionLength() and DoIt() methods for AlongStep
105
//------------------------------------------------------------------------
106
107
G4double
AlongStepGetPhysicalInteractionLength
(
108
const
G4Track
&,
G4double
,
G4double
,
G4double
&,
G4GPILSelection
*);
109
G4VParticleChange
*
AlongStepDoIt
(
const
G4Track
&,
const
G4Step
&);
110
111
//-----------------------------------------------------------------------
112
// GetPhysicalInteractionLength() and DoIt() methods for PostStep
113
//-----------------------------------------------------------------------
114
115
G4double
PostStepGetPhysicalInteractionLength
(
116
const
G4Track
&,
G4double
,
G4ForceCondition
*);
117
G4VParticleChange
*
PostStepDoIt
(
const
G4Track
&,
const
G4Step
&);
118
119
//-----------------------------------------------------------------------
120
// Flag for material switching
121
//-----------------------------------------------------------------------
122
123
inline
void
SetLayeredMaterialFlag
(
G4bool
flg=
true
)
124
{
layeredMaterialFlag
= flg; }
125
inline
G4bool
GetLayeredMaterialFlag
()
const
126
{
return
layeredMaterialFlag
; }
127
128
private
:
129
void
CopyStep
(
const
G4Step
&
step
);
130
void
SwitchMaterial
(
G4StepPoint
*);
131
132
public
:
// with description
133
//--------------------------------------------------------------------
134
// Returns whether a particular particle type requires AtRest process
135
//--------------------------------------------------------------------
136
G4bool
IsAtRestRequired
(
G4ParticleDefinition
*);
137
138
private
:
139
G4Step
*
fGhostStep
;
140
G4StepPoint
*
fGhostPreStepPoint
;
141
G4StepPoint
*
fGhostPostStepPoint
;
142
143
G4VParticleChange
aDummyParticleChange
;
144
G4ParticleChange
xParticleChange
;
145
146
G4TransportationManager
*
fTransportationManager
;
147
G4PathFinder
*
fPathFinder
;
148
149
// -------------------------------
150
// Navigation in the Ghost World:
151
// -------------------------------
152
G4String
fGhostWorldName
;
153
G4VPhysicalVolume
*
fGhostWorld
;
154
G4Navigator
*
fGhostNavigator
;
155
G4int
fNavigatorID
;
156
G4TouchableHandle
fOldGhostTouchable
;
157
G4TouchableHandle
fNewGhostTouchable
;
158
G4FieldTrack
fFieldTrack
;
159
G4double
fGhostSafety
;
160
G4bool
fOnBoundary
;
161
162
//-----------------------------------------------------------------------
163
// Flag for material switching
164
//-----------------------------------------------------------------------
165
G4bool
layeredMaterialFlag
;
166
167
//-----------------------------------------------------------------------
168
// Static G4Step object for "Hyper-step"
169
//-----------------------------------------------------------------------
170
public
:
171
static
const
G4Step
*
GetHyperStep
();
172
static
G4int
GetHypNavigatorID
();
173
private
:
174
static
G4ThreadLocal
G4Step
*
fpHyperStep
;
175
static
G4ThreadLocal
G4int
nParallelWorlds
;
176
static
G4ThreadLocal
G4int
fNavIDHyp
;
177
G4int
iParallelWorld
;
178
};
179
180
#endif
geant4
tree
geant4-10.6-release
source
processes
scoring
include
G4ParallelWorldProcess.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:52
using
1.8.2 with
ECCE GitHub integration