Johan, "JL" == Johan Leckner wrote:
JL> So there is no way to run and control PyMol from within another python JL> program? Why? There is! [...] JL> Has anyone been able to run and quit PyMol from within python without JL> killing the interpreter? Is it possible? How? Here's a script, that I've used to use in Nov. Not sure that it will run with current version of pymol, however.
# -*- python -*- file # $Id: mov.py,v 1.8 2001/11/23 23:47:48 akhavr Exp $ # # Copyright (C) 2001 by KDS Software Group http://www.kds.com.ua/ from glob import glob import os import sys def split(movie_name): movie = open(movie_name) filename = "output" counter = 1 f = open(filename+"%010d" % counter,"w") skipnextline = 1 while 1: l = movie.readline() if l == "": break if l == " \r\n" or l == " \n": f.close() counter = counter + 1 f = open(filename+"%010d" % counter,"w") skipnextline = 1 continue if skipnextline == 1: skipnextline = 0 continue else: f.write(l) f.close() os.remove(filename+"%010d" % counter) def make_pdb(): for file in glob("output*"): os.system("transform 5 "+file+" "+file+".xyz") os.system("babel -ixyz "+file+".xyz -opdb "+file+".pdb") os.remove(file+".xyz") os.remove(file) def def_movie(width,height): file_list = glob("output*.pdb") for file in file_list: cmd.load(file, "mov") cmd.move("z",-10) cmd.hide("lines") cmd.show("spheres") mov_def = "" for i in range(1, len(file_list)+1): mov_def = mov_def + str(i) + " " cmd.mset(mov_def) cmd.viewport(width,height) cmd.bg_color("white") def make_png(): if not os.path.exists("png"): os.mkdir("png") # enable raytracing cmd.set("ray_trace_frames",1) cmd.set("cache_frame",0) # render cmd.mpng("png/mov") def make_yuv(): os.chdir("png") for i in glob("*"): ( base, suffix ) = re.split('_', i) ( no, suffix ) = re.split('\.', suffix) yuv_name = base+"."+str(int(no)) os.system("pngtopnm "+i+" | ppmtoyuvsplit "+yuv_name) os.chdir("..") def make_avi(width, height): os.chdir("png") num = str(len(glob("mov*Y"))) os.system("mpeg -a 1 -b "+num+" -h "+str(width)+" -v "+str(height)+ " -PF mov. -s mov.mpg") os.system("ffmpeg -f mpegvideo -i mov.mpg -r 25 " + "-an -f avi -b 1000 mov.avi ") try: os.remove("../mov.mpg") os.remove("../mov.avi") except OSError: pass os.rename("mov.mpg","../mov.mpg") os.rename("mov.avi","../mov.avi") os.chdir("..") def clean(): for file in glob("output*"): os.remove(file) for file in glob("png/*"): os.remove(file) os.rmdir("png") width=800 height=600 try: movie_name = sys.argv[3] print "Processing "+movie_name split(movie_name) make_pdb() def_movie(width,height) make_png() make_yuv() make_avi(width,height) clean() except IndexError: print """ Usage: pymol -c mov.py z-sequence-file """
-- Andrey V Khavryuchenko http://www.kds.com.ua/ Software Solutions