ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4IonYangFluctuationModel.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4IonYangFluctuationModel.cc
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 file
30 //
31 //
32 // File name: G4IonYangFluctuationModel
33 //
34 // Author: V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
35 //
36 // Creation date: 18 August 2000
37 //
38 // Modifications:
39 // 18/08/2000 V.Ivanchenko First implementation
40 // 04/09/2000 V.Ivanchenko Rename fluctuations
41 // 03/10/2000 V.Ivanchenko CodeWizard clean up
42 // 10/05/2001 V.Ivanchenko Clean up againist Linux compilation with -Wall
43 //
44 // -------------------------------------------------------------------
45 // Class Description:
46 //
47 // The aproximation of additional ion energy loss fluctuations
48 // Q.Yang et al., NIM B61(1991)149-155.
49 //
50 // Class Description: End
51 //
52 // -------------------------------------------------------------------
53 //
54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
55 
57 
58 #include "globals.hh"
59 #include "G4PhysicalConstants.hh"
60 #include "G4SystemOfUnits.hh"
61 #include "G4DynamicParticle.hh"
62 #include "G4ParticleDefinition.hh"
63 #include "G4Material.hh"
64 #include "G4Exp.hh"
65 
66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
67 
69  : G4VLowEnergyModel(name)
70 {;}
71 
72 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
73 
75 {;}
76 
77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
78 
80  const G4Material* material)
81 {
82  G4double energy = particle->GetKineticEnergy() ;
83  G4double mass = particle->GetMass() ;
84  G4double charge = (particle->GetCharge())/eplus ;
85 
86  G4double q = YangFluctuationModel(material,energy,mass,charge) ;
87 
88  return q ;
89 }
90 
91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
92 
94  const G4Material* material,
95  G4double kineticEnergy)
96 {
97  G4double mass = aParticle->GetPDGMass() ;
98  G4double charge = (aParticle->GetPDGCharge())/eplus ;
99 
100  G4double q = YangFluctuationModel(material,kineticEnergy,mass,charge);
101 
102  return q ;
103 }
104 
105 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
106 
108  const G4Material*) const
109 {
110  return 1.0*TeV ;
111 }
112 
113 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
114 
116  const G4Material* ) const
117 {
118  return 0.0 ;
119 }
120 
121 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
122 
124 {
125  return 1.0*TeV ;
126 }
127 
128 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
129 
131  const G4ParticleDefinition* ) const
132 {
133  return 0.0 ;
134 }
135 
136 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
137 
139  const G4Material* ) const
140 {
141  return true ;
142 }
143 
144 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
145 
147  const G4Material* ) const
148 {
149  return true ;
150 }
151 
152 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
153 
155  G4double kineticEnergy,
156  G4double particleMass,
157  G4double charge) const
158 {
159  // The aproximation of energy loss fluctuations
160  // Q.Yang et al., NIM B61(1991)149-155.
161 
162  // Reduced energy in MeV/AMU
163  G4double energy = kineticEnergy *amu_c2/(particleMass*MeV) ;
164 
165  G4int i = 0 ;
166  G4double factor = 1.0 ;
167 
168  // The index of set of parameters i = 0 for protons(hadrons) in gases
169  // 1 for protons(hadrons) in solids
170  // 2 for ions in atomic gases
171  // 3 for ions in molecular gases
172  // 4 for ions in solids
173  static const G4double b[5][4] = {
174  {0.1014, 0.3700, 0.9642, 3.987},
175  {0.1955, 0.6941, 2.522, 1.040},
176  {0.05058, 0.08975, 0.1419, 10.80},
177  {0.05009, 0.08660, 0.2751, 3.787},
178  {0.01273, 0.03458, 0.3951, 3.812}
179  } ;
180 
181  // protons (hadrons)
182  if(1.5 > charge) {
183  if( kStateGas != material->GetState() ) i = 1 ;
184 
185  // ions
186  } else {
187  G4double zeff = (material->GetElectronDensity())/
188  (material->GetTotNbOfAtomsPerVolume()) ;
189  factor = charge * std::pow(charge/zeff, 0.3333) ;
190 
191  if( kStateGas == material->GetState() ) {
192  energy /= (charge * std::sqrt(charge)) ;
193 
194  if(1 == (material->GetNumberOfElements())) {
195  i = 2 ;
196  } else {
197  i = 3 ;
198  }
199 
200  } else {
201  energy /= (charge * std::sqrt(charge*zeff)) ;
202  i = 4 ;
203  }
204  }
205 
206  G4double x = b[i][2] * (1.0 - G4Exp( - energy * b[i][3] )) ;
207 
208  G4double q = factor * x * b[i][0] /
209  ((energy - b[i][1])*(energy - b[i][1]) + x*x) ;
210 
211  return q ;
212 }