From: Jason V. <jas...@sc...> - 2011-08-25 16:09:29
|
Hi Adam, I just copy/pasted the script you attached in your email and it worked fine. There are, however two spaces on line 14--maybe the parser thinks it found a block indent? Try erasing line 14 (the line following "from chempy import cpv") and re-running the script. Cheers, -- Jason On Thu, Aug 25, 2011 at 11:34 AM, H. Adam Steinberg <ad...@st...> wrote: > Hi all, > Can anyone help me with a problem that I am having trying to run a python > script? > I am trying to run the bbPlane script from the PyMOLWiki > <http://www.pymolwiki.org/index.php/BbPlane> > I have copied the script from the web page, to a plain text document, saved > it as "bbPlane.py" but when I run it I get: > ------------ > PyMOL>run bbPlane.py > Traceback (most recent call last): > File "/Volumes/Port > 3/software/MacPyMOL.app/pymol/modules/pymol/parser.py", line 332, in parse > File "/Volumes/Port > 3/software/MacPyMOL.app/pymol/modules/pymol/parsing.py", line 455, in > run_file > File "bbPlane.py", line 14 > > ^ > SyntaxError: invalid syntax > ------------- > script is here: > > # > # -- bbPlane.py - draws a CGO plane across the backbone atoms of > # neighboring amino acids > # > # Author: Jason Vertrees, 06/2010 > # Modified by Thomas Holder, 06/2010 > # Modified by Blaine Bell, 08/2011 > # Copyright (C) Schrodinger > # Open Source License: MIT > # > from pymol.cgo import * # get constants > from pymol import cmd, stored > from chempy import cpv > > def bbPlane(objSel='(all)', color='white', transp=0.0): > """ > DESCRIPTION > > Draws a plane across the backbone for a selection > > ARGUMENTS > > objSel = string: protein object or selection {default: (all)} > > color = string: color name or number {default: white} > > transp = float: transparency component (0.0--1.0) {default: 0.0} > > NOTES > > You need to pass in an object or selection with at least two > amino acids. The plane spans CA_i, O_i, N-H_(i+1), and CA_(i+1) > """ > # format input > transp = float(transp) > stored.AAs = [] > coords = dict() > > # need hydrogens on peptide nitrogen > cmd.h_add('(%s) and n. N' % objSel) > > # get the list of residue ids > for obj in cmd.get_object_list(objSel): > sel = obj + " and (" + objSel + ")" > for a in cmd.get_model(sel + " and n. CA").atom: > key = '/%s/%s/%s/%s' % (obj,a.segi,a.chain,a.resi) > stored.AAs.append(key) > coords[key] = [a.coord,None,None] > for a in cmd.get_model(sel + " and n. O").atom: > key = '/%s/%s/%s/%s' % (obj,a.segi,a.chain,a.resi) > if key in coords: > coords[key][1] = a.coord > for a in cmd.get_model("(hydro or n. CD) and nbr. (" + sel + " and > n. N)").atom: > key = '/%s/%s/%s/%s' % (obj,a.segi,a.chain,a.resi) > if key in coords: > coords[key][2] = a.coord > > # need at least two amino acids > if len(stored.AAs) <= 1: > print "ERROR: Please provide at least two amino acids, the > alpha-carbon on the 2nd is needed." > return > > # prepare the cgo > obj = [ > BEGIN, TRIANGLES, > COLOR, > ] > obj.extend(cmd.get_color_tuple(color)) > > for res in range(0, len(stored.AAs)-1): > curIdx, nextIdx = str(stored.AAs[res]), str(stored.AAs[res+1]) > > # populate the position array > pos = [coords[curIdx][0], coords[curIdx][1], coords[nextIdx][2], > coords[nextIdx][0]] > > # if the data are incomplete for any residues, ignore > if None in pos: > print 'peptide bond %s -> %s incomplete' % (curIdx, nextIdx) > continue > > if cpv.distance(pos[0], pos[3]) > 4.0: > print '%s and %s not adjacent' % (curIdx, nextIdx) > continue > > # need to order vertices to generate correct triangles for plane > # modified/added by B.Bell 8/18/2011 > sumpos = cpv.add(pos[0], cpv.add(pos[1], cpv.add(pos[2], pos[3]))) > centerpos = [ sumpos[0]/4., sumpos[1]/4., sumpos[2]/4. ] > angles = [ [ 0., 0 ] ] > s00 = cpv.sub(pos[0], centerpos) > for i in range(1,4): > s = cpv.sub(pos[i], centerpos) > ang = cpv.get_angle(s00, s) > angles.append( [ ang, i] ) > def sortfirst(a, b): > return cmp(a[0], b[0]) > angles.sort(sortfirst) > verts = map(lambda x: x[1], angles) > vorder = [ verts[0], verts[1], verts[2], > verts[1], verts[3], verts[2] ] > # fill in the vertex data for the triangles; > for i in vorder: > obj.append(VERTEX) > obj.extend(pos[i]) > > # finish the CGO > obj.append(END) > > # update the UI > newName = cmd.get_unused_name("backbonePlane") > cmd.load_cgo(obj, newName) > cmd.set("cgo_transparency", transp, newName) > > > cmd.extend("bbPlane", bbPlane) > > artforscience > H. Adam Steinberg > Artist, Scientist, Developmental Editor > www.artforscience.com > 7904 Bowman Rd > Lodi, WI 53555 > 608/729-5944 > > ------------------------------------------------------------------------------ > EMC VNX: the world's simplest storage, starting under $10K > The only unified storage solution that offers unified management > Up to 160% more powerful than alternatives and 25% more efficient. > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > _______________________________________________ > PyMOL-users mailing list (PyM...@li...) > Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users > Archives: http://www.mail-archive.com/pym...@li... > -- Jason Vertrees, PhD PyMOL Product Manager Schrodinger, LLC (e) Jas...@sc... (o) +1 (603) 374-7120 |