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