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
G4WeightWindowProcess.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// G4WeightWindowProcess
27//
28// Class description:
29//
30// Used internally by weight window technique in the "mass" geometry.
31// This process is a forced post step process. It will apply
32// weight window biasing on boundaries, collisions
33// or both according to the G4PlaceOfAction argument.
34
35// Author: Michael Dressel, 2002
36// --------------------------------------------------------------------
37#ifndef G4WeightWindowProcess_hh
38#define G4WeightWindowProcess_hh 1
39
40#include "G4VProcess.hh"
41#include "G4VTrackTerminator.hh"
42#include "G4PlaceOfAction.hh"
43
47
48class G4Step;
49class G4Navigator;
51class G4PathFinder;
52class G4VTouchable;
53
54#include "G4FieldTrack.hh"
55#include "G4TouchableHandle.hh"
56#include "G4MultiNavigator.hh" // For ELimited enum
57
59{
60
61public: // with description
62
64 aWeightWindowAlgorithm,
65 const G4VWeightWindowStore &aWWStore,
66 const G4VTrackTerminator *TrackTerminator,
67 G4PlaceOfAction placeOfAction,
68 const G4String &aName = "WeightWindowProcess",
69 G4bool para = false);
70 // creates a G4ParticleChange
71
72 virtual ~G4WeightWindowProcess();
73 // delete the G4ParticleChange
74
75
76 //--------------------------------------------------------------
77 // Set Parallel World
78 //--------------------------------------------------------------
79
80 void SetParallelWorld(const G4String &parallelWorldName);
81 void SetParallelWorld(G4VPhysicalVolume* parallelWorld);
82
83 //--------------------------------------------------------------
84 // Process interface
85 //--------------------------------------------------------------
86
88
89
90
91 virtual G4double
93 G4double previousStepSize,
95 // make process beeing forced
96 virtual G4VParticleChange *PostStepDoIt(const G4Track&, const G4Step&);
97 // aply weight window sampling
98
99 virtual void KillTrack() const;
100 // used in case no scoring process follows that does the killing
101
102 virtual const G4String &GetName() const;
103
104
105public: // without description
106
107 // no operation in AtRestDoIt and AlongStepDoIt
108
109 virtual G4double
111 G4double ,
112 G4double ,
113 G4double& ,
115 virtual G4double
118
119 virtual G4VParticleChange*
120 AtRestDoIt(const G4Track&, const G4Step&);
121
122
123 virtual G4VParticleChange*
124 AlongStepDoIt(const G4Track&, const G4Step&);
125
126private:
127
130
131private:
132
133 void CopyStep(const G4Step & step);
134
135 G4Step* fGhostStep = nullptr;
136 G4StepPoint* fGhostPreStepPoint = nullptr;
137 G4StepPoint* fGhostPostStepPoint = nullptr;
138
139 G4ParticleChange* fParticleChange = nullptr;
140 const G4VWeightWindowAlgorithm& fWeightWindowAlgorithm;
141 const G4VWeightWindowStore& fWeightWindowStore;
142 G4SamplingPostStepAction* fPostStepAction = nullptr;
143 G4PlaceOfAction fPlaceOfAction;
144
145 G4TransportationManager* fTransportationManager = nullptr;
146 G4PathFinder* fPathFinder = nullptr;
147
148 // -------------------------------
149 // Navigation in the Ghost World:
150 // -------------------------------
151 G4String fGhostWorldName = "NoParallelWorld";
152 G4VPhysicalVolume* fGhostWorld = nullptr;
153 G4Navigator* fGhostNavigator = nullptr;
154 G4int fNavigatorID = -1;
155 G4TouchableHandle fOldGhostTouchable;
156 G4TouchableHandle fNewGhostTouchable;
157 G4FieldTrack fFieldTrack = '0';
158 G4double fGhostSafety = -1;
159 G4bool fOnBoundary = false;
160
161 G4bool fParaflag = false;
162 G4FieldTrack fEndTrack = '0';
163 ELimited feLimited = kDoNot;
164};
165
166#endif
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
G4GPILSelection
ELimited
@ kDoNot
G4PlaceOfAction
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
Definition: G4Step.hh:62
void SetParallelWorld(const G4String &parallelWorldName)
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition)
virtual G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &)
virtual G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double, G4double, G4double &, G4GPILSelection *)
virtual G4double AtRestGetPhysicalInteractionLength(const G4Track &, G4ForceCondition *)
virtual void KillTrack() const
virtual G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
virtual const G4String & GetName() const
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)