mailr27101 - in /trunk: pipe_control/structure/main.py user_functions/structure.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on December 11, 2014 - 19:37:
Author: bugman
Date: Thu Dec 11 19:37:46 2014
New Revision: 27101

URL: http://svn.gna.org/viewcvs/relax?rev=27101&view=rev
Log:
Added the displace_id argument to the structure.align and 
structure.superimpose user functions.

This gives both of these user functions finer control over which atoms are 
translated and rotated by
the algorithm.  This allows, for example, to align structures based on a set 
of backbone heavy atoms
while the protons and side chains are displaced by default.  Or if a domain 
is aligned, then just
that domain can be displaced.


Modified:
    trunk/pipe_control/structure/main.py
    trunk/user_functions/structure.py

Modified: trunk/pipe_control/structure/main.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/pipe_control/structure/main.py?rev=27101&r1=27100&r2=27101&view=diff
==============================================================================
--- trunk/pipe_control/structure/main.py        (original)
+++ trunk/pipe_control/structure/main.py        Thu Dec 11 19:37:46 2014
@@ -106,7 +106,7 @@
     print("Created the empty model number %s." % model_num)
 
 
-def align(pipes=None, models=None, molecules=None, atom_id=None, method='fit 
to mean', centre_type="centroid", centroid=None):
+def align(pipes=None, models=None, molecules=None, atom_id=None, 
displace_id=None, method='fit to mean', centre_type="centroid", 
centroid=None):
     """Superimpose a set of related, but not identical structures.
 
     @keyword pipes:         The data pipes to include in the alignment and 
superimposition.
@@ -117,6 +117,8 @@
     @type molecules:        None or list of str
     @keyword atom_id:       The molecule, residue, and atom identifier 
string.  This matches the spin ID string format.
     @type atom_id:          str or None
+    @keyword displace_id:   The atom ID string for restricting the 
displacement to a subset of all atoms.  If not set, then all atoms will be 
translated and rotated.
+    @type displace_id:      str or None
     @keyword method:        The superimposition method.  It must be one of 
'fit to mean' or 'fit to first'.
     @type method:           str
     @keyword centre_type:   The type of centre to superimpose over.  This 
can either be the standard centroid superimposition or the CoM could be used 
instead.
@@ -151,8 +153,15 @@
     # Loop over all pipes, models, and molecules.
     i = 0
     for pipe_index, model_num, mol_name in structure_loop(pipes=pipes, 
molecules=molecules, models=models, atom_id=atom_id):
-        # The atom ID from the molecule name.
-        id = '#%s' % mol_name
+        # Add the molecule name to the displacement ID if required.
+        id = displace_id
+        if molecules != None:
+            if displace_id == None:
+                id = '#%s' % mol_name
+            elif not search('#', displace_id):
+                id = '#%s' % mol_name
+            else:
+                id = '#%s%s' % (mol_name, displace_id)
 
         # Translate the molecule first (the rotational pivot is defined in 
the first model).
         translate(T=T[i], model=model_num, pipe_name=pipes[pipe_index], 
atom_id=id)
@@ -1110,7 +1119,7 @@
         yield pipe_index, model_num, mol_name
 
 
-def superimpose(models=None, method='fit to mean', atom_id=None, 
centre_type="centroid", centroid=None):
+def superimpose(models=None, method='fit to mean', atom_id=None, 
displace_id=None, centre_type="centroid", centroid=None):
     """Superimpose a set of structural models.
 
     @keyword models:        The list of models to superimpose.  If set to 
None, then all models will be used.
@@ -1119,6 +1128,8 @@
     @type method:           str
     @keyword atom_id:       The molecule, residue, and atom identifier 
string.  This matches the spin ID string format.
     @type atom_id:          str or None
+    @keyword displace_id:   The atom ID string for restricting the 
displacement to a subset of all atoms.  If not set, then all atoms will be 
translated and rotated.
+    @type displace_id:      str or None
     @keyword centre_type:   The type of centre to superimpose over.  This 
can either be the standard centroid superimposition or the CoM could be used 
instead.
     @type centre_type:      str
     @keyword centroid:      An alternative position of the centroid to allow 
for different superpositions, for example of pivot point motions.
@@ -1151,10 +1162,10 @@
     # Update to the new coordinates.
     for i in range(len(models)):
         # Translate the molecule first (the rotational pivot is defined in 
the first model).
-        translate(T=T[i], model=models[i])
+        translate(T=T[i], model=models[i], atom_id=displace_id)
 
         # Rotate the molecule.
-        rotate(R=R[i], origin=pivot[i], model=models[i])
+        rotate(R=R[i], origin=pivot[i], model=models[i], atom_id=displace_id)
 
 
 def translate(T=None, model=None, atom_id=None, pipe_name=None):

Modified: trunk/user_functions/structure.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/user_functions/structure.py?rev=27101&r1=27100&r2=27101&view=diff
==============================================================================
--- trunk/user_functions/structure.py   (original)
+++ trunk/user_functions/structure.py   Thu Dec 11 19:37:46 2014
@@ -46,6 +46,7 @@
 # Text for the multi-structure paragraph.
 paragraph_multi_struct = "Support for multiple structures is provided by the 
data pipes, model numbers and molecule names arguments.  Each data pipe, 
model and molecule combination will be treated as a separate structure.  As 
only atomic coordinates with the same residue name and number and atom name 
will be assembled, structures with slightly different atomic structures can 
be compared.  If the list of models is not supplied, then all models of all 
data pipes will be used.  If the optional molecules list is supplied, each 
molecule in the list will be considered as a separate structure for 
comparison between each other."
 paragraph_atom_id = "The atom ID string, which uses the same notation as the 
spin ID, can be used to restrict the coordinates compared to a subset of 
molecules, residues, or atoms.  For example to only use backbone heavy atoms 
in a protein, set the atom ID to '@N,C,CA,O', assuming those are the names of 
the atoms in the 3D structural file."
+paragraph_displace_id = "The displacement ID string, which is similar to the 
atom ID, gives finer control over which atoms are translated and rotated by 
the algorithm.  When not set this allows, for example, to align structures 
based on a set of backbone heavy atoms and the backbone protons and 
side-chains are displaced by default.  Or if set to the same as the atom ID, 
if a single domain is aligned, then just that domain will be displaced."
 
 
 # The user function class.
@@ -195,6 +196,13 @@
     can_be_none = True
 )
 uf.add_keyarg(
+    name = "displace_id",
+    py_type = "str",
+    desc_short = "displacement ID string",
+    desc = "The atom identification string for restricting the displacement 
to a subset of all atoms.  If not set, then all atoms will be translated and 
rotated.",
+    can_be_none = True
+)
+uf.add_keyarg(
     name = "method",
     default = "fit to mean",
     py_type = "str",
@@ -229,6 +237,7 @@
 uf.desc[-1].add_paragraph("By supplying the position of the centroid, an 
alternative position than the standard rigid body centre is used as the focal 
point of the superimposition.  The allows, for example, the superimposition 
about a pivot point.")
 uf.desc[-1].add_paragraph(paragraph_multi_struct)
 uf.desc[-1].add_paragraph(paragraph_atom_id)
+uf.desc[-1].add_paragraph(paragraph_displace_id)
 # Prompt examples.
 uf.desc.append(Desc_container("Prompt examples"))
 uf.desc[-1].add_paragraph("To superimpose all sets of models, exactly as in 
the structure.superimpose user function, type one of:")
@@ -1178,6 +1187,13 @@
     can_be_none = True
 )
 uf.add_keyarg(
+    name = "displace_id",
+    py_type = "str",
+    desc_short = "displacement ID string",
+    desc = "The atom identification string for restricting the displacement 
to a subset of all atoms.  If not set, then all atoms will be translated and 
rotated.",
+    can_be_none = True
+)
+uf.add_keyarg(
     name = "centre_type",
     py_type = "str",
     default = "centroid",
@@ -1201,6 +1217,7 @@
 uf.desc[-1].add_item_list_element("'fit to first'", "This is quicker but is 
not as accurate for an ensemble description.  The Kabsch algorithm is used to 
rotate and translate each model to be superimposed onto the first model.")
 uf.desc[-1].add_paragraph("If the list of models is not supplied, then all 
models will be superimposed.")
 uf.desc[-1].add_paragraph(paragraph_atom_id)
+uf.desc[-1].add_paragraph(paragraph_displace_id)
 uf.desc[-1].add_paragraph("By supplying the position of the centroid, an 
alternative position than the standard rigid body centre is used as the focal 
point of the superimposition.  The allows, for example, the superimposition 
about a pivot point.")
 # Prompt examples.
 uf.desc.append(Desc_container("Prompt examples"))




Related Messages


Powered by MHonArc, Updated Thu Dec 11 19:40:02 2014