-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproject1.py
83 lines (83 loc) · 2.64 KB
/
project1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/python3
import numpy as np
f = open("2FA9noend.pdb",'r')
lines = f.readlines()
x = []
y = []
z = []
m = []
I = []
records = []
massdict = {"C":12.01,"N":14.01,"O":16.0,"S":32.06}
choice = input("Do you want to center by Mass or geometry 'M' or 'G':")
if choice == 'M':
#center by mass
for line in lines:
words = line.split()
I.append(words)
atomdic = {}
atomdic['x'] = float(words[6]) #Coordinate x
atomdic['y'] = float(words[7]) #Coordinate y
atomdic['z'] = float(words[8]) #Coordinate z
element = words[11].strip()
atomdic['element'] = element
atomdic['mass'] = massdict[element]
x.append(atomdic['x'])
y.append(atomdic['y'])
z.append(atomdic['z'])
m.append(atomdic['mass'])
Cx = np.array(x)
Cy = np.array(y)
Cz = np.array(z)
M = np.array(m)
Mx = sum(Cx * M) / sum(M)
My = sum(Cy * M) / sum(M)
Mz = sum(Cz * M) / sum(M)
Cx = Cx[:] - Mx
Cy = Cy[:] - My
Cz = Cx[:] - Mz
else:
for line in lines:
words = line.split()
I.append(words)
atomdic = {}
atomdic['x'] = float(words[6]) #Coordinate x
atomdic['y'] = float(words[7]) #Coordinate y
atomdic['z'] = float(words[8]) #Coordinate z
element = words[11].strip()
atomdic['element'] = element
x.append(atomdic['x'])
y.append(atomdic['y'])
z.append(atomdic['z'])
Cx = np.array(x)
Cy = np.array(y)
Cz = np.array(z)
Gx = sum(Cx) / 1337
Gy = sum(Cy) / 1337
Gz = sum(Cz) / 1337
Cx = Cx[:] - Gx
Cy = Cy[:] - Gy
Cz = Cx[:] - Gz
for i in range(1337):
Atomdic = {}
I[i][6] = Cx[i]
I[i][7] = Cy[i]
I[i][8] = Cz[i]
Atomdic['num'] = I[i][1] #numebr of lines
Atomdic['at'] = I[i][2] #atom type
Atomdic['aa'] = I[i][3] #amino acid
Atomdic['C'] = I[i][4] #Chain ID
Atomdic['RN'] = I[i][5] #residue number
Atomdic['x'] = float(I[i][6]) #Coordinate x
Atomdic['y'] = float(I[i][7]) #Coordinate y
Atomdic['z'] = float(I[i][8]) #Coordinate z
Atomdic['O'] = float(I[i][9]) #occupancy
Atomdic['T'] = float(I[i][10]) #Temp factor
Atomdic['element'] = I[i][11] #element type
records.append(Atomdic)
f.close()
f = open("New_2FA9noend.pdb",'w')
for record in records:
f.write("Atom %4s %-3s %s %s %3s %7.3f %7.3f %7.3f %3.2f %5.2f %s" % (record['num'], record['at'], record['aa'], record['C'], record['RN'], record['x'], record['y'], record['z'],record['O'], record['T'], record['element']))
f.write('\n')
f.close()