Re: [chimera-dev] [Chimera-users] Non-gui chimera in a shell?

What Tom says below is all true, but as he intimated in his previous mail if you are willing/able to use Chimera as your Python interpreter (typically as "chimera --nogui script.py") then things should work. There are some caveats. Chimera ignores the PYTHONPATH environment variable in order to avoid using libraries from incompatible Python installations, therefore to have Chimera find locally installed packages that you want to use you need to set the CHIMERAPATH variable, which Chimera uses in a fashion similar to PYTHONPATH. Another thing is that you can't pass arguments to your script in the conventional fashion since Chimera itself processes all arguments. If you need to pass values to your script, you need to use environment variables as detailed in the FAQ here: http:// www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/faq.html#q3 --Eric Eric Pettersen UCSF Computer Graphics Lab pett@cgl.ucsf.edu http://www.cgl.ucsf.edu On May 8, 2006, at 9:27 PM, Thomas Goddard wrote:
Hi Jim,
Importing Chimera from your Python script to use its functionality is something we have put very little effort into supporting. I have done this in an nuclear magnetic resonance assignment program called Sparky that is based on Python to run Chimera as a structure viewer. Below is the code that starts Chimera from the Sparky Python interpretter.
There are many problems.
You need to set an environment variable to tell the operating system where the Chimera shared libraries are before you start Python. See example below.
You need to use the Python included with Chimera because Chimera uses a modified Python. Ick. The modification allows Chimera objects like Molecules to be given new attributes. There is also some other issue on the Mac where a stock Python can't find the init_chimera() method in shared library _chimera.so.
If you start the Chimera graphical user interface then you will need to run the Tk event-loop to get Chimera to update the graphics. But then Chimera will not return to your script that started it. So my example below does not start the event-loop.
If you start Chimera in nogui mode, it quits as soon as it processes any arguments which would probably prevent your script from calling into Chimera after that as Chimera has cleaned up.
When I used the script below and then opened a PDB file on my Mac OS 10.4.6 system the screen went dim and a message told me to hold the power button down to do a hard reboot! Probably a graphics driver issue.
As you can see we really haven't worked much on this type of Chimera use.
Tom
----
Example starting Chimera on a Mac from Python:
$ export CHIMERA="/Users/goddard/Desktop/Chimera 2199.app/Contents/ Resources" $ export DYLD_LIBRARY_PATH=$CHIMERA/lib $ "/Users/goddard/Desktop/Chimera 2199.app/Contents/Resources/bin/ python2.4" Python 2.4.2 (#1, Jan 30 2006, 11:15:23) [GCC 4.0.1 (Apple Computer, Inc. build 5247)] on darwin Type "help", "copyright", "credits" or "license" for more information.
import start_chimera start_chimera.start_chimera()
# Now you could "import chimera" and do some stuff.
---
The following is the start_sparky.py file used in the above example:
# ---------------------------------------------------------------------- ------- # start_count = 0 def start_chimera():
setup_chimera()
import chimeraInit try: chimeraInit.init(argv = [], nogui = False, eventloop = False, exitonquit = False) except SystemExit, value: # Chimera raises SystemExit sometimes when it can't start. # Have to catch it here or Sparky will exit. import traceback traceback.print_exc() raise EnvironmentError, 'Chimera failed to start' except: global start_count if start_count == 1: warning = ''' Chimera can only be started once per Sparky session. This is a limitation in all versions of Chimera released so far (through March 2004).
''' import sys sys.stdout.write(warning) raise
start_count += 1
# ---------------------------------------------------------------------- ------- # Do initial Chimera setup that only needs to be done once even if Chimera # is started and quit several times. # chimera_setup = False def setup_chimera():
global chimera_setup if chimera_setup: return chimera_setup = True
import os if not os.environ.has_key('CHIMERA'): raise EnvironmentError, 'CHIMERA environment variable not set.'
chimera_path = os.environ['CHIMERA'] import os.path if not os.path.exists(chimera_path): raise EnvironmentError, 'CHIMERA environment variable gives non- existent directory ' + chimera_path
chimera_python = os.path.join(chimera_path, 'share') chimera_lib = os.path.join(chimera_path, 'lib') import sys if sys.platform == 'win32': chimera_site_packages = os.path.join(chimera_path, 'bin', 'Lib', 'site-packages') else: chimera_site_packages = os.path.join(chimera_path, 'lib', 'python2.4', 'site-packages')
sys.path.insert(0, chimera_site_packages) sys.path.insert(0, chimera_python) sys.path.insert(0, chimera_lib)
_______________________________________________ Chimera-users mailing list Chimera-users@cgl.ucsf.edu http://www.cgl.ucsf.edu/mailman/listinfo/chimera-users
participants (1)
-
Eric Pettersen