// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // $Id: G4EmCorrections.cc,v 1.23.2.1 2008/04/22 15:28:13 vnivanch Exp $ // GEANT4 tag $Name: geant4-09-01-patch-02 $ // // ------------------------------------------------------------------- // // GEANT4 Class // // File name: G4EmCorrections // // Author: Vladimir Ivanchenko // // Creation date: 13.01.2005 // // Modifications: // 05.05.2005 V.Ivanchenko Fix misprint in Mott term // 26.11.2005 V.Ivanchenko Fix effective charge for heavy ions using original paper // 28.04.2006 V.Ivanchenko General cleanup, add finite size corrections // 13.05.2006 V.Ivanchenko Add corrections for ion stopping // 08.05.2007 V.Ivanchenko Use G4IonTable for ion mass instead of NistTable to avoid // division by zero // // // Class Description: // // This class provides calculation of EM corrections to ionisation // // ------------------------------------------------------------------- // #include "G4EmCorrections.hh" #include "Randomize.hh" #include "G4NistManager.hh" #include "G4ParticleTable.hh" #include "G4IonTable.hh" #include "G4VEmModel.hh" #include "G4Proton.hh" #include "G4LPhysicsFreeVector.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4EmCorrections::G4EmCorrections() { Initialise(); particle = 0; curParticle= 0; material = 0; curMaterial= 0; curVector = 0; kinEnergy = 0.0; ionModel = 0; nIons = 0; verbose = 1; massFactor = 1.0; nist = G4NistManager::Instance(); ionTable = G4ParticleTable::GetParticleTable()->GetIonTable(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4EmCorrections::~G4EmCorrections() { for(G4int i=0; i 1) G4cout << "EmCorrections: E(MeV)= " << e/MeV << " Barkas= " << Barkas << " Bloch= " << Bloch << " Mott= " << Mott << " Fsize= " << FSize << " Sum= " << sum << G4endl; sum *= material->GetElectronDensity() * q2 * twopi_mc2_rcl2 /beta2; return sum; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::Bethe(const G4ParticleDefinition* p, const G4Material* mat, G4double e) { SetupKinematics(p, mat, e); G4double eexc = material->GetIonisation()->GetMeanExcitationEnergy(); G4double eexc2 = eexc*eexc; G4double dedx = 0.5*std::log(2.0*electron_mass_c2*bg2*tmax/eexc2)-beta2; return dedx; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::SpinCorrection(const G4ParticleDefinition* p, const G4Material* mat, G4double e) { SetupKinematics(p, mat, e); G4double dedx = 0.5*tmax/(kinEnergy + mass); return 0.5*dedx*dedx; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections:: KShellCorrection(const G4ParticleDefinition* p, const G4Material* mat, G4double e) { SetupKinematics(p, mat, e); G4double term = 0.0; for (G4int i = 0; iGetZ(); G4int iz = G4int(Z); G4double f = 1.0; G4double Z2= (Z-0.3)*(Z-0.3); if(1 == iz) { f = 0.5; Z2 = 1.0; } G4double e0= 13.6*eV*Z2; term += f*atomDensity[i]*KShell(shells.GetBindingEnergy(iz,0)/e0,ba2/Z2)/Z; } term /= material->GetTotNbOfAtomsPerVolume(); return term; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections:: LShellCorrection(const G4ParticleDefinition* p, const G4Material* mat, G4double e) { SetupKinematics(p, mat, e); G4double term = 0.0; for (G4int i = 0; iGetZ(); G4int iz = G4int(Z); if(2 < iz) { G4double Zeff = Z - ZD[10]; if(iz < 10) Zeff = Z - ZD[iz]; G4double Z2= Zeff*Zeff; G4double e0= 13.6*eV*Z2*0.25; G4double f = 0.125; G4int nmax = std::min(4,shells.GetNumberOfShells(iz)); for(G4int j=1; j= iz) b = 1.8; else if(17 >= iz) b = 1.4; else if(18 == iz) b = 1.8; else if(25 >= iz) b = 1.4; else if(50 >= iz) b = 1.35; G4double W = b/std::sqrt(X); G4double val; if(W <= engBarkas[0]) val = corBarkas[0]; else if(W >= engBarkas[46]) val = corBarkas[46]*engBarkas[46]/W; else { G4int iw = Index(W, engBarkas, 47); val = Value(W, engBarkas[iw], engBarkas[iw+1], corBarkas[iw], corBarkas[iw+1]); } // G4cout << "i= " << i << " b= " << b << " W= " << W // << " Z= " << Z << " X= " << X << " val= " << val<< G4endl; BarkasTerm += val*atomDensity[i] / (std::sqrt(Z*X)*X); } BarkasTerm *= 1.29*charge/material->GetTotNbOfAtomsPerVolume(); return BarkasTerm; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::BlochCorrection(const G4ParticleDefinition* p, const G4Material* mat, G4double e) { SetupKinematics(p, mat, e); G4double y2 = q2/ba2; G4double term = 1.0/(1.0 + y2); G4double del; G4double j = 1.0; do { j += 1.0; del = 1.0/(j* (j*j + y2)); term += del; } while (del > 0.01*term); return -y2*term; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::MottCorrection(const G4ParticleDefinition* p, const G4Material* mat, G4double e) { SetupKinematics(p, mat, e); G4double mterm = pi*fine_structure_const*beta*charge; /* G4double mterm = 0.0; if(beta > 0.0) { // Estimation of mean square root of the ionisation potential G4double Zeff = 0.0; G4double norm = 0.0; for (G4int i = 0; iGetZ(); Zeff += Z*atomDensity[i]; norm += atomDensity[i]; } Zeff *= (2.0/norm); G4double ze1 = std::log(Zeff); G4double eexc= material->GetIonisation()->GetMeanExcitationEnergy()*ze1*ze1/Zeff; G4double invbeta = 1.0/beta; G4double invbeta2= invbeta*invbeta; G4double za = charge*fine_structure_const; G4double za2 = za*za; G4double za3 = za2*za; G4double x = za*invbeta; G4double cosx; if(x < COSEB[13]) { G4int i = Index(x,COSEB,14); cosx = Value(x,COSEB[i], COSEB[i+1],COSXI[i],COSXI[i+1]); } else { cosx = COSXI[13]*COSEB[13]/x; } mterm = za*beta*(1.725 + pi*cosx*(0.52 - 2.0*std::sqrt(eexc/(2.0*electron_mass_c2*bg2)))); + za2*(3.246 - 0.451*beta2) + za3*(1.522*beta + 0.987*invbeta) + za2*za2*(4.569 - 0.494*beta2 - 2.696*invbeta2) + za3*za2*(1.254*beta + 0.222*invbeta - 1.17*invbeta*invbeta2); } */ return mterm; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::FiniteSizeCorrection(const G4ParticleDefinition* p, const G4Material* mat, G4double e) // Finite size corrections are parameterized according to // J.D.Jackson Phys. Rev. D59 (1998) 017301 { if(p) return 0.0; SetupKinematics(p, mat, e); G4double term = 0.0; G4double numlim = 0.2; //Leptons if(p->GetLeptonNumber() != 0) { G4double x = tmax/(e + mass); term = x*x; // Pions and Kaons } else if(p->GetPDGSpin() == 0.0 && q2 < 1.5) { G4double xpi = 0.736*GeV; G4double x = 2.0*electron_mass_c2*tmax0/(xpi*xpi); if(x <= numlim) term = -x*(1.0 - 0.5*x); else term = -std::log(1.0 + x); // Protons and baryons } else if(q2 < 1.5) { G4double xp = 0.8426*GeV; G4double x = 2.0*electron_mass_c2*tmax0/(xp*xp); G4double ksi2 = 2.79285*2.79285; if(x <= numlim) term = -x*((1.0 + 5.0*x/6.0)/((1.0 + x)*(1 + x)) + 0.5*x); else term = -x*(1.0 + 5.0*x/6.0)/((1.0 + x)*(1 + x)) - std::log(1.0 + x); G4double b = xp*0.5/mass; G4double c = xp*mass/(electron_mass_c2*(mass + e)); G4double lb = b*b; G4double lb2= lb*lb; G4double nu = 0.5*c*c; G4double x1 = 1.0 + x; G4double x2 = x1*x1; G4double l1 = 1.0 - lb; G4double l2 = l1*l1; G4double lx = 1.0 + lb*x; G4double ia = lb2*(lx*std::log(lx/x1)/x + l1 - 0.5*x*l2/(lb*x1) + x*(3.0 + 2.0*x)*l2*l1/(6.0*x2*lb2))/(l2*l2); G4double ib = x*x*(3.0 + x)/(6.0*x2*x1); term += lb*((ksi2 - 1.0)*ia + nu*ksi2*ib); // G4cout << "Proton F= " << term << " ia= " << ia << " ib= " << ib << " lb= " << lb<< G4endl; //ions } else { G4double xp = 0.8426*GeV/std::pow(mass/proton_mass_c2,-0.33333333); G4double x = 2.0*electron_mass_c2*tmax0/(xp*xp); if(x <= numlim) term = -x*(1.0 - 0.5*x); else term = -std::log(1.0 + x); //G4cout << "Ion F= " << term << G4endl; } return term; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::NuclearDEDX(const G4ParticleDefinition* p, const G4Material* mat, G4double e, G4bool fluct) { G4double nloss = 0.0; if(e <= 0.0) return nloss; SetupKinematics(p, mat, e); lossFlucFlag = fluct; // Projectile nucleus G4double z1 = std::abs(particle->GetPDGCharge()/eplus); G4double m1 = mass/amu_c2; // loop for the elements in the material for (G4int iel=0; ielGetZ(); G4double m2 = element->GetA()*mole/g ; nloss += (NuclearStoppingPower(kinEnergy, z1, z2, m1, m2)) * atomDensity[iel] ; } nloss *= theZieglerFactor; return nloss; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::NuclearStoppingPower(G4double kineticEnergy, G4double z1, G4double z2, G4double m1, G4double m2) { G4double energy = kineticEnergy/keV ; // energy in keV G4double nloss = 0.0; G4double rm; if(z1 > 1.5) rm = (m1 + m2) * ( Z23[G4int(z1)] + Z23[G4int(z2)] ) ; else rm = (m1 + m2) * nist->GetZ13(G4int(z2)); G4double er = 32.536 * m2 * energy / ( z1 * z2 * rm ) ; // reduced energy if (er >= ed[0]) nloss = a[0]; else { for (G4int i=102; i>=0; i--) { if (er <= ed[i]) { nloss = (a[i] - a[i+1])*(er - ed[i+1])/(ed[i] - ed[i+1]) + a[i+1]; break; } } } // Stragling if(lossFlucFlag) { // G4double sig = 4.0 * m1 * m2 / ((m1 + m2)*(m1 + m2)* // (4.0 + 0.197*std::pow(er,-1.6991)+6.584*std::pow(er,-1.0494))) ; G4double sig = 4.0 * m1 * m2 / ((m1 + m2)*(m1 + m2)* (4.0 + 0.197/(er*er) + 6.584/er)); nloss *= G4RandGauss::shoot(1.0,sig) ; } nloss *= 8.462 * z1 * z2 * m1 / rm ; // Return to [ev/(10^15 atoms/cm^2] if ( nloss < 0.0) nloss = 0.0 ; return nloss; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4ionEffectiveCharge* G4EmCorrections::GetIonEffectiveCharge(G4VEmModel* m) { if(m) ionModel = m; return &effCharge; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4int G4EmCorrections::GetNumberOfStoppingVectors() { return nIons; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4EmCorrections::EffectiveChargeCorrection(const G4ParticleDefinition* p, const G4Material* mat, G4double ekin) { G4double factor = 1.0; if(p->GetPDGCharge() <= 2.5*eplus) return factor; if(verbose > 1) G4cout << "EffectiveChargeCorrection: " << p->GetParticleName() << " in " << mat->GetName() << " ekin(MeV)= " << ekin/MeV << G4endl; if(p != curParticle || mat != curMaterial) { curParticle = p; curMaterial = 0; curVector = 0; G4int Z = p->GetAtomicNumber(); G4int A = p->GetAtomicMass(); if(verbose > 1) G4cout << "Zion= " << Z << " Aion= " << A << G4endl; massFactor = proton_mass_c2/ionTable->GetIonMass(Z,A); idx = 0; for(; idxGetName()) curVector = InitialiseMaterial(mat); } } } } if(curVector) { G4bool b; factor = curVector->GetValue(ekin*massFactor,b); } if(verbose > 1) G4cout << " factor= " << factor << G4endl; return factor; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4EmCorrections::AddStoppingData(G4int Z, G4int A, const G4String& mname, G4PhysicsVector& dVector) { idx = 0; for(; idx 2.0*MeV) break; } if(n < nbins) nbins = n + 1; G4LPhysicsFreeVector* v = new G4LPhysicsFreeVector(nbins, dVector.GetLowEdgeEnergy(0), dVector.GetLowEdgeEnergy(nbins-1)); G4bool b; for(size_t i=0; iPutValues(i, e, dedx); } // G4cout << *v << G4endl; stopData[idx] = v; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4PhysicsVector* G4EmCorrections::InitialiseMaterial(const G4Material* mat) { G4PhysicsVector* v = 0; const G4Material* m = nist->FindOrBuildMaterial(materialName[idx],false); if(m) { materialList[idx] = m; curMaterial = mat; v = stopData[idx]; size_t nbins = v->GetVectorLength(); const G4ParticleDefinition* p = G4Proton::Proton(); if(verbose>1) G4cout << "G4ionIonisation::InitialiseMaterial Stooping data for " << materialName[idx] << G4endl; G4bool b; for(size_t i=0; iGetLowEdgeEnergy(i); G4double dedx = v->GetValue(e, b); G4double dedx1= ionModel->ComputeDEDXPerVolume(mat, p, e, e)* effCharge.EffectiveChargeSquareRatio(curParticle,mat,e/massFactor); v->PutValue(i, dedx/dedx1); if(verbose>1) G4cout << " E(meV)= " << e/MeV << " Correction= " << dedx/dedx1 << " " << dedx << " " << dedx1 << G4endl; } } return v; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4EmCorrections::Initialise() { // . Z^3 Barkas effect in the stopping power of matter for charged particles // J.C Ashley and R.H.Ritchie // Physical review B Vol.5 No.7 1 April 1972 pagg. 2393-2397 G4int i, j; const G4double fTable[47][2] = { { 0.02, 21.5}, { 0.03, 20.0}, { 0.04, 18.0}, { 0.05, 15.6}, { 0.06, 15.0}, { 0.07, 14.0}, { 0.08, 13.5}, { 0.09, 13.}, { 0.1, 12.2}, { 0.2, 9.25}, { 0.3, 7.0}, { 0.4, 6.0}, { 0.5, 4.5}, { 0.6, 3.5}, { 0.7, 3.0}, { 0.8, 2.5}, { 0.9, 2.0}, { 1.0, 1.7}, { 1.2, 1.2}, { 1.3, 1.0}, { 1.4, 0.86}, { 1.5, 0.7}, { 1.6, 0.61}, { 1.7, 0.52}, { 1.8, 0.5}, { 1.9, 0.43}, { 2.0, 0.42}, { 2.1, 0.3}, { 2.4, 0.2}, { 3.0, 0.13}, { 3.08, 0.1}, { 3.1, 0.09}, { 3.3, 0.08}, { 3.5, 0.07}, { 3.8, 0.06}, { 4.0, 0.051}, { 4.1, 0.04}, { 4.8, 0.03}, { 5.0, 0.024}, { 5.1, 0.02}, { 6.0, 0.013}, { 6.5, 0.01}, { 7.0, 0.009}, { 7.1, 0.008}, { 8.0, 0.006}, { 9.0, 0.0032}, { 10.0, 0.0025} }; for(i=0; i<47; i++) { engBarkas[i] = fTable[i][0]; corBarkas[i] = fTable[i][1]; } const G4double nuca[104][2] = { { 1.0E+8, 5.831E-8}, { 8.0E+7, 7.288E-8}, { 6.0E+7, 9.719E-8}, { 5.0E+7, 1.166E-7}, { 4.0E+7, 1.457E-7}, { 3.0E+7, 1.942E-7}, { 2.0E+7, 2.916E-7}, { 1.5E+7, 3.887E-7}, { 1.0E+7, 5.833E-7}, { 8.0E+6, 7.287E-7}, { 6.0E+6, 9.712E-7}, { 5.0E+6, 1.166E-6}, { 4.0E+6, 1.457E-6}, { 3.0E+6, 1.941E-6}, { 2.0E+6, 2.911E-6}, { 1.5E+6, 3.878E-6}, { 1.0E+6, 5.810E-6}, { 8.0E+5, 7.262E-6}, { 6.0E+5, 9.663E-6}, { 5.0E+5, 1.157E-5}, { 4.0E+5, 1.442E-5}, { 3.0E+5, 1.913E-5}, { 2.0E+5, 2.845E-5}, { 1.5E+5, 3.762E-5}, { 1.0E+5, 5.554E-5}, { 8.0E+4, 6.866E-5}, { 6.0E+4, 9.020E-5}, { 5.0E+4, 1.070E-4}, { 4.0E+4, 1.319E-4}, { 3.0E+4, 1.722E-4}, { 2.0E+4, 2.499E-4}, { 1.5E+4, 3.248E-4}, { 1.0E+4, 4.688E-4}, { 8.0E+3, 5.729E-4}, { 6.0E+3, 7.411E-4}, { 5.0E+3, 8.718E-4}, { 4.0E+3, 1.063E-3}, { 3.0E+3, 1.370E-3}, { 2.0E+3, 1.955E-3}, { 1.5E+3, 2.511E-3}, { 1.0E+3, 3.563E-3}, { 8.0E+2, 4.314E-3}, { 6.0E+2, 5.511E-3}, { 5.0E+2, 6.430E-3}, { 4.0E+2, 7.756E-3}, { 3.0E+2, 9.855E-3}, { 2.0E+2, 1.375E-2}, { 1.5E+2, 1.736E-2}, { 1.0E+2, 2.395E-2}, { 8.0E+1, 2.850E-2}, { 6.0E+1, 3.552E-2}, { 5.0E+1, 4.073E-2}, { 4.0E+1, 4.802E-2}, { 3.0E+1, 5.904E-2}, { 1.5E+1, 9.426E-2}, { 1.0E+1, 1.210E-1}, { 8.0E+0, 1.377E-1}, { 6.0E+0, 1.611E-1}, { 5.0E+0, 1.768E-1}, { 4.0E+0, 1.968E-1}, { 3.0E+0, 2.235E-1}, { 2.0E+0, 2.613E-1}, { 1.5E+0, 2.871E-1}, { 1.0E+0, 3.199E-1}, { 8.0E-1, 3.354E-1}, { 6.0E-1, 3.523E-1}, { 5.0E-1, 3.609E-1}, { 4.0E-1, 3.693E-1}, { 3.0E-1, 3.766E-1}, { 2.0E-1, 3.803E-1}, { 1.5E-1, 3.788E-1}, { 1.0E-1, 3.711E-1}, { 8.0E-2, 3.644E-1}, { 6.0E-2, 3.530E-1}, { 5.0E-2, 3.444E-1}, { 4.0E-2, 3.323E-1}, { 3.0E-2, 3.144E-1}, { 2.0E-2, 2.854E-1}, { 1.5E-2, 2.629E-1}, { 1.0E-2, 2.298E-1}, { 8.0E-3, 2.115E-1}, { 6.0E-3, 1.883E-1}, { 5.0E-3, 1.741E-1}, { 4.0E-3, 1.574E-1}, { 3.0E-3, 1.372E-1}, { 2.0E-3, 1.116E-1}, { 1.5E-3, 9.559E-2}, { 1.0E-3, 7.601E-2}, { 8.0E-4, 6.668E-2}, { 6.0E-4, 5.605E-2}, { 5.0E-4, 5.008E-2}, { 4.0E-4, 4.352E-2}, { 3.0E-4, 3.617E-2}, { 2.0E-4, 2.768E-2}, { 1.5E-4, 2.279E-2}, { 1.0E-4, 1.723E-2}, { 8.0E-5, 1.473E-2}, { 6.0E-5, 1.200E-2}, { 5.0E-5, 1.052E-2}, { 4.0E-5, 8.950E-3}, { 3.0E-5, 7.246E-3}, { 2.0E-5, 5.358E-3}, { 1.5E-5, 4.313E-3}, { 0.0, 3.166E-3} }; for(i=0; i<104; i++) { ed[i] = nuca[i][0]; a[i] = nuca[i][1]; } // Constants theZieglerFactor = eV*cm2*1.0e-15 ; alpha2 = fine_structure_const*fine_structure_const; lossFlucFlag = true; // G.S. Khandelwal Nucl. Phys. A116(1968)97 - 111. // "Shell corrections for K- and L- electrons nK = 20; nL = 26; nEtaK = 29; nEtaL = 28; const G4double d[11] = {0., 0., 0., 1.72, 2.09, 2.48, 2.82, 3.16, 3.53, 3.84, 4.15}; const G4double thek[20] = {0.64, 0.65, 0.66, 0.68, 0.70, 0.72, 0.74, 0.75, 0.76, 0.78, 0.80, 0.82, 0.84, 0.85, 0.86, 0.88, 0.90, 0.92, 0.94, 0.95}; const G4double sk[20] = {1.9477, 1.9232, 1.8996, 1.8550, 1.8137, 1.7754, 1.7396, 1.7223, 1.7063, 1.6752, 1.6461, 1.6189, 1.5933, 1.5811, 1.5693, 1.5467, 1.5254, 1.5053, 1.4863, 1.4772}; const G4double tk[20] = {2.5222, 2.5125, 2.5026, 2.4821, 2.4608, 2.4388, 2.4163, 2.4044, 2.3933, 2.3701, 2.3466, 2.3229, 2.2992, 2.2872, 2.2753, 2.2515, 2.2277, 2.2040, 2.1804, 2.1686}; const G4double uk[20] = {1.9999, 2.0134, 2.0258, 2.0478, 2.0662, 2.0817, 2.0945, 2.0999, 2.1049, 2.1132, 2.1197, 2.1246, 2.1280, 2.1292, 2.1301, 2.1310, 2.1310, 2.1300, 2.1283, 2.1271}; const G4double vk[20] = {8.3410, 8.3373, 8.3340, 8.3287, 8.3247, 8.3219, 8.3201, 8.3194, 8.3191, 8.3188, 8.3191, 8.3199, 8.3211, 8.3218, 8.3226, 8.3244, 8.3264, 8.3285, 8.3308, 8.3320}; for(i=0; i<11; i++) { ZD[i] = d[i];} for(i=0; i