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 | 
