Advertisement
Guest User

Untitled

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