ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4hCoulombScatteringModel.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4hCoulombScatteringModel.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 // GEANT4 Class header file
30 //
31 //
32 // File name: G4hCoulombScatteringModel
33 //
34 // Author: Vladimir Ivanchenko
35 //
36 // Creation date: 08.06.2012 from G4eCoulombScatteringModel
37 //
38 // Modifications:
39 //
40 // Class Description:
41 //
42 // Implementation of Coulomb Scattering of a charge particle
43 // on Atomic Nucleus for interval of scattering anles in Lab system
44 // thetaMin - ThetaMax.
45 // The model based on analysis of J.M.Fernandez-Varea et al.
46 // NIM B73(1993)447 originated from G.Wentzel Z.Phys. 40(1927)590 with
47 // screening parameter from H.A.Bethe Phys. Rev. 89 (1953) 1256.
48 //
49 
50 // -------------------------------------------------------------------
51 //
52 
53 #ifndef G4hCoulombScatteringModel_h
54 #define G4hCoulombScatteringModel_h 1
55 
56 #include "G4VEmModel.hh"
57 #include "globals.hh"
58 #include "G4MaterialCutsCouple.hh"
60 
63 class G4IonTable;
64 class G4NistManager;
65 
67 {
68 
69 public:
70 
71  explicit G4hCoulombScatteringModel(G4bool combined = true);
72 
74 
75  virtual void Initialise(const G4ParticleDefinition*,
76  const G4DataVector&) override;
77 
78  virtual void InitialiseLocal(const G4ParticleDefinition*,
79  G4VEmModel* masterModel) override;
80 
82  const G4ParticleDefinition*,
83  G4double kinEnergy,
84  G4double Z,
85  G4double A,
86  G4double cut,
87  G4double emax) override;
88 
89  virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
90  const G4MaterialCutsCouple*,
91  const G4DynamicParticle*,
92  G4double tmin,
93  G4double maxEnergy) override;
94 
95  virtual G4double MinPrimaryEnergy(const G4Material*,
96  const G4ParticleDefinition*,
97  G4double) final;
98 
99  // defines low energy limit of the model
100  inline void SetLowEnergyThreshold(G4double val);
101 
102  // user definition of low-energy threshold of recoil
103  inline void SetRecoilThreshold(G4double eth);
104 
105  // defines low energy limit on energy transfer to atomic electron
106  inline void SetFixedCut(G4double);
107 
108  // low energy limit on energy transfer to atomic electron
109  inline G4double GetFixedCut() const;
110 
111 protected:
112 
113  inline void DefineMaterial(const G4MaterialCutsCouple*);
114 
115  inline void SetupParticle(const G4ParticleDefinition*);
116 
117 private:
118 
119  // hide assignment operator
120  G4hCoulombScatteringModel & operator=
121  (const G4hCoulombScatteringModel &right) = delete;
123 
128 
129  const std::vector<G4double>* pCuts;
130 
134 
140 
142 
143  // projectile
146 
148 };
149 
150 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
151 
152 inline
154 {
155  if(cup != currentCouple) {
156  currentCouple = cup;
157  currentMaterial = cup->GetMaterial();
159  }
160 }
161 
162 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
163 
164 inline
166 {
167  // Initialise mass and charge
168  if(p != particle) {
169  particle = p;
170  mass = particle->GetPDGMass();
171  wokvi->SetupParticle(p);
172  }
173 }
174 
175 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
176 
178 {
179  recoilThreshold = eth;
180 }
181 
182 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
183 
185 {
186  fixedCut = val;
187 }
188 
189 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
190 
192 {
193  return fixedCut;
194 }
195 
196 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
197 
198 #endif