
Dear all, We are trying to place a fragment in an exact position. We created a fragment with tetrahedral symmetry and we are trying to link an atom of other molecule at 2.00 A of the central atom of the new fragment and making a certain angle (120 degrees for example) with one of the substituents to get the correct orientation of the new fragment. Has anybody an idea that how can we do that? Thanks.

On May 4, 2010, at 7:44 AM, Elisabeth Ortega wrote:
Dear all,
We are trying to place a fragment in an exact position. We created a fragment with tetrahedral symmetry and we are trying to link an atom of other molecule at 2.00 A of the central atom of the new fragment and making a certain angle (120 degrees for example) with one of the substituents to get the correct orientation of the new fragment.
Has anybody an idea that how can we do that?
Hi Elisabeth, I think you'll find that you've under-defined the positioning -- I think you'll need another angle and a dihedral at least to uniquely position the fragment, but nonetheless I can provide some code to get you pointed in the right direction. First, of course, you would use placeFragment() to get your fragment to some (arbitrary) initial position. The function will return a Residue that contains your fragment's atoms. From this you can find the central atom, etc. So let's say you've found the relevant atoms for positioning and you have these variables: fca = central fragment atom fsa = fragment substituent atom (for angle positioning) oa = atom from other atom (for distance) r = fragment residue --- start code --- # make fca-oa distance 2.0 [assumes fragment in same model as other molecule] dv = fca.coord() - oa.coord() dv.length = 2.0 - dv.length for a in r.atoms: a.setCoord(a.coord() + dv) # make fsa-fca-oa angle 120 from chimera import cross, angle, Point, Xform fscrd, fccrd, ocrd = [a.coord() for a in (fsa, fca, oa)] axis = cross(fscrd-fccrd, fccrd-ocrd) # axis the rotation will be around delta = 120.0 - angle(fscrd, fccrd, ocrd) v = fccrd - Point(0.0, 0.0, 0.0) # rotation is about origin, so move center atom there trans1 = Xform.translation(v) # translation to origin v.negate() trans2 = Xform.translation(v) # translation back from origin trans1.multiply(Xform.rotation(axis, delta)) trans1.multiply(trans2) for a in r.atoms: a.setCoord(trans1.apply(a.coord())) --- end code --- If your initial positioning of the fragment places the center atom in the proper direction from the other molecule atom you may be able to get away with only one angle (may still need a dihedral though). I am working on a function for bonding molecules together that would have been helpful here but it isn't done yet (the partially-completed function is bind() which you can look at in BuildStructure/ __init__.py). Also, I cc'ed chimera-dev on this and redirected replies there since this is pretty programming intensive. Good luck and don't hesitate to ask more questions. --Eric Eric Pettersen UCSF Computer Graphics Lab http://www.cgl.ucsf.edu

As a non-programmer, I would probably take a different approach, but there are several steps: (a) use Build Structure (under Tools... Structure Editing), Modify Atom tab, to build out farther from the "stump" where you want to attach the fragment. Let's call the first structure "frag1" and the fragment you want to attach "frag2." What you build onto frag1 should be similar to the part of frag2 that will be attached, because it will be used to match frag2 into the proper location. <http://www.cgl.ucsf.edu/chimera/docs/ContributedSoftware/editing/editing.htm...
(b) open the fragment as a separate model, use the "match" command to superimpose the corresponding atoms from frag2 onto those in frag1. This should give you the correct bond angles (those angles measured for three atoms). Don't worry about the bond length or the torsion angles (those measured on four atoms), they can be fixed up later. <http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/midas/match.html> (c) use the "combine" command (or copy/combine from the Model Panel) to make frag1 and frag2 into a single model <http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/midas/combine.html> (d) either save as PDB, then text-edit the PDB file to remove the extra frag1 atoms, or delete the extra atoms in Chimera before saving the PDB file (e) re-open the PDB file and use Build Structure to add the bond and to modify it to the desired length. Use Adjust Torsions (under Tools... Structure Editing) as needed to fix the torsion angles. <http://www.cgl.ucsf.edu/chimera/docs/ContributedSoftware/structuremeas/struc...
In the future, we hope to include more control over fragment attachment in the Build Structure tool, so you wouldn't have to do all this stuff, but it is not available yet. Best, Elaine ----- Elaine C. Meng, Ph.D. UCSF Computer Graphics Lab (Chimera team) and Babbitt Lab Department of Pharmaceutical Chemistry University of California, San Francisco On May 4, 2010, at 11:58 AM, Eric Pettersen wrote:
On May 4, 2010, at 7:44 AM, Elisabeth Ortega wrote:
Dear all,
We are trying to place a fragment in an exact position. We created a fragment with tetrahedral symmetry and we are trying to link an atom of other molecule at 2.00 A of the central atom of the new fragment and making a certain angle (120 degrees for example) with one of the substituents to get the correct orientation of the new fragment.
Has anybody an idea that how can we do that?
Hi Elisabeth, I think you'll find that you've under-defined the positioning -- I think you'll need another angle and a dihedral at least to uniquely position the fragment, but nonetheless I can provide some code to get you pointed in the right direction. First, of course, you would use placeFragment() to get your fragment to some (arbitrary) initial position. The function will return a Residue that contains your fragment's atoms. From this you can find the central atom, etc. So let's say you've found the relevant atoms for positioning and you have these variables:
fca = central fragment atom fsa = fragment substituent atom (for angle positioning) oa = atom from other atom (for distance) r = fragment residue
--- start code --- # make fca-oa distance 2.0 [assumes fragment in same model as other molecule] dv = fca.coord() - oa.coord() dv.length = 2.0 - dv.length for a in r.atoms: a.setCoord(a.coord() + dv)
# make fsa-fca-oa angle 120 from chimera import cross, angle, Point, Xform fscrd, fccrd, ocrd = [a.coord() for a in (fsa, fca, oa)] axis = cross(fscrd-fccrd, fccrd-ocrd) # axis the rotation will be around delta = 120.0 - angle(fscrd, fccrd, ocrd) v = fccrd - Point(0.0, 0.0, 0.0) # rotation is about origin, so move center atom there trans1 = Xform.translation(v) # translation to origin v.negate() trans2 = Xform.translation(v) # translation back from origin trans1.multiply(Xform.rotation(axis, delta)) trans1.multiply(trans2) for a in r.atoms: a.setCoord(trans1.apply(a.coord())) --- end code ---
If your initial positioning of the fragment places the center atom in the proper direction from the other molecule atom you may be able to get away with only one angle (may still need a dihedral though). I am working on a function for bonding molecules together that would have been helpful here but it isn't done yet (the partially- completed function is bind() which you can look at in BuildStructure/ __init__.py). Also, I cc'ed chimera-dev on this and redirected replies there since this is pretty programming intensive. Good luck and don't hesitate to ask more questions.
--Eric
Eric Pettersen UCSF Computer Graphics Lab http://www.cgl.ucsf.edu
_______________________________________________ Chimera-users mailing list Chimera-users@cgl.ucsf.edu http://www.cgl.ucsf.edu/mailman/listinfo/chimera-users
participants (3)
-
Elaine Meng
-
Elisabeth Ortega
-
Eric Pettersen