Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/src/G4QAOLowEnergyLoss.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/G4QAOLowEnergyLoss.cc (Version 11.3.0) and /processes/electromagnetic/lowenergy/src/G4QAOLowEnergyLoss.cc (Version 11.1.1)


  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 //      GEANT 4 class implementation file          28 //      GEANT 4 class implementation file
 29 //                                                 29 //
 30 //      History: New Implementation                30 //      History: New Implementation
 31 //                                                 31 //
 32 //      ---------- G4QAOLowEnergyLoss physics      32 //      ---------- G4QAOLowEnergyLoss physics process -------
 33 //                  by Stephane Chauvie, 5 May     33 //                  by Stephane Chauvie, 5 May 2000
 34 // Modified:                                       34 // Modified:
 35 //                                                 35 //
 36 // 24/05/2000 MGP  Modified to remove compilat     36 // 24/05/2000 MGP  Modified to remove compilation warnings on Linux and DEC
 37 //                 Introduced sizes of L0, L1,     37 //                 Introduced sizes of L0, L1, L2 arrays
 38 // 23/05/2000 MGP  Made compliant to design        38 // 23/05/2000 MGP  Made compliant to design
 39 // 02/08/2000 V.Ivanchenko Clean up according      39 // 02/08/2000 V.Ivanchenko Clean up according new design
 40 // 16/09/2000 S. Chauvie  Oscillator for all m     40 // 16/09/2000 S. Chauvie  Oscillator for all materials
 41 // 03/10/2000 V.Ivanchenko CodeWizard clean up     41 // 03/10/2000 V.Ivanchenko CodeWizard clean up
 42 // 05/11/2000 V.Ivanchenko "Aluminum" - correc     42 // 05/11/2000 V.Ivanchenko "Aluminum" - correct name, end of cycle
 43 //            over shells, and two bugs from p     43 //            over shells, and two bugs from previous edition
 44 // 10/05/2001 V.Ivanchenko Clean up againist L     44 // 10/05/2001 V.Ivanchenko Clean up againist Linux compilation with -Wall
 45 // 13/05/2001 S. Chauvie corrected bugs            45 // 13/05/2001 S. Chauvie corrected bugs
 46 // 01/06/2001 V.Ivanchenko replace names by Z,     46 // 01/06/2001 V.Ivanchenko replace names by Z, change the validity range
 47 //                         from 50 keV to 5 Ke     47 //                         from 50 keV to 5 KeV and change sign of the
 48 //                         Barkas term             48 //                         Barkas term
 49 // 4/06/2001 S. Chauvie  Corrected small bugs      49 // 4/06/2001 S. Chauvie  Corrected small bugs
 50 //                                                 50 //
 51 // *******************************************     51 // ************************************************************
 52 // It is the Quantal Harmonic Oscillator Model     52 // It is the Quantal Harmonic Oscillator Model for energy loss
 53 // of slow antiproton                              53 // of slow antiproton
 54 // *******************************************     54 // ************************************************************
 55 // -------------------------------------------     55 // --------------------------------------------------------------
 56                                                    56 
 57 //....oooOO0OOooo........oooOO0OOooo........oo     57 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 58                                                    58 
 59 #include "G4QAOLowEnergyLoss.hh"                   59 #include "G4QAOLowEnergyLoss.hh"
 60 #include "G4PhysicalConstants.hh"                  60 #include "G4PhysicalConstants.hh"
 61 #include "G4SystemOfUnits.hh"                      61 #include "G4SystemOfUnits.hh"
 62 #include "G4DynamicParticle.hh"                    62 #include "G4DynamicParticle.hh"
 63 #include "G4Material.hh"                           63 #include "G4Material.hh"
 64 #include "G4ParticleDefinition.hh"                 64 #include "G4ParticleDefinition.hh"
 65 #include "G4AntiProton.hh"                         65 #include "G4AntiProton.hh"
 66 #include "G4Exp.hh"                                66 #include "G4Exp.hh"
 67                                                    67 
 68 //....oooOO0OOooo........oooOO0OOooo........oo     68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 69                                                    69 
 70 G4QAOLowEnergyLoss::G4QAOLowEnergyLoss(const G     70 G4QAOLowEnergyLoss::G4QAOLowEnergyLoss(const G4String& name)
 71   : G4VLowEnergyModel(name)                        71   : G4VLowEnergyModel(name)
 72 {                                                  72 {
 73   numberOfMaterials = 6;                           73   numberOfMaterials = 6;
 74   sizeL0 = 67;                                     74   sizeL0 = 67;
 75   sizeL1 = 22;                                     75   sizeL1 = 22;
 76   sizeL2 = 14;                                     76   sizeL2 = 14;
 77 }                                                  77 }
 78                                                    78 
 79 //....oooOO0OOooo........oooOO0OOooo........oo     79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 80                                                    80 
 81 G4QAOLowEnergyLoss::~G4QAOLowEnergyLoss()          81 G4QAOLowEnergyLoss::~G4QAOLowEnergyLoss()
 82 {;}                                                82 {;}
 83                                                    83 
 84 //....oooOO0OOooo........oooOO0OOooo........oo     84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 85                                                    85 
 86 G4double G4QAOLowEnergyLoss::HighEnergyLimit(c     86 G4double G4QAOLowEnergyLoss::HighEnergyLimit(const G4ParticleDefinition* ,
 87                const G4Material* ) const           87                const G4Material* ) const
 88 {                                                  88 {
 89   return 2.0*MeV ;                                 89   return 2.0*MeV ;
 90 }                                                  90 }
 91                                                    91 
 92 //....oooOO0OOooo........oooOO0OOooo........oo     92 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 93                                                    93 
 94 G4double G4QAOLowEnergyLoss::LowEnergyLimit(co     94 G4double G4QAOLowEnergyLoss::LowEnergyLimit(const G4ParticleDefinition* ,
 95               const G4Material* ) const            95               const G4Material* ) const
 96 {                                                  96 {
 97   return 5.0*keV ;                                 97   return 5.0*keV ;
 98 }                                                  98 }
 99                                                    99 
100 //....oooOO0OOooo........oooOO0OOooo........oo    100 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
101                                                   101 
102 G4double G4QAOLowEnergyLoss::HighEnergyLimit(c    102 G4double G4QAOLowEnergyLoss::HighEnergyLimit(const G4ParticleDefinition* ) const
103 {                                                 103 {
104   return 2.0*MeV ;                                104   return 2.0*MeV ;
105 }                                                 105 }
106                                                   106 
107 //....oooOO0OOooo........oooOO0OOooo........oo    107 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
108                                                   108 
109 G4double G4QAOLowEnergyLoss::LowEnergyLimit(co    109 G4double G4QAOLowEnergyLoss::LowEnergyLimit(const G4ParticleDefinition* ) const
110 {                                                 110 {
111   return 5.0*keV ;                                111   return 5.0*keV ;
112 }                                                 112 }
113                                                   113 
114 //....oooOO0OOooo........oooOO0OOooo........oo    114 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
115                                                   115 
116 G4bool G4QAOLowEnergyLoss::IsInCharge(const G4    116 G4bool G4QAOLowEnergyLoss::IsInCharge(const G4DynamicParticle* particle,
117               const G4Material* material) cons    117               const G4Material* material) const
118 {                                                 118 {
119   G4bool isInCharge = false;                      119   G4bool isInCharge = false;
120   G4bool hasMaterial = false;                     120   G4bool hasMaterial = false;
121                                                   121 
122   if (material->GetNumberOfElements() == 1) ha    122   if (material->GetNumberOfElements() == 1) hasMaterial = true;
123                                                   123 
124   if ((particle->GetDefinition()) == (G4AntiPr    124   if ((particle->GetDefinition()) == (G4AntiProton::AntiProtonDefinition())
125                && hasMaterial) isInCharge = tr    125                && hasMaterial) isInCharge = true;
126                                                   126 
127   return isInCharge;                              127   return isInCharge;
128 }                                                 128 }
129                                                   129 
130 //....oooOO0OOooo........oooOO0OOooo........oo    130 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
131                                                   131 
132 G4bool G4QAOLowEnergyLoss::IsInCharge(const G4    132 G4bool G4QAOLowEnergyLoss::IsInCharge(const G4ParticleDefinition* aParticle,
133               const G4Material* material) cons    133               const G4Material* material) const
134 {                                                 134 {
135                                                   135 
136   G4bool isInCharge = false;                      136   G4bool isInCharge = false;
137   G4bool hasMaterial = false;                     137   G4bool hasMaterial = false;
138                                                   138 
139   if (material->GetNumberOfElements() == 1) ha    139   if (material->GetNumberOfElements() == 1) hasMaterial = true;
140                                                   140 
141   if (aParticle == (G4AntiProton::AntiProtonDe    141   if (aParticle == (G4AntiProton::AntiProtonDefinition())
142                 && hasMaterial) isInCharge = t    142                 && hasMaterial) isInCharge = true;
143   return isInCharge;                              143   return isInCharge;
144 }                                                 144 }
145                                                   145 
146 //....oooOO0OOooo........oooOO0OOooo........oo    146 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
147                                                   147 
148 G4double G4QAOLowEnergyLoss::TheValue(const G4    148 G4double G4QAOLowEnergyLoss::TheValue(const G4DynamicParticle* particle,
149                                 const G4Materi    149                                 const G4Material* material)
150 {                                                 150 {
151   G4double zParticle = (G4int)(particle->GetCh    151   G4double zParticle = (G4int)(particle->GetCharge())/eplus;
152                                                   152 
153   G4double energy = particle->GetKineticEnergy    153   G4double energy = particle->GetKineticEnergy() ;
154   G4double eloss  = EnergyLoss(material,energy    154   G4double eloss  = EnergyLoss(material,energy,zParticle) ;
155                                                   155 
156   return eloss ;                                  156   return eloss ;
157 }                                                 157 }
158                                                   158 
159 //....oooOO0OOooo........oooOO0OOooo........oo    159 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
160                                                   160 
161 G4double G4QAOLowEnergyLoss::TheValue(const G4    161 G4double G4QAOLowEnergyLoss::TheValue(const G4ParticleDefinition* aParticle,
162                                 const G4Materi    162                                 const G4Material* material,
163               G4double kineticEnergy)             163               G4double kineticEnergy)
164 {                                                 164 {
165   G4double zParticle = (aParticle->GetPDGCharg    165   G4double zParticle = (aParticle->GetPDGCharge())/eplus;
166                                                   166 
167   G4double eloss  = EnergyLoss(material,kineti    167   G4double eloss  = EnergyLoss(material,kineticEnergy,zParticle) ;
168                                                   168 
169   return eloss ;                                  169   return eloss ;
170 }                                                 170 }
171                                                   171 
172 //....oooOO0OOooo........oooOO0OOooo........oo    172 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
173                                                   173 
174 G4double G4QAOLowEnergyLoss::EnergyLoss(const     174 G4double G4QAOLowEnergyLoss::EnergyLoss(const G4Material* material,
175           G4double kineticEnergy,                 175           G4double kineticEnergy,
176           G4double zParticle) const               176           G4double zParticle) const
177 {                                                 177 {
178   G4int nbOfShell = GetNumberOfShell(material)    178   G4int nbOfShell = GetNumberOfShell(material);
179   if(nbOfShell < 1) nbOfShell = 1;                179   if(nbOfShell < 1) nbOfShell = 1; 
180   G4double dedx=0;                                180   G4double dedx=0;
181                                                   181 
182   G4double v = c_light * std::sqrt( 2.0 * kine    182   G4double v = c_light * std::sqrt( 2.0 * kineticEnergy / proton_mass_c2 );
183   G4double coeff = twopi * proton_mass_c2 *       183   G4double coeff = twopi * proton_mass_c2 *
184                   (material-> GetTotNbOfElectP    184                   (material-> GetTotNbOfElectPerVolume()) /
185                    electron_mass_c2 ;             185                    electron_mass_c2 ;
186   G4double fBetheVelocity = fine_structure_con    186   G4double fBetheVelocity = fine_structure_const * c_light / v;
187   coeff *= fine_structure_const * fine_structu    187   coeff *= fine_structure_const * fine_structure_const * hbarc_squared /
188            kineticEnergy ;                        188            kineticEnergy ;
189                                                   189 
190   G4double l0Term = 0, l1Term = 0, l2Term = 0;    190   G4double l0Term = 0, l1Term = 0, l2Term = 0;
191                                                   191 
192   for (G4int nos = 0 ; nos < nbOfShell ; nos++    192   for (G4int nos = 0 ; nos < nbOfShell ; nos++){
193                                                   193 
194     G4double l0 = 0, l1 = 0, l2 = 0;              194     G4double l0 = 0, l1 = 0, l2 = 0;
195     G4double NormalizedEnergy = ( 2.0 * electr    195     G4double NormalizedEnergy = ( 2.0 * electron_mass_c2 * v * v  ) /
196                           ( c_squared * GetShe    196                           ( c_squared * GetShellEnergy(material,nos) );
197                                                   197 
198     G4double shStrength = GetShellStrength(mat    198     G4double shStrength = GetShellStrength(material,nos);
199                                                   199 
200     l0 = GetL0(NormalizedEnergy);                 200     l0 = GetL0(NormalizedEnergy);
201     l0Term += shStrength  * l0;                   201     l0Term += shStrength  * l0;
202                                                   202 
203     l1 = GetL1(NormalizedEnergy);                 203     l1 = GetL1(NormalizedEnergy);
204     l1Term += shStrength * l1;                    204     l1Term += shStrength * l1;
205                                                   205 
206     l2 = GetL2(NormalizedEnergy);                 206     l2 = GetL2(NormalizedEnergy);
207     l2Term += shStrength * l2;                    207     l2Term += shStrength * l2;
208   }                                               208   }
209                                                   209 
210   dedx = coeff * zParticle * zParticle * (l0Te    210   dedx = coeff * zParticle * zParticle * (l0Term
211        + zParticle * fBetheVelocity * l1Term      211        + zParticle * fBetheVelocity * l1Term
212        + zParticle * zParticle * fBetheVelocit    212        + zParticle * zParticle * fBetheVelocity * fBetheVelocity * l2Term);
213                                                   213 
214   return dedx ;                                   214   return dedx ;
215                                                   215 
216 }                                                 216 }
217                                                   217 
218 //....oooOO0OOooo........oooOO0OOooo........oo    218 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
219                                                   219 
220 G4int G4QAOLowEnergyLoss::GetNumberOfShell(con    220 G4int G4QAOLowEnergyLoss::GetNumberOfShell(const G4Material* material) const
221 {                                                 221 {
222   // Set return value from table                  222   // Set return value from table
223   G4int Z = (G4int)(material->GetZ());            223   G4int Z = (G4int)(material->GetZ());
224   G4int nShell = 0;                               224   G4int nShell = 0;
225                                                   225 
226   // Set return value if in material available    226   // Set return value if in material available from Aahrus
227   for(G4int i=0; i<numberOfMaterials; i++) {      227   for(G4int i=0; i<numberOfMaterials; i++) {
228                                                   228 
229     if(materialAvailable[i] == Z){                229     if(materialAvailable[i] == Z){
230       nShell = nbofShellForMaterial[i];           230       nShell = nbofShellForMaterial[i];
231   break;                                          231   break;
232     }                                             232     }
233     else                                          233     else 
234       nShell = fNumberOfShells[Z];                234       nShell = fNumberOfShells[Z];
235   }                                               235   }
236    return nShell;                                 236    return nShell;
237 }                                                 237 }
238                                                   238 
239 //....oooOO0OOooo........oooOO0OOooo........oo    239 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
240                                                   240 
241 G4double G4QAOLowEnergyLoss::GetShellEnergy(co    241 G4double G4QAOLowEnergyLoss::GetShellEnergy(const G4Material* material,
242                                             G4    242                                             G4int nbOfTheShell) const
243 {                                                 243 {
244     //                                            244     //
245     G4double shellEnergy = alShellEnergy[0];      245     G4double shellEnergy = alShellEnergy[0];
246                                                   246 
247     if(material->GetZ() == 13) shellEnergy =      247     if(material->GetZ() == 13) shellEnergy =  alShellEnergy[nbOfTheShell];
248     else if(material->GetZ() == 14)shellEnergy    248     else if(material->GetZ() == 14)shellEnergy = siShellEnergy[nbOfTheShell];
249     else if(material->GetZ() == 29)shellEnergy    249     else if(material->GetZ() == 29)shellEnergy = cuShellEnergy[nbOfTheShell];
250     else if(material->GetZ() == 73)shellEnergy    250     else if(material->GetZ() == 73)shellEnergy =  taShellEnergy[nbOfTheShell];
251     else if(material->GetZ() == 79)shellEnergy    251     else if(material->GetZ() == 79)shellEnergy =  auShellEnergy[nbOfTheShell];
252     else if(material->GetZ() == 78)shellEnergy    252     else if(material->GetZ() == 78)shellEnergy =  ptShellEnergy[nbOfTheShell];
253     else if  (material->GetNumberOfElements()     253     else if  (material->GetNumberOfElements() == 1)
254       shellEnergy = GetOscillatorEnergy(materi    254       shellEnergy = GetOscillatorEnergy(material, nbOfTheShell);
255     else                                          255     else 
256       {                                           256       { 
257     G4ExceptionDescription ed;                    257     G4ExceptionDescription ed;    
258     ed << "The model is not available for "       258     ed << "The model is not available for "
259        << material->GetName()                     259        << material->GetName()
260        << G4endl;                                 260        << G4endl;
261     G4Exception("G4QAOLowEnergyLoss::GetShellE    261     G4Exception("G4QAOLowEnergyLoss::GetShellEnergy()",
262           "em2638",JustWarning,ed);               262           "em2638",JustWarning,ed);
263       }                                           263       }
264                                                   264 
265   return  shellEnergy;                            265   return  shellEnergy;
266 }                                                 266 }
267                                                   267 
268 //....oooOO0OOooo........oooOO0OOooo........oo    268 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
269                                                   269 
270 G4double G4QAOLowEnergyLoss::GetOscillatorEner    270 G4double G4QAOLowEnergyLoss::GetOscillatorEnergy(const G4Material* material,
271                                                   271                                                  G4int nbOfTheShell) const
272 {                                                 272 {
273                                                   273 
274   const G4Element* element = material->GetElem    274   const G4Element* element = material->GetElement(0);
275                                                   275 
276   G4int Z = (G4int)(element->GetZ());             276   G4int Z = (G4int)(element->GetZ());
277                                                   277 
278   G4double squaredPlasmonEnergy = 28.816 * 28.    278   G4double squaredPlasmonEnergy = 28.816 * 28.816  * 1e-6
279         * material->GetDensity()/g/cm3            279         * material->GetDensity()/g/cm3
280         * (Z/element->GetN()) ;                   280         * (Z/element->GetN()) ;
281                                                   281 
282   G4double plasmonTerm = 0.66667 * GetOccupati    282   G4double plasmonTerm = 0.66667 * GetOccupationNumber(Z,nbOfTheShell)
283                        * squaredPlasmonEnergy     283                        * squaredPlasmonEnergy / (Z*Z) ;
284                                                   284 
285   G4double ionTerm = G4Exp(0.5) * (element->Ge    285   G4double ionTerm = G4Exp(0.5) * (element->GetAtomicShell(nbOfTheShell)) ;
286   ionTerm = ionTerm*ionTerm ;                     286   ionTerm = ionTerm*ionTerm ;
287                                                   287 
288   G4double oscShellEnergy = std::sqrt( ionTerm    288   G4double oscShellEnergy = std::sqrt( ionTerm + plasmonTerm );
289   return  oscShellEnergy;                         289   return  oscShellEnergy;
290 }                                                 290 }
291                                                   291 
292 //....oooOO0OOooo........oooOO0OOooo........oo    292 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
293                                                   293 
294 G4double G4QAOLowEnergyLoss::GetShellStrength(    294 G4double G4QAOLowEnergyLoss::GetShellStrength(const G4Material* material,
295                                                   295                                               G4int nbOfTheShell) const
296 {                                                 296 {
297   G4double shellStrength = alShellStrength[0];    297   G4double shellStrength = alShellStrength[0];
298                                                   298 
299   if(material->GetZ() == 13) shellStrength = a    299   if(material->GetZ() == 13) shellStrength = alShellStrength[nbOfTheShell];
300   else if(material->GetZ() == 14)shellStrength    300   else if(material->GetZ() == 14)shellStrength =siShellStrength[nbOfTheShell];
301   else if(material->GetZ() == 29)shellStrength    301   else if(material->GetZ() == 29)shellStrength =cuShellStrength[nbOfTheShell];
302   else if(material->GetZ() == 73)shellStrength    302   else if(material->GetZ() == 73)shellStrength =taShellStrength[nbOfTheShell];
303   else if(material->GetZ() == 79)shellStrength    303   else if(material->GetZ() == 79)shellStrength =auShellStrength[nbOfTheShell];
304   else if(material->GetZ() == 78)shellStrength    304   else if(material->GetZ() == 78)shellStrength =ptShellStrength[nbOfTheShell];
305   else if  (material->GetNumberOfElements() ==    305   else if  (material->GetNumberOfElements() == 1){
306     G4int Z = (G4int)(material->GetZ());          306     G4int Z = (G4int)(material->GetZ());
307     shellStrength = GetOccupationNumber(Z,nbOf    307     shellStrength = GetOccupationNumber(Z,nbOfTheShell) / Z ;}
308   else                                            308   else
309     {                                             309     {
310        G4ExceptionDescription ed;                 310        G4ExceptionDescription ed;       
311        ed << "The model is not available for "    311        ed << "The model is not available for "
312     << material->GetName()                        312     << material->GetName()
313     << G4endl;                                    313     << G4endl;
314        G4Exception("G4QAOLowEnergyLoss::GetShe    314        G4Exception("G4QAOLowEnergyLoss::GetShellStrength()",
315        "em2639",JustWarning,ed);                  315        "em2639",JustWarning,ed);
316     }                                             316     }
317   return shellStrength;                           317   return shellStrength;
318 }                                                 318 }
319                                                   319 
320 //....oooOO0OOooo........oooOO0OOooo........oo    320 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
321                                                   321 
322 G4double G4QAOLowEnergyLoss::GetOccupationNumb    322 G4double G4QAOLowEnergyLoss::GetOccupationNumber(G4int Z, G4int ShellNb) const
323 {                                                 323 {
324                                                   324 
325   G4int indice = ShellNb ;                        325   G4int indice = ShellNb ;
326   for (G4int z = 1 ; z < Z ; z++) {indice += f    326   for (G4int z = 1 ; z < Z ; z++) {indice += fNumberOfShells[z];}
327                                                   327 
328   return nbOfElectronPerSubShell[indice+1];       328   return nbOfElectronPerSubShell[indice+1];
329 }                                                 329 }
330                                                   330 
331 //....oooOO0OOooo........oooOO0OOooo........oo    331 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
332                                                   332 
333 G4double G4QAOLowEnergyLoss::GetL0(G4double no    333 G4double G4QAOLowEnergyLoss::GetL0(G4double normEnergy) const
334 {                                                 334 {
335   G4int n;                                        335   G4int n;
336                                                   336 
337   for(n = 0; n < sizeL0; n++) {                   337   for(n = 0; n < sizeL0; n++) {
338     if( normEnergy < L0[n][0] ) break;            338     if( normEnergy < L0[n][0] ) break;
339   }                                               339   }
340   if(0 == n) n = 1 ;                              340   if(0 == n) n = 1 ;
341   if(n >= sizeL0) n = sizeL0 - 1 ;                341   if(n >= sizeL0) n = sizeL0 - 1 ;
342                                                   342 
343   G4double l0    = L0[n][1];                      343   G4double l0    = L0[n][1];
344   G4double l0p   = L0[n-1][1];                    344   G4double l0p   = L0[n-1][1];
345   G4double bethe = l0p + (l0 - l0p) * ( normEn    345   G4double bethe = l0p + (l0 - l0p) * ( normEnergy - L0[n-1][0]) /
346                   (L0[n][0] - L0[n-1][0]);        346                   (L0[n][0] - L0[n-1][0]);
347   return bethe ;                                  347   return bethe ;
348 }                                                 348 }
349                                                   349 
350 //....oooOO0OOooo........oooOO0OOooo........oo    350 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
351                                                   351 
352 G4double G4QAOLowEnergyLoss::GetL1(G4double no    352 G4double G4QAOLowEnergyLoss::GetL1(G4double normEnergy) const
353 {                                                 353 {
354   G4int n;                                        354   G4int n;
355                                                   355 
356   for(n = 0; n < sizeL1; n++) {                   356   for(n = 0; n < sizeL1; n++) {
357     if( normEnergy < L1[n][0] ) break;            357     if( normEnergy < L1[n][0] ) break;
358   }                                               358   }
359   if(0 == n) n = 1 ;                              359   if(0 == n) n = 1 ;
360   if(n >= sizeL1) n = sizeL1 - 1 ;                360   if(n >= sizeL1) n = sizeL1 - 1 ;
361                                                   361 
362   G4double l1    = L1[n][1];                      362   G4double l1    = L1[n][1];
363   G4double l1p   = L1[n-1][1];                    363   G4double l1p   = L1[n-1][1];
364   G4double barkas= l1p + (l1 - l1p) * ( normEn    364   G4double barkas= l1p + (l1 - l1p) * ( normEnergy - L1[n-1][0]) /
365                   (L1[n][0] - L1[n-1][0]);        365                   (L1[n][0] - L1[n-1][0]);
366   return barkas;                                  366   return barkas;
367 }                                                 367 }
368                                                   368 
369 //....oooOO0OOooo........oooOO0OOooo........oo    369 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
370                                                   370 
371 G4double G4QAOLowEnergyLoss::GetL2(G4double no    371 G4double G4QAOLowEnergyLoss::GetL2(G4double normEnergy) const
372 {                                                 372 {
373   G4int n;                                        373   G4int n;
374   for(n = 0; n < sizeL2; n++) {                   374   for(n = 0; n < sizeL2; n++) {
375     if( normEnergy < L2[n][0] ) break;            375     if( normEnergy < L2[n][0] ) break;
376   }                                               376   }
377   if(0 == n) n = 1 ;                              377   if(0 == n) n = 1 ;
378   if(n >= sizeL2) n = sizeL2 - 1 ;                378   if(n >= sizeL2) n = sizeL2 - 1 ;
379                                                   379 
380   G4double l2    = L2[n][1];                      380   G4double l2    = L2[n][1];
381   G4double l2p   = L2[n-1][1];                    381   G4double l2p   = L2[n-1][1];
382   G4double bloch = l2p + (l2 - l2p) * ( normEn    382   G4double bloch = l2p + (l2 - l2p) * ( normEnergy - L2[n-1][0]) /
383                   (L2[n][0] - L2[n-1][0]);        383                   (L2[n][0] - L2[n-1][0]);
384   return bloch;                                   384   return bloch;
385 }                                                 385 }
386                                                   386 
387 //....oooOO0OOooo........oooOO0OOooo........oo    387 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
388                                                   388 
389 const G4int G4QAOLowEnergyLoss::materialAvaila    389 const G4int G4QAOLowEnergyLoss::materialAvailable[6] = {13,14,29,73,79,78};
390 const G4int G4QAOLowEnergyLoss::nbofShellForMa    390 const G4int G4QAOLowEnergyLoss::nbofShellForMaterial[6] = {3,3,4,6,6,6 };
391                                                   391 
392 const G4double G4QAOLowEnergyLoss::alShellEner    392 const G4double G4QAOLowEnergyLoss::alShellEnergy[3]  ={ 2795e-6, 202e-6,  16.9e-6};
393 const G4double G4QAOLowEnergyLoss::alShellStre    393 const G4double G4QAOLowEnergyLoss::alShellStrength[3]={ 0.1349, 0.6387, 0.2264};
394 const G4double G4QAOLowEnergyLoss::siShellEner    394 const G4double G4QAOLowEnergyLoss::siShellEnergy[3]  ={ 3179e-6, 249e-6, 20.3e-6 };
395 const G4double G4QAOLowEnergyLoss::siShellStre    395 const G4double G4QAOLowEnergyLoss::siShellStrength[3]={ 0.1222, 0.5972, 0.2806};
396 const G4double G4QAOLowEnergyLoss::cuShellEner    396 const G4double G4QAOLowEnergyLoss::cuShellEnergy[4]  ={ 16931e-6, 1930e-6, 199e-6, 39.6e-6};
397 const G4double G4QAOLowEnergyLoss::cuShellStre    397 const G4double G4QAOLowEnergyLoss::cuShellStrength[4]={ 0.0505, 0.2561, 0.4913, 0.2021};
398 const G4double G4QAOLowEnergyLoss::taShellEner    398 const G4double G4QAOLowEnergyLoss::taShellEnergy[6]  ={ 88926e-6, 18012e-6, 3210e-6, 575e-6, 108.7e-6, 30.8e-6};
399 const G4double G4QAOLowEnergyLoss::taShellStre    399 const G4double G4QAOLowEnergyLoss::taShellStrength[6]={ 0.0126, 0.0896, 0.2599, 0.3413, 0.2057, 0.0908};
400 const G4double G4QAOLowEnergyLoss::auShellEner    400 const G4double G4QAOLowEnergyLoss::auShellEnergy[6]={ 96235e-6, 25918e-6, 4116e-6, 599e-6, 87.3e-6, 36.9e-6};
401 const G4double G4QAOLowEnergyLoss::auShellStre    401 const G4double G4QAOLowEnergyLoss::auShellStrength[6]={ 0.0139, 0.0803, 0.2473, 0.423, 0.1124, 0.1231};
402 const G4double G4QAOLowEnergyLoss::ptShellEner    402 const G4double G4QAOLowEnergyLoss::ptShellEnergy[6]={ 95017e-6, 25590e-6, 4063e-6, 576e-6, 81.9e-6, 31.4e-6};
403 const G4double G4QAOLowEnergyLoss::ptShellStre    403 const G4double G4QAOLowEnergyLoss::ptShellStrength[6]={ 0.0129, 0.0745, 0.2295, 0.4627, 0.1324, 0.0879};
404                                                   404 
405                                                   405 
406 const G4double G4QAOLowEnergyLoss::L0[67][2] =    406 const G4double G4QAOLowEnergyLoss::L0[67][2] =
407 {                                                 407 {
408   {0.00,        0.000001},                        408   {0.00,        0.000001},
409   {0.10,  0.000001},                              409   {0.10,  0.000001},
410   {0.12,  0.00001},                               410   {0.12,  0.00001},
411   {0.14,  0.00005},                               411   {0.14,  0.00005},
412   {0.16,  0.00014},                               412   {0.16,  0.00014},
413   {0.18,  0.00030},                               413   {0.18,  0.00030},
414   {0.20,  0.00057},                               414   {0.20,  0.00057},
415   {0.25,  0.00189},                               415   {0.25,  0.00189},
416   {0.30,  0.00429},                               416   {0.30,  0.00429},
417   {0.35,  0.00784},                               417   {0.35,  0.00784},
418   {0.40,  0.01248},                               418   {0.40,  0.01248},
419   {0.45,  0.01811},                               419   {0.45,  0.01811},
420   {0.50,  0.02462},                               420   {0.50,  0.02462},
421   {0.60,  0.03980},                               421   {0.60,  0.03980},
422   {0.70,  0.05731},                               422   {0.70,  0.05731},
423   {0.80,  0.07662},                               423   {0.80,  0.07662},
424   {0.90,  0.09733},                               424   {0.90,  0.09733},
425   {1.00,  0.11916},                               425   {1.00,  0.11916},
426   {1.20,  0.16532},                               426   {1.20,  0.16532},
427   {1.40,  0.21376},                               427   {1.40,  0.21376},
428   {1.60,  0.26362},                               428   {1.60,  0.26362},
429   {1.80,  0.31428},                               429   {1.80,  0.31428},
430   {2.00,  0.36532},                               430   {2.00,  0.36532},
431   {2.50,  0.49272},                               431   {2.50,  0.49272},
432   {3.00,  0.61765},                               432   {3.00,  0.61765},
433   {3.50,  0.73863},                               433   {3.50,  0.73863},
434   {4.00,  0.85496},                               434   {4.00,  0.85496},
435   {4.50,  0.96634},                               435   {4.50,  0.96634},
436   {5.00,  1.07272},                               436   {5.00,  1.07272},
437   {6.00,  1.27086},                               437   {6.00,  1.27086},
438   {7.00,  1.45075},                               438   {7.00,  1.45075},
439   {8.00,  1.61412},                               439   {8.00,  1.61412},
440   {9.00,  1.76277},                               440   {9.00,  1.76277},
441   {10.00,       1.89836},                         441   {10.00,       1.89836},
442   {12.00,       2.13625},                         442   {12.00,       2.13625},
443   {14.00,       2.33787},                         443   {14.00,       2.33787},
444   {16.00,       2.51093},                         444   {16.00,       2.51093},
445   {18.00,       2.66134},                         445   {18.00,       2.66134},
446   {20.00,       2.79358},                         446   {20.00,       2.79358},
447   {25.00, 3.06539},                               447   {25.00, 3.06539},
448   {30.00, 3.27902},                               448   {30.00, 3.27902},
449   {35.00, 3.45430},                               449   {35.00, 3.45430},
450   {40.00, 3.60281},                               450   {40.00, 3.60281},
451   {45.00, 3.73167},                               451   {45.00, 3.73167},
452   {50.00, 3.84555},                               452   {50.00, 3.84555},
453   {60.00, 4.04011},                               453   {60.00, 4.04011},
454   {70.00, 4.20264},                               454   {70.00, 4.20264},
455   {80.00, 4.34229},                               455   {80.00, 4.34229},
456   {90.00,  4.46474},                              456   {90.00,  4.46474},
457   {100.00, 4.57378},                              457   {100.00, 4.57378},
458   {120.00, 4.76155},                              458   {120.00, 4.76155},
459   {140.00, 4.91953},                              459   {140.00, 4.91953},
460   {160.00, 5.05590},                              460   {160.00, 5.05590},
461   {180.00, 5.17588},                              461   {180.00, 5.17588},
462   {200.00, 5.28299},                              462   {200.00, 5.28299},
463   {250.00, 5.50925},                              463   {250.00, 5.50925},
464   {300.00, 5.69364},                              464   {300.00, 5.69364},
465   {350.00, 5.84926},                              465   {350.00, 5.84926},
466   {400.00, 5.98388},                              466   {400.00, 5.98388},
467   {450.00, 6.10252},                              467   {450.00, 6.10252},
468   {500.00, 6.20856},                              468   {500.00, 6.20856},
469   {600.00, 6.39189},                              469   {600.00, 6.39189},
470   {700.00, 6.54677},                              470   {700.00, 6.54677},
471   {800.00, 6.68084},                              471   {800.00, 6.68084},
472   {900.00, 6.79905},                              472   {900.00, 6.79905},
473   {1000.00, 6.90474}                              473   {1000.00, 6.90474}
474 };                                                474 };
475                                                   475 
476 const G4double G4QAOLowEnergyLoss::L1[22][2] =    476 const G4double G4QAOLowEnergyLoss::L1[22][2] =
477 {                                                 477 {
478   {0.00,       -0.000001},                        478   {0.00,       -0.000001},
479   {0.10,       -0.00001},                         479   {0.10,       -0.00001},
480   {0.20,       -0.00049},                         480   {0.20,       -0.00049},
481   {0.30,       -0.00084},                         481   {0.30,       -0.00084},
482   {0.40,  0.00085},                               482   {0.40,  0.00085},
483   {0.50,  0.00519},                               483   {0.50,  0.00519},
484   {0.60,  0.01198},                               484   {0.60,  0.01198},
485   {0.70,  0.02074},                               485   {0.70,  0.02074},
486   {0.80,  0.03133},                               486   {0.80,  0.03133},
487   {0.90,  0.04369},                               487   {0.90,  0.04369},
488   {1.00,  0.06035},                               488   {1.00,  0.06035},
489   {2.00,  0.24023},                               489   {2.00,  0.24023},
490   {3.00,  0.44284},                               490   {3.00,  0.44284},
491   {4.00,  0.62012},                               491   {4.00,  0.62012},
492   {5.00,  0.77031},                               492   {5.00,  0.77031},
493   {6.00,  0.90390},                               493   {6.00,  0.90390},
494   {7.00,  1.02705},                               494   {7.00,  1.02705},
495   {8.00,  1.10867},                               495   {8.00,  1.10867},
496   {9.00,  1.17546},                               496   {9.00,  1.17546},
497   {10.00,       1.21599},                         497   {10.00,       1.21599},
498   {15.00, 1.24349},                               498   {15.00, 1.24349},
499   {20.00, 1.16752}                                499   {20.00, 1.16752}
500 };                                                500 };
501                                                   501 
502 const G4double G4QAOLowEnergyLoss::L2[14][2] =    502 const G4double G4QAOLowEnergyLoss::L2[14][2] =
503 {                                                 503 {
504   {0.00,  0.000001},                              504   {0.00,  0.000001},
505   {0.10,  0.00001},                               505   {0.10,  0.00001},
506   {0.20,  0.00000},                               506   {0.20,  0.00000},
507   {0.40,       -0.00120},                         507   {0.40,       -0.00120},
508   {0.60,       -0.00036},                         508   {0.60,       -0.00036},
509   {0.80,  0.00372},                               509   {0.80,  0.00372},
510   {1.00,  0.01298},                               510   {1.00,  0.01298},
511   {2.00,  0.08296},                               511   {2.00,  0.08296},
512   {4.00,  0.21953},                               512   {4.00,  0.21953},
513   {6.00,  0.23903},                               513   {6.00,  0.23903},
514   {8.00,  0.20893},                               514   {8.00,  0.20893},
515   {10.00, 0.10879},                               515   {10.00, 0.10879},
516   {20.00,      -0.88409},                         516   {20.00,      -0.88409},
517   {40.00,      -1.13902}                          517   {40.00,      -1.13902}
518 };                                                518 };
519                                                   519 
520 const G4int G4QAOLowEnergyLoss::nbOfElectronPe    520 const G4int G4QAOLowEnergyLoss::nbOfElectronPerSubShell[1540] =
521 {                                                 521 {
522   0, // consistency with G4AtomicShells           522   0, // consistency with G4AtomicShells
523   1,//------ H                                    523   1,//------ H
524   2,//------ He                                   524   2,//------ He
525   2,  1,//------ Li                               525   2,  1,//------ Li
526   2,  2,//------ Be                               526   2,  2,//------ Be
527   2,  2,  1,//------ B                            527   2,  2,  1,//------ B
528   2,  2,  2,//------ C                            528   2,  2,  2,//------ C
529   2,  2,  2,  1,//------ N                        529   2,  2,  2,  1,//------ N
530   2,  2,  2,  2,//------ O                        530   2,  2,  2,  2,//------ O
531   2,  2,  5,//------ F                            531   2,  2,  5,//------ F
532   2,  2,  2,  4,//------ Ne                       532   2,  2,  2,  4,//------ Ne
533   2,  2,  2,  4,  1,//------ Na                   533   2,  2,  2,  4,  1,//------ Na
534   2,  2,  2,  4,  2,//------ Mg                   534   2,  2,  2,  4,  2,//------ Mg
535   2,  2,  2,  4,  2,  1,//------ Al               535   2,  2,  2,  4,  2,  1,//------ Al
536   2,  2,  2,  4,  2,  2,//------ Si               536   2,  2,  2,  4,  2,  2,//------ Si
537   2,  2,  2,  4,  2,  3,//------ P                537   2,  2,  2,  4,  2,  3,//------ P
538   2,  2,  2,  4,  2,  4,//------                  538   2,  2,  2,  4,  2,  4,//------
539   2,  2,  2,  4,  2,  5,//------                  539   2,  2,  2,  4,  2,  5,//------
540   2,  2,  2,  4,  2,  2,  4,//------              540   2,  2,  2,  4,  2,  2,  4,//------
541   2,  2,  2,  4,  2,  2,  4,  1,//------          541   2,  2,  2,  4,  2,  2,  4,  1,//------
542   2,  2,  2,  4,  2,  2,  4,  2,//------          542   2,  2,  2,  4,  2,  2,  4,  2,//------
543   2,  2,  2,  4,  2,  2,  4,  1,  2,//------      543   2,  2,  2,  4,  2,  2,  4,  1,  2,//------
544   2,  2,  2,  4,  2,  2,  4,  2,  2,//------      544   2,  2,  2,  4,  2,  2,  4,  2,  2,//------
545   2,  2,  2,  4,  2,  2,  4,  3,  2,//------      545   2,  2,  2,  4,  2,  2,  4,  3,  2,//------
546   2,  2,  2,  4,  2,  2,  4,  4,  2,//------      546   2,  2,  2,  4,  2,  2,  4,  4,  2,//------
547   2,  2,  2,  4,  2,  2,  4,  5,  2,//------      547   2,  2,  2,  4,  2,  2,  4,  5,  2,//------
548   2,  2,  2,  4,  2,  2,  4,  6,  2,//------      548   2,  2,  2,  4,  2,  2,  4,  6,  2,//------
549   2,  2,  2,  4,  2,  2,  4,  7,  2,//------      549   2,  2,  2,  4,  2,  2,  4,  7,  2,//------
550   2,  2,  2,  4,  2,  2,  4,  4,  4,  2,//----    550   2,  2,  2,  4,  2,  2,  4,  4,  4,  2,//------
551   2,  2,  2,  4,  2,  2,  4,  4,  5,  2,//----    551   2,  2,  2,  4,  2,  2,  4,  4,  5,  2,//------
552   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,//----    552   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,//------
553   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  1,//    553   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  1,//------
554   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,//    554   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,//------
555   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  3,//    555   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  3,//------
556   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  4,//    556   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  4,//------
557   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  5,//    557   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  5,//------
558   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      558   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,//------
559   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      559   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  1,//------
560   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      560   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  2,//------
561   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      561   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  1,  2,//------
562   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      562   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  2,  2,//------
563   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      563   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  3,  2,//------
564   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      564   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  2,//------
565   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      565   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  5,  2,//------
566   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      566   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  6,  2,//------
567   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      567   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  7,  2,//------
568   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      568   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  4,  2,//------
569   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      569   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  5,  2,//------
570   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      570   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,//------
571   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      571   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  1,//------
572   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      572   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  2,//------
573   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      573   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  3,//------
574   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      574   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  4,//------
575   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      575   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  5,//------
576   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      576   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  2,  4,//------
577   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      577   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  2,  4,  1,//------
578   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      578   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  2,  4,  2,//------
579   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      579   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  2,  4,  1,  2,//------
580   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      580   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  2,  2,  2,  4,  2,//------
581   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      581   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  3,  2,  2,  4,  2,//------
582   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      582   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  4,  2,  2,  4,  2,//------
583   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      583   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  5,  2,  2,  4,  2,//------
584   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      584   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  2,  2,  4,  2,//------
585   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      585   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  7,  2,  2,  4,  2,//------
586   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      586   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  7,  2,  2,  4,  1,  2,//------
587   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      587   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  9,  2,  2,  4,  2,//------
588   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      588   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6, 10,  2,  2,  4,  2,//------
589   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      589   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6, 11,  2,  2,  4,  2,//------
590   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      590   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6, 12,  2,  2,  4,  2,//------
591   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      591   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6, 13,  2,  2,  4,  2,//------
592   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      592   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  2,//------
593   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      593   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  1,  2,//------
594   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      594   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  2,  2,//------
595   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      595   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  3,  2,//------
596   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      596   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  2,//------
597   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      597   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  5,  2,//------
598   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      598   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  6,  2,//------
599   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      599   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  7,  2,//------
600   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      600   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  9,  1,//------
601   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      601   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  1,//------
602   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      602   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,//------
603   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      603   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  1,//------
604   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      604   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,//------
605   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      605   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  3,//------
606   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      606   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  4,//------
607   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      607   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,  3,//------
608   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      608   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,  4,//------
609   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      609   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,  4,  1,//------
610   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      610   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,  4,  2,//------
611   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      611   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,  4,  1,  2,//------
612   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      612   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,  4,  2,  2,//------
613   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      613   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  2,  2,  2,  4,  1,  2,//------
614   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      614   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  3,  2,  2,  4,  1,  2,//------
615   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      615   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  4,  2,  2,  4,  1,  2,//------
616   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      616   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  6,  2,  2,  4,  2,//------
617   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      617   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  7,  2,  2,  4,  2,//------
618   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      618   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  7,  2,  2,  4,  1,  2,//------
619   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      619   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6,  8,  2,  2,  4,  1,  2,//------
620   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      620   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6, 10,  2,  2,  4,  2,//------
621   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      621   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6, 11,  2,  2,  4,  2,//------
622   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,      622   2,  2,  2,  4,  2,  2,  4,  4,  6,  2,  2,  4,  4,  6,  6,  8,  2,  2,  4,  4,  6, 12,  2,  2,  4,  2 //-----
623 };                                                623 };
624                                                   624 
625 const G4int G4QAOLowEnergyLoss::fNumberOfShell    625 const G4int G4QAOLowEnergyLoss::fNumberOfShells[101] =
626 {                                                 626 {
627  0 ,  // nonexisting zero element                 627  0 ,  // nonexisting zero element
628                                                   628 
629  1 ,  1 ,  2 ,  2 ,  3 ,    3 ,  4 ,  4 ,  3 ,    629  1 ,  1 ,  2 ,  2 ,  3 ,    3 ,  4 ,  4 ,  3 ,  4 ,  //  1 - 10
630                                                   630 
631  5 ,  5 ,  6 ,  6 ,  6 ,    6 ,  6 ,  7 ,  8 ,    631  5 ,  5 ,  6 ,  6 ,  6 ,    6 ,  6 ,  7 ,  8 ,  8 ,  // 11 - 20
632                                                   632 
633  9 ,  9 ,  9 ,  9 ,  9 ,    9 ,  9 , 10 , 10 ,    633  9 ,  9 ,  9 ,  9 ,  9 ,    9 ,  9 , 10 , 10 , 10 ,  // 21 - 30
634                                                   634 
635 11 , 11 , 11 , 11 , 11 ,   12 , 13 , 13 , 14 ,    635 11 , 11 , 11 , 11 , 11 ,   12 , 13 , 13 , 14 , 14 ,  // 31 - 40
636                                                   636 
637 14 , 14 , 14 , 14 , 14 ,   15 , 15 , 15 , 16 ,    637 14 , 14 , 14 , 14 , 14 ,   15 , 15 , 15 , 16 , 16 ,  // 41 - 50
638                                                   638 
639 // -------------------------------------------    639 // ----------------------------------------------------------
640                                                   640 
641 16 , 16 , 16 , 17 , 18 ,   18 , 19 , 19 , 19 ,    641 16 , 16 , 16 , 17 , 18 ,   18 , 19 , 19 , 19 , 19 ,  // 51 - 60
642                                                   642 
643 19 , 19 , 19 , 20 , 19 ,   19 , 19 , 19 , 19 ,    643 19 , 19 , 19 , 20 , 19 ,   19 , 19 , 19 , 19 , 20 ,  // 61 - 70
644                                                   644 
645 21 , 21 , 21 , 21 , 21 ,   21 , 21 , 21 , 22 ,    645 21 , 21 , 21 , 21 , 21 ,   21 , 21 , 21 , 22 , 22 ,  // 71 - 80
646                                                   646 
647 23 , 23 , 23 , 23 , 24 ,   24 , 25 , 25 , 26 ,    647 23 , 23 , 23 , 23 , 24 ,   24 , 25 , 25 , 26 , 26 ,  // 81 - 90
648                                                   648 
649 27 , 27 , 27 , 26 , 26 ,   27 , 27 , 26 , 26 ,    649 27 , 27 , 27 , 26 , 26 ,   27 , 27 , 26 , 26 , 26    // 91 - 100
650                                                   650 
651 };                                                651 };
652                                                   652