mirror of
https://github.com/NehZio/Crystal-MEC
synced 2024-09-01 07:53:39 +02:00
Added plane orientation
This commit is contained in:
parent
3de31e2123
commit
a3ace74d72
@ -31,7 +31,7 @@ if __name__=='__main__':
|
|||||||
inputFile = sys.argv[1]
|
inputFile = sys.argv[1]
|
||||||
|
|
||||||
# Reads all the parameters from the input file
|
# Reads all the parameters from the input file
|
||||||
rB , rPP, center, X, Y, Z, symmetry, outputFile, pattern, npattern , atoms, dist, a, b, c, alpha, beta, gamma, showBath, evjen, showFrag, notInPseudo, notInFrag, symGenerator, generator, translation = read_input(inputFile)
|
rB , rPP, center, xOy, xOz, yOz, X, Y, Z, symmetry, outputFile, pattern, npattern , atoms, dist, a, b, c, alpha, beta, gamma, showBath, evjen, showFrag, notInPseudo, notInFrag, symGenerator, generator, translation = read_input(inputFile)
|
||||||
|
|
||||||
if verbose > 0:
|
if verbose > 0:
|
||||||
out_input_param(rB , rPP, center, X, Y, Z, symmetry, outputFile, pattern, npattern , atoms, dist, a, b, c, alpha, beta, gamma, showBath, evjen, showFrag, notInPseudo, notInFrag, symGenerator, generator, translation)
|
out_input_param(rB , rPP, center, X, Y, Z, symmetry, outputFile, pattern, npattern , atoms, dist, a, b, c, alpha, beta, gamma, showBath, evjen, showFrag, notInPseudo, notInFrag, symGenerator, generator, translation)
|
||||||
@ -79,25 +79,55 @@ if __name__=='__main__':
|
|||||||
|
|
||||||
|
|
||||||
# Orienting the big cell
|
# Orienting the big cell
|
||||||
|
if xOy != []:
|
||||||
|
a = find_center(xOy[0], coordinates)
|
||||||
|
b = a
|
||||||
|
w = [a]
|
||||||
|
while np.absolute(np.absolute(np.dot(a/np.linalg.norm(a),b/np.linalg.norm(b)))-1) < 1e-6:
|
||||||
|
b = find_center(xOy[1], coordinates, without=w)
|
||||||
|
w.append(b)
|
||||||
|
c = np.cross(a,b)
|
||||||
|
M = rotation_matrix(c, [0,0,1])
|
||||||
|
coordinates = rotate(M, coordinates)
|
||||||
|
if xOz != []:
|
||||||
|
a = find_center(xOz[0], coordinates)
|
||||||
|
b = a
|
||||||
|
w = [a]
|
||||||
|
while np.absolute(np.absolute(np.dot(a/np.linalg.norm(a),b/np.linalg.norm(b)))-1) < 1e-6:
|
||||||
|
b = find_center(xOz[1], coordinates, without=w)
|
||||||
|
w.append(b)
|
||||||
|
c = np.cross(a,b)
|
||||||
|
M = rotation_matrix(c, [0,1,0])
|
||||||
|
coordinates = rotate(M, coordinates)
|
||||||
|
if yOz != []:
|
||||||
|
a = find_center(yOz[0], coordinates)
|
||||||
|
b = a
|
||||||
|
w = [a]
|
||||||
|
while np.absolute(np.absolute(np.dot(a/np.linalg.norm(a),b/np.linalg.norm(b)))-1) < 1e-6:
|
||||||
|
b = find_center(yOz[1], coordinates, without=w)
|
||||||
|
w.append(b)
|
||||||
|
c = np.cross(a,b)
|
||||||
|
M = rotation_matrix(c, [1,0,0])
|
||||||
|
coordinates = rotate(M, coordinates)
|
||||||
if X != []:
|
if X != []:
|
||||||
k = [1,0,0]
|
k = [1,0,0]
|
||||||
|
|
||||||
xVec = find_center(X,coordinates)
|
xVec = find_center(X,coordinates)
|
||||||
M = rotation_matrix(k,xVec)
|
M = rotation_matrix(xVec, k)
|
||||||
|
|
||||||
coordinates = rotate(M, coordinates)
|
coordinates = rotate(M, coordinates)
|
||||||
if Y != []:
|
if Y != []:
|
||||||
k = [0,1,0]
|
k = [0,1,0]
|
||||||
|
|
||||||
yVec = find_center(Y,coordinates)
|
yVec = find_center(Y,coordinates)
|
||||||
M = rotation_matrix(k,yVec)
|
M = rotation_matrix(yVec, k)
|
||||||
|
|
||||||
coordinates = rotate(M, coordinates)
|
coordinates = rotate(M, coordinates)
|
||||||
if Z != []:
|
if Z != []:
|
||||||
k = [0,0,1]
|
k = [0,0,1]
|
||||||
|
|
||||||
zVec = find_center(Z,coordinates)
|
zVec = find_center(Z,coordinates)
|
||||||
M = rotation_matrix(k,zVec)
|
M = rotation_matrix(zVec, k)
|
||||||
|
|
||||||
coordinates = rotate(M, coordinates)
|
coordinates = rotate(M, coordinates)
|
||||||
|
|
||||||
|
@ -9,6 +9,9 @@ def read_input(inputFile):
|
|||||||
X = []
|
X = []
|
||||||
Y = []
|
Y = []
|
||||||
Z = []
|
Z = []
|
||||||
|
xOy = []
|
||||||
|
xOz = []
|
||||||
|
yOz = []
|
||||||
symmetry = []
|
symmetry = []
|
||||||
outputFile = ""
|
outputFile = ""
|
||||||
pattern = []
|
pattern = []
|
||||||
@ -67,6 +70,15 @@ def read_input(inputFile):
|
|||||||
elif ls[0].casefold() == 'z_axis':
|
elif ls[0].casefold() == 'z_axis':
|
||||||
ls.pop(0)
|
ls.pop(0)
|
||||||
Z = [i for i in ls]
|
Z = [i for i in ls]
|
||||||
|
elif ls[0].casefold() == "xoy":
|
||||||
|
xOy.append( f.readline().split() )
|
||||||
|
xOy.append( f.readline().split() )
|
||||||
|
elif ls[0].casefold() == "xoz":
|
||||||
|
xOz.append( f.readline().split() )
|
||||||
|
xOz.append( f.readline().split() )
|
||||||
|
elif ls[0].casefold() == "yoz":
|
||||||
|
yOz.append( f.readline().split() )
|
||||||
|
yOz.append( f.readline().split() )
|
||||||
elif ls[0].casefold() == 'symmetry':
|
elif ls[0].casefold() == 'symmetry':
|
||||||
ls.pop(0)
|
ls.pop(0)
|
||||||
symmetry = [i for i in ls]
|
symmetry = [i for i in ls]
|
||||||
@ -192,4 +204,4 @@ def read_input(inputFile):
|
|||||||
print("Bad input : missing the keyword -- %s --"%t)
|
print("Bad input : missing the keyword -- %s --"%t)
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
return rB , rPP, center, X, Y, Z, symmetry, outputFile, pattern, npattern , atoms, dist, a, b, c, alpha, beta, gamma, showBath, evjen, showFrag, notInPseudo, notInFrag, symGenerator, generator, translate
|
return rB , rPP, center, xOy, xOz, yOz, X, Y, Z, symmetry, outputFile, pattern, npattern , atoms, dist, a, b, c, alpha, beta, gamma, showBath, evjen, showFrag, notInPseudo, notInFrag, symGenerator, generator, translate
|
||||||
|
@ -119,7 +119,7 @@ def translate(v,coordinates):
|
|||||||
|
|
||||||
# Finds the point at the center of the given atoms that are the
|
# Finds the point at the center of the given atoms that are the
|
||||||
# closest to the origin
|
# closest to the origin
|
||||||
def find_center(centerList, coordinates):
|
def find_center(centerList, coordinates, without=[]):
|
||||||
|
|
||||||
centers = []
|
centers = []
|
||||||
for i in range(len(centerList)):
|
for i in range(len(centerList)):
|
||||||
@ -129,6 +129,13 @@ def find_center(centerList, coordinates):
|
|||||||
c.append(distance(c,[0,0,0])) # Computing the distance to the origin
|
c.append(distance(c,[0,0,0])) # Computing the distance to the origin
|
||||||
|
|
||||||
for at in coordinates:
|
for at in coordinates:
|
||||||
|
w = True
|
||||||
|
for a in without:
|
||||||
|
if distance(at, a) < 1e-6:
|
||||||
|
w = False
|
||||||
|
break
|
||||||
|
if not w:
|
||||||
|
continue
|
||||||
if at[3] in centerList:
|
if at[3] in centerList:
|
||||||
centers = sorted(centers, key=operator.itemgetter(3)) # Sorting the list with respect to the distance to the origin
|
centers = sorted(centers, key=operator.itemgetter(3)) # Sorting the list with respect to the distance to the origin
|
||||||
d = distance(at,[0,0,0])
|
d = distance(at,[0,0,0])
|
||||||
|
Loading…
Reference in New Issue
Block a user