# [chimera-dev] [Chimera-users] drawing a symmetry axis

Tom Goddard goddard at cgl.ucsf.edu
Sat Dec 13 10:22:50 PST 2008

```Mi Mili,

Chimera computes and displays inertia ellipsoids (principle axes and
eigenvalues) for molecules and surfaces and could easily do that for
volume data.  With volume data another user interface problem arises
that you don't know the boundary of the object of interest.  This is in
fact the primary task in analyzing such data -- identifying the
boundaries.  You don't want to compute principle moments for a whole box
around the object because the noise is so strong (signal to noise ~ 1)
you will not get any reasonable object axes for electron tomography
data.  The problems we work on in Chimera involve how to input human
intelligence into the problem in the simplest and most minimal way so
that an algorithm can give you a meaningful answer.  For a virus spike
the human intelligence will recognize the spherical or cylindrical virus
shape, know that the spike has to be perpendicular to the surface, know
about different shape confounding blobs on virus surfaces, and will pick
a spike and by hand give an initial guess to an axis that can be refined.

Tom

Mili Shah wrote:
> Hi Tom--
>
> How do you get your initial guess to the rotation axis?  One way of
> doing this is to look at the principal axis (eigenvector of the
> covariance matrix) associated with the most distinct eigenvalue.
> Using this method you do not need to know the correspondence of
> symmetric pairs.  However, there are drawbacks to this method.  First
> you have to have a 'distinct' eigenvalue.  We have shown that there
> may not be one in the case of noisy data.
>
> There may be a way to use this idea as an initial guess for
> correspondence...
>
> M
>
> On Fri, 12 Dec 2008, Tom Goddard wrote:
>
>> Hi Mark, Dan, Mili,
>>
>> There are two common cases where we want to know the symmetry axes.
>> In one case we have an assembly of multiple proteins with coordinates
>> for the positions of all atoms.  In the other case we have a
>> 3-dimensional density map (a 3-d array of numbers) for example from
>> electron microscopy.  In the molecule case the main difficulty is
>> establishing a correspondence between symmetrically equivalent
>> atoms.  All the atoms have names and are part of amino acid sequences
>> and the main method to address this is sequence alignment, not a any
>> geometric criteria.  In the second case with density maps we don't
>> have a very good solution.  We don't know the center of rotation and
>> the data can be very noisy -- tomography of virus spikes or nuclear
>> pores.  This is generally tackled by a 6 degree-of-freedom search
>> calculating the correlation of the density map with a rotated and
>> translated copy of itself.  This can be slow (minutes).  We generally
>> work on interactive methods taking at most a few seconds to compute.
>> I'll be working on this problem in the next few months and am open to
>> ideas.  I'll have to look at more than the abstract of the paper you
>> mention to know if that could help.  We are always looking for
>> collaborators.
>>
>> Thanks,
>>
>>   Tom
>>
>>
>>
>> Mark Moll wrote:
>>> Tom (and other Chimera developers),
>>>
>>> You might be interested in the paper below. It describes a method
>>> for computing the best axis of symmetry and computing a
>>> `symmetrized'  version of a symmetric complex (i.e. with deviations
>>> from symmetry  removed). They have extended the analysis since this
>>> paper appeared to  other forms of symmetry, but this hasn't appeared
>>> yet, AFAIK. (The  authors are cc-ed in case they want to follow up.)
>>> The first author  may have a reference matlab implementation that
>>> could probably without  too much trouble be converted into python
>>> using numpy.
>>>
>>> @article{shah2006a-symmetry-preserving-singular-value,
>>>     Abstract = {A reduced order representation of a large data set
>>> is often realized through a principal component analysis based upon
>>> a singular value decomposition (SVD) of the data. The left singular
>>> vectors of a truncated SVD provide the reduced basis. In several
>>> applications such as facial analysis and protein dynamics,
>>> structural  symmetry is inherent in the data. Typically, reflective
>>> or rotational  symmetry is expected to be present in these
>>> applications. In protein  dynamics, determining this symmetry allows
>>> one to provide SVD major  modes of motion that best describe the
>>> symmetric movements of the  protein. In face detection, symmetry in
>>> the SVD allows for more  efficient compression algorithms. Here we
>>> present a method to compute  the plane of reflective symmetry or the
>>> axis of rotational symmetry of  a large set of points. Moreover, we
>>> develop a symmetry preserving  singular value decomposition (SPSVD)
>>> that best approximates the given  set while respecting the symmetry.
>>> Interesting subproblems arise in  the presence of noisy data or in
>>> situations where most, but not all,  of the structure is symmetric.
>>> An important part of the determination  of the axis of rotational
>>> symmetry or the plane of reflective symmetry  is an iterative
>>> reweighting scheme. This scheme is rapidly convergent  in practice
>>> and seems to be very effective in ignoring outliers  (points that do
>>> not respect the symmetry).
>>> },
>>>     Author = {Mili I. Shah and Danny C. Sorensen},
>>>     Doi = {10.1137/050646676},
>>>     Journal = {{SIAM} Journal on Matrix Analysis and Applications},
>>>     Number = {3},
>>>     Pages = {749--769},
>>>     Title = {A Symmetry Preserving Singular Value Decomposition},
>>>     Volume = {28},
>>>     Year = {2006}
>>> }
>>>
>>>
>>> On Dec 11, 2008, at 6:49 PM, Thomas Goddard wrote:
>>>
>>>
>>>> Hi Philip,
>>>>
>>>>   I don't know an easy way to show the symmetry axis of your dimer
>>>> as a
>>>> line or rod using the normal Chimera commands.  But you could do
>>>> this by
>>>> modifying the keyboard shortcut ai Python code.
>>>>
>>>>   You would edit the file
>>>>
>>>>     chimera/share/MatchDomains/__init__.py
>>>>
>>>> or on the Mac it would be
>>>>
>>>>     Chimera.app/Contents/Resources/share/MatchDomains/__init__.py
>>>>
>>>> (and on the Mac you'd need to click the Chimera icon and choose "Show
>>>> package contents" to see in the Chimera.app folder).
>>>>
>>>>   You would change the transform_schematic() routine (line 171)
>>>> code  from
>>>>
>>>> #    tarray = ((0,1,2),(0,2,3))
>>>>     tarray = ((0,1,2),(0,2,3),(0,1,5),(0,5,4),(1,2,6),(1,6,5),
>>>>               (2,3,7),(2,7,6),(3,0,4),(3,4,7),(4,5,6),(4,6,7))
>>>>     g1 = sm.addPiece(varray, tarray, from_rgba)
>>>> #    g1.displayStyle = g1.Mesh
>>>>
>>>>     from Matrix import xform_matrix, apply_matrix
>>>>     tf = xform_matrix(xform)
>>>>     corners2 = [apply_matrix(tf, p) for p in corners]
>>>>     varray2 = corners2
>>>>     g2 = sm.addPiece(varray2, tarray, to_rgba)
>>>> #    g2.displayStyle = g2.Mesh
>>>>
>>>>
>>>> to
>>>>
>>>> #    tarray = ((0,1,2),(0,2,3))
>>>>     tarray = ((0,1,1),)
>>>> #    tarray = ((0,1,2),(0,2,3),(0,1,5),(0,5,4),(1,2,6),(1,6,5),
>>>> #              (2,3,7),(2,7,6),(3,0,4),(3,4,7),(4,5,6),(4,6,7))
>>>>     g1 = sm.addPiece(varray, tarray, from_rgba)
>>>>     g1.displayStyle = g1.Mesh
>>>>     g1.lineThickness = 3
>>>>
>>>>     from Matrix import xform_matrix, apply_matrix
>>>>     tf = xform_matrix(xform)
>>>>     corners2 = [apply_matrix(tf, p) for p in corners]
>>>>     varray2 = corners2
>>>> #    g2 = sm.addPiece(varray2, tarray, to_rgba)
>>>> #    g2.displayStyle = g2.Mesh
>>>>
>>>> Then restart Chimera and use the script you referred to.  It will
>>>> draw a
>>>> line for the axis with width 3 pixels.  In the future we will try
>>>> some simpler capability to find and show symmetry axes.
>>>>
>>>>     Tom
>>>>
>>>>
>>>> Philip Wurm wrote:
>>>>
>>>>> Hi,
>>>>> i have a protein dimer and i would like to show the symmetry axis. I
>>>>> found a script in this mailing list:
>>>>>
>>>>> http://www.cgl.ucsf.edu/pipermail/chimera-users/2008-October/003140.html
>>>>>
>>>>>
>>>>> which works quite nice. But i would like to have a nicer
>>>>> representation
>>>>> of my symmetry axis, not this two slabs. Just a line or thin rod
>>>>> would
>>>>> be nice.
>>>>>
>>>>> Does anyone know how to do this?
>>>>>
>>>>> Thanks,
>>>>> Philip
>>>>> _______________________________________________
>>>>> Chimera-users mailing list
>>>>> Chimera-users at cgl.ucsf.edu
>>>>> http://www.cgl.ucsf.edu/mailman/listinfo/chimera-users
>>>>>
>>>> _______________________________________________
>>>> Chimera-users mailing list
>>>> Chimera-users at cgl.ucsf.edu
>>>> http://www.cgl.ucsf.edu/mailman/listinfo/chimera-users
>>>>
>>>>
>>>
>>>

```