Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ImportanceProcess.hh
Go to the documentation of this file.
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// G4ImportanceProcess
27//
28// Class description:
29//
30// Used internally by importance sampling in the "mass" geometry.
31// This process is a forced post step process. It will apply
32// importance sampling if the particle crosses a boundary in the
33// "mass" geometry.
34
35// Author: Michael Dressel, 2002
36// --------------------------------------------------------------------
37#ifndef G4ImportanceProcess_hh
38#define G4ImportanceProcess_hh 1
39
40#include "G4VProcess.hh"
41#include "G4VTrackTerminator.hh"
42
45class G4VIStore;
46
47class G4Step;
48class G4Navigator;
50class G4PathFinder;
51class G4VTouchable;
52
53#include "G4FieldTrack.hh"
54#include "G4TouchableHandle.hh"
55#include "G4MultiNavigator.hh" // For ELimited enum
56
58{
59
60public: // with description
61
62 G4ImportanceProcess(const G4VImportanceAlgorithm &aImportanceAlgorithm,
63 const G4VIStore &aIstore,
64 const G4VTrackTerminator *TrackTerminator,
65 const G4String &aName = "ImportanceProcess",
66 G4bool para = false);
67 // creates a G4ParticleChange
68
69 virtual ~G4ImportanceProcess();
70 // delete the G4ParticleChange
71
72
73 //--------------------------------------------------------------
74 // Set Parallel World
75 //--------------------------------------------------------------
76
77 void SetParallelWorld(const G4String &parallelWorldName);
78 // void SetParallelWorld(const G4VPhysicalVolume* parallelWorld);
79
80 //--------------------------------------------------------------
81 // Process interface
82 //--------------------------------------------------------------
83
85
86
87 virtual G4double
89 G4double previousStepSize,
91 // make process beeing forced
92 virtual G4VParticleChange *PostStepDoIt(const G4Track&, const G4Step&);
93 // manage the importance sampling in the "mass" geometry
94
95 virtual void KillTrack() const;
96 // used in case no scoring process follows that does the killing
97
98 virtual const G4String &GetName() const;
99
100
101public: // without description
102
103 // no operation in AtRestDoIt and AlongStepDoIt
104
105 virtual G4double
107 G4double ,
108 G4double ,
109 G4double& ,
111 virtual G4double
114
115 virtual G4VParticleChange*
116 AtRestDoIt(const G4Track&, const G4Step&);
117
118
119 virtual G4VParticleChange*
120 AlongStepDoIt(const G4Track&, const G4Step&);
121
122private:
123
125 G4ImportanceProcess &operator=(const G4ImportanceProcess &);
126
127private:
128
129 void CopyStep(const G4Step & step);
130
131 G4Step* fGhostStep = nullptr;
132 G4StepPoint* fGhostPreStepPoint = nullptr;
133 G4StepPoint* fGhostPostStepPoint = nullptr;
134
135 G4ParticleChange* fParticleChange = nullptr;
136 const G4VImportanceAlgorithm &fImportanceAlgorithm;
137 const G4VIStore& fIStore;
138 G4SamplingPostStepAction* fPostStepAction = nullptr;
139
140 G4TransportationManager* fTransportationManager = nullptr;
141 G4PathFinder* fPathFinder = nullptr;
142
143 // -------------------------------
144 // Navigation in the Ghost World:
145 // -------------------------------
146 G4String fGhostWorldName = "NoParallelWorld";
147 G4VPhysicalVolume* fGhostWorld = nullptr;
148 G4Navigator* fGhostNavigator = nullptr;
149 G4int fNavigatorID = -1;
150 G4TouchableHandle fOldGhostTouchable;
151 G4TouchableHandle fNewGhostTouchable;
152 G4FieldTrack fFieldTrack = '0';
153 G4double fGhostSafety = -1;
154 G4bool fOnBoundary = false;
155
156 G4bool fParaflag = false;
157 G4FieldTrack fEndTrack = '0';
158 ELimited feLimited = kDoNot;
159
160};
161
162#endif
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
G4GPILSelection
ELimited
@ kDoNot
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
virtual G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &)
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
void SetParallelWorld(const G4String &parallelWorldName)
virtual void KillTrack() const
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double, G4double, G4double &, G4GPILSelection *)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition)
void StartTracking(G4Track *)
virtual G4double AtRestGetPhysicalInteractionLength(const G4Track &, G4ForceCondition *)
virtual const G4String & GetName() const
Definition: G4Step.hh:62