On Mar 11, 2011, at 7:42 AM, Jean Didier Pie Marechal wrote:

Hi,

I have a system from which I only have xyz coordinates. What I would like to do is to define myself residue attribute on different fragments of the molecules. Could you tell me how (or if there is a way to ):

1. expand a selection to bonding atoms (i.e. I click on one atom and expand selection through one bond after each actions) This would be of the easiest way for me to select the fragments I want to.

Hi JD,
My only idea as to how to do this is with a short Python script:

from chimera.selection import currentAtoms, addCurrent
addAtoms = set()
for a in currentAtoms():
addAtoms.update(a.neighbors)
addCurrent(addAtoms)

You could then use the open command to run it:

open <script folder location (e.g. ~marechal/scripts)>/expand.py

which you could short to "xp" with the alias command:

alias ^xp open blah-blah/expand.py


2. set a residue attribute to the given selected fragment. I think I remember how to do so in scripting, but what is the command line to do so?

So, do you really want to set a residue-level attribute, or do you want to organize the selected atoms into a residue?  Setting a residue-level attribute for the atoms is easy:

setattr r myAttrName my-attr-val sel

Organizing the atoms into a residue again requires Python, and not as simple a script as for your first question, e.g.:

# script designed to run under "runscript" command, therefore has an "arguments" variable available...
try:
rname, rnum = arguments
except ValueError:
raise chimera.UserError("must supply residue name and number arguments")

try:
rnum = int(rnum)
except ValueError:
raise chimera.UserError("residue number (second arg) must be an integer")

atoms = chimera.selection.currentAtoms()
if not atoms:
raise chimera.UserError("No atoms selected")

# make a new residue
newRes = atoms[0].molecule.newResidue(rname, "A", rnum, ' ')

# withdraw atoms from their current residues
for a in atoms:
a.residue.removeAtom(a)
if len(a.residue.atoms) == 0:
a.molecule.deleteResidue(a.residue)

# add atoms to new residue
for a in atoms:
newRes.addAtom(a)

So you would run this script with the command "runscript blah-blah/newres.py TYR 1", which could again be shorted using aliasing:

alias ^nr runscript blah-blah/newres.py $1 $2

--Eric


                        Eric Pettersen

                        UCSF Computer Graphics Lab

                        http://www.cgl.ucsf.edu