673a269e8e18d87842ab6f032ef0855da03df092
[unres.git] / source / pymol / show_UNRES.py
1 # -*- coding: utf-8 -*-
2 '''
3 -------------------------------------------------------------------------------
4   show_UNRES.py - UNRES model viewer v 1.0
5 -------------------------------------------------------------------------------
6  
7   Written by Dawid JagieÅ‚a (lightnir@chem.univ.gda.pl)  Feb 2013 
8  
9 '''
10
11 from chempy import cpv
12 from pymol import cmd
13 import cmd
14 from pymol.cgo import *
15
16 from pymol.menu import *
17 import pymol.menu
18
19 def __init__(self):
20         # Add unres to known represtentations 
21         from pymol import constants
22         constants.repres_sc.append('unres')
23
24
25 def show_UNRES(sl='(all)'):
26         # basic settings
27         p_radius = 0.6
28         e_size = 1.0
29         # residue dictionary
30         # resn = [color_Red, color_Green, color_Blue, elipsoid_side_width ]
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]
51                         }
52
53
54         # Get pseudo-peptide group positions
55         atoms=cmd.get_model(sl+" & n. CA").atom
56         p=[]
57         for i in range(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 ] )
59         obj=[]
60         for i in range(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 ] )
63
64         # Get Sidechain elipsoids positions
65         atoms=cmd.get_model(sl+" & n. CB").atom
66         e=[]
67         for i in range(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] ] )
70
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
73     #
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 range(0,len(e)):
77                 # vactor CB->CA
78                 tmp0=[e[i][4], e[i][5], e[i][6]]
79                 l=cpv.length(tmp0)
80                 # random vector
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                 tmp2 = cpv.normalize(tmp2)
86                 tmp3 = cpv.normalize(tmp3)
87                 tmp2 = cpv.scale(tmp2,resdb[e[i][0]][3])
88                 tmp3 = cpv.scale(tmp3,resdb[e[i][0]][3])
89                 factor = 1.0 / max( cpv.length(tmp0), cpv.length(tmp2), cpv.length(tmp3))
90                 tmp0 = cpv.scale(tmp0, factor)
91                 tmp2 = cpv.scale(tmp2, factor)
92                 tmp3 = cpv.scale(tmp3, factor)
93                 
94                 #print factor, cpv.length(tmp0), cpv.length(tmp2), cpv.length(tmp3)                     
95                 obj.extend( [ COLOR, resdb[e[i][0]][0], resdb[e[i][0]][1], resdb[e[i][0]][2] ] )
96                 #obj.extend( [ NORMAL, 1, 0, 0 ] )
97                 obj.extend( [ ELLIPSOID, e[i][1], e[i][2], e[i][3], 1.0/factor, ] + tmp0 + tmp2 + tmp3 )
98
99         cmd.set('cgo_ellipsoid_quality', 2)
100         cmd.load_cgo(obj,'UNRES_'+sl)
101
102
103 # Hook up to PyMols show command
104
105 def myshow(representation="",selection="",_self=cmd):
106         '''
107 DESCRIPTION
108          
109     "show" turns on representations for objects and selections.
110          
111 USAGE
112  
113     show [ representation [, selection ]]
114  
115 ARGUMENTS
116  
117     representation = lines, spheres, mesh, ribbon, cartoon, sticks,
118     dots, surface, labels, extent, nonbonded, nb_spheres, slice,
119     extent, slice, dashes, angles, dihedrals, cgo, cell, callback,
120     unres or everything
121  
122     selection = string: a selection-expression or name-pattern
123  
124 NOTES
125  
126     With no arguments, "show" alone turns on lines for all bonds and
127     nonbonded for all atoms in all molecular objects.
128  
129 EXAMPLES
130  
131     show
132     show ribbon
133     show lines, (name ca or name c or name n)
134
135 SEE ALSO
136  
137     hide, enable, disable
138  
139 '''
140
141         if representation=='unres':
142                 if selection=="":
143                         show_UNRES('all')
144                 else:
145                         show_UNRES(selection)
146         else:
147                 cmd.show(representation, selection,_self)
148
149
150 cmd.extend('show',myshow)