Author: bugman
Date: Thu Dec 11 10:48:26 2014
New Revision: 27077
URL: http://svn.gna.org/viewcvs/relax?rev=27077&view=rev
Log:
Converted the internal structural displacement object to use unique IDs rather
than model numbers.
This allows the object to be much more flexible in what types of structures it
can handle. This is
in preparation for a change in the structure.displacement user function.
Modified:
trunk/lib/structure/internal/displacements.py
Modified: trunk/lib/structure/internal/displacements.py
URL:
http://svn.gna.org/viewcvs/relax/trunk/lib/structure/internal/displacements.py?rev=27077&r1=27076&r2=27077&view=diff
==============================================================================
--- trunk/lib/structure/internal/displacements.py (original)
+++ trunk/lib/structure/internal/displacements.py Thu Dec 11 10:48:26 2014
@@ -42,16 +42,16 @@
self._rotation_angle = {}
- def _calculate(self, model_from=None, model_to=None, coord_from=None,
coord_to=None, centroid=None):
+ def _calculate(self, id_from=None, id_to=None, coord_from=None,
coord_to=None, centroid=None):
"""Calculate the rotational and translational displacements using the
given coordinate sets.
This uses the U{Kabsch
algorithm<http://en.wikipedia.org/wiki/Kabsch_algorithm>}.
- @keyword model_from: The model number of the starting structure.
- @type model_from: int
- @keyword model_to: The model number of the ending structure.
- @type model_to: int
+ @keyword id_from: The ID string of the starting structure.
+ @type id_from: str
+ @keyword id_to: The ID string of the ending structure.
+ @type id_to: str
@keyword coord_from: The list of atomic coordinates for the
starting structure.
@type coord_from: numpy rank-2, Nx3 array
@keyword coord_to: The list of atomic coordinates for the ending
structure.
@@ -61,26 +61,26 @@
"""
# Initialise structures if necessary.
- if not model_from in self._translation_vector:
- self._translation_vector[model_from] = {}
- if not model_from in self._translation_distance:
- self._translation_distance[model_from] = {}
- if not model_from in self._rotation_matrix:
- self._rotation_matrix[model_from] = {}
- if not model_from in self._rotation_axis:
- self._rotation_axis[model_from] = {}
- if not model_from in self._rotation_angle:
- self._rotation_angle[model_from] = {}
+ if not id_from in self._translation_vector:
+ self._translation_vector[id_from] = {}
+ if not id_from in self._translation_distance:
+ self._translation_distance[id_from] = {}
+ if not id_from in self._rotation_matrix:
+ self._rotation_matrix[id_from] = {}
+ if not id_from in self._rotation_axis:
+ self._rotation_axis[id_from] = {}
+ if not id_from in self._rotation_angle:
+ self._rotation_angle[id_from] = {}
# The Kabsch algorithm.
- trans_vect, trans_dist, R, axis, angle, pivot =
kabsch(name_from='model %s'%model_from, name_to='model %s'%model_to,
coord_from=coord_from, coord_to=coord_to, centroid=centroid)
+ trans_vect, trans_dist, R, axis, angle, pivot =
kabsch(name_from="'%s'"%id_from, name_to="'%s'"%id_to, coord_from=coord_from,
coord_to=coord_to, centroid=centroid)
# Store the data.
- self._translation_vector[model_from][model_to] = trans_vect
- self._translation_distance[model_from][model_to] = trans_dist
- self._rotation_matrix[model_from][model_to] = R
- self._rotation_axis[model_from][model_to] = axis
- self._rotation_angle[model_from][model_to] = angle
+ self._translation_vector[id_from][id_to] = trans_vect
+ self._translation_distance[id_from][id_to] = trans_dist
+ self._rotation_matrix[id_from][id_to] = R
+ self._rotation_axis[id_from][id_to] = axis
+ self._rotation_angle[id_from][id_to] = angle
def from_xml(self, str_node, dir=None, file_version=1):
@@ -100,20 +100,20 @@
# Loop over the pairs.
for pair_node in pair_nodes:
# Get the two models.
- model_from = int(pair_node.getAttribute('model_from'))
- model_to = int(pair_node.getAttribute('model_to'))
+ id_from = str(pair_node.getAttribute('id_from'))
+ id_to = str(pair_node.getAttribute('id_to'))
# Initialise structures if necessary.
- if not model_from in self._translation_vector:
- self._translation_vector[model_from] = {}
- if not model_from in self._translation_distance:
- self._translation_distance[model_from] = {}
- if not model_from in self._rotation_matrix:
- self._rotation_matrix[model_from] = {}
- if not model_from in self._rotation_axis:
- self._rotation_axis[model_from] = {}
- if not model_from in self._rotation_angle:
- self._rotation_angle[model_from] = {}
+ if not id_from in self._translation_vector:
+ self._translation_vector[id_from] = {}
+ if not id_from in self._translation_distance:
+ self._translation_distance[id_from] = {}
+ if not id_from in self._rotation_matrix:
+ self._rotation_matrix[id_from] = {}
+ if not id_from in self._rotation_axis:
+ self._rotation_axis[id_from] = {}
+ if not id_from in self._rotation_angle:
+ self._rotation_angle[id_from] = {}
# A temporary container to place the Python objects into.
cont = ModelContainer()
@@ -128,7 +128,7 @@
obj_temp = getattr(cont, name)
# Store.
- obj[model_from][model_to] = obj_temp
+ obj[id_from][id_to] = obj_temp
def to_xml(self, doc, element):
@@ -142,18 +142,18 @@
# Loop over the starting models.
start_models = sorted(self._translation_vector.keys())
- for model_from in start_models:
+ for id_from in start_models:
# Loop over the ending models.
- end_models = sorted(self._translation_vector[model_from].keys())
- for model_to in end_models:
+ end_models = sorted(self._translation_vector[id_from].keys())
+ for id_to in end_models:
# Create an XML element for each pair.
pair_element = doc.createElement('pair')
element.appendChild(pair_element)
# Set the attributes.
- pair_element.setAttribute('desc', 'The displacement from model
%s to model %s' % (model_from, model_to))
- pair_element.setAttribute('model_from', str(model_from))
- pair_element.setAttribute('model_to', str(model_to))
+ pair_element.setAttribute('desc', 'The displacement from model
%s to model %s' % (id_from, id_to))
+ pair_element.setAttribute('id_from', id_from)
+ pair_element.setAttribute('id_to', id_to)
# The objects to store.
obj_names = [
@@ -171,7 +171,7 @@
pair_element.appendChild(sub_elem)
# Get the sub-object.
- subobj = getattr(self, obj_names[i])[model_from][model_to]
+ subobj = getattr(self, obj_names[i])[id_from][id_to]
# Add the value to the sub element.
object_to_xml(doc, sub_elem, value=subobj)
_______________________________________________
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