In [1]:
from __future__ import print_function
import numpy as np
import pandas as pd
from Bio import PDB
In [2]:
#!rm -f 1tup.cif 2>/dev/null
#!wget "http://www.rcsb.org/pdb/download/downloadFile.do?fileFormat=cif&compression=NO&structureId=1TUP" -O 1tup.cif
#parser = PDB.MMCIFParser()
#p53_1tup = parser.get_structure('P53', '1tup.cif')
In [3]:
repository = PDB.PDBList()
parser = PDB.PDBParser()
repository.retrieve_pdb_file('1TUP', pdir='.')
p53_1tup = parser.get_structure('P 53', 'pdb1tup.ent')
In [4]:
my_residues = set()
for residue in p53_1tup.get_residues():
my_residues.add(residue.id[0])
print(my_residues)
In [10]:
def get_mass(atoms, accept_fun=lambda atom: atom.parent.id[0] != 'W'):
return sum([atom.mass for atom in atoms if accept_fun(atom)])
chain_names = [chain.id for chain in p53_1tup.get_chains()]
my_mass = np.ndarray((len(chain_names), 3))
for i, chain in enumerate(p53_1tup.get_chains()):
my_mass[i, 0] = get_mass(chain.get_atoms())
my_mass[i, 1] = get_mass(chain.get_atoms(), accept_fun=lambda atom: atom.parent.id[0] not in [' ', 'W'])
my_mass[i, 2] = get_mass(chain.get_atoms(), accept_fun=lambda atom: atom.parent.id[0] == 'W')
masses = pd.DataFrame(my_mass, index=chain_names, columns=['No Water', 'Zincs', 'Water'])
masses
Out[10]:
In [6]:
def get_center(atoms, weight_fun=lambda atom: 1 if atom.parent.id[0] != 'W' else 0):
xsum = ysum = zsum = 0.0
acum = 0.0
for atom in atoms:
x, y, z = atom.coord
weight = weight_fun(atom)
acum += weight
xsum += weight * x
ysum += weight * y
zsum += weight * z
return xsum / acum, ysum / acum, zsum / acum
In [7]:
print(get_center(p53_1tup.get_atoms()))
print(get_center(p53_1tup.get_atoms(),
weight_fun=lambda atom: atom.mass if atom.parent.id[0] != 'W' else 0))
In [8]:
my_center = np.ndarray((len(chain_names), 6))
for i, chain in enumerate(p53_1tup.get_chains()):
x, y, z = get_center(chain.get_atoms())
my_center[i, 0] = x
my_center[i, 1] = y
my_center[i, 2] = z
x, y, z = get_center(chain.get_atoms(), weight_fun=lambda atom: atom.mass if atom.parent.id[0] != 'W' else 0)
my_center[i, 3] = x
my_center[i, 4] = y
my_center[i, 5] = z
weights = pd.DataFrame(my_center, index=chain_names, columns=['X', 'Y', 'Z', 'X (Mass)', 'Y (Mass)', 'Z (Mass)'])
weights
Out[8]:
In [9]:
#Pymol viz