aboutsummaryrefslogtreecommitdiff
path: root/plip/visualization/chimera.py
diff options
context:
space:
mode:
Diffstat (limited to 'plip/visualization/chimera.py')
-rw-r--r--plip/visualization/chimera.py221
1 files changed, 0 insertions, 221 deletions
diff --git a/plip/visualization/chimera.py b/plip/visualization/chimera.py
deleted file mode 100644
index a37fffb..0000000
--- a/plip/visualization/chimera.py
+++ /dev/null
@@ -1,221 +0,0 @@
-class ChimeraVisualizer:
- """Provides visualization for Chimera."""
-
- def __init__(self, plcomplex, chimera_module, tid):
- self.chimera = chimera_module
- self.tid = tid
- self.uid = plcomplex.uid
- self.plipname = 'PLIP-%i' % self.tid
- self.hetid, self.chain, self.pos = self.uid.split(':')
- self.pos = int(self.pos)
- self.colorbyname = self.chimera.colorTable.getColorByName
- self.rc = self.chimera.runCommand
- self.getPseudoBondGroup = self.chimera.misc.getPseudoBondGroup
-
- if plcomplex is not None:
- self.plcomplex = plcomplex
- self.protname = plcomplex.pdbid # Name of protein with binding site
- self.ligname = plcomplex.hetid # Name of ligand
- self.metal_ids = plcomplex.metal_ids
- self.water_ids = []
- self.bs_res_ids = []
- self.models = self.chimera.openModels
-
- for md in self.models.list():
- if md.name == self.plipname:
- self.model = md
-
- self.atoms = self.atom_by_serialnumber()
-
- def set_initial_representations(self):
- """Set the initial representations"""
- self.update_model_dict()
- self.rc("background solid white")
- self.rc("setattr g display 0") # Hide all pseudobonds
- self.rc("~display #%i & :/isHet & ~:%s" % (self.model_dict[self.plipname], self.hetid))
-
- def update_model_dict(self):
- """Updates the model dictionary"""
- dct = {}
- models = self.chimera.openModels
- for md in models.list():
- dct[md.name] = md.id
- self.model_dict = dct
-
- def atom_by_serialnumber(self):
- """Provides a dictionary mapping serial numbers to their atom objects."""
- atm_by_snum = {}
- for atom in self.model.atoms:
- atm_by_snum[atom.serialNumber] = atom
- return atm_by_snum
-
- def show_hydrophobic(self):
- """Visualizes hydrophobic contacts."""
- grp = self.getPseudoBondGroup("Hydrophobic Interactions-%i" % self.tid, associateWith=[self.model])
- grp.lineType = self.chimera.Dash
- grp.lineWidth = 3
- grp.color = self.colorbyname('gray')
- for i in self.plcomplex.hydrophobic_contacts.pairs_ids:
- self.bs_res_ids.append(i[0])
-
- def show_hbonds(self):
- """Visualizes hydrogen bonds."""
- grp = self.getPseudoBondGroup("Hydrogen Bonds-%i" % self.tid, associateWith=[self.model])
- grp.lineWidth = 3
- for i in self.plcomplex.hbonds.ldon_id:
- b = grp.newPseudoBond(self.atoms[i[0]], self.atoms[i[1]])
- b.color = self.colorbyname('blue')
- self.bs_res_ids.append(i[0])
- for i in self.plcomplex.hbonds.pdon_id:
- b = grp.newPseudoBond(self.atoms[i[0]], self.atoms[i[1]])
- b.color = self.colorbyname('blue')
- self.bs_res_ids.append(i[1])
-
- def show_halogen(self):
- """Visualizes halogen bonds."""
- grp = self.getPseudoBondGroup("HalogenBonds-%i" % self.tid, associateWith=[self.model])
- grp.lineWidth = 3
- for i in self.plcomplex.halogen_bonds:
- b = grp.newPseudoBond(self.atoms[i[0]], self.atoms[i[1]])
- b.color = self.colorbyname('turquoise')
-
- self.bs_res_ids.append(i.acc_id)
-
- def show_stacking(self):
- """Visualizes pi-stacking interactions."""
- grp = self.getPseudoBondGroup("pi-Stacking-%i" % self.tid, associateWith=[self.model])
- grp.lineWidth = 3
- grp.lineType = self.chimera.Dash
- for i, stack in enumerate(self.plcomplex.pistacking):
-
- m = self.model
- r = m.newResidue("pseudoatoms", " ", 1, " ")
- centroid_prot = m.newAtom("CENTROID", self.chimera.Element("CENTROID"))
- x, y, z = stack.proteinring_center
- centroid_prot.setCoord(self.chimera.Coord(x, y, z))
- r.addAtom(centroid_prot)
-
- centroid_lig = m.newAtom("CENTROID", self.chimera.Element("CENTROID"))
- x, y, z = stack.ligandring_center
- centroid_lig.setCoord(self.chimera.Coord(x, y, z))
- r.addAtom(centroid_lig)
-
- b = grp.newPseudoBond(centroid_lig, centroid_prot)
- b.color = self.colorbyname('forest green')
-
- self.bs_res_ids += stack.proteinring_atoms
-
- def show_cationpi(self):
- """Visualizes cation-pi interactions"""
- grp = self.getPseudoBondGroup("Cation-Pi-%i" % self.tid, associateWith=[self.model])
- grp.lineWidth = 3
- grp.lineType = self.chimera.Dash
- for i, cat in enumerate(self.plcomplex.pication):
-
- m = self.model
- r = m.newResidue("pseudoatoms", " ", 1, " ")
- chargecenter = m.newAtom("CHARGE", self.chimera.Element("CHARGE"))
- x, y, z = cat.charge_center
- chargecenter.setCoord(self.chimera.Coord(x, y, z))
- r.addAtom(chargecenter)
-
- centroid = m.newAtom("CENTROID", self.chimera.Element("CENTROID"))
- x, y, z = cat.ring_center
- centroid.setCoord(self.chimera.Coord(x, y, z))
- r.addAtom(centroid)
-
- b = grp.newPseudoBond(centroid, chargecenter)
- b.color = self.colorbyname('orange')
-
- if cat.protcharged:
- self.bs_res_ids += cat.charge_atoms
- else:
- self.bs_res_ids += cat.ring_atoms
-
- def show_sbridges(self):
- """Visualizes salt bridges."""
- # Salt Bridges
- grp = self.getPseudoBondGroup("Salt Bridges-%i" % self.tid, associateWith=[self.model])
- grp.lineWidth = 3
- grp.lineType = self.chimera.Dash
- for i, sbridge in enumerate(self.plcomplex.saltbridges):
-
- m = self.model
- r = m.newResidue("pseudoatoms", " ", 1, " ")
- chargecenter1 = m.newAtom("CHARGE", self.chimera.Element("CHARGE"))
- x, y, z = sbridge.positive_center
- chargecenter1.setCoord(self.chimera.Coord(x, y, z))
- r.addAtom(chargecenter1)
-
- chargecenter2 = m.newAtom("CHARGE", self.chimera.Element("CHARGE"))
- x, y, z = sbridge.negative_center
- chargecenter2.setCoord(self.chimera.Coord(x, y, z))
- r.addAtom(chargecenter2)
-
- b = grp.newPseudoBond(chargecenter1, chargecenter2)
- b.color = self.colorbyname('yellow')
-
- if sbridge.protispos:
- self.bs_res_ids += sbridge.positive_atoms
- else:
- self.bs_res_ids += sbridge.negative_atoms
-
- def show_wbridges(self):
- """Visualizes water bridges"""
- grp = self.getPseudoBondGroup("Water Bridges-%i" % self.tid, associateWith=[self.model])
- grp.lineWidth = 3
- for i, wbridge in enumerate(self.plcomplex.waterbridges):
- c = grp.newPseudoBond(self.atoms[wbridge.water_id], self.atoms[wbridge.acc_id])
- c.color = self.colorbyname('cornflower blue')
- self.water_ids.append(wbridge.water_id)
- b = grp.newPseudoBond(self.atoms[wbridge.don_id], self.atoms[wbridge.water_id])
- b.color = self.colorbyname('cornflower blue')
- self.water_ids.append(wbridge.water_id)
- if wbridge.protisdon:
- self.bs_res_ids.append(wbridge.don_id)
- else:
- self.bs_res_ids.append(wbridge.acc_id)
-
- def show_metal(self):
- """Visualizes metal coordination."""
- grp = self.getPseudoBondGroup("Metal Coordination-%i" % self.tid, associateWith=[self.model])
- grp.lineWidth = 3
- for i, metal in enumerate(self.plcomplex.metal_complexes):
- c = grp.newPseudoBond(self.atoms[metal.metal_id], self.atoms[metal.target_id])
- c.color = self.colorbyname('magenta')
-
- if metal.location == 'water':
- self.water_ids.append(metal.target_id)
-
- if metal.location.startswith('protein'):
- self.bs_res_ids.append(metal.target_id)
-
- def cleanup(self):
- """Clean up the visualization."""
-
- if not len(self.water_ids) == 0:
- # Hide all non-interacting water molecules
- water_selection = []
- for wid in self.water_ids:
- water_selection.append('serialNumber=%i' % wid)
- self.rc("~display :HOH")
- self.rc("display :@/%s" % " or ".join(water_selection))
-
- # Show all interacting binding site residues
- self.rc("~display #%i & ~:/isHet" % self.model_dict[self.plipname])
- self.rc("display :%s" % ",".join([str(self.atoms[bsid].residue.id) for bsid in self.bs_res_ids]))
- self.rc("color lightblue :HOH")
-
- def zoom_to_ligand(self):
- """Centers the view on the ligand and its binding site residues."""
- self.rc("center #%i & :%s" % (self.model_dict[self.plipname], self.hetid))
-
- def refinements(self):
- """Details for the visualization."""
- self.rc("setattr a color gray @CENTROID")
- self.rc("setattr a radius 0.3 @CENTROID")
- self.rc("represent sphere @CENTROID")
- self.rc("setattr a color orange @CHARGE")
- self.rc("setattr a radius 0.4 @CHARGE")
- self.rc("represent sphere @CHARGE")
- self.rc("display :pseudoatoms")