Mercurial > repos > guerler > springsuite
annotate spring_package/Molecule.py @ 17:c790d25086dc draft
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
| author | guerler | 
|---|---|
| date | Wed, 28 Oct 2020 05:11:56 +0000 | 
| parents | |
| children | 
| rev | line source | 
|---|---|
| 
17
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
1 class Molecule: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
2 def __init__(self, fileName = None): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
3 self.calpha = dict() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
4 self.biomol = dict() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
5 self.rotmat = dict() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
6 self.atoms = list() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
7 if fileName is not None: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
8 self.fromFile(fileName) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
9 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
10 def fromFile(self, fileName): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
11 biomolNumber = 0 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
12 biomolChains = list() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
13 with open(fileName) as file: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
14 for index, line in enumerate(file): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
15 key = line[0:6].strip() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
16 if key == "ATOM": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
17 atom = line[12:16] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
18 atomNumber = line[6:11] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
19 chainName = line[21:22] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
20 if chainName not in self.calpha: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
21 self.calpha[chainName] = dict() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
22 x = self.toFloat(line[30:38]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
23 y = self.toFloat(line[38:46]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
24 z = self.toFloat(line[46:54]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
25 occupancy = self.toFloat(line[54:60], optional=True) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
26 temperature = self.toFloat(line[54:60], optional=True) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
27 residue = line[17:20] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
28 residueNumber = self.toInt(line[22:26]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
29 atomNumber = self.toInt(line[6:11]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
30 atomName = line[12:16] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
31 atomDict = dict(x=x, y=y, z=z, | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
32 residue=residue, | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
33 occupancy=occupancy, | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
34 temperature=temperature, | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
35 atomNumber=atomNumber, | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
36 atomName=atomName, | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
37 residueNumber=residueNumber, | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
38 chainName=chainName) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
39 if atom.strip() == "CA": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
40 self.calpha[chainName][residueNumber] = atomDict | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
41 self.atoms.append(atomDict) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
42 biokey = "REMARK 350 BIOMOLECULE:" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
43 if line[0:len(biokey)] == biokey: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
44 biomolNumber = self.toInt(line[len(biokey):]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
45 biokey = "REMARK 350 APPLY THE FOLLOWING TO CHAINS:" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
46 nextLine = next(file) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
47 while nextLine[:len(biokey)] != biokey: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
48 nextLine = next(file) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
49 biomolChains = nextLine[len(biokey):].split(",") | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
50 biomolChains = list(map(lambda x: x.strip(), biomolChains)) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
51 biokey = "REMARK 350 AND CHAINS:" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
52 nextLine = next(file) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
53 while nextLine[:len(biokey)] == biokey: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
54 moreChains = nextLine[len(biokey):].split(",") | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
55 moreChains = list(map(lambda x: x.strip(), moreChains)) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
56 biomolChains = biomolChains + moreChains | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
57 nextLine = next(file) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
58 biokey = "REMARK 350 BIOMT" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
59 if nextLine[:len(biokey)] == biokey: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
60 biomolMatId1, biomolMat1 = self.getFloats(nextLine) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
61 nextLine = next(file) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
62 biomolMatId2, biomolMat2 = self.getFloats(nextLine) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
63 nextLine = next(file) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
64 biomolMatId3, biomolMat3 = self.getFloats(nextLine) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
65 if biomolMatId1 != biomolMatId2 or biomolMatId1 != biomolMatId3: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
66 raise Exception("Invalid rotation matrix format [%s]." % biomolMatId1) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
67 matrix = [biomolMat1, biomolMat2, biomolMat3] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
68 biomolChains = [c for c in biomolChains if c] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
69 if biomolNumber not in self.rotmat: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
70 self.rotmat[biomolNumber] = list() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
71 self.rotmat[biomolNumber].append(dict(chains=biomolChains, matrix=matrix)) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
72 removeChains = [] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
73 for chainName in self.calpha: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
74 if len(self.calpha[chainName]) == 0: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
75 removeChains.append(chainName) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
76 for chainName in removeChains: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
77 del self.calpha[chainName] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
78 if not self.calpha: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
79 raise Exception("Molecule has no atoms.") | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
80 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
81 def getFloats(self, nextLine): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
82 matId = self.toInt(nextLine[20:23]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
83 matLine = nextLine[23:].split() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
84 matLine = list(map(lambda x: self.toFloat(x), matLine)) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
85 return matId, matLine | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
86 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
87 def createUnit(self, biomolNumber = 1): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
88 molecule = Molecule() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
89 chainCount = 0 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
90 for matrixDict in self.rotmat[biomolNumber]: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
91 for chain in matrixDict["chains"]: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
92 if chain in self.calpha: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
93 chainCopy = dict() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
94 for residue in self.calpha[chain]: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
95 chainCopy[residue] = self.calpha[chain][residue].copy() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
96 for atomNumber in chainCopy: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
97 atom = chainCopy[atomNumber] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
98 rotmat = matrixDict["matrix"] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
99 self.applyMatrix(atom, rotmat) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
100 if chain in molecule.calpha: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
101 chainName = chainCount | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
102 else: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
103 chainName = chain | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
104 molecule.calpha[chainName] = chainCopy | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
105 chainCount = chainCount + 1 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
106 return molecule | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
107 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
108 def applyMatrix(self, atom, rotmat): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
109 newx = atom["x"] * rotmat[0][0] + atom["y"] * rotmat[0][1] + atom["z"] * rotmat[0][2] + rotmat[0][3] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
110 newy = atom["x"] * rotmat[1][0] + atom["y"] * rotmat[1][1] + atom["z"] * rotmat[1][2] + rotmat[1][3] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
111 newz = atom["x"] * rotmat[2][0] + atom["y"] * rotmat[2][1] + atom["z"] * rotmat[2][2] + rotmat[2][3] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
112 atom["x"] = newx | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
113 atom["y"] = newy | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
114 atom["z"] = newz | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
115 return atom | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
116 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
117 def toFloat(self, x, optional=False): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
118 try: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
119 return float(x) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
120 except: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
121 if not optional: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
122 raise Exception("Invalid float conversion [%s]." % x) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
123 return 0.0 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
124 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
125 def toInt(self, x): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
126 try: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
127 return int(x) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
128 except: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
129 raise Exception("Invalid integer conversion [%s]." % x) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
130 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
131 def saveChain(self, chainName, outputName): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
132 print ("Writing PDB file to %s." % outputName) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
133 f = open(outputName, "w") | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
134 for residueNumber in sorted(self.calpha[chainName].keys()): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
135 ca = self.calpha[chainName][residueNumber] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
136 if ca["residue"] is not None: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
137 f.write(self.atomString(ca)) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
138 f.close() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
139 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
140 def save(self, outputName, append=False, chainName=None): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
141 print ("Writing atoms to PDB file to %s." % outputName) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
142 fileFlag = "+a" if append else "w" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
143 f = open(outputName, fileFlag) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
144 for atom in self.atoms: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
145 atom["chainName"] = chainName if chainName else atom["chainName"] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
146 f.write(self.atomString(atom)) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
147 f.write("TER\n") | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
148 f.close() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
149 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
150 def atomString(self, atom): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
151 return "ATOM %5d %s %s %s%4d %8.3f%8.3f%8.3f%6.2f%6.2f\n" % (atom["atomNumber"], atom["atomName"], atom["residue"], atom["chainName"], atom["residueNumber"], atom["x"], atom["y"], atom["z"], atom["occupancy"], atom["temperature"]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
152 | 
