本文整理汇总了Python中diffpy.Structure.Structure.addNewAtom方法的典型用法代码示例。如果您正苦于以下问题:Python Structure.addNewAtom方法的具体用法?Python Structure.addNewAtom怎么用?Python Structure.addNewAtom使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类diffpy.Structure.Structure
的用法示例。
在下文中一共展示了Structure.addNewAtom方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: parseLines
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
def parseLines(self, lines):
"""Parse list of lines in RAWXYZ format.
Return Structure object or raise StructureFormatError.
"""
linefields = [l.split() for l in lines]
# prepare output structure
stru = Structure()
# find first valid record
start = 0
for field in linefields:
if len(field) == 0 or field[0] == "#":
start += 1
else:
break
# find the last valid record
stop = len(lines)
while stop > start and len(linefields[stop-1]) == 0:
stop -= 1
# get out for empty structure
if start >= stop:
return stru
# here we have at least one valid record line
# figure out xyz layout from the first line for plain and raw formats
floatfields = [ isfloat(f) for f in linefields[start] ]
nfields = len(linefields[start])
if nfields not in (3, 4):
emsg = ("%d: invalid RAWXYZ format, expected 3 or 4 columns" %
(start + 1))
raise StructureFormatError(emsg)
if floatfields[:3] == [True, True, True]:
el_idx, x_idx = (None, 0)
elif floatfields[:4] == [False, True, True, True]:
el_idx, x_idx = (0, 1)
else:
emsg = "%d: invalid RAWXYZ format" % (start + 1)
raise StructureFormatError(emsg)
# now try to read all record lines
try:
p_nl = start
for fields in linefields[start:] :
p_nl += 1
if fields == []:
continue
elif len(fields) != nfields:
emsg = ('%d: all lines must have ' +
'the same number of columns') % p_nl
raise StructureFormatError, emsg
element = el_idx is not None and fields[el_idx] or ""
xyz = [ float(f) for f in fields[x_idx:x_idx+3] ]
if len(xyz) == 2:
xyz.append(0.0)
stru.addNewAtom(element, xyz=xyz)
except ValueError:
emsg = "%d: invalid number" % p_nl
exc_type, exc_value, exc_traceback = sys.exc_info()
raise StructureFormatError, emsg, exc_traceback
return stru
示例2: makeC60
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
def makeC60():
"""Make the C60 molecule using diffpy.Structure."""
from diffpy.Structure import Structure
stru = Structure()
for line in c60xyz.splitlines():
if not line: continue
xyz = map(float, line.split())
stru.addNewAtom("C", xyz)
return stru
示例3: test_bvrmsdiff
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
def test_bvrmsdiff(self):
"""check BVSCalculator.bvrmsdiff
"""
from math import sqrt
self.assertEqual(0, self.bvc.bvrmsdiff)
self.bvc(self.rutile)
self.assertTrue(self.bvc.bvrmsdiff > 0)
self.assertAlmostEqual(sqrt(self.bvc.bvmsdiff), self.bvc.bvrmsdiff, 12)
bvrmsd0 = self.bvc.bvrmsdiff
# check mixed occupancy
rutilemix = Structure(self.rutile)
for a in self.rutile:
rutilemix.addNewAtom(a)
for a in rutilemix:
a.occupancy = 0.5
self.bvc(rutilemix)
self.assertEqual(12, len(self.bvc.value))
self.assertAlmostEqual(bvrmsd0, self.bvc.bvrmsdiff, 12)
return
示例4: parseLines
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
def parseLines(self, lines):
"""Parse list of lines in PDB format.
Return Structure instance or raise StructureFormatError.
"""
try:
stru = Structure()
scale = numpy.identity(3, dtype=float)
scaleU = numpy.zeros(3, dtype=float)
p_nl = 0
for line in lines:
p_nl += 1
# skip blank lines
if not line.strip(): continue
# make sure line has 80 characters
if len(line) < 80:
line = "%-80s" % line
words = line.split()
record = words[0]
if record == "TITLE":
continuation = line[8:10]
if continuation.strip():
stru.title += line[10:].rstrip()
else:
stru.title = line[10:].rstrip()
elif record == "CRYST1":
a = float(line[7:15])
b = float(line[15:24])
c = float(line[24:33])
alpha = float(line[33:40])
beta = float(line[40:47])
gamma = float(line[47:54])
stru.lattice.setLatPar(a, b, c, alpha, beta, gamma)
scale = numpy.transpose(stru.lattice.recbase)
elif record == "SCALE1":
sc = numpy.zeros((3,3), dtype=float)
sc[0,:] = [float(x) for x in line[10:40].split()]
scaleU[0] = float(line[45:55])
elif record == "SCALE2":
sc[1,:] = [float(x) for x in line[10:40].split()]
scaleU[1] = float(line[45:55])
elif record == "SCALE3":
sc[2,:] = [float(x) for x in line[10:40].split()]
scaleU[2] = float(line[45:55])
base = numpy.transpose(numpy.linalg.inv(sc))
abcABGcryst = numpy.array(stru.lattice.abcABG())
stru.lattice.setLatBase(base)
abcABGscale = numpy.array(stru.lattice.abcABG())
reldiff = numpy.fabs(1.0 - abcABGscale/abcABGcryst)
if not numpy.all(reldiff < 1.0e-4):
emsg = "%d: " % p_nl + \
"SCALE and CRYST1 are not consistent."
raise StructureFormatError(emsg)
if numpy.any(scaleU != 0.0):
emsg = "Origin offset not yet implemented."
raise NotImplementedError(emsg)
elif record in ("ATOM", "HETATM"):
name = line[12:16].strip()
rc = [float(x) for x in line[30:54].split()]
xyz = numpy.dot(scale, rc) + scaleU
try:
occupancy = float(line[54:60])
except ValueError:
occupancy = 1.0
try:
B = float(line[60:66])
U = numpy.identity(3)*B/(8*pi**2)
except ValueError:
U = numpy.zeros((3,3), dtype=float)
element = line[76:78].strip()
if element == "":
# get element from the first 2 characters of name
element = line[12:14].strip()
element = element[0].upper() + element[1:].lower()
stru.addNewAtom(element,
occupancy=occupancy, label=name, U=U)
last_atom = stru.getLastAtom()
last_atom.xyz_cartn = rc
elif record == "SIGATM":
sigrc = [float(x) for x in line[30:54].split()]
sigxyz = numpy.dot(scale, sigrc)
try:
sigo = float(line[54:60])
except ValueError:
sigo = 0.0
try:
sigB = float(line[60:66])
sigU = numpy.identity(3)*sigB/(8*pi**2)
except ValueError:
sigU = numpy.zeros((3,3), dtype=float)
last_atom.sigxyz = sigxyz
last_atom.sigo = sigo
last_atom.sigU = sigU
elif record == "ANISOU":
Uij = [ float(x)*1.0e-4 for x in line[28:70].split() ]
for i in range(3):
last_atom.U[i,i] = Uij[i]
last_atom.U[0,1] = last_atom.U[1,0] = Uij[3]
last_atom.U[0,2] = last_atom.U[2,0] = Uij[4]
last_atom.U[1,2] = last_atom.U[2,1] = Uij[5]
#.........这里部分代码省略.........
示例5: parseLines
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
#.........这里部分代码省略.........
emsg = ("%d: first line must " +
"contain 'Number of particles ='") % p_nl
raise StructureFormatError(emsg)
xcfg_Number_of_particles = int(line[21:].split(None, 1)[0])
p_natoms = xcfg_Number_of_particles
elif line.find("A =") == 0:
xcfg_A = float(line[3:].split(None, 1)[0])
elif line.find("H0(") == 0:
i, j = ( int(line[3])-1 , int(line[5])-1 )
xcfg_H0[i,j] = float(line[10:].split(None, 1)[0])
xcfg_H0_set[i,j] = True
elif line.find(".NO_VELOCITY.") == 0:
xcfg_NO_VELOCITY = True
elif line.find("entry_count =") == 0:
xcfg_entry_count = int(line[13:].split(None, 1)[0])
elif p_auxiliary_re.match(line):
m = p_auxiliary_re.match(line)
idx = int(m.group(1))
p_auxiliary[idx] = line[m.end():].split(None, 1)[0]
else:
break
# check header for consistency
if numpy.any(xcfg_H0_set == False):
emsg = "H0 tensor is not properly defined"
raise StructureFormatError(emsg)
p_auxnum = len(p_auxiliary) and max(p_auxiliary.keys())+1
for i in range(p_auxnum):
if not i in p_auxiliary:
p_auxiliary[i] = "aux%d" % i
sorted_aux_keys = p_auxiliary.keys()
sorted_aux_keys.sort()
if p_auxnum != 0:
stru.xcfg = {
'auxiliaries' : [ p_auxiliary[k]
for k in sorted_aux_keys ]
}
if 6-3*xcfg_NO_VELOCITY+len(p_auxiliary) != xcfg_entry_count:
emsg = ("%d: auxiliary fields " +
"not consistent with entry_count") % p_nl
raise StructureFormatError(emsg)
# define proper lattice
stru.lattice.setLatBase(xcfg_H0)
# build p_assign_atom function to assign entries to proper fields
p_exprs = [ "a.xyz[0]=fields[0]",
"a.xyz[1]=fields[1]",
"a.xyz[2]=fields[2]" ]
if not xcfg_NO_VELOCITY:
p_exprs += [ "a.v=numpy.zeros(3, dtype=float)",
"a.v[0]=fields[3]",
"a.v[1]=fields[4]",
"a.v[2]=fields[5]" ]
for idx in sorted_aux_keys:
prop = p_auxiliary[idx]
col = idx + 6 - 3*xcfg_NO_VELOCITY
if prop == "Uiso":
p_exprs.append("a.U[0,0]=a.U[1,1]=a.U[2,2]=" +
"fields[%d]" % col)
elif re.match(r"^U\d\d$", prop) \
and 1<=int(prop[1])<=3 and 1<=int(prop[2])<=3 :
i, j = int(prop[1])-1, int(prop[2])-1
if i==j:
p_exprs.append("a.U[%i,%i]=fields[%d]" % (i, j, col) )
else:
p_exprs.append("a.U[%i,%i]=a.U[%i,%i]=fields[%d]" % \
(i, j, j, i, col) )
else:
p_exprs.append( "a.__dict__[%r]=fields[%d]" % \
(prop, col) )
p_assign_expr = "pass; " + "; ".join(p_exprs[3:])
exec "def p_assign_atom(a, fields) : %s" % p_assign_expr
# here we are inside data
p_element = None
p_nl -= 1
for line in lines[p_nl:stop]:
p_nl += 1
words = line.split()
# ignore atom mass
if len(words) == 1 and isfloat(words[0]):
continue
# parse element allowing empty symbol
elif len(words) <= 1:
w = line.strip()
p_element = w[:1].upper() + w[1:].lower()
elif len(words) == xcfg_entry_count and p_element is not None:
fields = [ float(w) for w in words ]
stru.addNewAtom(p_element, fields[:3])
a = stru.getLastAtom()
a.xyz *= xcfg_A
p_assign_atom(a, fields)
else:
emsg = "%d: invalid record" % p_nl
raise StructureFormatError(emsg)
if len(stru) != p_natoms:
emsg = "expected %d atoms, read %d" % (p_natoms, len(stru))
raise StructureFormatError(emsg)
except (ValueError, IndexError):
emsg = "%d: file is not in XCFG format" % p_nl
exc_type, exc_value, exc_traceback = sys.exc_info()
raise StructureFormatError, emsg, exc_traceback
return stru
示例6: Structure
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
# The placeInLattice method sets a new coordinate system while preserving
# the same Cartesian positions of all atoms.
stru2 = Structure(stru1)
lattice2 = Lattice(5, 6, 7, 60, 70, 80)
stru2.placeInLattice(lattice2)
print "stru2 is a copy of stru1 placed in differenc lattice"
print "stru2.lattice.abcABG()=" + str(stru2.lattice.abcABG())
listCoordinates(stru2)
print
# Finally to place atom at a given Cartesian position, one can
# set its xyz_cartn attribute.
lattice3 = Lattice(6, 8, 9, 90, 90, 90)
stru3 = Structure(lattice=lattice3)
# add 4 carbon atoms
stru3.addNewAtom("C")
stru3.getLastAtom().xyz_cartn = (0, 0, 0)
stru3.addNewAtom("C")
stru3[-1].xyz_cartn = (1, 1, 1)
stru3.addNewAtom("C")
stru3.getLastAtom().xyz_cartn = (1, 2, 3)
stru3.addNewAtom("C")
stru3.getLastAtom().xyz_cartn = (3, 2, 1)
print "stru3 atom coordinates were defined using xyz_cartn"
print "stru3.lattice.abcABG()=" + str(stru3.lattice.abcABG())
listCoordinates(stru3)
print
示例7: parseLines
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
def parseLines(self, lines):
"""Parse list of lines in XYZ format.
Return Structure object or raise StructureFormatError.
"""
linefields = [l.split() for l in lines]
# prepare output structure
stru = Structure()
# find first valid record
start = 0
for field in linefields:
if len(field) == 0 or field[0] == "#":
start += 1
else:
break
# first valid line gives number of atoms
try:
lfs = linefields[start]
w1 = linefields[start][0]
if len(lfs) == 1 and str(int(w1)) == w1:
p_natoms = int(w1)
#try to get lattice vectors from description line
try:
latticeVecs = map(float, linefields[start+1])
assert len(latticeVecs)==9
reshaped = [latticeVecs[0:3], latticeVecs[3:6], latticeVecs[6:9]]
stru.lattice = Lattice(base=reshaped)
needsDescription = True
except:
needsDescription = False
stru.description = lines[start+1].strip()
start += 2
else:
emsg = ("%d: invalid XYZ format, missing number of atoms" %
(start + 1))
raise StructureFormatError(emsg)
except (IndexError, ValueError):
exc_type, exc_value, exc_traceback = sys.exc_info()
emsg = ("%d: invalid XYZ format, missing number of atoms" %
(start + 1))
raise StructureFormatError, emsg, exc_traceback
# find the last valid record
stop = len(lines)
while stop > start and len(linefields[stop-1]) == 0:
stop -= 1
# get out for empty structure
if p_natoms == 0 or start >= stop:
return stru
# here we have at least one valid record line
nfields = len(linefields[start])
if nfields != 4 and nfields != 5:
emsg = "%d: invalid XYZ format, expected 4 or 5 columns" % (start + 1)
raise StructureFormatError(emsg)
# now try to read all record lines
try:
p_nl = start
for fields in linefields[start:] :
p_nl += 1
if fields == []:
continue
elif len(fields) != 4 and len(fields) !=5:
emsg = ('%d: all lines must have ' +
'a symbol, position, and optionally charge') % p_nl
raise StructureFormatError(emsg)
symbol = fields[0]
symbol = symbol[0].upper() + symbol[1:].lower()
xyz = [ float(f) for f in fields[1:4] ]
if len(fields)==5:
charge = float(fields[4])
else:
charge = 0.0
stru.addNewAtom(symbol, xyz=xyz)
stru.getLastAtom().charge=charge
except ValueError:
exc_type, exc_value, exc_traceback = sys.exc_info()
emsg = "%d: invalid number format" % p_nl
raise StructureFormatError, emsg, exc_traceback
# finally check if all the atoms have been read
if p_natoms is not None and len(stru) != p_natoms:
emsg = "expected %d atoms, read %d" % (p_natoms, len(stru))
raise StructureFormatError(emsg)
# if needsDescription:
# stru.generateDescription()
return stru
示例8: parseLines
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import addNewAtom [as 别名]
def parseLines(self, lines):
"""Parse list of lines in XYZ format.
Return Structure object or raise StructureFormatError.
"""
linefields = [l.split() for l in lines]
# prepare output structure
stru = Structure()
# find first valid record
start = 0
for field in linefields:
if len(field) == 0 or field[0] == "#":
start += 1
else:
break
# first valid line gives number of atoms
try:
lfs = linefields[start]
w1 = linefields[start][0]
if len(lfs) == 1 and str(int(w1)) == w1:
p_natoms = int(w1)
stru.title = lines[start+1].strip()
start += 2
else:
emsg = ("%d: invalid XYZ format, missing number of atoms" %
(start + 1))
raise StructureFormatError(emsg)
except (IndexError, ValueError):
exc_type, exc_value, exc_traceback = sys.exc_info()
emsg = ("%d: invalid XYZ format, missing number of atoms" %
(start + 1))
raise StructureFormatError, emsg, exc_traceback
# find the last valid record
stop = len(lines)
while stop > start and len(linefields[stop-1]) == 0:
stop -= 1
# get out for empty structure
if p_natoms == 0 or start >= stop:
return stru
# here we have at least one valid record line
nfields = len(linefields[start])
if nfields != 4:
emsg = "%d: invalid XYZ format, expected 4 columns" % (start + 1)
raise StructureFormatError(emsg)
# now try to read all record lines
try:
p_nl = start
for fields in linefields[start:] :
p_nl += 1
if fields == []:
continue
elif len(fields) != nfields:
emsg = ('%d: all lines must have ' +
'the same number of columns') % p_nl
raise StructureFormatError(emsg)
element = fields[0]
element = element[0].upper() + element[1:].lower()
xyz = [ float(f) for f in fields[1:4] ]
stru.addNewAtom(element, xyz=xyz)
except ValueError:
exc_type, exc_value, exc_traceback = sys.exc_info()
emsg = "%d: invalid number format" % p_nl
raise StructureFormatError, emsg, exc_traceback
# finally check if all the atoms have been read
if p_natoms is not None and len(stru) != p_natoms:
emsg = "expected %d atoms, read %d" % (p_natoms, len(stru))
raise StructureFormatError(emsg)
return stru