1 # -*- coding: utf-8 -*-
3 -------------------------------------------------------------------------------
4 show_UNRES.py - UNRES model viewer v 1.0
5 -------------------------------------------------------------------------------
7 Written by Dawid Jagieła (lightnir@chem.univ.gda.pl) Feb 2013
11 from chempy import cpv
14 from pymol.cgo import *
16 from pymol.menu import *
20 # Add unres to known represtentations
21 from pymol import constants
22 constants.repres_sc.append('unres')
25 def show_UNRES(sl='(all)'):
30 # resn = [color_Red, color_Green, color_Blue, ellipsoid_width, ellipsoid_length ]
31 resdb = { 'CYS': [1.000, 1.000, 0.000, 1.33741, 2.96868],
32 'MET': [0.000, 1.000, 0.000, 1.36694, 3.08863],
33 'PHE': [0.000, 0.392, 0.000, 1.48323, 3.04238],
34 'ILE': [0.000, 1.000, 0.000, 1.44098, 3.17389],
35 'LEU': [0.000, 1.000, 0.000, 1.51054, 2.52078],
36 'VAL': [0.000, 1.000, 0.000, 1.42072, 2.68924],
37 'TRP': [0.000, 0.392, 0.000, 1.23867, 3.47403],
38 'TYR': [0.596, 0.984, 0.596, 1.23060, 3.35434],
39 'ALA': [0.000, 1.000, 0.000, 1.23266, 1.72686],
40 'GLY': [1.000, 1.000, 1.000, 1.24626, 1.11383],
41 'THR': [1.000, 0.000, 1.000, 1.28674, 2.59210],
42 'SER': [1.000, 0.000, 1.000, 1.22820, 1.68800],
43 'GLN': [1.000, 0.000, 1.000, 1.24239, 2.22201],
44 'ASN': [1.000, 0.000, 1.000, 1.24447, 2.24946],
45 'GLU': [1.000, 0.000, 0.000, 1.25448, 2.05551],
46 'ASP': [1.000, 0.000, 0.000, 1.25417, 1.77556],
47 'HIS': [1.000, 0.000, 1.000, 1.21103, 3.02627],
48 'ARG': [0.000, 0.000, 1.000, 1.13573, 3.25143],
49 'LYS': [0.000, 0.000, 1.000, 1.22604, 4.50054],
50 'PRO': [0.000, 1.000, 1.000, 1.35131, 2.20525]
54 # Get pseudo-peptide group positions
55 atoms=cmd.get_model(sl+" & n. CA").atom
57 for i in xrange(0,len(atoms)-1):
58 p.append( [atoms[i].coord[0]+(atoms[i+1].coord[0]-atoms[i].coord[0])/2, atoms[i].coord[1]+(atoms[i+1].coord[1]-atoms[i].coord[1])/2, atoms[i].coord[2]+(atoms[i+1].coord[2]-atoms[i].coord[2])/2 ] )
60 for i in xrange(0,len(p)):
61 obj.extend( [ COLOR, 0.643, 0.933, 0.960 ] )
62 obj.extend( [ SPHERE, p[i][0], p[i][1], p[i][2], p_radius ] )
64 # Get Sidechain elipsoids positions
65 atoms=cmd.get_model(sl+" & n. CB").atom
67 for i in xrange(0,len(atoms)):
68 ca=cmd.get_model(sl+" & n. CA & resn "+atoms[i].resn+" & resi "+atoms[i].resi).atom
69 e.append( [ atoms[i].resn, atoms[i].coord[0], atoms[i].coord[1], atoms[i].coord[2], atoms[i].coord[0]-ca[0].coord[0], atoms[i].coord[1]-ca[0].coord[1], atoms[i].coord[2]-ca[0].coord[2] ] )
71 obj.extend([NORMAL, 0.0, 1.0, 0.0])
72 # This is from pymol devel example cgo07.py form http://pymol.sourcearchive.com/documentation/1.2r1/cgo07_8py-source.html
74 # [ ELLIPSOID, x_pos, y_pos, z_pos, size, x0, y0, z0, x1, y1, z2, x2, y2, z2 ]
75 # where the xyz vectors are orthogonal and of length 1.0 or less.
76 for i in xrange(0,len(e)):
78 tmp0=[e[i][4], e[i][5], e[i][6]]
81 tmp1 = cpv.random_vector()
82 # orthogonal vector to tmp0 and tmp1
83 tmp2 = cpv.cross_product(tmp1, tmp0)
84 tmp3 = cpv.cross_product(tmp0, tmp2)
85 tmp0 = cpv.normalize(tmp0)
86 tmp2 = cpv.normalize(tmp2)
87 tmp3 = cpv.normalize(tmp3)
88 tmp0 = cpv.scale(tmp0,resdb[e[i][0]][4])
89 tmp2 = cpv.scale(tmp2,resdb[e[i][0]][3])
90 tmp3 = cpv.scale(tmp3,resdb[e[i][0]][3])
91 factor = 1.0 / max( cpv.length(tmp0), cpv.length(tmp2), cpv.length(tmp3))
92 tmp0 = cpv.scale(tmp0, factor)
93 tmp2 = cpv.scale(tmp2, factor)
94 tmp3 = cpv.scale(tmp3, factor)
95 obj.extend( [ COLOR, resdb[e[i][0]][0], resdb[e[i][0]][1], resdb[e[i][0]][2] ] )
96 obj.extend( [ ELLIPSOID, e[i][1], e[i][2], e[i][3], 1.0/factor, ] + tmp0 + tmp2 + tmp3 )
98 # Get Glicynes positions
99 atoms=cmd.get_model(sl+' & n. CA & resn GLY').atom
101 for i in xrange(0,len(atoms)):
102 g.append( [ atoms[i].resn, atoms[i].coord[0], atoms[i].coord[1], atoms[i].coord[2] ])
103 # Draw the glicyne spheres
104 for i in xrange(0, len(g)):
105 obj.extend( [ COLOR, resdb[g[i][0]][0], resdb[g[i][0]][1], resdb[g[i][0]][2] ] )
106 obj.extend( [ SPHERE, g[i][1], g[i][2], g[i][3], resdb[g[i][0]][3]])
109 cmd.set('cgo_ellipsoid_quality', 2)
110 cmd.load_cgo(obj,'UNRES_'+sl)
113 # Hook up to PyMols show command
115 def myshow(representation="",selection="",_self=cmd):
119 "show" turns on representations for objects and selections.
123 show [ representation [, selection ]]
127 representation = lines, spheres, mesh, ribbon, cartoon, sticks,
128 dots, surface, labels, extent, nonbonded, nb_spheres, slice,
129 extent, slice, dashes, angles, dihedrals, cgo, cell, callback,
132 selection = string: a selection-expression or name-pattern
136 With no arguments, "show" alone turns on lines for all bonds and
137 nonbonded for all atoms in all molecular objects.
143 show lines, (name ca or name c or name n)
147 hide, enable, disable
151 if representation=='unres':
155 show_UNRES(selection)
157 cmd.show(representation, selection,_self)
160 cmd.extend('show',myshow)