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"))
_______________________________________________
relax (http://www.nmr-relax.com)
This is the relax-commits mailing list
[email protected]
To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-commits