本文整理汇总了Python中pymatgen.core.operations.SymmOp.from_xyz_string方法的典型用法代码示例。如果您正苦于以下问题:Python SymmOp.from_xyz_string方法的具体用法?Python SymmOp.from_xyz_string怎么用?Python SymmOp.from_xyz_string使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pymatgen.core.operations.SymmOp
的用法示例。
在下文中一共展示了SymmOp.from_xyz_string方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_xyz
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def test_xyz(self):
op=SymmOp([[1, -1, 0, 0], [0, -1, 0, 0],
[0, 0, -1, 0], [0, 0, 0, 1]])
s=op.as_xyz_string()
self.assertEqual(s, 'x-y, -y, -z')
self.assertEqual(op, SymmOp.from_xyz_string(s))
op2=SymmOp([[0, -1, 0, 0.5], [1, 0, 0, 0.5],
[0, 0, 1, 0.5 + 1e-7], [0, 0, 0, 1]])
s2=op2.as_xyz_string()
self.assertEqual(s2, '-y+1/2, x+1/2, z+1/2')
self.assertEqual(op2, SymmOp.from_xyz_string(s2))
op2=SymmOp([[3, -2, -1, 0.5], [-1, 0, 0, 12. / 13],
[0, 0, 1, 0.5 + 1e-7], [0, 0, 0, 1]])
s2=op2.as_xyz_string()
self.assertEqual(s2, '3x-2y-z+1/2, -x+12/13, z+1/2')
self.assertEqual(op2, SymmOp.from_xyz_string(s2))
op3=SymmOp.from_xyz_string('3x - 2y - z+1 /2 , -x+12/ 13, z+1/2')
self.assertEqual(op2, op3)
# Ensure strings can be read in any order
op4=SymmOp.from_xyz_string('1 /2 + 3X - 2y - z , 12/ 13-x, z+1/2')
op5=SymmOp.from_xyz_string('+1 /2 + 3x - 2y - z , 12/ 13-x, +1/2+z')
self.assertEqual(op4, op3)
self.assertEqual(op4, op5)
self.assertEqual(op3, op5)
self.assertRaises(ValueError, self.op.as_xyz_string)
o=SymmOp.from_xyz_string('0.5+x, 0.25+y, 0.75+z')
self.assertArrayAlmostEqual(o.translation_vector, [0.5, 0.25, 0.75])
o=SymmOp.from_xyz_string('x + 0.5, y + 0.25, z + 0.75')
self.assertArrayAlmostEqual(o.translation_vector, [0.5, 0.25, 0.75])
示例2: test_xyz
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def test_xyz(self):
op = SymmOp([[1, -1, 0, 0], [0, -1, 0, 0],
[0, 0, -1, 0], [0, 0, 0, 1]])
s = op.as_xyz_string()
self.assertEqual(s, 'x-y, -y, -z')
self.assertEqual(op, SymmOp.from_xyz_string(s))
op2 = SymmOp([[0, -1, 0, 0.5], [1, 0, 0, 0.5],
[0, 0, 1, 0.5+1e-7], [0, 0, 0, 1]])
s2 = op2.as_xyz_string()
self.assertEqual(s2, '-y+1/2, x+1/2, z+1/2')
self.assertEqual(op2, SymmOp.from_xyz_string(s2))
op2 = SymmOp([[3, -2, -1, 0.5], [-1, 0, 0, 12./13],
[0, 0, 1, 0.5+1e-7], [0, 0, 0, 1]])
s2 = op2.as_xyz_string()
self.assertEqual(s2, '3x-2y-z+1/2, -x+12/13, z+1/2')
self.assertEqual(op2, SymmOp.from_xyz_string(s2))
op3 = SymmOp.from_xyz_string('3x - 2y - z+1 /2 , -x+12/ 13, z+1/2')
self.assertEqual(op2, op3)
self.assertRaises(ValueError, self.op.as_xyz_string)
示例3: test_xyz
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def test_xyz(self):
op = SymmOp([[1, -1, 0, 0], [0, -1, 0, 0],
[0, 0, -1, 0], [0, 0, 0, 1]])
s = op.as_xyz_string()
self.assertEqual(s, 'x-y, -y, -z')
self.assertEqual(op, SymmOp.from_xyz_string(s))
op2 = SymmOp([[0, -1, 0, 0.5], [1, 0, 0, 0.5],
[0, 0, 1, 0.5 + 1e-7], [0, 0, 0, 1]])
s2 = op2.as_xyz_string()
self.assertEqual(s2, '-y+1/2, x+1/2, z+1/2')
self.assertEqual(op2, SymmOp.from_xyz_string(s2))
op2 = SymmOp([[3, -2, -1, 0.5], [-1, 0, 0, 12. / 13],
[0, 0, 1, 0.5 + 1e-7], [0, 0, 0, 1]])
s2 = op2.as_xyz_string()
self.assertEqual(s2, '3x-2y-z+1/2, -x+12/13, z+1/2')
self.assertEqual(op2, SymmOp.from_xyz_string(s2))
op3 = SymmOp.from_xyz_string('3x - 2y - z+1 /2 , -x+12/ 13, z+1/2')
self.assertEqual(op2, op3)
# Ensure strings can be read in any order
op4 = SymmOp.from_xyz_string('1 /2 + 3X - 2y - z , 12/ 13-x, z+1/2')
op5 = SymmOp.from_xyz_string('+1 /2 + 3x - 2y - z , 12/ 13-x, +1/2+z')
self.assertEqual(op4, op3)
self.assertEqual(op4, op5)
self.assertEqual(op3, op5)
# TODO: assertWarns not in Python 2.x unittest
# update PymatgenTest for unittest2?
# self.assertWarns(UserWarning, self.op.as_xyz_string)
o = SymmOp.from_xyz_string('0.5+x, 0.25+y, 0.75+z')
self.assertArrayAlmostEqual(o.translation_vector, [0.5, 0.25, 0.75])
o = SymmOp.from_xyz_string('x + 0.5, y + 0.25, z + 0.75')
self.assertArrayAlmostEqual(o.translation_vector, [0.5, 0.25, 0.75])
示例4: get_symops
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def get_symops(self, data):
"""
In order to generate symmetry equivalent positions, the symmetry
operations are parsed. If the symops are not present, the space
group symbol is parsed, and symops are generated.
"""
symops = []
for symmetry_label in ["_symmetry_equiv_pos_as_xyz",
"_symmetry_equiv_pos_as_xyz_",
"_space_group_symop_operation_xyz",
"_space_group_symop_operation_xyz_"]:
if data.data.get(symmetry_label):
try:
symops = [SymmOp.from_xyz_string(s)
for s in data.data.get(symmetry_label)]
break
except ValueError:
continue
if not symops:
# Try to parse symbol
for symmetry_label in ["_symmetry_space_group_name_H-M",
"_symmetry_space_group_name_H_M",
"_symmetry_space_group_name_H-M_",
"_symmetry_space_group_name_H_M_",
"_space_group_name_Hall",
"_space_group_name_Hall_",
"_space_group_name_H-M_alt",
"_space_group_name_H-M_alt_",
"_symmetry_space_group_name_hall",
"_symmetry_space_group_name_hall_",
"_symmetry_space_group_name_h-m",
"_symmetry_space_group_name_h-m_"]:
if data.data.get(symmetry_label):
try:
spg = space_groups.get(sub_spgrp(
data.data.get(symmetry_label)))
if spg:
symops = SpaceGroup(spg).symmetry_ops
break
except ValueError:
continue
if not symops:
# Try to parse International number
for symmetry_label in ["_space_group_IT_number",
"_space_group_IT_number_",
"_symmetry_Int_Tables_number",
"_symmetry_Int_Tables_number_"]:
if data.data.get(symmetry_label):
try:
i = int(str2float(data.data.get(symmetry_label)))
symops = SpaceGroup.from_int_number(i).symmetry_ops
break
except ValueError:
continue
if not symops:
warnings.warn("No _symmetry_equiv_pos_as_xyz type key found. "
"Defaulting to P1.")
symops = [SymmOp.from_xyz_string(s) for s in ['x', 'y', 'z']]
return symops
示例5: get_symops
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def get_symops(self, data):
"""
In order to generate symmetry equivalent positions, the symmetry
operations are parsed. If the symops are not present, the space
group symbol is parsed, and symops are generated.
"""
symops = []
for symmetry_label in ["_symmetry_equiv_pos_as_xyz",
"_symmetry_equiv_pos_as_xyz_",
"_space_group_symop_operation_xyz",
"_space_group_symop_operation_xyz_"]:
if data.data.get(symmetry_label):
xyz = data.data.get(symmetry_label)
if isinstance(xyz, six.string_types):
warnings.warn("A 1-line symmetry op P1 CIF is detected!")
xyz = [xyz]
try:
symops = [SymmOp.from_xyz_string(s)
for s in xyz]
break
except ValueError:
continue
if not symops:
# Try to parse symbol
for symmetry_label in ["_symmetry_space_group_name_H-M",
"_symmetry_space_group_name_H_M",
"_symmetry_space_group_name_H-M_",
"_symmetry_space_group_name_H_M_",
"_space_group_name_Hall",
"_space_group_name_Hall_",
"_space_group_name_H-M_alt",
"_space_group_name_H-M_alt_",
"_symmetry_space_group_name_hall",
"_symmetry_space_group_name_hall_",
"_symmetry_space_group_name_h-m",
"_symmetry_space_group_name_h-m_"]:
sg = data.data.get(symmetry_label)
if sg:
sg = sub_spgrp(sg)
try:
spg = space_groups.get(sg)
if spg:
symops = SpaceGroup(spg).symmetry_ops
warnings.warn(
"No _symmetry_equiv_pos_as_xyz type key found. "
"Spacegroup from %s used." % symmetry_label)
break
except ValueError:
# Ignore any errors
pass
try:
for d in _get_cod_data():
if sg == re.sub("\s+", "",
d["hermann_mauguin"]) :
xyz = d["symops"]
symops = [SymmOp.from_xyz_string(s)
for s in xyz]
warnings.warn(
"No _symmetry_equiv_pos_as_xyz type key found. "
"Spacegroup from %s used." % symmetry_label)
break
except Exception as ex:
continue
if symops:
break
if not symops:
# Try to parse International number
for symmetry_label in ["_space_group_IT_number",
"_space_group_IT_number_",
"_symmetry_Int_Tables_number",
"_symmetry_Int_Tables_number_"]:
if data.data.get(symmetry_label):
try:
i = int(str2float(data.data.get(symmetry_label)))
symops = SpaceGroup.from_int_number(i).symmetry_ops
break
except ValueError:
continue
if not symops:
warnings.warn("No _symmetry_equiv_pos_as_xyz type key found. "
"Defaulting to P1.")
symops = [SymmOp.from_xyz_string(s) for s in ['x', 'y', 'z']]
return symops
示例6: __init__
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def __init__(self, int_symbol):
"""
Initializes a Space Group from its full or abbreviated international
symbol. Only standard settings are supported.
Args:
int_symbol (str): Full International (e.g., "P2/m2/m2/m") or
Hermann-Mauguin Symbol ("Pmmm") or abbreviated symbol. The
notation is a LaTeX-like string, with screw axes being
represented by an underscore. For example, "P6_3/mmc".
Alternative settings can be access by adding a ":identifier".
For example, the hexagonal setting for rhombohedral cells can be
accessed by adding a ":H", e.g., "R-3m:H". To find out all
possible settings for a spacegroup, use the get_settings
classmethod. Alternative origin choices can be indicated by a
translation vector, e.g., 'Fm-3m(a-1/4,b-1/4,c-1/4)'.
"""
int_symbol = re.sub(r" ", "", int_symbol)
if int_symbol in SpaceGroup.abbrev_sg_mapping:
int_symbol = SpaceGroup.abbrev_sg_mapping[int_symbol]
elif int_symbol in SpaceGroup.full_sg_mapping:
int_symbol = SpaceGroup.full_sg_mapping[int_symbol]
for spg in SpaceGroup.SYMM_OPS:
if int_symbol in [spg["hermann_mauguin"], spg["universal_h_m"]]:
ops = [SymmOp.from_xyz_string(s) for s in spg["symops"]]
self.symbol = re.sub(r":", "",
re.sub(r" ", "", spg["universal_h_m"]))
if int_symbol in SpaceGroup.sgencoding:
self.full_symbol = SpaceGroup.sgencoding[int_symbol]["full_symbol"]
self.point_group = SpaceGroup.sgencoding[int_symbol]["point_group"]
else:
self.full_symbol = re.sub(r" ", "",
spg["universal_h_m"])
self.point_group = spg["schoenflies"]
self.int_number = spg["number"]
self.order = len(ops)
self._symmetry_ops = ops
break
else:
if int_symbol not in SpaceGroup.sgencoding:
raise ValueError("Bad international symbol %s" % int_symbol)
data = SpaceGroup.sgencoding[int_symbol]
self.symbol = int_symbol
# TODO: Support different origin choices.
enc = list(data["enc"])
inversion = int(enc.pop(0))
ngen = int(enc.pop(0))
symm_ops = [np.eye(4)]
if inversion:
symm_ops.append(np.array(
[[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0],
[0, 0, 0, 1]]))
for i in range(ngen):
m = np.eye(4)
m[:3, :3] = SpaceGroup.gen_matrices[enc.pop(0)]
m[0, 3] = SpaceGroup.translations[enc.pop(0)]
m[1, 3] = SpaceGroup.translations[enc.pop(0)]
m[2, 3] = SpaceGroup.translations[enc.pop(0)]
symm_ops.append(m)
self.generators = symm_ops
self.full_symbol = data["full_symbol"]
self.int_number = data["int_number"]
self.order = data["order"]
self._symmetry_ops = None
示例7: __init__
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def __init__(self, int_symbol):
"""
Initializes a Space Group from its full or abbreviated international
symbol. Only standard settings are supported.
Args:
int_symbol (str): Full International (e.g., "P2/m2/m2/m") or
Hermann-Mauguin Symbol ("Pmmm") or abbreviated symbol. The
notation is a LaTeX-like string, with screw axes being
represented by an underscore. For example, "P6_3/mmc". Note
that for rhomohedral cells, the hexagonal setting can be
accessed by adding a "H", e.g., "R-3mH".
"""
gen_matrices = get_symm_data("generator_matrices")
# POINT_GROUP_ENC = SYMM_DATA["point_group_encoding"]
sgencoding = get_symm_data("space_group_encoding")
abbrev_sg_mapping = get_symm_data("abbreviated_spacegroup_symbols")
translations = {k: Fraction(v) for k, v in get_symm_data(
"translations").items()}
full_sg_mapping = {
v["full_symbol"]: k
for k, v in get_symm_data("space_group_encoding").items()}
int_symbol = re.sub(" ", "", int_symbol)
if int_symbol in abbrev_sg_mapping:
int_symbol = abbrev_sg_mapping[int_symbol]
elif int_symbol in full_sg_mapping:
int_symbol = full_sg_mapping[int_symbol]
for spg in SpaceGroup.SYMM_OPS:
if re.sub(" ", "", spg["hermann_mauguin"]) == int_symbol or re.sub(":", "", re.sub(" ", "", spg["universal_h_m"])) == int_symbol:
ops = [SymmOp.from_xyz_string(s) for s in spg["symops"]]
self.symbol = re.sub(":", "",
re.sub(" ", "", spg["universal_h_m"]))
if int_symbol in sgencoding:
self.full_symbol = sgencoding[int_symbol]["full_symbol"]
self.point_group = sgencoding[int_symbol]["point_group"]
else:
self.full_symbol = re.sub(" ", "",
spg["universal_h_m"])
self.point_group = spg["schoenflies"]
self.int_number = spg["number"]
self.order = len(ops)
self._symmetry_ops = ops
break
else:
if int_symbol not in sgencoding:
raise ValueError("Bad international symbol %s" % int_symbol)
data = sgencoding[int_symbol]
self.symbol = int_symbol
# TODO: Support different origin choices.
enc = list(data["enc"])
inversion = int(enc.pop(0))
ngen = int(enc.pop(0))
symm_ops = [np.eye(4)]
if inversion:
symm_ops.append(np.array(
[[-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0],
[0, 0, 0, 1]]))
for i in range(ngen):
m = np.eye(4)
m[:3, :3] = gen_matrices[enc.pop(0)]
m[0, 3] = translations[enc.pop(0)]
m[1, 3] = translations[enc.pop(0)]
m[2, 3] = translations[enc.pop(0)]
symm_ops.append(m)
self.generators = symm_ops
self.full_symbol = data["full_symbol"]
self.int_number = data["int_number"]
self.order = data["order"]
self._symmetry_ops = None
示例8: _get_structure
# 需要导入模块: from pymatgen.core.operations import SymmOp [as 别名]
# 或者: from pymatgen.core.operations.SymmOp import from_xyz_string [as 别名]
def _get_structure(self, data, primitive):
"""
Generate structure from part of the cif.
"""
lengths = [str2float(data["_cell_length_" + i])
for i in ["a", "b", "c"]]
angles = [str2float(data["_cell_angle_" + i])
for i in ["alpha", "beta", "gamma"]]
lattice = Lattice.from_lengths_and_angles(lengths, angles)
try:
sympos = data["_symmetry_equiv_pos_as_xyz"]
except KeyError:
try:
sympos = data["_symmetry_equiv_pos_as_xyz_"]
except KeyError:
warnings.warn("No _symmetry_equiv_pos_as_xyz type key found. "
"Defaulting to P1.")
sympos = ['x, y, z']
self.symmetry_operations = [SymmOp.from_xyz_string(s) for s in sympos]
def parse_symbol(sym):
m = re.search("([A-Z][a-z]*)", sym)
if m:
return m.group(1)
return ""
try:
oxi_states = {
data["_atom_type_symbol"][i]:
str2float(data["_atom_type_oxidation_number"][i])
for i in range(len(data["_atom_type_symbol"]))}
except (ValueError, KeyError):
oxi_states = None
coord_to_species = OrderedDict()
for i in range(len(data["_atom_site_type_symbol"])):
symbol = parse_symbol(data["_atom_site_type_symbol"][i])
if oxi_states is not None:
el = Specie(symbol,
oxi_states[data["_atom_site_type_symbol"][i]])
else:
el = Element(symbol)
x = str2float(data["_atom_site_fract_x"][i])
y = str2float(data["_atom_site_fract_y"][i])
z = str2float(data["_atom_site_fract_z"][i])
try:
occu = str2float(data["_atom_site_occupancy"][i])
except (KeyError, ValueError):
occu = 1
if occu > 0:
coord = (x, y, z)
if coord not in coord_to_species:
coord_to_species[coord] = {el: occu}
else:
coord_to_species[coord][el] = occu
allspecies = []
allcoords = []
for coord, species in coord_to_species.items():
coords = self._unique_coords(coord)
allcoords.extend(coords)
allspecies.extend(len(coords) * [species])
#rescale occupancies if necessary
for species in allspecies:
totaloccu = sum(species.values())
if 1 < totaloccu <= self._occupancy_tolerance:
for key, value in six.iteritems(species):
species[key] = value / totaloccu
struct = Structure(lattice, allspecies, allcoords)
if primitive:
struct = struct.get_primitive_structure().get_reduced_structure()
return struct.get_sorted_structure()