
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