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 7.0.p1)


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