PDB Parse basics
parent
249a0e21d4
commit
9aab335c9d
Binary file not shown.
|
After Width: | Height: | Size: 151 KiB |
Binary file not shown.
|
|
@ -0,0 +1,20 @@
|
|||
class Atom:
|
||||
|
||||
def __init__(self, ATOM_ID, ATOM_NAME, ALT_LOCAT, RES_NAME, CHAIN_ID,
|
||||
RES_SEQ_NB, RES_INSER_CODE, COORD_X, COORD_Y, COORD_Z,
|
||||
OCCUPANCY, TEMP_FACT, ELEM_SYMBOL, ATOM_CHARGE):
|
||||
|
||||
self.ATOM_ID = ATOM_ID
|
||||
self.ATOM_NAME = ATOM_NAME
|
||||
self.ALT_LOCAT = ALT_LOCAT
|
||||
self.RES_NAME = RES_NAME
|
||||
self.CHAIN_ID = CHAIN_ID
|
||||
self.RES_SEQ_NB = RES_SEQ_NB
|
||||
self.RES_INSER_CODE = RES_INSER_CODE
|
||||
self.COORD_X = COORD_X
|
||||
self.COORD_Y = COORD_Y
|
||||
self.COORD_Z = COORD_Z
|
||||
self.OCCUPANCY = OCCUPANCY
|
||||
self.TEMP_FACT = TEMP_FACT
|
||||
self.ELEM_SYMBOL = ELEM_SYMBOL
|
||||
self.ATOM_CHARGE = ATOM_CHARGE
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
import sys
|
||||
#import collections
|
||||
|
||||
|
||||
# custom imports
|
||||
from atom import *
|
||||
|
||||
class PDBFile:
|
||||
|
||||
def getContent(self, filename):
|
||||
with open(filename) as f:
|
||||
return(f.readlines())
|
||||
|
||||
def getHeader(self):
|
||||
#Metadata = collections.namedtuple("Metadata", ["header", "compound", "source", "author"])
|
||||
Metadata = {}
|
||||
for line in self.rawLines:
|
||||
# no need to continue if meta are complete
|
||||
if(len(Metadata) <4):
|
||||
if(line[0:10] == "HEADER "):
|
||||
Metadata['header']=line
|
||||
elif(line[0:10] == "COMPND 2"):
|
||||
Metadata['compound']=line
|
||||
elif(line[0:10] == "SOURCE 2"):
|
||||
Metadata['source']=line
|
||||
elif(line[0:10] == "AUTHOR "):
|
||||
Metadata['author']=line
|
||||
else:
|
||||
# if meta are complete, stop parsing
|
||||
break
|
||||
return(Metadata)
|
||||
|
||||
def getAtoms(self):
|
||||
self.ATOMS = []
|
||||
|
||||
for line in self.rawLines:
|
||||
if line.startswith("ATOM" or "HETATM"):
|
||||
atom = Atom(ATOM_ID = int(line[6:11].strip()),
|
||||
ATOM_NAME = line[12:16].strip(),
|
||||
ALT_LOCAT = line[16:17].strip(),
|
||||
RES_NAME = line[17:20].strip(),
|
||||
CHAIN_ID = line[21:22].strip(),
|
||||
RES_SEQ_NB = int(line[22:26].strip()),
|
||||
RES_INSER_CODE = line[26:27].strip(),
|
||||
COORD_X = float(line[30:38].strip()),
|
||||
COORD_Y = float(line[38:46].strip()),
|
||||
COORD_Z = float(line[46:54].strip()),
|
||||
OCCUPANCY = float(line[54:60].strip()),
|
||||
TEMP_FACT = float(line[60:66].strip()),
|
||||
ELEM_SYMBOL = line[76:78].strip(),
|
||||
ATOM_CHARGE = line[78:80].strip())
|
||||
self.ATOMS.append(atom)
|
||||
|
||||
|
||||
def __init__(self, filename):
|
||||
self.rawLines = self.getContent(filename)
|
||||
self.Metadata = self.getHeader()
|
||||
self.getAtoms()
|
||||
for elem in self.Metadata :
|
||||
print(self.Metadata[elem], end="")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if(len(sys.argv)<2):
|
||||
print("Not enough arguments! Run with --help to learn more about proper"
|
||||
"call structure and parameters.")
|
||||
else:
|
||||
pdbFile = PDBFile(sys.argv[1])
|
||||
Loading…
Reference in New Issue