Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/src/G4hParametrisedLossModel.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/electromagnetic/lowenergy/src/G4hParametrisedLossModel.cc (Version 11.3.0) and /processes/electromagnetic/lowenergy/src/G4hParametrisedLossModel.cc (Version 10.2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 // -------------------------------------------     27 // -------------------------------------------------------------------
 28 //                                                 28 //
 29 // GEANT4 Class file                               29 // GEANT4 Class file
 30 //                                                 30 //
 31 //                                                 31 //
 32 // File name:     G4hParametrisedLossModel         32 // File name:     G4hParametrisedLossModel
 33 //                                                 33 //
 34 // Author:        V.Ivanchenko (Vladimir.Ivanc     34 // Author:        V.Ivanchenko (Vladimir.Ivanchenko@cern.ch)
 35 //                                             <<  35 // 
 36 // Creation date: 20 July 2000                     36 // Creation date: 20 July 2000
 37 //                                                 37 //
 38 // Modifications:                              <<  38 // Modifications: 
 39 // 20/07/2000  V.Ivanchenko First implementati     39 // 20/07/2000  V.Ivanchenko First implementation
 40 // 18/08/2000  V.Ivanchenko TRIM85 model is ad     40 // 18/08/2000  V.Ivanchenko TRIM85 model is added
 41 // 03/10/2000  V.Ivanchenko CodeWizard clean u     41 // 03/10/2000  V.Ivanchenko CodeWizard clean up
 42 // 10/05/2001  V.Ivanchenko Clean up againist      42 // 10/05/2001  V.Ivanchenko Clean up againist Linux compilation with -Wall
 43 // 30/12/2003  V.Ivanchenko SRIM2003 model is      43 // 30/12/2003  V.Ivanchenko SRIM2003 model is added
 44 // 07/05/2004  V.Ivanchenko Fix Graphite probl     44 // 07/05/2004  V.Ivanchenko Fix Graphite problem, add QAO model
 45 //                                                 45 //
 46 // Class Description:                              46 // Class Description:
 47 //                                                 47 //
 48 // Low energy protons/ions electronic stopping     48 // Low energy protons/ions electronic stopping power parametrisation
 49 //                                                 49 //
 50 // Class Description: End                          50 // Class Description: End
 51 //                                                 51 //
 52 // -------------------------------------------     52 // -------------------------------------------------------------------
 53 //                                                 53 //
 54 //....oooOO0OOooo........oooOO0OOooo........oo     54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 55 //....oooOO0OOooo........oooOO0OOooo........oo     55 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 56                                                    56 
 57 #include "G4hParametrisedLossModel.hh"             57 #include "G4hParametrisedLossModel.hh"
 58                                                    58 
 59 #include "globals.hh"                              59 #include "globals.hh"
 60 #include "G4PhysicalConstants.hh"                  60 #include "G4PhysicalConstants.hh"
 61 #include "G4SystemOfUnits.hh"                      61 #include "G4SystemOfUnits.hh"
 62 #include "G4UnitsTable.hh"                         62 #include "G4UnitsTable.hh"
 63 #include "G4hZiegler1985p.hh"                      63 #include "G4hZiegler1985p.hh"
 64 #include "G4hICRU49p.hh"                           64 #include "G4hICRU49p.hh"
 65 #include "G4hICRU49He.hh"                          65 #include "G4hICRU49He.hh"
 66 #include "G4DynamicParticle.hh"                    66 #include "G4DynamicParticle.hh"
 67 #include "G4ParticleDefinition.hh"                 67 #include "G4ParticleDefinition.hh"
 68 #include "G4ElementVector.hh"                      68 #include "G4ElementVector.hh"
 69 #include "G4Material.hh"                           69 #include "G4Material.hh"
 70 #include "G4Exp.hh"                            << 
 71                                                    70 
 72 //....oooOO0OOooo........oooOO0OOooo........oo     71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 73                                                    72 
 74 G4hParametrisedLossModel::G4hParametrisedLossM     73 G4hParametrisedLossModel::G4hParametrisedLossModel(const G4String& name)
 75   :G4VLowEnergyModel(name), modelName(name)        74   :G4VLowEnergyModel(name), modelName(name)
 76 {                                                  75 {
 77   InitializeMe();                                  76   InitializeMe();
 78 }                                                  77 }
 79                                                    78 
 80 //....oooOO0OOooo........oooOO0OOooo........oo     79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 81                                                    80 
 82 void G4hParametrisedLossModel::InitializeMe()      81 void G4hParametrisedLossModel::InitializeMe()
 83 {                                                  82 {
 84   expStopPower125 = 0.;                            83   expStopPower125 = 0.;
 85                                                    84 
 86   theZieglerFactor = eV*cm2*1.0e-15 ;              85   theZieglerFactor = eV*cm2*1.0e-15 ;
 87                                                    86 
 88   // Registration of parametrisation models        87   // Registration of parametrisation models
 89   const G4String& blank(" ");                  <<  88   G4String blank  = G4String(" ") ;
 90   const G4String& ir49p("ICRU_R49p");          <<  89   G4String ir49p  = G4String("ICRU_R49p") ;
 91   const G4String& ir49He("ICRU_R49He");        <<  90   G4String ir49He = G4String("ICRU_R49He") ;
 92   const G4String& zi85p("Ziegler1985p");       <<  91   G4String zi85p  = G4String("Ziegler1985p") ;
 93   if(zi85p == modelName) {                         92   if(zi85p == modelName) {
 94       eStopingPowerTable = new G4hZiegler1985p     93       eStopingPowerTable = new G4hZiegler1985p();
 95       highEnergyLimit = 100.0*MeV;                 94       highEnergyLimit = 100.0*MeV;
 96       lowEnergyLimit  = 1.0*keV;                   95       lowEnergyLimit  = 1.0*keV;
 97                                                    96 
 98   } else if(ir49p == modelName || blank == mod     97   } else if(ir49p == modelName || blank == modelName) {
 99       eStopingPowerTable = new G4hICRU49p();       98       eStopingPowerTable = new G4hICRU49p();
100       highEnergyLimit = 2.0*MeV;                   99       highEnergyLimit = 2.0*MeV;
101       lowEnergyLimit  = 1.0*keV;                  100       lowEnergyLimit  = 1.0*keV;
102                                                   101 
103   } else if(ir49He == modelName) {                102   } else if(ir49He == modelName) {
104       eStopingPowerTable = new G4hICRU49He();     103       eStopingPowerTable = new G4hICRU49He();
105       highEnergyLimit = 10.0*MeV/4.0;             104       highEnergyLimit = 10.0*MeV/4.0;
106       lowEnergyLimit  = 1.0*keV/4.0;              105       lowEnergyLimit  = 1.0*keV/4.0;
107                                                   106 
108   } else {                                        107   } else {
109       eStopingPowerTable = new G4hICRU49p();      108       eStopingPowerTable = new G4hICRU49p();
110       highEnergyLimit = 2.0*MeV;                  109       highEnergyLimit = 2.0*MeV;
111       lowEnergyLimit  = 1.0*keV;                  110       lowEnergyLimit  = 1.0*keV;
112       G4cout << "G4hParametrisedLossModel Warn << 111       G4cout << "G4hParametrisedLossModel Warning: <" << modelName 
113              << "> is unknown - default <"        112              << "> is unknown - default <"
114              << ir49p << ">" << " is used for     113              << ir49p << ">" << " is used for Electronic Stopping"
115              << G4endl;                           114              << G4endl;
116       modelName = ir49p;                          115       modelName = ir49p;
117   }                                               116   }
118       /*                                          117       /*
119       G4cout << "G4hParametrisedLossModel: the    118       G4cout << "G4hParametrisedLossModel: the model <"
120              << modelName << ">" << " is used     119              << modelName << ">" << " is used for Electronic Stopping"
121              << G4endl;                           120              << G4endl;
122 */                                                121 */
123 }                                                 122 }
124                                                   123 
125 //....oooOO0OOooo........oooOO0OOooo........oo    124 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
126                                                   125 
127 G4hParametrisedLossModel::~G4hParametrisedLoss    126 G4hParametrisedLossModel::~G4hParametrisedLossModel()
128 {                                                 127 {
129   delete eStopingPowerTable;                      128   delete eStopingPowerTable;
130 }                                                 129 }
131                                                   130 
132 //....oooOO0OOooo........oooOO0OOooo........oo    131 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
133                                                   132 
134 G4double G4hParametrisedLossModel::TheValue(co    133 G4double G4hParametrisedLossModel::TheValue(const G4DynamicParticle* particle,
135               const G4Material* material)         134               const G4Material* material)
136 {                                                 135 {
137   G4double scaledEnergy = (particle->GetKineti    136   G4double scaledEnergy = (particle->GetKineticEnergy())
138                         * proton_mass_c2/(part    137                         * proton_mass_c2/(particle->GetMass());
139   G4double factor = theZieglerFactor;             138   G4double factor = theZieglerFactor;
140   if (scaledEnergy < lowEnergyLimit) {            139   if (scaledEnergy < lowEnergyLimit) {
141     if (modelName != "QAO") factor *= std::sqr    140     if (modelName != "QAO") factor *= std::sqrt(scaledEnergy/lowEnergyLimit);
142     scaledEnergy = lowEnergyLimit;                141     scaledEnergy = lowEnergyLimit;
143   }                                               142   }
144   G4double eloss = StoppingPower(material,scal    143   G4double eloss = StoppingPower(material,scaledEnergy) * factor;
145                                                   144 
146   return eloss;                                   145   return eloss;
147 }                                                 146 }
148                                                   147 
149 //....oooOO0OOooo........oooOO0OOooo........oo    148 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
150                                                   149 
151 G4double G4hParametrisedLossModel::TheValue(co    150 G4double G4hParametrisedLossModel::TheValue(const G4ParticleDefinition* aParticle,
152               const G4Material* material,         151               const G4Material* material,
153                     G4double kineticEnergy)       152                     G4double kineticEnergy)
154 {                                                 153 {
155   G4double scaledEnergy = kineticEnergy           154   G4double scaledEnergy = kineticEnergy
156                         * proton_mass_c2/(aPar    155                         * proton_mass_c2/(aParticle->GetPDGMass());
157                                                   156 
158   G4double factor = theZieglerFactor;             157   G4double factor = theZieglerFactor;
159   if (scaledEnergy < lowEnergyLimit) {            158   if (scaledEnergy < lowEnergyLimit) {
160     if (modelName != "QAO") factor *= std::sqr    159     if (modelName != "QAO") factor *= std::sqrt(scaledEnergy/lowEnergyLimit);
161     scaledEnergy = lowEnergyLimit;                160     scaledEnergy = lowEnergyLimit;
162   }                                               161   }
163   G4double eloss = StoppingPower(material,scal    162   G4double eloss = StoppingPower(material,scaledEnergy) * factor;
164                                                   163 
165   return eloss;                                   164   return eloss;
166 }                                                 165 }
167                                                   166 
168 //....oooOO0OOooo........oooOO0OOooo........oo    167 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
169                                                   168 
170 G4double G4hParametrisedLossModel::LowEnergyLi    169 G4double G4hParametrisedLossModel::LowEnergyLimit(const G4ParticleDefinition* ,
171               const G4Material*) const            170               const G4Material*) const
172 {                                                 171 {
173   return lowEnergyLimit;                          172   return lowEnergyLimit;
174 }                                                 173 }
175                                                   174 
176 //....oooOO0OOooo........oooOO0OOooo........oo    175 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
177                                                   176 
178 G4double G4hParametrisedLossModel::HighEnergyL    177 G4double G4hParametrisedLossModel::HighEnergyLimit(const G4ParticleDefinition* ,
179                const G4Material*) const           178                const G4Material*) const
180 {                                                 179 {
181   return highEnergyLimit;                         180   return highEnergyLimit;
182 }                                                 181 }
183 //....oooOO0OOooo........oooOO0OOooo........oo    182 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
184                                                   183 
185 G4double G4hParametrisedLossModel::LowEnergyLi    184 G4double G4hParametrisedLossModel::LowEnergyLimit(const G4ParticleDefinition* ) const
186 {                                                 185 {
187   return lowEnergyLimit;                          186   return lowEnergyLimit;
188 }                                                 187 }
189                                                   188 
190 //....oooOO0OOooo........oooOO0OOooo........oo    189 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
191                                                   190 
192 G4double G4hParametrisedLossModel::HighEnergyL    191 G4double G4hParametrisedLossModel::HighEnergyLimit(const G4ParticleDefinition* ) const
193 {                                                 192 {
194   return highEnergyLimit;                         193   return highEnergyLimit;
195 }                                                 194 }
196                                                   195 
197 //....oooOO0OOooo........oooOO0OOooo........oo    196 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
198                                                   197 
199 G4bool G4hParametrisedLossModel::IsInCharge(co    198 G4bool G4hParametrisedLossModel::IsInCharge(const G4DynamicParticle* ,
200               const G4Material*) const            199               const G4Material*) const
201 {                                                 200 {
202   return true;                                    201   return true;
203 }                                                 202 }
204                                                   203 
205 //....oooOO0OOooo........oooOO0OOooo........oo    204 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
206                                                   205 
207 G4bool G4hParametrisedLossModel::IsInCharge(co    206 G4bool G4hParametrisedLossModel::IsInCharge(const G4ParticleDefinition* ,
208               const G4Material*) const            207               const G4Material*) const
209 {                                                 208 {
210   return true;                                    209   return true;
211 }                                                 210 }
212                                                   211 
213 //....oooOO0OOooo........oooOO0OOooo........oo    212 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
214                                                   213 
215 G4double G4hParametrisedLossModel::StoppingPow    214 G4double G4hParametrisedLossModel::StoppingPower(const G4Material* material,
216                    G4double kineticEnergy)        215                    G4double kineticEnergy)
217 {                                                 216 {
218   G4double eloss = 0.0;                           217   G4double eloss = 0.0;
219                                                   218 
220   const std::size_t numberOfElements = materia << 219   const G4int numberOfElements = material->GetNumberOfElements() ;
221   const G4double* theAtomicNumDensityVector =     220   const G4double* theAtomicNumDensityVector =
222     material->GetAtomicNumDensityVector() ;       221     material->GetAtomicNumDensityVector() ;
223                                                   222 
224                                                   223 
225   // compound material with parametrisation       224   // compound material with parametrisation
226   if( (eStopingPowerTable->HasMaterial(materia    225   if( (eStopingPowerTable->HasMaterial(material)) ) {
227                                                   226 
228     eloss = eStopingPowerTable->StoppingPower(    227     eloss = eStopingPowerTable->StoppingPower(material, kineticEnergy);
229     if ("QAO" != modelName) {                     228     if ("QAO" != modelName) {
230       eloss *=  material->GetTotNbOfAtomsPerVo    229       eloss *=  material->GetTotNbOfAtomsPerVolume();
231       if(1 < numberOfElements) {                  230       if(1 < numberOfElements) {
232         G4int nAtoms = 0;                         231         G4int nAtoms = 0;
233                                                   232 
234         const G4int* theAtomsVector = material    233         const G4int* theAtomsVector = material->GetAtomsVector();
235         for (std::size_t iel=0; iel<numberOfEl << 234         for (G4int iel=0; iel<numberOfElements; iel++) {
236           nAtoms += theAtomsVector[iel];          235           nAtoms += theAtomsVector[iel];
237         }                                         236         }
238         eloss /= nAtoms;                          237         eloss /= nAtoms;
239       }                                           238       }
240     }                                             239     }
241                                                   240 
242   // pure material                                241   // pure material
243   } else if(1 == numberOfElements) {              242   } else if(1 == numberOfElements) {
244                                                   243 
245     G4double z = material->GetZ();                244     G4double z = material->GetZ();
246     eloss = (eStopingPowerTable->ElectronicSto    245     eloss = (eStopingPowerTable->ElectronicStoppingPower(z, kineticEnergy))
247                                * (material->Ge    246                                * (material->GetTotNbOfAtomsPerVolume()) ;
248                                                   247 
249   // Experimental data exist only for kinetic     248   // Experimental data exist only for kinetic energy 125 keV
250   } else if( MolecIsInZiegler1988(material)) {    249   } else if( MolecIsInZiegler1988(material)) {
251                                                   250 
252   // Cycle over elements - calculation based o    251   // Cycle over elements - calculation based on Bragg's rule
253     G4double eloss125 = 0.0 ;                     252     G4double eloss125 = 0.0 ;
254     const G4ElementVector* theElementVector =     253     const G4ElementVector* theElementVector =
255                            material->GetElemen    254                            material->GetElementVector() ;
256                                                   255 
257                                                   256 
258     //  loop for the elements in the material     257     //  loop for the elements in the material
259     for (std::size_t i=0; i<numberOfElements;  << 258     for (G4int i=0; i<numberOfElements; i++) {
260       const G4Element* element = (*theElementV    259       const G4Element* element = (*theElementVector)[i] ;
261       G4double z = element->GetZ() ;              260       G4double z = element->GetZ() ;
262       eloss    +=(eStopingPowerTable->Electron    261       eloss    +=(eStopingPowerTable->ElectronicStoppingPower(z,kineticEnergy))
263                                     * theAtomi    262                                     * theAtomicNumDensityVector[i] ;
264       eloss125 +=(eStopingPowerTable->Electron    263       eloss125 +=(eStopingPowerTable->ElectronicStoppingPower(z,125.0*keV))
265                                     * theAtomi    264                                     * theAtomicNumDensityVector[i] ;
266     }                                             265     }
267                                                   266 
268     // Chemical factor is taken into account      267     // Chemical factor is taken into account
269     if (eloss125 > 0.0) {                      << 268     eloss *= ChemicalFactor(kineticEnergy, eloss125) ;
270       eloss *= ChemicalFactor(kineticEnergy, e << 
271     }                                          << 
272                                                   269 
273   // Brugg's rule calculation                     270   // Brugg's rule calculation
274   } else {                                        271   } else {
275     const G4ElementVector* theElementVector =     272     const G4ElementVector* theElementVector =
276                            material->GetElemen    273                            material->GetElementVector() ;
277                                                   274 
278     //  loop for the elements in the material     275     //  loop for the elements in the material
279     for (std::size_t i=0; i<numberOfElements;  << 276     for (G4int i=0; i<numberOfElements; i++)
280     {                                             277     {
281       const G4Element* element = (*theElementV    278       const G4Element* element = (*theElementVector)[i] ;
282       G4double z = element->GetZ() ;              279       G4double z = element->GetZ() ;
283       eloss   += (eStopingPowerTable->Electron    280       eloss   += (eStopingPowerTable->ElectronicStoppingPower(z,kineticEnergy))
284                                    * theAtomic    281                                    * theAtomicNumDensityVector[i];
285     }                                             282     }
286   }                                               283   }
287   return eloss;                                   284   return eloss;
288 }                                                 285 }
289                                                   286 
290 //....oooOO0OOooo........oooOO0OOooo........oo    287 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
291                                                   288 
292 G4bool G4hParametrisedLossModel::MolecIsInZieg    289 G4bool G4hParametrisedLossModel::MolecIsInZiegler1988(
293                                  const G4Mater    290                                  const G4Material* material)
294 {                                                 291 {
295   // The list of molecules from                   292   // The list of molecules from
296   // J.F.Ziegler and J.M.Manoyan, The stopping    293   // J.F.Ziegler and J.M.Manoyan, The stopping of ions in compaunds,
297   // Nucl. Inst. & Meth. in Phys. Res. B35 (19    294   // Nucl. Inst. & Meth. in Phys. Res. B35 (1988) 215-228.
298                                                   295 
299   G4String myFormula = G4String(" ") ;            296   G4String myFormula = G4String(" ") ;
300   const G4String chFormula = material->GetChem    297   const G4String chFormula = material->GetChemicalFormula() ;
301   if (myFormula == chFormula ) return false ;     298   if (myFormula == chFormula ) return false ;
302                                                << 299   
303   //  There are no evidence for difference of     300   //  There are no evidence for difference of stopping power depended on
304   //  phase of the compound except for water.  << 301   //  phase of the compound except for water. The stopping power of the 
305   //  water in gas phase can be predicted usin    302   //  water in gas phase can be predicted using Bragg's rule.
306   //                                           << 303   //  
307   //  No chemical factor for water-gas         << 304   //  No chemical factor for water-gas 
308                                                << 305    
309   myFormula = G4String("H_2O") ;                  306   myFormula = G4String("H_2O") ;
310   const G4State theState = material->GetState(    307   const G4State theState = material->GetState() ;
311   if( theState == kStateGas && myFormula == ch    308   if( theState == kStateGas && myFormula == chFormula) return false ;
312                                                << 309     
313   const std::size_t numberOfMolecula = 53 ;    << 310   const size_t numberOfMolecula = 53 ;
314                                                   311 
315   // The coffecient from Table.4 of Ziegler &     312   // The coffecient from Table.4 of Ziegler & Manoyan
316   static const G4double HeEff = 2.8735 ;       << 313   static const G4double HeEff = 2.8735 ;    
317                                                << 314   
318   static const G4String name[numberOfMolecula]    315   static const G4String name[numberOfMolecula] = {
319     "H_2O",     "C_2H_4O",    "C_3H_6O",  "C_2    316     "H_2O",     "C_2H_4O",    "C_3H_6O",  "C_2H_2",             "C_H_3OH",
320     "C_2H_5OH",  "C_3H_7OH",   "C_3H_4",   "NH    317     "C_2H_5OH",  "C_3H_7OH",   "C_3H_4",   "NH_3",               "C_14H_10",
321     "C_6H_6",    "C_4H_10",    "C_4H_6",   "C_    318     "C_6H_6",    "C_4H_10",    "C_4H_6",   "C_4H_8O",            "CCl_4",
322     "CF_4",      "C_6H_8",     "C_6H_12",  "C_    319     "CF_4",      "C_6H_8",     "C_6H_12",  "C_6H_10O",           "C_6H_10",
323     "C_8H_16",   "C_5H_10",    "C_5H_8",   "C_    320     "C_8H_16",   "C_5H_10",    "C_5H_8",   "C_3H_6-Cyclopropane","C_2H_4F_2",
324     "C_2H_2F_2", "C_4H_8O_2",  "C_2H_6",   "C_    321     "C_2H_2F_2", "C_4H_8O_2",  "C_2H_6",   "C_2F_6",             "C_2H_6O",
325     "C_3H_6O",   "C_4H_10O",   "C_2H_4",   "C_    322     "C_3H_6O",   "C_4H_10O",   "C_2H_4",   "C_2H_4O",            "C_2H_4S",
326     "SH_2",      "CH_4",       "CCLF_3",   "CC    323     "SH_2",      "CH_4",       "CCLF_3",   "CCl_2F_2",           "CHCl_2F",
327     "(CH_3)_2S", "N_2O",       "C_5H_10O", "C_ << 324     "(CH_3)_2S", "N_2O",       "C_5H_10O" "C_8H_6",          "(CH_2)_N",
328     "(C_3H_6)_N","(C_8H_8)_N", "C_3H_8",   "C_    325     "(C_3H_6)_N","(C_8H_8)_N", "C_3H_8",   "C_3H_6-Propylene",   "C_3H_6O",
329     "C_3H_6S",   "C_4H_4S",    "C_7H_8"           326     "C_3H_6S",   "C_4H_4S",    "C_7H_8"
330   };                                              327   };
331                                                << 328     
332   static const G4double expStopping[numberOfMo    329   static const G4double expStopping[numberOfMolecula] = {
333      66.1,  190.4, 258.7,  42.2, 141.5,        << 330      66.1,  190.4, 258.7,  42.2, 141.5, 
334     210.9,  279.6, 198.8,  31.0, 267.5,           331     210.9,  279.6, 198.8,  31.0, 267.5,
335     122.8,  311.4, 260.3, 328.9, 391.3,           332     122.8,  311.4, 260.3, 328.9, 391.3,
336     206.6,  374.0, 422.0, 432.0, 398.0,           333     206.6,  374.0, 422.0, 432.0, 398.0,
337     554.0,  353.0, 326.0,  74.6, 220.5,           334     554.0,  353.0, 326.0,  74.6, 220.5,
338     197.4,  362.0, 170.0, 330.5, 211.3,           335     197.4,  362.0, 170.0, 330.5, 211.3,
339     262.3,  349.6,  51.3, 187.0, 236.9,           336     262.3,  349.6,  51.3, 187.0, 236.9,
340     121.9,   35.8, 247.0, 292.6, 268.0,           337     121.9,   35.8, 247.0, 292.6, 268.0,
341     262.3,   49.0, 398.9, 444.0,  22.91,          338     262.3,   49.0, 398.9, 444.0,  22.91,
342      68.0,  155.0,  84.0,  74.2, 254.7,           339      68.0,  155.0,  84.0,  74.2, 254.7,
343     306.8,  324.4, 420.0                          340     306.8,  324.4, 420.0
344   } ;                                             341   } ;
345                                                   342 
346   static const G4double expCharge[numberOfMole    343   static const G4double expCharge[numberOfMolecula] = {
347     HeEff, HeEff, HeEff,   1.0, HeEff,         << 344     HeEff, HeEff, HeEff,   1.0, HeEff, 
348     HeEff, HeEff, HeEff,   1.0,   1.0,            345     HeEff, HeEff, HeEff,   1.0,   1.0,
349       1.0, HeEff, HeEff, HeEff, HeEff,            346       1.0, HeEff, HeEff, HeEff, HeEff,
350     HeEff, HeEff, HeEff, HeEff, HeEff,            347     HeEff, HeEff, HeEff, HeEff, HeEff,
351     HeEff, HeEff, HeEff,   1.0, HeEff,            348     HeEff, HeEff, HeEff,   1.0, HeEff,
352     HeEff, HeEff, HeEff, HeEff, HeEff,            349     HeEff, HeEff, HeEff, HeEff, HeEff,
353     HeEff, HeEff,   1.0, HeEff, HeEff,            350     HeEff, HeEff,   1.0, HeEff, HeEff,
354     HeEff,   1.0, HeEff, HeEff, HeEff,            351     HeEff,   1.0, HeEff, HeEff, HeEff,
355     HeEff,   1.0, HeEff, HeEff,   1.0,            352     HeEff,   1.0, HeEff, HeEff,   1.0,
356       1.0,   1.0,   1.0,   1.0, HeEff,            353       1.0,   1.0,   1.0,   1.0, HeEff,
357     HeEff, HeEff, HeEff                           354     HeEff, HeEff, HeEff
358   } ;                                             355   } ;
359                                                   356 
360   static const G4double numberOfAtomsPerMolecu    357   static const G4double numberOfAtomsPerMolecula[numberOfMolecula] = {
361     3.0,  7.0, 10.0,  4.0,  6.0,               << 358     3.0,  7.0, 10.0,  4.0,  6.0,  
362     9.0, 12.0,  7.0,  4.0, 24.0,                  359     9.0, 12.0,  7.0,  4.0, 24.0,
363     12.0, 14.0, 10.0, 13.0,  5.0,                 360     12.0, 14.0, 10.0, 13.0,  5.0,
364     5.0, 14.0, 18.0, 17.0, 17.0,                  361     5.0, 14.0, 18.0, 17.0, 17.0,
365     24.0, 15.0, 13.0,  9.0,  8.0,                 362     24.0, 15.0, 13.0,  9.0,  8.0,
366     6.0, 14.0,  8.0,  8.0,  9.0,                  363     6.0, 14.0,  8.0,  8.0,  9.0,
367     10.0, 15.0,  6.0,  7.0,  7.0,                 364     10.0, 15.0,  6.0,  7.0,  7.0,
368     3.0,  5.0,  5.0,  5.0,  5.0,                  365     3.0,  5.0,  5.0,  5.0,  5.0,
369     9.0,  3.0, 16.0, 14.0,  3.0,                  366     9.0,  3.0, 16.0, 14.0,  3.0,
370     9.0, 16.0, 11.0,  9.0, 10.0,                  367     9.0, 16.0, 11.0,  9.0, 10.0,
371     10.0,  9.0, 15.0                              368     10.0,  9.0, 15.0
372   } ;                                             369   } ;
373                                                   370 
374   // Search for the compaund in the table         371   // Search for the compaund in the table
375   for (std::size_t i=0; i<numberOfMolecula; ++ << 372   for (size_t i=0; i<numberOfMolecula; i++)
376     {                                          << 373     { 
377       if(chFormula == name[i]) {               << 374       if(chFormula == name[i]) { 
378         G4double exp125 = expStopping[i] *     << 375         G4double exp125 = expStopping[i] * 
379                     (material->GetTotNbOfAtoms    376                     (material->GetTotNbOfAtomsPerVolume()) /
380                     (expCharge[i] * numberOfAt    377                     (expCharge[i] * numberOfAtomsPerMolecula[i]) ;
381         SetExpStopPower125(exp125) ;              378         SetExpStopPower125(exp125) ;
382         return true ;                             379         return true ;
383       }                                           380       }
384     }                                             381     }
385                                                << 382   
386   return false ;                                  383   return false ;
387 }                                                 384 }
388                                                   385 
389 //....oooOO0OOooo........oooOO0OOooo........oo    386 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
390                                                   387 
391 G4double G4hParametrisedLossModel::ChemicalFac    388 G4double G4hParametrisedLossModel::ChemicalFactor(
392                             G4double kineticEn    389                             G4double kineticEnergy, G4double eloss125) const
393 {                                                 390 {
394   // Approximation of Chemical Factor accordin    391   // Approximation of Chemical Factor according to
395   // J.F.Ziegler and J.M.Manoyan, The stopping    392   // J.F.Ziegler and J.M.Manoyan, The stopping of ions in compaunds,
396   // Nucl. Inst. & Meth. in Phys. Res. B35 (19    393   // Nucl. Inst. & Meth. in Phys. Res. B35 (1988) 215-228.
397                                                << 394   
398   G4double gamma    = 1.0 + kineticEnergy/prot << 395   G4double gamma    = 1.0 + kineticEnergy/proton_mass_c2 ;    
399   G4double gamma25  = 1.0 + 25.0*keV /proton_m    396   G4double gamma25  = 1.0 + 25.0*keV /proton_mass_c2 ;
400   G4double gamma125 = 1.0 + 125.0*keV/proton_m    397   G4double gamma125 = 1.0 + 125.0*keV/proton_mass_c2 ;
401   G4double beta     = std::sqrt(1.0 - 1.0/(gam    398   G4double beta     = std::sqrt(1.0 - 1.0/(gamma*gamma)) ;
402   G4double beta25   = std::sqrt(1.0 - 1.0/(gam    399   G4double beta25   = std::sqrt(1.0 - 1.0/(gamma25*gamma25)) ;
403   G4double beta125  = std::sqrt(1.0 - 1.0/(gam    400   G4double beta125  = std::sqrt(1.0 - 1.0/(gamma125*gamma125)) ;
404                                                << 401   
405   G4double factor = 1.0 + (expStopPower125/elo    402   G4double factor = 1.0 + (expStopPower125/eloss125 - 1.0) *
406                    (1.0 + G4Exp( 1.48 * ( beta << 403                    (1.0 + std::exp( 1.48 * ( beta125/beta25 - 7.0 ) ) ) /
407                    (1.0 + G4Exp( 1.48 * ( beta << 404                    (1.0 + std::exp( 1.48 * ( beta/beta25    - 7.0 ) ) ) ;
408                                                << 405   
409   return factor ;                                 406   return factor ;
410 }                                                 407 }
411                                                   408 
412 //....oooOO0OOooo........oooOO0OOooo........oo    409 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
413                                                   410