import numpy
import sys
import re
from io import BytesIO
#
#
#
[docs]class siesta_ion_c():
def __init__(self, splabel):
f = open(splabel + '.ion', 'r')
f.seek(0)
if( f.readline().strip()!="<preamble>"): raise SystemError('!<preamble>')
dummy = f.readline() # !! <basis_specs>
dummy = f.readline() # !! ============
dummy = f.readline() # !! ============
s = list(filter(None, re.split(r'\s+|=', f.readline()))) # O Z= 8 Mass= 16.000 Charge= 0.17977+309
self.pp_name,self.atomic_number,self.atomic_mass = str(s[0]),int(s[2]),float(s[4])
try:
self.charge = float(s[6])
except:
self.charge = 0.17977e+309
s = list(filter(None, re.split(r'\s+|=', f.readline()))) # Lmxo=1 Lmxkb= 3 BasisType=split Semic=F
self.lmxo,self.lmxkb,self.basistype,self.semic = int(s[1]), int(s[3]), str(s[5]), (s[7].upper()!='F')
self.l2rf_dat = []
# di = dict()
# di = {'L':1, 'Lkbmx':3}
# print(di)
for ilo in range(self.lmxo+1):
s2 = list(filter(None, re.split(r'\s+|=', f.readline()))) # L=0 Nsemic=0 Cnfigmx=2
lvalue, nsemic, cnfigmx = int(s2[1]),int(s2[3]),int(s2[5])
lst2 = []
for isemic in range(nsemic+1):
s1 = list(filter(None, re.split(r'\s+|=', f.readline()))) # n=1 nzeta=2 polorb=1
n,nzeta,polorb=int(s2[1]),int(s2[3]),int(s2[5])
print(isemic, ilo)
di1 = dict()
for idat in range(8):
s0 = list(filter(None, re.split(r'\s+|=|:', f.readline())))
di1[s0[0].lower()] = map(float, s0[1:])
#print(ilo, isemic, idat, s2, s1, di1)
if(s0[0].upper()=='LAMBDAS'): break
lst2.append([n,nzeta,polorb, di1])
self.l2rf_dat.append([lvalue,nsemic,cnfigmx, lst2])
print(self.l2rf_dat)
f.close()