Re: [PyMOL] Pymol cone shape?

2007-01-11 Thread Tsjerk Wassenaar

Hi William,

Maybe the attached python script will be of some use. It contains a
function (and some helper functions) to draw a CGO arrow in PyMOL. It
contains code for drawing a cone for the head of the arrow.

Hope it helps,

Tsjerk

On 1/10/07, William Scott wgsc...@chemistry.ucsc.edu wrote:

Let's ask on the pymol mailing list...

On Jan 10, 2007, at 11:02 AM, Martin.Laurberg wrote:

 Damn, I can convert my 1969 CNS base pair restraints into what they
 call
 CGO drawn lines, and thereby display enforced hydrogen bonds, but I
 wish
 to draw cones for the base pair ladder as ribbons can do it. Oh
 well, ..



 On Wed, 10 Jan 2007, William Scott wrote:


 I think it is possible, but I don't know how.



 On Jan 10, 2007, at 9:24 AM, Martin.Laurberg wrote:

 Hi Bill, is it possible to draw a cone-shape in pymol?




-
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT  business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV
___
PyMOL-users mailing list
PyMOL-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pymol-users




--
Tsjerk A. Wassenaar, Ph.D.
Junior UD (post-doc)
Biomolecular NMR, Bijvoet Center
Utrecht University
Padualaan 8
3584 CH Utrecht
The Netherlands
P: +31-30-2539931
F: +31-30-2537623
from pymol import cmd
from pymol.cgo import *
from math import *

#
# Some functions to allow drawing arrows (vectors) in Pymol
# In need of proper documentation...
#
# Please don't distribute (parts of) this file, without credits
#
# (c)2006 Tsjerk A. Wassenaar, PhD, University of Utrecht
#
# t s j e r k w .at. g m a i l .dot. c o m
# http://nmr.chem.uu.nl/~tsjerk/
# 

def t( X ):
if not X: return X
Y = []
for i in range( len( X[0] ) ):
Y.append( [] )
for j in X:
Y[i].append( j[i] )
return Y

def v_add( a, b ):   return ( a[0]+b[0], a[1]+b[1], a[2]+b[2] )
def v_sub( a, b ):   return ( a[0]-b[0], a[1]-b[1], a[2]-b[2] )
def vecprod( a, b ): return ( a[1]*b[2]-a[2]*b[1], a[2]*b[0]-a[0]*b[2], 
a[0]*b[1]-a[1]*b[0] )
def inprod( a, b=None ):
if b: return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]
else: return a[0]*a[0] + a[1]*a[1] + a[2]*a[2]
def svmult( s, a ):  return ( s*a[0], s*a[1], s*a[2] )
def norm( a ):   return svmult( 1/sqrt(inprod( a )), a )

def mvmult( R, x ):
y = []
for i in R: y.append( inprod( i, x ) )
return tuple(y)

def mv_add( X, a ):
Y = []
for i in X:
Y.append( v_add( i, a ) )
return Y

def mmmult( R, X ):
Y = []
for i in X: Y.append( mvmult( R, i ) )
return Y

def smatrix( v ): return [[ v[0], 0, 0 ], [ 0, v[1], 0 ], [ 0, 0, v[2] ]]
def rmatrix( v ):
cosx, sinx = cos( v[0] ), sin( v[0] )
cosy, siny = cos( v[1] ), sin( v[1] )
cosz, sinz = cos( v[2] ), sin( v[2] )

return mmmult( mmmult( [[1,0,0],[0,cosx,-sinx],[0,sinx,cosx]],
  [[cosy,0,-siny],[0,1,0],[siny,0,cosy]] ),
   [[cosz,-sinz,0],[sinz,cosz,0],[0,0,1]] )

def block( i, dphi ):
ddphi = 0.25*dphi
phi0  = i*dphi
phi1  = phi0+ddphi
phi2  = phi1+ddphi
phi3  = phi2+ddphi
phi4  = phi3+ddphi
sqrt2 = sqrt(2)
return [  (-0.5*sqrt2,-0.5*sqrt2*cos(phi2),0.5*sqrt2*sin(phi2)),
  (1,0,0),
  (0,cos(phi0),-sin(phi0)),
  (0,cos(phi1),-sin(phi1)),
  (0,cos(phi2),-sin(phi2)),
  (0,cos(phi3),-sin(phi3)),
  (0,cos(phi4),-sin(phi4))
   ]

def cgo_triangle_fan( X ):
Y = []
while ( X ):
i = X.pop(0)
Y.extend( [ NORMAL, i[0], i[1], i[2], ] )
for i in range( 6 ):
i = X.pop(0)
Y.extend( [ VERTEX, i[0], i[1], i[2], ] )
return Y

def cgo_arrow1( S, E, r=0.2, hr=0.4, hl=1.0 ):
P0 = S
D  = v_sub( E, S )
DL = inprod( D, D )
P1 = v_add( S, svmult( (DL-hl)/DL, D ) )
P2 = E

# Define a vector orthogonal to P1-P0
V = v_sub( P1, P0 )
V = norm( V )
if V[2] != 0:
A = ( 1, 1, -(V[0]+V[1])/V[2] )
elif V[1] != 0:
A = ( 1, -V[0]/V[1], 0 )
else:
A = ( 0, -V[0], 0 )
A = norm( A )

B = vecprod( V, A )
print (inprod(V), inprod(B), inprod(A))
R = t([ svmult( hl,V ), svmult( hr,A ), svmult( hr,B ) ])

# Define the transformation matrix (scale and rotation)
#C = v_sub( P2, P1 )
#scale  = ( hl, hr, hr )
#rotate = ( 0, acos( C[0]/sqrt(C[0]**2+C[2]**2) ), acos( 
C[0]/sqrt(C[0]**2+C[1]**2) ) )
#R = mmmult( smatrix( scale ), rmatrix( rotate ) )
  
obj = [
  CYLINDER, S[0], S[1], S[2], P1[0], P1[1], P1[2], r, 1, 1, 1, 1, 1, 1,
  COLOR, 1, 0, 0,
  BEGIN, TRIANGLE_FAN ]

N = 10
dphi = 2*pi/N
crds = []
for i in range(N+1):

Re: [PyMOL] Pymol cone shape?

2007-01-10 Thread William Scott

Let's ask on the pymol mailing list...

On Jan 10, 2007, at 11:02 AM, Martin.Laurberg wrote:

Damn, I can convert my 1969 CNS base pair restraints into what they  
call
CGO drawn lines, and thereby display enforced hydrogen bonds, but I  
wish
to draw cones for the base pair ladder as ribbons can do it. Oh  
well, ..




On Wed, 10 Jan 2007, William Scott wrote:



I think it is possible, but I don't know how.



On Jan 10, 2007, at 9:24 AM, Martin.Laurberg wrote:


Hi Bill, is it possible to draw a cone-shape in pymol?








Re: [PyMOL] Pymol cone shape?

2007-01-10 Thread Terry Jones
Hi William

You can do it, or something that's as close to a cone as you could wish
for, by using a triangle fan. The apex of the fan is the top of the cone
and then you just add points around the base of the cone at whatever
granularity you like.

That would take some programming though, but it's not too difficult if you
know some Python, as the CGO interface is very simple.  I wrote a pymol
plugin to do something similar: it takes an input specification file,
parses it, and draws many CGO objects as a result. It works just fine.
Making the resulting cones smoothly colored or transparent would be more,
and harder, work though.  Without doing that, your cones may not play
nicely with the rest of the stuff drawn by pymol (which in my case is
nothing at all :-)).

Terry

| Let's ask on the pymol mailing list...
| 
| On Jan 10, 2007, at 11:02 AM, Martin.Laurberg wrote:
| 
|  Damn, I can convert my 1969 CNS base pair restraints into what they call
|  CGO drawn lines, and thereby display enforced hydrogen bonds, but I wish
|  to draw cones for the base pair ladder as ribbons can do it. Oh well, ..
| 
|  On Wed, 10 Jan 2007, William Scott wrote:
| 
|  I think it is possible, but I don't know how.
| 
|  On Jan 10, 2007, at 9:24 AM, Martin.Laurberg wrote:
|  Hi Bill, is it possible to draw a cone-shape in pymol?