#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
.. py:currentmodule:: casinotools.fileformat.casino2.Element
.. moduleauthor:: Hendrix Demers <hendrix.demers@mail.mcgill.ca>
Element data from CASINO v2.
"""
###############################################################################
# Copyright 2017 Hendrix Demers
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################
# Standard library modules.
import logging
import math
# Third party modules.
# Local modules.
import casinotools.fileformat.FileReaderWriterTools as FileReaderWriterTools
import casinotools.fileformat.casino2.Composition as Composition
from casinotools.fileformat.casino2.line import NUMBER_ATOM_LINES
from casinotools.fileformat.casino2.Version import VERSION_2050100
# Globals and constants variables.
LINE_K = 'K'
LINE_L = 'LIII'
LINE_M = 'MV'
GENERATED = "Generated"
EMITTED = "Emitted"
TAG_ELEMENT_DATA = b"*ELEMENTDATA%%%"
[docs]class Element(FileReaderWriterTools.FileReaderWriterTools):
def __init__(self, number_xray_layers=500):
self.Z = 0
self.Nom = ""
self.Rho = 0.0
self.A = 0.0
self.J = 0.0
self.K = 0.0
self.ef = 0.0
self.kf = 0.0
self.ep = 0.0
self.Int_PRZ = []
self.Int_PRZ_ABS = []
for _dummy in range(3):
self.Int_PRZ.append(0.0)
self.Int_PRZ_ABS.append(0.0)
self.intensity_1_esr = []
for _dummy in range(NUMBER_ATOM_LINES):
self.intensity_1_esr.append(0.0)
self.COUCHE_K = []
self.COUCHE_LIII = []
self.COUCHE_MV = []
self.COUCHE_K_ABS = []
self.COUCHE_LIII_ABS = []
self.COUCHE_MV_ABS = []
self.COUCHE_RADIAL_K = []
self.COUCHE_RADIAL_LIII = []
self.COUCHE_RADIAL_MV = []
self.COUCHE_RADIAL_K_ABS = []
self.COUCHE_RADIAL_LIII_ABS = []
self.COUCHE_RADIAL_MV_ABS = []
for _dummy in range(number_xray_layers):
self.COUCHE_K.append(0.0)
self.COUCHE_LIII.append(0.0)
self.COUCHE_MV.append(0.0)
self.COUCHE_K_ABS.append(0.0)
self.COUCHE_LIII_ABS.append(0.0)
self.COUCHE_MV_ABS.append(0.0)
self.COUCHE_RADIAL_K.append(0.0)
self.COUCHE_RADIAL_LIII.append(0.0)
self.COUCHE_RADIAL_MV.append(0.0)
self.COUCHE_RADIAL_K_ABS.append(0.0)
self.COUCHE_RADIAL_LIII_ABS.append(0.0)
self.COUCHE_RADIAL_MV_ABS.append(0.0)
self._composition = None
[docs] def read(self, file, number_xray_layers, version):
assert getattr(file, 'mode', 'rb') == 'rb'
logging.debug("File position at the start of %s.%s: %i", self.__class__.__name__, "read", file.tell())
tag_id = TAG_ELEMENT_DATA
self.findTag(file, tag_id)
self.Z = self.readInt(file)
self.Nom = self.readStrLength(file, 3)
self.Rho = self.readDouble(file)
self.A = self.readDouble(file)
self.J = self.readDouble(file)
self.K = self.readDouble(file)
self.ef = self.readDouble(file)
self.kf = self.readDouble(file)
self.ep = self.readDouble(file)
self._composition = Composition.Composition()
self._composition.read(file)
# This is the intensities as displayed in the casino program.
self.Int_PRZ = []
for dummy in range(3):
value = self.readFloat(file)
self.Int_PRZ.append(value)
self.Int_PRZ_ABS = []
for dummy in range(3):
value = self.readFloat(file)
self.Int_PRZ_ABS.append(value)
if version >= VERSION_2050100:
self.intensity_1_esr = []
for _dummy in range(NUMBER_ATOM_LINES):
value = self.readDouble(file)
self.intensity_1_esr.append(value)
assert len(self.intensity_1_esr) == NUMBER_ATOM_LINES
if number_xray_layers != 0.0:
self.COUCHE_K = self.readDoubleList(file, number_xray_layers)
self.COUCHE_LIII = self.readDoubleList(file, number_xray_layers)
self.COUCHE_MV = self.readDoubleList(file, number_xray_layers)
self.COUCHE_K_ABS = self.readDoubleList(file, number_xray_layers)
self.COUCHE_LIII_ABS = self.readDoubleList(file, number_xray_layers)
self.COUCHE_MV_ABS = self.readDoubleList(file, number_xray_layers)
self.COUCHE_RADIAL_K = self.readDoubleList(file, number_xray_layers)
self.COUCHE_RADIAL_LIII = self.readDoubleList(file, number_xray_layers)
self.COUCHE_RADIAL_MV = self.readDoubleList(file, number_xray_layers)
self.COUCHE_RADIAL_K_ABS = self.readDoubleList(file, number_xray_layers)
self.COUCHE_RADIAL_LIII_ABS = self.readDoubleList(file, number_xray_layers)
self.COUCHE_RADIAL_MV_ABS = self.readDoubleList(file, number_xray_layers)
[docs] def write(self, file, number_xray_layers):
assert getattr(file, 'mode', 'wb') == 'wb'
logging.debug("File position at the start of %s.%s: %i", self.__class__.__name__, "write", file.tell())
tag_id = TAG_ELEMENT_DATA
self.addTagOld(file, tag_id)
self.writeInt(file, self.Z)
self.writeStrLength(file, self.Nom, 3)
self.writeDouble(file, self.Rho)
self.writeDouble(file, self.A)
self.writeDouble(file, self.J)
self.writeDouble(file, self.K)
self.writeDouble(file, self.ef)
self.writeDouble(file, self.kf)
self.writeDouble(file, self.ep)
self._composition.write(file)
# This is the intensities as displayed in the casino program.
assert len(self.Int_PRZ) == 3
for index in range(3):
value = self.Int_PRZ[index]
self.writeFloat(file, value)
assert len(self.Int_PRZ_ABS) == 3
for index in range(3):
value = self.Int_PRZ_ABS[index]
self.writeFloat(file, value)
assert len(self.intensity_1_esr) == NUMBER_ATOM_LINES
for line_index in range(NUMBER_ATOM_LINES):
value = self.intensity_1_esr[line_index]
self.writeDouble(file, value)
if number_xray_layers != 0.0:
self.writeDoubleList(file, self.COUCHE_K, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_LIII, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_MV, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_K_ABS, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_LIII_ABS, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_MV_ABS, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_RADIAL_K, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_RADIAL_LIII, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_RADIAL_MV, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_RADIAL_K_ABS, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_RADIAL_LIII_ABS, number_xray_layers)
self.writeDoubleList(file, self.COUCHE_RADIAL_MV_ABS, number_xray_layers)
[docs] def getAtomicNumber(self):
return self.Z
[docs] def getSymbol(self):
return self.Nom
[docs] def getTotalXrayIntensities(self):
intensities = {}
if self.Int_PRZ[0] > 0.0:
intensities.setdefault(LINE_K, {})
intensities[LINE_K][GENERATED] = self.Int_PRZ[0]
intensities[LINE_K][EMITTED] = self.Int_PRZ_ABS[0]
if self.Int_PRZ[1] > 0.0:
intensities.setdefault(LINE_L, {})
intensities[LINE_L][GENERATED] = self.Int_PRZ[1]
intensities[LINE_L][EMITTED] = self.Int_PRZ_ABS[1]
if self.Int_PRZ[2] > 0.0:
intensities.setdefault(LINE_M, {})
intensities[LINE_M][GENERATED] = self.Int_PRZ[2]
intensities[LINE_M][EMITTED] = self.Int_PRZ_ABS[2]
return intensities
[docs] def get_total_xray_intensities_1_esr(self):
intensities = {}
assert len(self.intensity_1_esr) == NUMBER_ATOM_LINES
for line_index in range(NUMBER_ATOM_LINES):
value = self.intensity_1_esr[line_index]
if value > 0.0:
intensities[line_index] = value
return intensities
[docs] def getTotalXrayIntensityByLineType(self, line, type=EMITTED):
if LINE_K.startswith(line[0]):
line = LINE_K
elif LINE_L.startswith(line[0]):
line = LINE_L
elif LINE_M.startswith(line[0]):
line = LINE_M
intensities = self.getTotalXrayIntensities()
return intensities[line][type]
[docs] def getRadialXrayDistribution(self):
"""
Return the radial x-ray distributions.
:note: Remove last value, because it is the accumulator for all out of range values.
"""
distributions = {}
if max(self.COUCHE_RADIAL_K) > 0.0:
distributions.setdefault(LINE_K, {})
distributions[LINE_K][GENERATED] = self.COUCHE_RADIAL_K[:-1]
distributions[LINE_K][EMITTED] = self.COUCHE_RADIAL_K_ABS[:-1]
if max(self.COUCHE_RADIAL_LIII) > 0.0:
distributions.setdefault(LINE_L, {})
distributions[LINE_L][GENERATED] = self.COUCHE_RADIAL_LIII[:-1]
distributions[LINE_L][EMITTED] = self.COUCHE_RADIAL_LIII_ABS[:-1]
if max(self.COUCHE_RADIAL_MV) > 0.0:
distributions.setdefault(LINE_M, {})
distributions[LINE_M][GENERATED] = self.COUCHE_RADIAL_MV[:-1]
distributions[LINE_M][EMITTED] = self.COUCHE_RADIAL_MV_ABS[:-1]
return distributions
[docs] def getDepthXrayDistributionLayer(self, z0_nm, z1_nm):
"""
Return the depth x-ray distributions.
:note: Remove last value, because it is the accumulator for all out of range values.
"""
index0 = self._findDepthIndex(z0_nm)
index1 = self._findDepthIndex(z1_nm)
distributions = {}
if max(self.COUCHE_K) > 0.0:
distributions.setdefault(LINE_K, {})
distributions[LINE_K][GENERATED] = self.COUCHE_K[index0:index1 + 1]
distributions[LINE_K][EMITTED] = self.COUCHE_K_ABS[index0:index1 + 1]
if max(self.COUCHE_LIII) > 0.0:
distributions.setdefault(LINE_L, {})
distributions[LINE_L][GENERATED] = self.COUCHE_LIII[index0:index1 + 1]
distributions[LINE_L][EMITTED] = self.COUCHE_LIII_ABS[index0:index1 + 1]
if max(self.COUCHE_MV) > 0.0:
distributions.setdefault(LINE_M, {})
distributions[LINE_M][GENERATED] = self.COUCHE_MV[index0:index1 + 1]
distributions[LINE_M][EMITTED] = self.COUCHE_MV_ABS[index0:index1 + 1]
return distributions
[docs] def getDepthXrayDistributionLayerByLineType(self, z0_nm, z1_nm, line, line_type=EMITTED):
"""
Return the depth x-ray distributions.
:note: Remove last value, because it is the accumulator for all out of range values.
"""
distributions = self._getDepthXrayDistributionLayer()
return distributions[line][line_type]
[docs] def getDepthXrayDistribution(self):
"""
Return the depth x-ray distributions.
:note: Remove last value, because it is the accumulator for all out of range values.
"""
distributions = {}
if max(self.COUCHE_K) > 0.0:
distributions.setdefault(LINE_K, {})
distributions[LINE_K][GENERATED] = self.COUCHE_K[:-1]
distributions[LINE_K][EMITTED] = self.COUCHE_K_ABS[:-1]
if max(self.COUCHE_LIII) > 0.0:
distributions.setdefault(LINE_L, {})
distributions[LINE_L][GENERATED] = self.COUCHE_LIII[:-1]
distributions[LINE_L][EMITTED] = self.COUCHE_LIII_ABS[:-1]
if max(self.COUCHE_MV) > 0.0:
distributions.setdefault(LINE_M, {})
distributions[LINE_M][GENERATED] = self.COUCHE_MV[:-1]
distributions[LINE_M][EMITTED] = self.COUCHE_MV_ABS[:-1]
return distributions
[docs] def getDepthXrayDistributionByLineType(self, line, line_type=EMITTED):
"""
Return the depth x-ray distributions.
:note: Remove last value, because it is the accumulator for all out of range values.
"""
distributions = self.getDepthXrayDistribution()
return distributions[line][line_type]
[docs] def setElement(self, symbol, weight_fraction=1.0, index=0):
dummy_fnuatom, rho, z, a, ef, kf, ep = NUATOM(symbol)
self.Z = z
self.Nom = symbol
self.Rho = rho
self.A = a
self.ef = ef
self.kf = kf
self.ep = ep
self.J = _computeJ(self.Z)
self.K = _computeK(self.Z)
self._composition = Composition.Composition()
self._composition.setIndex(index)
self._composition.setWeightFraction(weight_fraction)
[docs] def getComposition(self):
return self._composition
[docs] def getWeightFraction(self):
return self._composition.FWt
[docs] def setWeightFraction(self, weight_fraction):
self._composition.setWeightFraction(weight_fraction)
[docs] def getAtomicFraction(self):
return self._composition.FAt
[docs] def setAtomicFraction(self, atomic_fraction):
self._composition.setAtomicFraction(atomic_fraction)
[docs] def getMassDensity_g_cm3(self):
return self.Rho
[docs] def getRepetition(self):
return self._composition.Rep
[docs] def getAtomicWeight_g_mol(self):
return self.A
def _computeJ(atomicNumber):
import casinotools.fileformat.casino2.MeanIonizationPotential as MeanIonizationPotential
mean_ionization_potential = MeanIonizationPotential.MeanIonizationPotential(MeanIonizationPotential.MODEL_JOY)
return mean_ionization_potential.computeJ(atomicNumber)
def _computeK(atomicNumber):
k = 0.734 * math.pow(atomicNumber, 0.037)
return k
[docs]def NUATOM(symbol):
"""
Transcription du symbole atomique.
"""
rho = 0.0
z = 0
a = 0.0
ef = 0.0
kf = 0.0
ep = 0.0
fnuatom = 1
if len(symbol) == 1:
symbol += '\0'
assert len(symbol) == 2
if symbol[0] == 'A':
if symbol[1] == 'c':
z = 89
rho = 10.07
a = 227.0278
ef = 1.0
kf = 7.0e7
ep = 25
elif symbol[1] == 'g':
z = 47
rho = 10.50
a = 107.868
ef = 5.5
kf = 1.19e8
ep = 15
elif symbol[1] == 'l':
z = 13
rho = 2.70
a = 26.98154
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'm':
z = 95
rho = 13.6
a = 243
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'r':
z = 18
rho = 1.784
a = 39.948
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 's':
z = 33
rho = 5.72
a = 74.9216
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 't':
z = 85
rho = 0
a = 210
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'u':
z = 79
rho = 19.3
a = 196.9665
ef = 5.5
kf = 1.19e8
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'B':
if symbol[1] == 'a':
z = 56
rho = 3.5
a = 137.33
ef = 1.0
kf = 7.0e7
ep = 7.2
elif symbol[1] == '\0':
z = 5
rho = 2.34
a = 10.81
ef = 1.0
kf = 7.0e7
ep = 22.7
elif symbol[1] == 'e':
z = 4
rho = 1.85
a = 9.01218
ef = 1.0
kf = 7.0e7
ep = 18.7
elif symbol[1] == 'i':
z = 83
rho = 9.8
a = 209.0
ef = 1.0
kf = 7.0e7
ep = 14.2
elif symbol[1] == 'k':
z = 97
rho = 0
a = 247
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'r':
z = 35
rho = 3.12
a = 79.904
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'C':
if symbol[1] == 'a':
z = 20
rho = 1.56
a = 40.08
ef = 1.0
kf = 7.0e7
ep = 8.8
elif symbol[1] == '\0':
z = 6
rho = 2.62
a = 12.011
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'd':
z = 48
rho = 8.65
a = 112.41
ef = 1.0
kf = 7.0e7
ep = 19.2
elif symbol[1] == 'e':
z = 58
rho = 6.78
a = 140.12
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'f':
z = 98
rho = 0
a = 251
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'l':
z = 17
rho = 8.96
a = 35.453
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'm':
z = 96
rho = 13.511
a = 247
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'o':
z = 27
rho = 8.9
a = 58.9332
ef = 1.0
kf = 7.0e7
ep = 20.9
elif symbol[1] == 'r':
z = 24
rho = 7.19
a = 51.996
ef = 1.0
kf = 7.0e7
ep = 24.9
elif symbol[1] == 's':
z = 55
rho = 1.87
a = 132.9054
ef = 1.0
kf = 7.0e7
ep = 2.9
elif symbol[1] == 'u':
z = 29
rho = 8.96
a = 63.546
ef = 7.0
kf = 1.35e8
ep = 19.3
else:
fnuatom = 0
elif symbol[0] == 'D':
if symbol[1] == 'y':
z = 66
rho = 8.54
a = 160.5
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'E':
if symbol[1] == 'r':
z = 68
rho = 9.05
a = 167.26
ef = 1.0
kf = 7.0e7
ep = 14
elif symbol[1] == 's':
z = 99
rho = 0
a = 254
ep = 15
elif symbol[1] == 'u':
z = 63
rho = 5.26
a = 151.96
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'F':
if symbol[1] == 'e':
z = 26
rho = 7.86
a = 55.847
ef = 1.0
kf = 7.0e7
ep = 23
elif symbol[1] == '\0':
z = 9
rho = 1.696
a = 18.9994
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'm':
z = 100
rho = 0
a = 257
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'r':
z = 87
rho = 0
a = 223
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'G':
if symbol[1] == 'a':
z = 31
rho = 5.91
a = 69.72
ef = 1.0
kf = 7.0e7
ep = 13.8
elif symbol[1] == 'd':
z = 64
rho = 7.89
a = 157.25
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'e':
z = 32
rho = 5.32
a = 72.59
ef = 1.0
kf = 7.0e7
ep = 16.2
else:
fnuatom = 0
elif symbol[0] == 'H':
if symbol[1] == 'e':
z = 2
rho = 0.1787
a = 4.00260
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'f':
z = 72
rho = 13.1
a = 178.49
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'g':
z = 80
rho = 13.53
a = 200.59
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == '\0':
z = 1
rho = 0.0899
a = 1.0079
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'o':
z = 67
rho = 10.07
a = 164.9
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'I':
if symbol[1] == '\0':
z = 53
rho = 4.92
a = 126.9045
ef = 1.0
kf = 7.0e7
ep = 11.4
elif symbol[1] == 'n':
z = 49
rho = 7.31
a = 114.82
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'r':
z = 77
rho = 22.5
a = 192.22
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'K':
if symbol[1] == '\0':
z = 19
rho = 0.86
a = 39.0983
ef = 1.0
kf = 7.0e7
ep = 3.7
elif symbol[1] == 'r':
z = 36
rho = 3.74
a = 83.8
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'L':
if symbol[1] == 'a':
z = 57
rho = 6.7
a = 138.9055
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'i':
z = 3
rho = 0.53
a = 6.941
ef = 4.7
kf = 1.1e8
ep = 7.1
elif symbol[1] == 'r':
z = 103
rho = 0
a = 257
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'u':
z = 71
rho = 9.84
a = 174.967
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'M':
if symbol[1] == 'd':
z = 101
rho = 0
a = 257
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'g':
z = 12
rho = 1.74
a = 24.305
ef = 1.0
kf = 7.0e7
ep = 10.3
elif symbol[1] == 'n':
z = 25
rho = 7.43
a = 54.9380
ef = 1.0
kf = 7.0e7
ep = 21.6
elif symbol[1] == 'o':
z = 42
rho = 10.2
a = 95.94
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'N':
if symbol[1] == 'a':
z = 11
rho = 0.97
a = 22.98977
ef = 3.1
kf = 9.0e7
ep = 5.7
elif symbol[1] == 'b':
z = 41
rho = 8.56
a = 92.9064
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'd':
z = 60
rho = 7
a = 144.24
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'e':
z = 10
rho = 0.901
a = 20.179
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'i':
z = 28
rho = 8.90
a = 58.7
ef = 1.0
kf = 7.0e7
ep = 20.7
elif symbol[1] == '\0':
z = 7
rho = 1.251
a = 14.0067
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'o':
z = 102
rho = 0
a = 254
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'p':
z = 93
rho = 20.4
a = 237.0482
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'O':
if symbol[1] == '\0':
z = 8
rho = 1.429
a = 15.9994
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 's':
z = 76
rho = 22.4
a = 190.2
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'P':
if symbol[1] == 'a':
z = 91
rho = 15.4
a = 231.0359
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'b':
z = 82
rho = 11.4
a = 207.2
ef = 1.0
kf = 7.0e7
ep = 13
elif symbol[1] == 'd':
z = 46
rho = 12
a = 106.4
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'm':
z = 61
rho = 6.475
a = 145
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'o':
z = 84
rho = 9.4
a = 210
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == '\0':
z = 15
rho = 1.827
a = 30.97376
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'r':
z = 59
rho = 6.77
a = 140.9077
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 't':
z = 78
rho = 21.4
a = 195.09
ef = 1.0
kf = 7.0e7
ep = 35
elif symbol[1] == 'u':
z = 94
rho = 19.8
a = 244
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'R':
if symbol[1] == 'a':
z = 88
rho = 5
a = 226.0254
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'b':
z = 37
rho = 1.53
a = 85.4678
ef = 1.0
kf = 7.0e7
ep = 3.41
elif symbol[1] == 'e':
z = 75
rho = 21
a = 186.207
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'h':
z = 45
rho = 12.4
a = 102.9055
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'n':
z = 86
rho = 9.91
a = 222
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'u':
z = 44
rho = 12.2
a = 101.07
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'S':
if symbol[1] == 'b':
z = 51
rho = 6.68
a = 121.75
ef = 1.0
kf = 7.0e7
ep = 15.2
elif symbol[1] == 'c':
z = 21
rho = 3
a = 44.9559
ef = 1.0
kf = 7.0e7
ep = 14
elif symbol[1] == 'e':
z = 34
rho = 4.8
a = 78.96
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'i':
z = 14
rho = 2.33
a = 28.0855
ef = .555
kf = 4.0e7
ep = 16.7
elif symbol[1] == 'm':
z = 62
rho = 7.54
a = 150.4
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'n':
z = 50
rho = 7.3
a = 118.69
ef = 1.0
kf = 7.0e7
ep = 13.4
elif symbol[1] == 'r':
z = 38
rho = 2.6
a = 87.62
ef = 1.0
kf = 7.0e7
ep = 8.
elif symbol[1] == '\0':
z = 16
rho = 2.07
a = 32.06
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'T':
if symbol[1] == 'a':
z = 73
rho = 16.6
a = 180.9479
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'b':
z = 65
rho = 8.27
a = 158.9254
ef = 1.0
kf = 7.0e7
ep = 13.3
elif symbol[1] == 'c':
z = 43
rho = 11.5
a = 98.91
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'e':
z = 52
rho = 6.24
a = 127.6
ef = 1.0
kf = 7.0e7
ep = 17
elif symbol[1] == 'h':
z = 90
rho = 11.7
a = 232.0381
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'i':
z = 22
rho = 4.5
a = 47.9
ef = 1.0
kf = 7.0e7
ep = 17.9
elif symbol[1] == 'l':
z = 81
rho = 11.85
a = 204.37
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == 'm':
z = 69
rho = 9.33
a = 168.9342
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'U':
if symbol[1] == '\0':
z = 92
rho = 18.9
a = 238.029
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'V':
if symbol[1] == 'a':
z = 0
rho = 1
a = 1
ef = 0
kf = 0
ep = 0
elif symbol[1] == '\0':
z = 23
rho = 5.8
a = 50.9415
ef = 1.0
kf = 7.0e7
ep = 21.8
else:
fnuatom = 0
elif symbol[0] == 'W':
if symbol[1] == '\0':
z = 74
rho = 19.3
a = 183.85
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'X':
if symbol[1] == 'e':
z = 54
rho = 5.89
a = 131.3
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
elif symbol[0] == 'Y':
if symbol[1] == 'b':
z = 70
rho = 6.98
a = 173.04
ef = 1.0
kf = 7.0e7
ep = 15
elif symbol[1] == '\0':
z = 39
rho = 4.5
a = 88.9059
ef = 1.0
kf = 7.0e7
ep = 12.5
else:
fnuatom = 0
elif symbol[0] == 'Z':
if symbol[1] == 'n':
z = 30
rho = 7.14
a = 65.38
ef = 1.0
kf = 7.0e7
ep = 17.2
elif symbol[1] == 'r':
z = 40
rho = 6.49
a = 91.22
ef = 1.0
kf = 7.0e7
ep = 15
else:
fnuatom = 0
else:
fnuatom = 0
return fnuatom, rho, z, a, ef, kf, ep