source: trunk/source/processes/electromagnetic/lowenergy/src/G4IonYangFluctuationModel.cc @ 1007

Last change on this file since 1007 was 819, checked in by garnier, 16 years ago

import all except CVS

File size: 6.8 KB
Line 
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
56#include "G4IonYangFluctuationModel.hh"
57#include "G4DynamicParticle.hh"
58#include "G4ParticleDefinition.hh"
59#include "G4Material.hh"
60#include "globals.hh"
61
62//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
63
64G4IonYangFluctuationModel::G4IonYangFluctuationModel(const G4String& name)
65  : G4VLowEnergyModel(name)
66{;}
67
68//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
69
70G4IonYangFluctuationModel::~G4IonYangFluctuationModel() 
71{;}
72
73//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
74
75G4double G4IonYangFluctuationModel::TheValue(const G4DynamicParticle* particle,
76                                             const G4Material* material) 
77{
78  G4double energy = particle->GetKineticEnergy() ;
79  G4double mass = particle->GetMass() ;
80  G4double charge = (particle->GetCharge())/eplus ;
81
82  G4double q = YangFluctuationModel(material,energy,mass,charge) ;
83
84  return q ;
85}
86
87//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
88
89G4double G4IonYangFluctuationModel::TheValue(const G4ParticleDefinition* aParticle,
90                                             const G4Material* material,
91                                             G4double kineticEnergy) 
92{
93  G4double mass = aParticle->GetPDGMass() ;
94  G4double charge = (aParticle->GetPDGCharge())/eplus ;
95
96  G4double q = YangFluctuationModel(material,kineticEnergy,mass,charge);
97
98  return q ;
99}
100
101//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
102
103G4double G4IonYangFluctuationModel::HighEnergyLimit(const G4ParticleDefinition*,
104                                                    const G4Material*) const
105{
106  return 1.0*TeV ;
107}
108
109//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
110
111G4double G4IonYangFluctuationModel::LowEnergyLimit(const G4ParticleDefinition* ,
112                                                   const G4Material* ) const
113{
114  return 0.0 ;
115}
116
117//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
118
119G4double G4IonYangFluctuationModel::HighEnergyLimit(const G4ParticleDefinition* ) const
120{
121  return 1.0*TeV ;
122}
123
124//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
125
126G4double G4IonYangFluctuationModel::LowEnergyLimit(
127                              const G4ParticleDefinition* ) const
128{
129  return 0.0 ;
130}
131
132//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
133 
134G4bool G4IonYangFluctuationModel::IsInCharge(const G4DynamicParticle*,
135                                             const G4Material* ) const
136{
137  return true ;
138}
139
140//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
141 
142G4bool G4IonYangFluctuationModel::IsInCharge(const G4ParticleDefinition* ,
143                                             const G4Material* ) const
144{
145  return true ;
146}
147
148//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
149
150G4double G4IonYangFluctuationModel::YangFluctuationModel(const G4Material* material,
151                                                         G4double kineticEnergy,
152                                                         G4double particleMass,
153                                                         G4double charge) const
154{
155  // The aproximation of energy loss fluctuations
156  // Q.Yang et al., NIM B61(1991)149-155.
157
158  // Reduced energy in MeV/AMU
159  G4double energy = kineticEnergy *amu_c2/(particleMass*MeV) ;
160
161  G4int i = 0 ;
162  G4double factor = 1.0 ;
163
164  // The index of set of parameters i = 0 for protons(hadrons) in gases
165  //                                    1 for protons(hadrons) in solids
166  //                                    2 for ions in atomic gases
167  //                                    3 for ions in molecular gases
168  //                                    4 for ions in solids
169  static G4double b[5][4] = {
170  {0.1014,  0.3700,  0.9642,  3.987},
171  {0.1955,  0.6941,  2.522,   1.040},
172  {0.05058, 0.08975, 0.1419, 10.80},
173  {0.05009, 0.08660, 0.2751,  3.787},
174  {0.01273, 0.03458, 0.3951,  3.812}
175  } ;
176
177  // protons (hadrons)
178  if(1.5 > charge) {
179    if( kStateGas != material->GetState() ) i = 1 ;
180
181  // ions
182  } else {
183    G4double zeff = (material->GetElectronDensity())/
184                    (material->GetTotNbOfAtomsPerVolume()) ;
185    factor = charge * std::pow(charge/zeff, 0.3333) ;
186
187    if( kStateGas == material->GetState() ) {
188      energy /= (charge * std::sqrt(charge)) ;     
189
190      if(1 == (material->GetNumberOfElements())) {
191        i = 2 ;
192      } else {
193        i = 3 ;
194      }
195
196    } else {
197      energy /= (charge * std::sqrt(charge*zeff)) ;     
198      i = 4 ;
199    }
200  }
201
202  G4double x = b[i][2] * (1.0 - std::exp( - energy * b[i][3] )) ;
203
204  G4double q = factor * x * b[i][0] / 
205             ((energy - b[i][1])*(energy - b[i][1]) + x*x) ;
206
207  return q ;   
208}
209
210
211
212
213
214
Note: See TracBrowser for help on using the repository browser.