This is a read-only mirror of pymolwiki.org

Difference between revisions of "User:Inchoate"

From PyMOL Wiki
Jump to navigation Jump to search
 
m (24 revisions)
 
(43 intermediate revisions by 2 users not shown)
Line 1: Line 1:
My name is Jason Vertrees and I'm a postdoc in computational biology.  Currently, I study proteins through mathematical models & machine learning.  My previous work was in theoretical biophysics.
+
My name is Jason Vertrees and I'm an independent consultant working with DeLano Scientific to promote PyMOL.  My previous work was in theoretical biophysics and machine learning to predict properties of proteins.
  
Also, I am the owner and of the PyMOLWiki website.
+
Also, I am the owner of the PyMOLWiki website.  I started it to help the PyMOL community store and organize information regarding PyMOL.
  
 
If you are interested in Biophysical, Structural or Compuational Biology, check out [http://www.bscb.utmb.edu/ BSCB@UTMB] -- my old school.
 
If you are interested in Biophysical, Structural or Compuational Biology, check out [http://www.bscb.utmb.edu/ BSCB@UTMB] -- my old school.
  
 
+
-- '''Jason Vertrees, PhD <br/>
'''Jason Vertrees, PhD
+
''Jason dot Vertrees (_at-) gmail dot com''
 
 
''jv(_at-)cs_dot_dartmouth(dot2)edu''
 
 
 
[http://www.cs.dartmouth.edu/~jv/ My Page]
 
  
 
= My ~/.pymolrc =
 
= My ~/.pymolrc =
Line 35: Line 31:
 
set ray_opaque_background,0
 
set ray_opaque_background,0
 
set defer_builds_mode, 3
 
set defer_builds_mode, 3
 +
set async_builds, 1
 
</source>
 
</source>
  
 
== To Do ==
 
== To Do ==
* texture_fonts, 1 -- for speed
 
* pseudo-atoms; you can label them.  RightClick->New->PAtom->and then label it; move the atom (and the label goes w/it).  You can also move the label by itself
 
* movie_panel
 
* mset - clears the movie
 
 
* Movie->UpdateMovie
 
* Movie->UpdateMovie
* Scene->Buttons (shows buttons for each scene)
 
 
* Scene->Optmize (before saving scenes; use before optimizing)
 
* Scene->Optmize (before saving scenes; use before optimizing)
 
* Scene->Cache (cache's surface data)
 
* Scene->Cache (cache's surface data)
* A good way to make movies seems to be:
 
** madd
 
** prepare a scene; turn on scene buttons
 
** Fn+CTRL+down-arrow # adds the scene;
 
** madd 1 x90
 
** mview store, -1
 
* repeat
 
* when done do mview reinterpolate
 
* play the movie
 
* matrix_mode
 
 
* dot_solvent
 
* dot_solvent
  
Line 110: Line 92:
  
  
= Movie Making =
+
New motions
While PyMOL's capability to produce static images is quite powerful, there are some stories that are better told through movies, than static images alone.  This little page will provide the necessary ideas, links, code and examples for making movies in PyMOL.
+
* Enter alone will store+reinterpolate
 
+
* Shift-Enter will just store & clears the reinterpolation
== Your First Movie ==
+
* CTRL-Enter will store but not reinterpolate
Movies can be very simple, for example, animating an NMR ensemble:
 
<source lang="python">
 
# Your first movie.
 
fetch 1nmr
 
mplay
 
 
 
# to stop the movie when you're ready
 
# type 'mstop'.
 
</source>
 
 
 
What PyMOL did here was to [[fetch]] the file from the PDB and load it into an object with 20 states.  Somewhere between then and issuing [[mplay]] PyMOL created 20 frames for your object and assigned one state to each frame.  This created the animated effect as we scroll through the frames.
 
  
 +
New Scenes
 +
* setups the scenes first
 +
* then just goto the frame you want and hit enter and the current will be stored with it
 +
* or you can right-click on the movie_panel and store with scene
  
== Terminology ==
+
* purge kills the matrix info for the object
Imagine a complex movie for a moment, a movie that has camera motions, objects moving independently or in concert with other objects, changing colors and representations.  To handle camera motions PyMOL must know at all times where the camera is located and what it's pointed toward (as well as clipping planes).  For objects to move around or be rotated without regard to the camera (the objects themselves rotate/translate, not just the camera) then PyMOL has to store the coordinates and matrices for these objects, too.  Changing colors and representations for each object must somehow also be stored.  So, as you can see this is a multidimensional problem: at each time point in your movie, PyMOL must remember positions and representations, as well as make it easy for you to transition between them (interpolation).
 
  
Despite these complexities, PyMOL tries to enable movie making for even novice users.  Let's start by defining a few PyMOL concepts&mdash;states, frames and scenes.
 
  
=== Basic Movie Terminology ===
+
New movie stuff
'''object'''
+
* CTRL-LEFTCLK + DRAG RIGHT = add frame/states
::An object is any PyMOL-object loaded into PyMOL, like atoms, molecules, complexes, etc.  When you load an PDB from disk/net it is loaded into PyMOL as an object.
+
* CTRL-LEFTCLK + DRAG LEFT = erase frame/states
:: [[:Category:Objects|All pages regarding objects]]
+
* Rt clk on object
 +
** Shift+Middle = drag
 +
** shift+Left = rotate
  
'''selection'''
+
= Cool Movies =
:: A selection is a specifically chosen set of atoms, molecules, complexes etc. in PyMOL. A selection is not an object, it's a subset of stuff from a (collection of) object(s).  Selections can be named and when named have are distinguished from objects by having parentheses around their names.  For example, ''foo'' would be an object and ''(foo)'' would be some selection.  When you pick an atom (and get the default '''(sele)''' selection) or issue the ever-popular [[Select]]ion command, you get a selection.
+
* [[File:Traj_movie.mpg]] &mdash; MD Trajectory made awesome with PyMOL; 5 MB mpg file.
:: [[:Category:Selections|All pages regarding selections]]
+
* [[File:Long_movie_ray.mpg]] &mdash; long movie, shows dimerization, roams around the active site, 6 MB.
 +
* [[File:Motions_movie.mpg]] &mdash; a simple movie with motions.
  
'''states'''
+
= tRNA hairball =
:: A state is a particular conformation (set of coordinates) for a given object.  For example an NMR ensemble could contain the same molecule, but in 20 different states.  PyMOL can make movies from states.  States '''do not store representations''' in PyMOL (eg. cartoons vs. sticks).
 
:: See also [[:Category:States|All pages regarding states]]
 
 
 
'''scenes'''
 
'''interpolation'''
 
:: A scene is the staged representations of objects and the orientation of the camera.
 
:: See also [[:Category:Scenes|All pages regarding scenes]]
 
 
 
'''frames'''
 
:: A frame can be thought of as a single frame in a movie reel.  A frame stores state information and scene information.
 
:: See also [[:Category:Frames|All pages regarding frames]]
 
 
 
'''Movie Panel'''
 
:: The movie panel is a frame indicator strip at the bottom of the screen.  It shows a little icon for which frame you're currently on, and whether or not the camera has been set for that frame.
 
:: See [[movie_panel]] for more information.
 
 
 
== What is a Movie? ==
 
Now the we have the appropriate terminology to talk about movies in PyMOL, we can discuss what a movie really is.  A movie in PyMOL is a series of frames stitched together in some way so as to create the desired animation.
 
 
 
== Movie Making Commands ==
 
This tutorial assumes you have some basic knowledge about how to use PyMOL (eg. mousing, choosing and setting your representations, etc).  If you're not yet at this level, please check out [[:Category:Tutorials|the Tutorial Category]] of pages (most notably the beginner tutorials).
 
 
 
I think it's help to think of the movie as a set of frames, like in a movie reel, so let's start there.  (Each command below links to the command's PyMOL wiki page, so feel free to click through for more info.)
 
 
 
=== [[frame]]===
 
This command tells PyMOL to set the current frame to whichever you desire.  To use it, just issue the command, <source lang="python">frame X</source> where '''X''' is some integer number indicating the frame you want to go to.  If you issue a frame number greater than the number of frames, PyMOL sets the frame to the highest-numbered frame you have (similarly for negative numbers or numbers smaller than the minimum numbered frame).
 
 
 
Let's try a quick example with [[frame]],
 
 
<source lang="python">
 
<source lang="python">
# create an empty 90 frame movie
+
reinit
mset 1 x90
+
unset movie_auto_interpolate
# turn on the movie panel (bottom of screen)
+
# position molecule & view
set movie_panel, on
+
fetch 1yfg, trna, async=0
# goto frame one
+
orient
frame 1       
+
rotate z, 60, trna
# try some intermediate frames; notice the blue indicator in the movie panel       
 
frame 10
 
frame 50
 
frame 90
 
# try going beyond the end and see what PyMOL does
 
frame -1
 
frame 100
 
# play through the empty movie
 
mplay
 
# stop the movie
 
mstop
 
</source>
 
  
 +
python
 +
for x in range(6):
 +
  n = "trna_%s" % x
 +
  cmd.create( n, "trna", 1, 1)
  
=== [[States|set state]] ===
+
cmd.disable("trna")
Again, states are particular stored conformations of objects. Here we use PyMOL to set and get the states, and see how PyMOL mapped them to our earlier movie example.
+
cmd.translate( [0, -60, 0], "trna" )
 
+
cmd.origin("trna")
This command has a similar idea of [[frame]], but works a little differently.  Instead of typing,
 
<source lang="python">
 
# invalid command
 
state 40
 
</source>
 
in PyMOL we [[set]] the [[States|state]]:
 
<source lang="python">
 
# how to set a state in PyMOL
 
set state, stateNo, objectName
 
 
 
# for example
 
# set state to 40
 
set state, 40
 
 
 
# also, get state
 
get state
 
</source>
 
 
 
==== States &amp; Frames (optional reading) ====
 
As an example, look at the code from the "first movie":
 
<source lang="python">
 
fetch 1nmr
 
mplay
 
# issue mstop, to stop the movie
 
</source>
 
 
 
We can do a couple things now, let's try counting the number of states and frames PyMOL now knows about:
 
<source lang="python">
 
# how many frames does PyMOL know about?
 
count_frames
 
 
 
# what about states?
 
count_states
 
</source>
 
  
and now let's see how PyMOL mapped frames to states.  Using the above commands and a little Python, let's see how PyMOL mapped the frames to states:
+
for x in range(6):
<source lang="python">
+
  n = "trna_%s" % x
python
+
  cmd.rotate( "z", 60. * x, n)
for x in range(1,cmd.count_frames()+1):
+
   cmd.show_as("cartoon", n)
   cmd.frame(x)
+
   cmd.origin("trna")
   print "Frame => %s; and State => %s" % ( str(x), str(cmd.get('state')))
+
  cmd.zoom()
 
python end
 
python end
</source>
 
which should show a 1-1 mapping of states to frames.
 
  
=== [[mset]] ===
 
[[mset]] is a very powerful command.  This command tells PyMOL how to assign states to frames.  So, now you see why it's necessary to clearly distinguish between and use the two.  Let's learn how to use [[mset]].
 
  
The syntax for [[mset]] can be a little tricky at first. I would write the syntax as:
+
mset 1x360
<source lang="python">
 
mset stateSpec frameSpec
 
</source>
 
which assigns the states in '''stateSpec''' to the frames in '''frameSpec'''., where '''stateSpec''' is any mset-valid state specification.  PyMOl supports to patterns for '''stateSpec'''.  You can do simply supply a number eg
 
<source lang="python">
 
mset 1
 
</source>
 
or you can specify a range of states&mdash;like 1 through 55 as
 
<source lang="python">
 
# setting states 1 through 55
 
# caution: notice the space: 1 -55, not 1-55 (this is a PyMOL parser caveat)
 
mset 1 -55
 
</source>
 
Simple enough.  Now for '''frameSpec''' you can specify a single frame number like so or you can specify ''how many frames PyMOL should use to map to your specified states'' with the '''xNumber'' command.  This will make sense with an example
 
<source lang="python">
 
# Recall: mset stateSpec frameSpec
 
# so we are setting STATE 1 across a span of 90 frames
 
mset 1 x90
 
 
 
# Recall: mset stateSpec frameSpec
 
# so we are setting states 1..120 to the next 120 frames
 
mset 1 -120 x120
 
</source>
 
 
 
NB: Actually the syntax is a little more complicated than this as PyMOL's mset command has the ability to remember in which frame the prior specification left the movie.  So, you can sort of chain the specifications.  Type ''help mset'' in PyMOL for more info or see [[mset]].
 
 
 
=== [[mview]] ===
 
The [[mview]] command can be intimidating, but all we need to know about it at present is that it can store the (1) camera position or (2) a given object position.  The idea is to essentially make 'way points' in your movie and have PyMOL interpolate the in-between positions/coordinates, etc.  For example, if I wanted to make a 100-frame movie of a zoom into an object, I could store and manually set 100 camera positions, or I could do the starting position and the final position and ask PyMOL to just interpolate that over 100 frames.  The latter idea is obviously much simpler.  So simple in fact, let's make a super-quick movie that does exactly what I just mentioned&mdash;100 frames of a slow zoom into some object.  Start with a fresh PyMOL session ([[reinitialize]]) and then copy/paste the following:
 
<source lang="python" line=1>
 
# let's initialize the movie to 100 frames, all of state 1
 
# it's ONLY state 1, because we're only moving the camera around, not
 
# changing structure coordinates of the leucine:
 
mset 1 x100
 
 
 
# show a leucine
 
frag leu
 
 
 
# position the residue
 
orient
 
 
 
# let's store the current camera position
 
mview store
 
  
# now set our way point to be frame 100
 
frame 100
 
 
# now let's zoom into some atom on the fragment
 
zoom ID 10
 
 
# now save this view at frame 100
 
mview store
 
 
# last thing is to tell PyMOL to interpolate the 100 frame zoom
 
# so we don't have to do those 100 snapshots:
 
mview reinterpolate
 
 
# voila, you have a movie.  To watch it go back to frame 1 and play it
 
frame 1
 
mplay
 
 
# mstop when you're ready
 
</source>
 
 
'But, hold on!' you might say.  Why is it so herky-jerky?  We have smooth zooming but then a snap and back to frame one!  Well, we never gave PyMOL any number of frames to interpolate the change from frame 100 back to frame 1 (since it wraps).  If we wanted an a '''zoom in''' that was equally as fast as the '''zoom out''' we would simply '''replace line #16''' with
 
<source lang="python">
 
# now set our way point to be frame 100
 
frame 100
 
</source>
 
but, if we wanted a slow, zoom in and a ''fast'' zoom out we could do
 
<source lang="python">
 
# now set our way point to be frame 100
 
frame 80
 
</source>
 
instead which would only give PyMOL 20 frames with which to zoom us out.  Try it!
 
 
==== Very Basic Mview Syntax ====
 
''This is a simple overview, see [[mview]] for complete details.''
 
 
Using [[mview]] as you can see from above is pretty simple.  The very basic syntax is:
 
<source lang="python">
 
# store the camera OR some object given by objName (if it's supplied)
 
mview store[, object=objName]
 
 
# reinterpolate (link together the positions) for the saved camera or object
 
mview reinterpolate[, object=objName]
 
</source>
 
If you leave off the '''object=objName''' then you're storing the '''camera information only'''&mdash;and so none of your objects will be moving anywhere&mdash;just the camera.  If you include an object name, then it stores that object's position information in the current frame.  The '''mview store''' tells PyMOL to store the camera or objects coordinates, while the '''mview reinterpolate''' command tells PyMOL to link together the saved positions for the camera or the selected object in a smooth, cool way.
 
 
== Simple Movie Examples ==
 
We now the ability to make some pretty simple, but cool movies.  So, let's try a few.
 
 
=== Multiple Zooming ===
 
Let's try making a movie where we zoom into each ligand that's not water.  In order to make this movie, I had to find a protein with suitable ligands, so you can do the same for your own protein.  Just replace the hard-coded residue numbers.
 
 
'''Goal:''' Make a movie that zoom into the three ligands, stays on that ligand for 2 seconds, then moves to the next.  I also want smooth zoom out at the end.  Don't let the length of this movie script throw you off, you've seen all of the movie commands and the initial commands are just loading the and making it look good.
 
<source lang="python">
 
# setup PyMOL for the movie
 
reinitialize
 
set matrix_mode, 1
 
set movie_panel, 1
 
 
# load the PDB, make selections for the ligands and
 
# make the protein look snazzy.
 
#load /spc/pdb/2jep.pdb
 
fetch 2jep, asyn=0
 
remove resn HOH
 
orient
 
select l1, c. A and i. 1397
 
select l2, c. A and i. 1396
 
select l3, c. B and i. 1396
 
as cartoon
 
color grey
 
show sticks, het
 
color magnesium, het
 
 
# At 30 FPS this is then a 16 second movie.
 
# We look at the structure for 2 seconds, zoom in to each ligand
 
# and look at it for another 2 seconds, then, zoom out and look again
 
# at everything for another 2 seconds.
 
 
# initialize the 480 frame movie
 
mset 1 x480
 
 
# zoom all ('scene #1')
 
 
frame 1
 
frame 1
mview store
+
orient vis
# stay here for 2 seconds
 
frame 60
 
 
mview store
 
mview store
  
# zoom on ligand 1 ('scene #2')
+
rots = [ [0., 1., 0.], [-1.4, 1., 0], [-1.4, -1., 0.], [0., 1., 0.], [-1.4, 1., 0.], [1.4, 1., 0.] ]
frame 120
+
ang = [120,240,360]
zoom l1
 
mview store
 
# stay here for 2 seconds
 
frame 180
 
mview store
 
  
# zoom on ligand 2  ('scene #3')
+
python
frame 240
+
#for f in [120,240,360]:
zoom l2
+
for f in range(len(ang)):
mview store
+
  cmd.frame(ang[f])
# stay for 2 seconds
+
  for t in range(6):
frame 300
+
    cmd.rotate(rots[t], 120, object="trna_%s" % t)
mview store
+
python end
 +
mview interpolate, object=trna_*, power=1
  
# zoom to ligand 3  ('scene #4')
+
python
frame 360
+
#for f in [120,240,360]:
zoom l3
+
for f in range(len(ang)):
mview store
+
  cmd.frame(ang[f])
# stay for 2 seconds
+
  cmd.turn('y', 120)
frame 420
+
  cmd.mview(action="store")
mview store
+
python end
 
 
# zoom out  ('back to scene #1')
 
frame 480
 
zoom
 
mview store
 
 
 
# interpolate the frames
 
mview reinterpolate
 
 
 
# play the awesome movie!
 
mplay
 
 
 
# stop when you want
 
# mstop
 
</source>
 
 
 
=== Animating an Alignment ===
 
<source lang="python">
 
# setup PyMOL for the movie
 
reinitialize
 
set matrix_mode, 1
 
set movie_panel, 1
 
 
 
# load the PDBs
 
fetch 1cll 1ggz, async=0
 
 
 
# orient the scene
 
as cartoon
 
orient
 
 
 
# make 100-frame movie
 
mset 1 x100
 
# goto frame 1
 
frame 1
 
 
 
# store the camera position and object
 
# positions in frame 1
 
mview store
 
mview store, object=1cll
 
mview store, object=1ggz
 
 
 
# goto frame 90
 
frame 90
 
# align the two proteins
 
super 1cll, 1ggz
 
# we rezoom to center the camera on the
 
# two aligned proteins
 
zoom
 
# store the camera positions
 
mview store
 
# store the new object position(s)
 
mview store, object=1cll
 
mview store, object=1ggz
 
  
# have PyMOL stitch together the scenes.
+
mview interpolate, power=1
mview reinterpolate
 
mview reinterpolate, object=1cll
 
mview reinterpolate, object=1ggz
 
  
# rewind
 
 
frame 1
 
frame 1
# get some popcorn!  :-)
 
 
mplay
 
mplay
 
</source>
 
</source>

Latest revision as of 01:42, 28 March 2014

My name is Jason Vertrees and I'm an independent consultant working with DeLano Scientific to promote PyMOL. My previous work was in theoretical biophysics and machine learning to predict properties of proteins.

Also, I am the owner of the PyMOLWiki website. I started it to help the PyMOL community store and organize information regarding PyMOL.

If you are interested in Biophysical, Structural or Compuational Biology, check out BSCB@UTMB -- my old school.

-- Jason Vertrees, PhD
Jason dot Vertrees (_at-) gmail dot com

My ~/.pymolrc

run ~/playground/pymol_scripts/oload.py
run ~/playground/cealign/qkabsch.py
run ~/playground/cealign/cealign.py
run ~/playground/pymol_scripts/find_bind.py
run ~/playground/pymol_scripts/zero.py
run ~/playground/pymol_scripts/removeAlt.py
run ~/playground/pymol_scripts/toGroup.py

one_letter ={'VAL':'V', 'ILE':'I', 'LEU':'L', 'GLU':'E', 'GLN':'Q', \
'ASP':'D', 'ASN':'N', 'HIS':'H', 'TRP':'W', 'PHE':'F', 'TYR':'Y',    \
'ARG':'R', 'LYS':'K', 'SER':'S', 'THR':'T', 'MET':'M', 'ALA':'A',    \
'GLY':'G', 'PRO':'P', 'CYS':'C'}

set ribbon_width, 8
set antialias,2
set cartoon_fancy_helices,1
set ray_trace_mode,1
set depth_cue,0
set ray_trace_fog,0
set ray_opaque_background,0
set defer_builds_mode, 3
set async_builds, 1

To Do

  • Movie->UpdateMovie
  • Scene->Optmize (before saving scenes; use before optimizing)
  • Scene->Cache (cache's surface data)
  • dot_solvent

Movie Notes

#
# Simple movie of independent motions
#

# This create an ala and a tyr.  It moves the ala indepdendent
# of the tyr. 
#
# Q: Why are the orientations off?  What is the equivalent
#    command to moving something with mouse_motions?

# reinit
reinitialize

set matrix_mode, 1
# turns on handy scene buttons
set scene_buttons, 1
# turns on the movie panel at the bottom of the sceen
set movie_panel, 1
# turns on a special mouse button panel
config_mouse three_button_motions

# start with an empty movie, scene 1 with 90 frames
mset 1 x90

# create an ala and tyr
frag ala
frag tyr
as spheres

# create our scene
translate [10, 0, 0], object=ala, camera=0
orient

# store the first frame
frame 1
mview store, object=ala

# goto the next frame
frame 45
translate [-20, 0, 0], object=ala, camera=0
orient

# store this frame
mview store, object=ala

#reinterpolate the scene
mview reinterpolate, object=ala


New motions

  • Enter alone will store+reinterpolate
  • Shift-Enter will just store & clears the reinterpolation
  • CTRL-Enter will store but not reinterpolate

New Scenes

  • setups the scenes first
  • then just goto the frame you want and hit enter and the current will be stored with it
  • or you can right-click on the movie_panel and store with scene
  • purge kills the matrix info for the object


New movie stuff

  • CTRL-LEFTCLK + DRAG RIGHT = add frame/states
  • CTRL-LEFTCLK + DRAG LEFT = erase frame/states
  • Rt clk on object
    • Shift+Middle = drag
    • shift+Left = rotate

Cool Movies

tRNA hairball

reinit
unset movie_auto_interpolate
# position molecule & view
fetch 1yfg, trna, async=0
orient
rotate z, 60, trna

python
for x in range(6):
  n = "trna_%s" % x
  cmd.create( n, "trna", 1, 1)

cmd.disable("trna")
cmd.translate( [0, -60, 0], "trna" )
cmd.origin("trna")

for x in range(6):
  n = "trna_%s" % x
  cmd.rotate( "z", 60. * x, n)
  cmd.show_as("cartoon", n)
  cmd.origin("trna")
  cmd.zoom()
python end


mset 1x360

frame 1
orient vis
mview store

rots = [ [0., 1., 0.], [-1.4, 1., 0], [-1.4, -1., 0.], [0., 1., 0.], [-1.4, 1., 0.], [1.4, 1., 0.] ]
ang = [120,240,360]

python
#for f in [120,240,360]:
for f in range(len(ang)): 
  cmd.frame(ang[f])
  for t in range(6):
    cmd.rotate(rots[t], 120, object="trna_%s" % t)
python end
mview interpolate, object=trna_*, power=1

python
#for f in [120,240,360]:
for f in range(len(ang)): 
  cmd.frame(ang[f])
  cmd.turn('y', 120)
  cmd.mview(action="store")
python end

mview interpolate, power=1

frame 1
mplay

See Also

oload, Cealign, find_bind, zero, removeAlt, toGroup, ribbon_width, antialias, cartoon_fancy_helices, depth_cue, ray_trace_fog, ray_opaque_background, defer_builds_mode, ray_trace_mode.

Tree 19:08, 26 May 2009 (UTC)