Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sys, os, re # importiert das pythonmodul sys
  5.  
  6. class HelixExtraction(object):
  7.  
  8. def __init__(self, name, atomIndexNumberBegin,
  9. atomIndexNumberEnd): # hier definiere ich, was mein objekt hat (name, anfang, ende)
  10. self.name = name
  11. self.atomIndexNumberBegin = atomIndexNumberBegin
  12. self.atomIndexNumberEnd = atomIndexNumberEnd
  13. self.outputStream = None
  14. self.relevantAminoAcidNumbers = []
  15.  
  16. beginNumeric = int(re.sub('[^0-9]+', '', atomIndexNumberBegin))
  17. beginAlpha = re.sub('[^a-zA-Z]+', '', atomIndexNumberBegin)
  18. endNumeric = int(re.sub('[^0-9]+', '', atomIndexNumberEnd))
  19. endAlpha = re.sub('[^a-zA-Z]+', '', atomIndexNumberEnd)
  20.  
  21. for numeric in range(beginNumeric, endNumeric + 1):
  22. self.relevantAminoAcidNumbers.append(numeric)
  23. for alpha in range(ord(beginAlpha), ord(endAlpha) + 1):
  24. self.relevantAminoAcidNumbers.append(str(numeric) + chr(alpha))
  25.  
  26. def begin(self):
  27. self.outputStream = open(self.name,
  28. "w") # w sagt, dass er ne neue dateie schreiben soll --> w ist ein parameter für die Methode open
  29.  
  30. def addAtomLine(self, atomLine):
  31. self.outputStream.write(atomLine)
  32.  
  33. def end(self):
  34. self.outputStream.close()
  35.  
  36.  
  37. def readPdbFile(inputdirectoryname, helixPdbFileInputName,
  38. outputdirectoryname): # in Klammern kommt der Parameter, den wir einführen können. In iesem Fall der Name der Datei
  39. print(helixPdbFileInputName)
  40. helixPdbFile = open(
  41. inputdirectoryname + "\\" + helixPdbFileInputName).readlines() # das öffnet die Datei und lädt alle Zeilen in die Variable helixPdbFile
  42. currentHelixExtractionNumber = 0
  43. helixExtractionList = [] # hier legen wir register/liste an. Ist ursprünglich ler. Liste mit eckigen Klammern. Durch die Klammer erkennt python, dass es sich um Liste handelt
  44. currentlyExtracting = False
  45. readingHelixDefinitions = False
  46. totalNumberOfHelixExtractions = 0
  47.  
  48. for pdbLine in helixPdbFile: # diese Zeile ittariert über jede Zeile im Dokument
  49. pdbLineTokens = pdbLine.split() # wir teilen Zeile in ihre Tokens
  50. if pdbLineTokens[
  51. 0] == "HELIX": # wenn das erste Token einer Zeile Helix ist, dann beginnen wir mit dem Ausschneiden der Helix, wenn das erste Token Helix ist --> gehts weiter
  52. print("Neue Helix gefunden - Nummer: " + str(totalNumberOfHelixExtractions))
  53. readingHelixDefinitions = True
  54. helixBegin = pdbLineTokens[5]
  55. helixEnd = pdbLineTokens[8]
  56. if re.search('[a-zA-Z]', helixBegin) == None:
  57. helixBegin = helixBegin + "A"
  58.  
  59. if re.search('[a-zA-Z]', helixEnd) == None:
  60. helixEnd = helixEnd + "A"
  61.  
  62. helixExtractionList.append(HelixExtraction(
  63. outputdirectoryname + "\\" + os.path.splitext(helixPdbFileInputName)[0] + "Helix" + str(
  64. totalNumberOfHelixExtractions) + ".pdb", helixBegin,
  65. helixEnd)) # append fügt unserer Liste ein neues Item hinzu
  66. totalNumberOfHelixExtractions += 1
  67. if readingHelixDefinitions and pdbLineTokens[0] != "HELIX":
  68. print("Alle Helixen Eingelesen - Insgesamt" + str(totalNumberOfHelixExtractions))
  69. break
  70.  
  71. for currentHelixExtraction in helixExtractionList:
  72. currentHelixExtraction.begin()
  73. lastAminoAcidNumber = -1
  74. print("Beginne nun mit Extrahieren von Helix: " + currentHelixExtraction.name)
  75. for pdbLine in helixPdbFile:
  76. pdbLineTokens = pdbLine.split()
  77. if pdbLineTokens[0] == "ATOM":
  78. aminoAcidNumberTokenIndex = 5
  79. if len(pdbLineTokens[2]) >= 7:
  80. aminoAcidNumberTokenIndex = 4
  81.  
  82. print(pdbLineTokens)
  83. aminoAcidNumber = pdbLineTokens[aminoAcidNumberTokenIndex]
  84.  
  85. if aminoAcidNumber in currentHelixExtraction.relevant: # mit int mache ich aus Text eine Zahl
  86. print(pdbLineTokens)
  87. print(currentHelixExtraction.atomIndexNumberBegin, currentHelixExtraction.atomIndexNumberEnd)
  88. currentHelixExtraction.addAtomLine(pdbLine)
  89. lastAminoAcidNumber = aminoAcidNumber
  90. elif lastAminoAcidNumber != -1 and lastAminoAcidNumber == currentHelixExtraction.relevantAminoAcidNumbers[-1] and aminoAcidNumber != currentHelixExtraction.relevantAminoAcidNumbers[-1]:
  91. currentHelixExtraction.end() # close ist funktion auf datei, end ist funktion auf helix objekt
  92. print("fertig mit aktueller Helix")
  93.  
  94. print(currentHelixExtraction.atomIndexNumberBegin, currentHelixExtraction.atomIndexNumberEnd)
  95.  
  96.  
  97. if __name__ == '__main__': # main wird als erstes ausgeführt, wenn python programm gestartet wird
  98. outputdirectoryname = sys.argv[2]
  99. for fileName in os.listdir(
  100. sys.argv[1]): # sys.arg schaut in den kommandozeilenparameter und wir holen uns den 1. von denen
  101. if fileName.endswith(".pdb"):
  102. readPdbFile(sys.argv[1], fileName, outputdirectoryname)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement