@@ -771,95 +771,79 @@ def get_conventional_standard_structure(
771
771
latt2 = Lattice ([m [tp2 [0 ]], m [tp2 [1 ]], m [2 ]])
772
772
lengths = latt2 .lengths
773
773
angles = latt2 .angles
774
- if angles [0 ] > 90 :
775
- # if the angle is > 90 we invert a and b to get
776
- # an angle < 90
777
- a , b , c , alpha , beta , gamma = Lattice ([- m [tp2 [0 ]], - m [tp2 [1 ]], m [2 ]]).parameters
778
- transf = np .zeros (shape = (3 , 3 ))
774
+ alpha_degrees = angles [0 ]
775
+ if alpha_degrees == 90 :
776
+ continue
777
+
778
+ transf = np .zeros (shape = (3 , 3 ))
779
+ transf [2 ][2 ] = 1
780
+
781
+ if alpha_degrees > 90 :
782
+ # if the angle is > 90 we invert a and b to get an angle < 90
783
+ a , b , c , alpha_degrees , beta , gamma = Lattice ([- m [tp2 [0 ]], - m [tp2 [1 ]], m [2 ]]).parameters
779
784
transf [0 ][tp2 [0 ]] = - 1
780
785
transf [1 ][tp2 [1 ]] = - 1
781
- transf [2 ][2 ] = 1
782
- alpha = math .pi * alpha / 180
783
- new_matrix = [
784
- [a , 0 , 0 ],
785
- [0 , b , 0 ],
786
- [0 , c * cos (alpha ), c * sin (alpha )],
787
- ]
788
- continue
789
786
790
- if angles [0 ] < 90 :
791
- transf = np .zeros (shape = (3 , 3 ))
787
+ elif alpha_degrees < 90 : # otherwise no inversion
792
788
transf [0 ][tp2 [0 ]] = 1
793
789
transf [1 ][tp2 [1 ]] = 1
794
- transf [2 ][2 ] = 1
795
790
a , b , c = lengths
796
- alpha = math .pi * angles [0 ] / 180
797
- new_matrix = [
798
- [a , 0 , 0 ],
799
- [0 , b , 0 ],
800
- [0 , c * cos (alpha ), c * sin (alpha )],
801
- ]
791
+ alpha_degrees = angles [0 ]
792
+
793
+ alpha_radians = math .pi * alpha_degrees / 180
794
+ new_matrix = [
795
+ [a , 0 , 0 ],
796
+ [0 , b , 0 ],
797
+ [0 , c * cos (alpha_radians ), c * sin (alpha_radians )],
798
+ ]
802
799
803
800
if new_matrix is None :
804
- # this if is to treat the case
805
- # where alpha==90 (but we still have a monoclinic sg
801
+ # this if is to treat the case where alpha==90 (but we still have a monoclinic sg), with C unchanged
802
+ # transf is already defined as [[0,0,0],[0,0,0],[0,0,1]], and sorted_dic only contains a & b:
806
803
new_matrix = [[a , 0 , 0 ], [0 , b , 0 ], [0 , 0 , c ]]
807
- transf = np .zeros (shape = (3 , 3 ))
808
- transf [2 ] = [0 , 0 , 1 ] # see issue #1929
809
804
for idx , dct in enumerate (sorted_dic ):
810
805
transf [idx ][dct ["orig_index" ]] = 1
806
+
811
807
# if not C-setting
812
808
else :
813
809
# try all permutations of the axis
814
- # keep the ones with the non-90 angle=alpha
815
- # and b<c
810
+ # keep the ones with the non-90 angle=alpha and b<c
816
811
new_matrix = None
817
812
818
813
for tp3 in itertools .permutations (list (range (3 )), 3 ):
819
814
m = lattice .matrix
820
815
a , b , c , alpha , beta , gamma = Lattice ([m [tp3 [0 ]], m [tp3 [1 ]], m [tp3 [2 ]]]).parameters
816
+ if alpha == 90 or b >= c :
817
+ continue
818
+ transf = np .zeros (shape = (3 , 3 ))
819
+ transf [2 ][tp3 [2 ]] = 1
820
+
821
821
if alpha > 90 and b < c :
822
822
a , b , c , alpha , beta , gamma = Lattice ([- m [tp3 [0 ]], - m [tp3 [1 ]], m [tp3 [2 ]]]).parameters
823
- transf = np .zeros (shape = (3 , 3 ))
824
823
transf [0 ][tp3 [0 ]] = - 1
825
824
transf [1 ][tp3 [1 ]] = - 1
826
- transf [2 ][tp3 [2 ]] = 1
827
- alpha = math .pi * alpha / 180
828
- new_matrix = [
829
- [a , 0 , 0 ],
830
- [0 , b , 0 ],
831
- [0 , c * cos (alpha ), c * sin (alpha )],
832
- ]
833
- continue
834
825
835
- if alpha < 90 and b < c :
836
- transf = np .zeros (shape = (3 , 3 ))
826
+ elif alpha < 90 and b < c :
837
827
transf [0 ][tp3 [0 ]] = 1
838
828
transf [1 ][tp3 [1 ]] = 1
839
- transf [2 ][tp3 [2 ]] = 1
840
- alpha = math .pi * alpha / 180
841
- new_matrix = [
842
- [a , 0 , 0 ],
843
- [0 , b , 0 ],
844
- [0 , c * cos (alpha ), c * sin (alpha )],
845
- ]
846
829
847
- if new_matrix is None :
848
- # this if is to treat the case
849
- # where alpha==90 (but we still have a monoclinic sg
830
+ alpha = math .pi * alpha / 180
850
831
new_matrix = [
851
- [sorted_lengths [ 0 ] , 0 , 0 ],
852
- [0 , sorted_lengths [ 1 ] , 0 ],
853
- [0 , 0 , sorted_lengths [ 2 ] ],
832
+ [a , 0 , 0 ],
833
+ [0 , b , 0 ],
834
+ [0 , c * cos ( alpha ), c * sin ( alpha ) ],
854
835
]
855
- transf = np .zeros (shape = (3 , 3 ))
856
- for idx , dct in enumerate (sorted_dic ):
836
+
837
+ if new_matrix is None :
838
+ # this if is to treat the case where alpha==90 (but we still have a monoclinic sg)
839
+ new_matrix = list (np .zeros (shape = (3 , 3 )))
840
+ for idx , dct in enumerate (sorted_dic ): # vectors sorted by length (a<=b<=c)
841
+ new_matrix [idx ] = dct ["vec" ]
857
842
transf [idx ][dct ["orig_index" ]] = 1
858
843
859
844
if international_monoclinic :
860
845
# The above code makes alpha the non-right angle.
861
- # The following will convert to proper international convention
862
- # that beta is the non-right angle.
846
+ # The following will convert to proper international convention that beta is the non-right angle
863
847
op = [[0 , 1 , 0 ], [1 , 0 , 0 ], [0 , 0 , - 1 ]]
864
848
transf = np .dot (op , transf )
865
849
new_matrix = np .dot (op , new_matrix )
0 commit comments