本文整理汇总了Python中diffpy.Structure.Structure.xcfg方法的典型用法代码示例。如果您正苦于以下问题:Python Structure.xcfg方法的具体用法?Python Structure.xcfg怎么用?Python Structure.xcfg使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类diffpy.Structure.Structure
的用法示例。
在下文中一共展示了Structure.xcfg方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: parseLines
# 需要导入模块: from diffpy.Structure import Structure [as 别名]
# 或者: from diffpy.Structure.Structure import xcfg [as 别名]
def parseLines(self, lines):
"""Parse list of lines in PDB format.
Return Structure object or raise StructureFormatError.
"""
xcfg_Number_of_particles = None
xcfg_A = None
xcfg_H0 = numpy.zeros((3,3), dtype=float)
xcfg_H0_set = numpy.zeros((3,3), dtype=bool)
xcfg_NO_VELOCITY = False
xcfg_entry_count = None
xcfg_auxiliary = []
p_nl = 0
p_auxiliary_re = re.compile(r"^auxiliary\[(\d+)\] =")
p_auxiliary = {}
try:
stru = Structure()
# ignore trailing blank lines
stop = len(lines)
while stop>0 and lines[stop-1].strip() == "":
stop -= 1
ilines = iter(lines[:stop])
# read XCFG header
for line in ilines:
p_nl += 1
stripped_line = line.strip()
# blank lines and lines starting with # are ignored
if stripped_line == "" or line[0] == '#':
continue
elif xcfg_Number_of_particles is None:
if line.find("Number of particles =") != 0:
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:])
#.........这里部分代码省略.........