> First of all, Warren, thanks for an impressive program. A couple of > questions as I begin to get into it:
Thanks for the kind words! > I'm probably missing something obvious, but I don't see it in the > documentation. Is it possible to send arguments to scripts (either the > .pml script or Python scripts)? It would seem like that would make them > much more versatile. Hmm...script arguments aren't exactly present, but there is a more powerful solution: use Python functions to extend the PyMOL command language. Any functions defined in Python script can then be called from PyMOL (interatively or otherwise) By the way, it is important to understand the disntinction between PyMOL's scripts and Python programs you run your PyMOL -- PyMOL scripts are basically just a linear series of PyMOL commands. For anything more sophisticated, use straight Python. To achieve what you're looking for, create "test.py" with the following function (foo here for example) from pymol import cmd def foo(arg1,arg2): print arg1,arg2 cmd.extend("foo",foo) Once you run the above script in PyMOL "run test.py", you will then be able to type "foo 1,2" to invoke the foo command with arguments. > Second question: How would one write a Python script which went through > each frame of a movie and modified some aspect of the structure (like > the molecule name for example)? There are a couple of ways to do this. One would be to pull the object into the Python layer (cmd.get_model), change it, and then load in back in to PyMOL (cmd.load_model). The advantage of this approach is that you can directly manipulate the molecule, bond, and atom objects. The disadvantage is poor performance for large molecules (probably fine for organics though). Other approaches vary depending on what you want to change. Titles can be changed with "set_title", (which revealed a couple of minor bugs when I tried it just now, arrgh). Atomic properities can be modified using "alter". Atoms and bonds can be moved, created, or deleted using the editor functions, but which may not yet me sufficiently documented. No matter what you're changing, you'll need to apply changes to molecular "states". Just use a 1-based loop over each state, and pass this integer into the state argument (where required). Example: dock_score = [ -24.0, -9.5, -2.0 ] obj = "foo1" # your object name for a in xrange(1,4): cmd.set_title(obj,a,str(dock_score[a-1])) etc. Cheers, Warren