[Chimera-users] Selection through bond and fragment naming
Eric Pettersen
pett at cgl.ucsf.edu
Fri Mar 11 11:29:37 PST 2011
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://plato.cgl.ucsf.edu/pipermail/chimera-users/attachments/20110311/6cdbe577/attachment.html>
More information about the Chimera-users
mailing list