Skip to content

Commit e4bdcd0

Browse files
committed
fully fix the site symmetry symbol for hexagonal space groups #309
1 parent 9031db7 commit e4bdcd0

File tree

2 files changed

+71
-4
lines changed

2 files changed

+71
-4
lines changed

pyxtal/symmetry.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2335,7 +2335,7 @@ def get_site_symm_wo_translation(self):
23352335

23362336
def get_site_symmetry_object(self, idx=0):
23372337
ops = self.get_site_symm_ops(idx)#; print(self.number, self.index, self.letter)
2338-
return site_symmetry(ops, self.lattice_type, self.symbol[0], self.number)
2338+
return site_symmetry(ops, self.lattice_type, self.symbol[0], self.number, self.index)
23392339

23402340
def get_site_symmetry(self, idx=0):
23412341
ss = self.get_site_symmetry_object(idx)
@@ -3323,14 +3323,15 @@ class site_symmetry:
33233323
a string representing the site symmetry (e.g., `2mm`)
33243324
"""
33253325

3326-
def __init__(self, ops, lattice_type, Bravis, number, parse_trans=False):
3326+
def __init__(self, ops, lattice_type, Bravis, number, wp_id=0, parse_trans=False):
33273327
hexagonal = lattice_type in ["hexagonal", "trigonal"]
33283328
self.parse_trans = parse_trans
33293329
self.opas = [OperationAnalyzer(
33303330
op, parse_trans, hexagonal) for op in ops]
33313331
self.lattice_type = lattice_type
33323332
self.directions = get_symmetry_directions(lattice_type, Bravis)
33333333
self.number = number
3334+
self.wp_id = wp_id
33343335

33353336
# No translation: 7 fundamental / 13 compound symmetries
33363337
# With translation: 18 fundamental / 37 compound symmetries
@@ -3604,8 +3605,13 @@ def set_short_symbols(self):
36043605
self.symbols = ['.', '.', '2']
36053606
elif self.symbols == ['.', '2/m', '.']:
36063607
self.symbols = ['.', '.', '2/m']
3607-
elif self.symbols == ['3', '2', '2']:
3608-
self.symbols = ['3', '.', '2']
3608+
if (self.number, self.wp_id) in [(157, 1), (162, 1), (162, 5),
3609+
(162, 6), (178, 1), (179, 1),
3610+
(180, 1), (180, 2), (181, 1),
3611+
(181, 2), (182, 1), (183, 2),
3612+
(185, 1), (189, 3), (191, 4),
3613+
(192, 2)]:
3614+
self.symbols = [self.symbols[i] for i in [0, 2, 1]]
36093615

36103616
elif self.lattice_type == "cubic":
36113617
for i, symbol in enumerate(self.symbols):
@@ -5012,6 +5018,7 @@ def apply_permutation_to_series(hkl_series, perm):
50125018
if __name__ == "__main__":
50135019
print("Test pyxtal.wp.site symmetry")
50145020
spg_list = [14, 36, 62, 99, 143, 160, 182, 183, 191, 192, 193, 194, 225, 230]
5021+
spg_list = [191, 192]
50155022
for i in spg_list:
50165023
g = Group(i)
50175024
for wp in g:

tests/test_symmetry.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,65 @@ def test_reflections(self):
8282
print(spg, h, k, l, G.is_valid_hkl(h, k, l), expected)
8383
assert G.is_valid_hkl(h, k, l) == expected
8484

85+
def test_site_symms(self):
86+
87+
data = [
88+
(146, "3."),
89+
(147, "-1", "-1", "3..", "3..", "-3..", "-3.."),
90+
(148, "-1", "-1", "3.", "-3.", "-3."),
91+
(149, "..2", "..2", "3..", "3..", "3..", "3.2", "3.2", "3.2", "3.2", "3.2", "3.2"),
92+
(150, ".2.", ".2.", "3..", "3..", "32.", "32."),
93+
(151, "..2", "..2"),
94+
(152, ".2.", ".2."),
95+
(153, "..2", "..2"),
96+
(154, ".2.", ".2."),
97+
(155, ".2", ".2", "3.", "32", "32"),
98+
(156, ".m.", "3m.", "3m.", "3m."),
99+
(157, "..m", "3..", "3.m"),
100+
(158, "3..", "3..", "3.."),
101+
(159, "3..", "3.."),
102+
(160, ".m", "3m"),
103+
(161, "3."),
104+
(162, "..m", "..2", "..2", "3..", "..2/m", "..2/m", "3.m", "3.2", "3.2", "-3.m", "-3.m"),
105+
(163, "..2", "-1", "3..", "3..", "3.2", "3.2", "-3..", "3.2"),
106+
(164, ".m.", ".2.", ".2.", ".2/m.", ".2/m.", "3m.", "3m.", "-3m.", "-3m."),
107+
(165, ".2.", "-1", "3..", "3..", "-3..", "32."),
108+
(166, ".m", ".2", ".2", ".2/m", ".2/m", "3m", "-3m", "-3m"),
109+
(167, ".2", "-1", "3.", "-3.", "32"),
110+
(168, "2..", "3..", "6.."),
111+
(171, "2..", "2.."),
112+
(172, "2..", "2.."),
113+
(173, "3..", "3.."),
114+
(174, "m..", "m..", "3..", "3..", "3..", "-6..", "-6..", "-6..", "-6..", "-6.."),
115+
(175, "m..", "m..", "2..", "3..", "2/m..", "2/m..", "6..", "-6..", "-6..", "6/m..", "6/m.."),
116+
(176, "m..", "-1", "3..", "3..", "-6..", "-6..", "-3..", "-6.."),
117+
(177, "..2", "..2", ".2.", ".2.", "2..", "3..", "222", "222", "6..", "3.2", "3.2", "622", "622"),
118+
(178, "..2", ".2."),
119+
(179, "..2", ".2."),
120+
(180, "..2", "..2", ".2.", ".2.", "2..", "2..", "222", "222", "222", "222"),
121+
(181, "..2", "..2", ".2.", ".2.", "2..", "2..", "222", "222", "222", "222"),
122+
(182, "..2", ".2.", "3..", "3..", "3.2", "3.2", "3.2", "32."),
123+
(183, ".m.", "..m", "2mm", "3m.", "6mm"),
124+
(184, "2..", "3..", "6.."),
125+
(185, "..m", "3..", "3.m"),
126+
(186, ".m.", "3m.", "3m."),
127+
(187, ".m.", "m..", "m..", "mm2", "mm2", "3m.", "3m.", "3m.", "-6m2", "-6m2", "-6m2", "-6m2", "-6m2", "-6m2"),
128+
(188, "m..", "..2", "3..", "3..", "3..", "-6..", "3.2", "-6..", "3.2"),
129+
(189, "m..", "m..", "..m", "3..", "m2m", "m2m", "3.m", "-6..", "-6..", "-62m", "-62m"),
130+
(190, "m..", ".2.", "3..", "3..", "-6..", "-6..", "-6..", "32."),
131+
(191, "m..", "m..", ".m.", "..m", "mm2", "mm2", "m2m", "m2m", "2mm", "3m.", "mmm", "mmm", "6mm",
132+
"-6m2", "-6m2", "6/mmm", "6/mmm"),
133+
(192, "m..", "..2", ".2.", "2..", "3..", "2/m..", "222", "6..", "-6..", "3.2", "6/m..", "622"),
134+
(193, "..m", "m..", "..2", "3..", "m2m", "..2/m", "3.m", "3.2", "-6..", "-3.m", "-62m"),
135+
(194, ".m.", "m..", ".2.", "mm2", ".2/m.", "3m.", "3m.", "-6m2", "-6m2", "-6m2", "-3m."),
136+
]
137+
for d in data:
138+
g = Group(d[0])
139+
for i in range(1, len(d)):
140+
wp = g[i]
141+
wp.get_site_symmetry()
142+
assert wp.site_symm == d[i]
143+
144+
85145
if __name__ == "__main__":
86146
unittest.main()

0 commit comments

Comments
 (0)