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
G4WentzelVIRelModel.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// $Id$
27//
28// -------------------------------------------------------------------
29//
30//
31// GEANT4 Class header file
32//
33//
34// File name: G4WentzelVIRelModel
35//
36// Author: V.Ivanchenko
37//
38// Creation date: 08.06.2012 from G4WentzelVIModel
39//
40// Modifications:
41//
42// Class Description:
43//
44// Implementation of the model of multiple scattering based on
45// G.Wentzel, Z. Phys. 40 (1927) 590.
46// H.W.Lewis, Phys Rev 78 (1950) 526.
47// J.M. Fernandez-Varea et al., NIM B73 (1993) 447.
48// L.Urban, CERN-OPEN-2006-077.
49
50// -------------------------------------------------------------------
51//
52
53#ifndef G4WentzelVIRelModel_h
54#define G4WentzelVIRelModel_h 1
55
56//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
57
58#include "G4VMscModel.hh"
61
64class G4NistManager;
65class G4Pow;
66
67//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
68
70{
71
72public:
73
74 G4WentzelVIRelModel(const G4String& nam = "WentzelVIUni");
75
76 virtual ~G4WentzelVIRelModel();
77
78 virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
79
81
83 G4double KineticEnergy,
84 G4double AtomicNumber,
85 G4double AtomicWeight=0.,
86 G4double cut = DBL_MAX,
87 G4double emax= DBL_MAX);
88
90 G4double safety);
91
92 virtual G4double ComputeTruePathLengthLimit(const G4Track& track,
93 G4double& currentMinimalStep);
94
95 virtual G4double ComputeGeomPathLength(G4double truePathLength);
96
97 virtual G4double ComputeTrueStepLength(G4double geomStepLength);
98
99private:
100
101 G4double ComputeXSectionPerVolume();
102
103 inline void SetupParticle(const G4ParticleDefinition*);
104
105 inline void DefineMaterial(const G4MaterialCutsCouple*);
106
107 // hide assignment operator
108 G4WentzelVIRelModel & operator=(const G4WentzelVIRelModel &right);
110
111 G4LossTableManager* theManager;
112 G4NistManager* fNistManager;
113 G4ParticleChangeForMSC* fParticleChange;
115 G4Pow* fG4pow;
116
117 const G4DataVector* currentCuts;
118
119 G4double tlimitminfix;
120 G4double invsqrt12;
121
122 // cache kinematics
123 G4double preKinEnergy;
124 G4double tPathLength;
125 G4double zPathLength;
126 G4double lambdaeff;
127 G4double currentRange;
128
129 // data for single scattering mode
130 G4double xtsec;
131 std::vector<G4double> xsecn;
132 std::vector<G4double> prob;
133 G4int nelments;
134
135 G4double numlimit;
136
137 // cache material
138 G4int currentMaterialIndex;
139 const G4MaterialCutsCouple* currentCouple;
140 const G4Material* currentMaterial;
141
142 // single scattering parameters
143 G4double cosThetaMin;
144 G4double cosThetaMax;
145 G4double cosTetMaxNuc;
146
147 // projectile
148 const G4ParticleDefinition* particle;
149 G4double lowEnergyLimit;
150
151 // flags
152 G4bool inside;
153 G4bool singleScatteringMode;
154};
155
156//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
157//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
158
159inline
160void G4WentzelVIRelModel::DefineMaterial(const G4MaterialCutsCouple* cup)
161{
162 if(cup != currentCouple) {
163 currentCouple = cup;
164 SetCurrentCouple(cup);
165 currentMaterial = cup->GetMaterial();
166 currentMaterialIndex = currentCouple->GetIndex();
167 }
168}
169
170//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
171
172inline void G4WentzelVIRelModel::SetupParticle(const G4ParticleDefinition* p)
173{
174 // Initialise mass and charge
175 if(p != particle) {
176 particle = p;
177 wokvi->SetupParticle(p);
178 }
179}
180
181//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
182
183#endif
184
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
const G4Material * GetMaterial() const
Definition: G4Pow.hh:54
void SetCurrentCouple(const G4MaterialCutsCouple *)
Definition: G4VEmModel.hh:370
virtual G4double ComputeGeomPathLength(G4double truePathLength)
virtual G4double ComputeTrueStepLength(G4double geomStepLength)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double KineticEnergy, G4double AtomicNumber, G4double AtomicWeight=0., G4double cut=DBL_MAX, G4double emax=DBL_MAX)
virtual G4ThreeVector & SampleScattering(const G4DynamicParticle *, G4double safety)
virtual G4double ComputeTruePathLengthLimit(const G4Track &track, G4double &currentMinimalStep)
void StartTracking(G4Track *)
void SetupParticle(const G4ParticleDefinition *)
#define DBL_MAX
Definition: templates.hh:83