[chimera-dev] Buildstructure and xform coordinates

Eric Pettersen pett at cgl.ucsf.edu
Tue Dec 23 15:54:36 PST 2008

On Dec 19, 2008, at 7:14 AM, Dr. Jean-Didier Maréchal wrote:

> Dear all,
> Based on early queries, I am now using xform coord for most of my  
> scripts.
> However, now I have a problem because I have mixture between xforms  
> and
> coord.
> For example, I want to place a helium at the center of mass of the  
> molecular
> and having previously calculated it using xform coordinates... The  
> center of
> mass is therefore located at another part of the space.
> How could I transform on set of coords to the other?

Hi JD,
	When a new Model is open/created in Chimera, by default it is given  
the same transformation matrix as the lowest currently-open model.   
This is based on the presumption that frequently model coordinate  
systems are related and that therefore it is useful to show them in  
the relative positions that their raw coordinates imply.  This  
presumption is hosing you:  you want your new model to start with an  
identity matrix as its transformation matrix, since you are basing  
your model on the transformed coordinates of the existing model(s).
	So, you need to set your model's transform to be the identity.  The  
first thing you should do is change your code a little so that your  
placing_points function returns the atom it placed (which is easy  
since the placeHelium function returns the new helium atom).  So the  
last line of placing_points becomes:

return BuildStructure.placeHelium('com', model='scratch',  

Then the last line of your script changes from:



a = placing_points(center)
a.molecule.openState.xform = chimera.Xform.identity()

	I don't know if your center of mass of calculation will always be  
restricted to a single model (in your example it is), but if so then  
you can get away with using coord() instead of xformCoord() and I  
think your script will work without further changes in that case.


                         Eric Pettersen
                         UCSF Computer Graphics Lab

> Here is the script
> from chimera import selection
> from chimera import Point, Vector, Xform
> import BuildStructure
> def com(sub):
>    for i in range(len(sub.atoms)):
>        sumi=0
>        center = Vector(0, 0, 0)
>        for a in sub.atoms:
>            sumi += a.element.mass
>            center += a.element.mass * Vector(*a.xformCoord().data())
>        center_point=Point(center[0]/sumi,center[1]/sumi,center[2]/ 
> sumi)
>    return center_point
> def placing_points(center):
>    #pt=Point(center[0]/sum,center[1]/sum,center[2]/sum)
>    #print pt
>    BuildStructure.placeHelium('com', model='scratch', position=center)
> ligand = selection.currentResidues()[0]
> center=com(ligand)
> placing_points(center)
> _______________________________________________
> Chimera-dev mailing list
> Chimera-dev at cgl.ucsf.edu
> http://www.cgl.ucsf.edu/mailman/listinfo/chimera-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://plato.cgl.ucsf.edu/pipermail/chimera-dev/attachments/20081223/6ab9b23b/attachment.html>

More information about the Chimera-dev mailing list