comparison spring_package/Molecule.py @ 39:172398348efd draft

"planemo upload commit 26b4018c88041ee0ca7c2976e0a012015173d7b6-dirty"
author guerler
date Fri, 22 Jan 2021 15:50:27 +0000
parents 0be0af9e695d
children
comparison
equal deleted inserted replaced
38:80a4b98121b6 39:172398348efd
84 matId = self.toInt(nextLine[20:23]) 84 matId = self.toInt(nextLine[20:23])
85 matLine = nextLine[23:].split() 85 matLine = nextLine[23:].split()
86 matLine = list(map(lambda x: self.toFloat(x), matLine)) 86 matLine = list(map(lambda x: self.toFloat(x), matLine))
87 return matId, matLine 87 return matId, matLine
88 88
89 def createUnit(self, biomolNumber=1): 89 def createUnit(self, biomolNumber=0):
90 molecule = Molecule() 90 if biomolNumber == 0:
91 chainCount = 0 91 return self
92 for matrixDict in self.biomol[biomolNumber]: 92 else:
93 for chain in matrixDict["chains"]: 93 molecule = Molecule()
94 if chain in self.calpha: 94 chainCount = dict()
95 chainCopy = dict() 95 for matrixDict in self.biomol[biomolNumber]:
96 for residue in self.calpha[chain]: 96 for chain in matrixDict["chains"]:
97 chainCopy[residue] = self.calpha[chain][residue].copy() 97 if chain in self.calpha:
98 for atomNumber in chainCopy: 98 chainCopy = dict()
99 atom = chainCopy[atomNumber] 99 for residue in self.calpha[chain]:
100 rotmat = matrixDict["matrix"] 100 chainCopy[residue] = self.calpha[chain][residue].copy()
101 self.applyMatrix(atom, rotmat) 101 for atomNumber in chainCopy:
102 if chain in molecule.calpha: 102 atom = chainCopy[atomNumber]
103 chainName = "%s%d" % (chain, chainCount) 103 rotmat = matrixDict["matrix"]
104 else: 104 self.applyMatrix(atom, rotmat)
105 chainName = chain 105 if chain in chainCount:
106 molecule.calpha[chainName] = chainCopy 106 chainCount = chainCount[chain]
107 chainCount = chainCount + 1 107 chainName = "%s_%d" % (chain, chainCount)
108 return molecule 108 chainCount[chain] = chainCount + 1
109 else:
110 chainName = chain
111 chainCount[chain] = 0
112 molecule.calpha[chainName] = chainCopy
113 return molecule
109 114
110 def getSequence(self, chainName): 115 def getSequence(self, chainName):
111 seq = "" 116 seq = ""
112 if chainName not in self.calpha: 117 if chainName not in self.calpha:
113 raise Exception("Chain identifier not found [%s]" % chainName) 118 raise Exception("Chain identifier not found [%s]" % chainName)
143 code = dict(GLY="G", ALA="A", VAL="V", LEU="L", ILE="I", MET="M", PHE="F", PRO="P", TYR="Y", TRP="W", 148 code = dict(GLY="G", ALA="A", VAL="V", LEU="L", ILE="I", MET="M", PHE="F", PRO="P", TYR="Y", TRP="W",
144 LYS="K", SER="S", CYS="C", ASN="N", GLN="Q", HIS="H", THR="T", GLU="E", ASP="D", ARG="R") 149 LYS="K", SER="S", CYS="C", ASN="N", GLN="Q", HIS="H", THR="T", GLU="E", ASP="D", ARG="R")
145 return code[seq] if seq in code else "X" 150 return code[seq] if seq in code else "X"
146 151
147 def saveChain(self, chainName, outputName): 152 def saveChain(self, chainName, outputName):
148 print("Writing PDB file to %s." % outputName)
149 f = open(outputName, "w") 153 f = open(outputName, "w")
150 for residueNumber in sorted(self.calpha[chainName].keys()): 154 for residueNumber in sorted(self.calpha[chainName].keys()):
151 ca = self.calpha[chainName][residueNumber] 155 ca = self.calpha[chainName][residueNumber]
152 if ca["residue"] is not None: 156 if ca["residue"] is not None:
153 f.write(self.atomString(ca)) 157 f.write(self.atomString(ca))
154 f.close() 158 f.close()
155 159
156 def save(self, outputName, append=False, chainName=None): 160 def save(self, outputName, append=False, chainName=None, payload=None):
157 print("Writing atoms to PDB file to %s." % outputName)
158 fileFlag = "+a" if append else "w" 161 fileFlag = "+a" if append else "w"
159 f = open(outputName, fileFlag) 162 f = open(outputName, fileFlag)
163 if payload:
164 f.write("%s\n" % payload)
160 for atom in self.atoms: 165 for atom in self.atoms:
161 atom["chainName"] = chainName if chainName else atom["chainName"] 166 atom["chainName"] = chainName if chainName else atom["chainName"]
162 f.write(self.atomString(atom)) 167 f.write(self.atomString(atom))
163 f.write("TER\n") 168 f.write("TER\n")
164 f.close() 169 f.close()