forgotten changes in last commit + fromRandom
This commit is contained in:
parent
feca9fe0a0
commit
b97f10b6ff
|
@ -67,9 +67,7 @@ class Rotation:
|
|||
Rotation: Details needed (active/passive), rotation of (3,3,3,3)-matrix should be considered
|
||||
"""
|
||||
if isinstance(other, Rotation): # rotate a rotation
|
||||
qu = self.__class__(self.quaternion * other.quaternion)
|
||||
qu.standardize()
|
||||
return qu
|
||||
return self.__class__(self.quaternion * other.quaternion).standardize()
|
||||
elif isinstance(other, np.ndarray):
|
||||
if other.shape == (3,): # rotate a single (3)-vector
|
||||
( x, y, z) = self.quaternion.p
|
||||
|
@ -112,7 +110,7 @@ class Rotation:
|
|||
|
||||
def inversed(self):
|
||||
"""Inverse rotation/backward rotation"""
|
||||
return self.copy.inverse()
|
||||
return self.copy().inverse()
|
||||
|
||||
|
||||
def standardize(self):
|
||||
|
@ -122,7 +120,7 @@ class Rotation:
|
|||
|
||||
def standardized(self):
|
||||
"""Quaternion representation with positive q"""
|
||||
return self.copy.standardize()
|
||||
return self.copy().standardize()
|
||||
|
||||
|
||||
def misorientation(self,other):
|
||||
|
@ -310,7 +308,20 @@ class Rotation:
|
|||
else M + r.asM() * n # noqa add (multiples) of this rotation to average noqa
|
||||
eig, vec = np.linalg.eig(M/N)
|
||||
|
||||
return Rotation.fromQuaternion(np.real(vec.T[eig.argmax()]),acceptHomomorph = True)
|
||||
return cls.fromQuaternion(np.real(vec.T[eig.argmax()]),acceptHomomorph = True)
|
||||
|
||||
|
||||
@classmethod
|
||||
def fromRandom(cls):
|
||||
r = np.random.random(3)
|
||||
A = np.sqrt(r[2])
|
||||
B = np.sqrt(1.0-r[2])
|
||||
w = np.cos(2.0*np.pi*r[0])*A
|
||||
x = np.sin(2.0*np.pi*r[1])*B
|
||||
y = np.cos(2.0*np.pi*r[1])*B
|
||||
z = np.sin(2.0*np.pi*r[0])*A
|
||||
return cls.fromQuaternion([w,x,y,z],acceptHomomorph=True)
|
||||
|
||||
|
||||
|
||||
# ******************************************************************************************
|
||||
|
@ -433,15 +444,18 @@ class Symmetry:
|
|||
return symOps # yes, return list of rotations
|
||||
|
||||
|
||||
def inFZ(self,R):
|
||||
def inFZ(self,rodrigues):
|
||||
"""
|
||||
Check whether given Rodrigues vector falls into fundamental zone of own symmetry.
|
||||
|
||||
Fundamental zone in Rodrigues space is point symmetric around origin.
|
||||
"""
|
||||
if np.any(R == np.inf): return False
|
||||
if (len(rodrigues) != 3):
|
||||
raise ValueError('Input is not a Rodriques-Frank vector.\n')
|
||||
|
||||
if np.any(rodrigues == np.inf): return False
|
||||
|
||||
Rabs = abs(R[0:3]*R[3])
|
||||
Rabs = abs(rodrigues)
|
||||
|
||||
if self.lattice == 'cubic':
|
||||
return math.sqrt(2.0)-1.0 >= Rabs[0] \
|
||||
|
@ -471,10 +485,10 @@ class Symmetry:
|
|||
Representation of Orientation and Disorientation Data for Cubic, Hexagonal, Tetragonal and Orthorhombic Crystals
|
||||
Acta Cryst. (1991). A47, 780-789
|
||||
"""
|
||||
R = rodrigues
|
||||
if (len(R) != 3):
|
||||
if (len(rodrigues) != 3):
|
||||
raise ValueError('Input is not a Rodriques-Frank vector.\n')
|
||||
|
||||
R = rodrigues
|
||||
|
||||
epsilon = 0.0
|
||||
if self.lattice == 'cubic':
|
||||
return R[0] >= R[1]+epsilon and R[1] >= R[2]+epsilon and R[2] >= epsilon
|
||||
|
@ -930,7 +944,7 @@ class Orientation:
|
|||
r = b*aInv
|
||||
for k in range(2):
|
||||
r.inverse()
|
||||
breaker = self.lattice.symmetry.inFZ(r.asRodrigues()) \
|
||||
breaker = self.lattice.symmetry.inFZ(r.asRodrigues(vector=True)) \
|
||||
and (not SST or other.lattice.symmetry.inDisorientationSST(r.asRodrigues(vector=True)))
|
||||
if breaker: break
|
||||
if breaker: break
|
||||
|
@ -942,7 +956,7 @@ class Orientation:
|
|||
|
||||
|
||||
def inFZ(self):
|
||||
return self.lattice.symmetry.inFZ(self.rotation.asRodrigues())
|
||||
return self.lattice.symmetry.inFZ(self.rotation.asRodrigues(vector=True))
|
||||
|
||||
def equivalentOrientations(self,members=[]):
|
||||
"""List of orientations which are symmetrically equivalent"""
|
||||
|
|
|
@ -193,7 +193,7 @@ class Quaternion:
|
|||
|
||||
def normalized(self):
|
||||
"""Returns normalized copy"""
|
||||
return self.copy.normalize()
|
||||
return self.copy().normalize()
|
||||
|
||||
|
||||
def conjugate(self):
|
||||
|
@ -203,7 +203,7 @@ class Quaternion:
|
|||
|
||||
def conjugated(self):
|
||||
"""Returns conjugated copy"""
|
||||
return self.copy.conjugate()
|
||||
return self.copy().conjugate()
|
||||
|
||||
|
||||
def homomorph(self):
|
||||
|
@ -214,4 +214,4 @@ class Quaternion:
|
|||
|
||||
def homomorphed(self):
|
||||
"""Returns homomorphed copy"""
|
||||
return self.copy.homomorph()
|
||||
return self.copy().homomorph()
|
||||
|
|
Loading…
Reference in New Issue