Author: bugman
Date: Tue Sep 23 18:43:56 2014
New Revision: 25977
URL: http://svn.gna.org/viewcvs/relax?rev=25977&view=rev
Log:
Converted the rotate() and translate() structural object methods to use the new
selection object.
The atom_id arguments have been replaced with selection arguments. Therefore
all parts of relax
which call these methods must first call selection() to obtain the
Internal_selection instance.
Modified:
trunk/lib/structure/internal/object.py
trunk/pipe_control/structure/main.py
trunk/specific_analyses/frame_order/uf.py
Modified: trunk/lib/structure/internal/object.py
URL:
http://svn.gna.org/viewcvs/relax/trunk/lib/structure/internal/object.py?rev=25977&r1=25976&r2=25977&view=diff
==============================================================================
--- trunk/lib/structure/internal/object.py (original)
+++ trunk/lib/structure/internal/object.py Tue Sep 23 18:43:56 2014
@@ -2278,7 +2278,7 @@
mol.file_model = orig_model_num[i]
- def rotate(self, R=None, origin=None, model=None, atom_id=None):
+ def rotate(self, R=None, origin=None, model=None, selection=None):
"""Rotate the structural information about the given origin.
@keyword R: The forwards rotation matrix.
@@ -2287,40 +2287,27 @@
@type origin: numpy 3D, rank-1 array
@keyword model: The model to rotate. If None, all models will be
rotated.
@type model: int
- @keyword atom_id: The molecule, residue, and atom identifier string.
Only atoms matching this selection will be used.
- @type atom_id: str or None
- """
-
- # Generate the selection object.
- sel_obj = None
- if atom_id:
- sel_obj = Selection(atom_id)
+ @keyword selection: The internal structural selection object. This is
obtained by calling the selection() method with the atom ID string.
+ @type selection: lib.structure.internal.Internal_selection instance
+ """
# Loop over the models.
for model_cont in self.model_loop(model):
- # Loop over the molecules.
- for mol in model_cont.mol:
- # Skip non-matching molecules.
- if sel_obj and not sel_obj.contains_mol(mol.mol_name):
- continue
-
- # Loop over the atoms.
- for i in range(len(mol.atom_num)):
- # Skip non-matching atoms.
- if sel_obj and not sel_obj.contains_spin(mol.atom_num[i],
mol.atom_name[i], mol.res_num[i], mol.res_name[i], mol.mol_name):
- continue
-
- # The origin to atom vector.
- vect = array([mol.x[i], mol.y[i], mol.z[i]], float64) -
origin
-
- # Rotation.
- rot_vect = dot(R, vect)
-
- # The new position.
- pos = rot_vect + origin
- mol.x[i] = pos[0]
- mol.y[i] = pos[1]
- mol.z[i] = pos[2]
+ # Loop over all molecules and atoms in the selection.
+ for mol_index, i in selection.loop():
+ mol = model_cont.mol[mol_index]
+
+ # The origin to atom vector.
+ vect = array([mol.x[i], mol.y[i], mol.z[i]], float64) - origin
+
+ # Rotation.
+ rot_vect = dot(R, vect)
+
+ # The new position.
+ pos = rot_vect + origin
+ mol.x[i] = pos[0]
+ mol.y[i] = pos[1]
+ mol.z[i] = pos[2]
def selection(self, atom_id=None):
@@ -2353,7 +2340,7 @@
# Skip non-matching molecules.
if sel_obj and not sel_obj.contains_mol(mol.mol_name):
continue
-
+
# Add the molecule index.
selection.add_mol(mol_index=mol_index)
@@ -2422,40 +2409,27 @@
target.append(file_root(file) + '_mol' + repr(mol_num))
- def translate(self, T=None, model=None, atom_id=None):
+ def translate(self, T=None, model=None, selection=None):
"""Displace the structural information by the given translation vector.
@keyword T: The translation vector.
@type T: numpy 3D, rank-1 array
@keyword model: The model to rotate. If None, all models will be
rotated.
@type model: int
- @keyword atom_id: The molecule, residue, and atom identifier string.
Only atoms matching this selection will be used.
- @type atom_id: str or None
- """
-
- # Generate the selection object.
- sel_obj = None
- if atom_id:
- sel_obj = Selection(atom_id)
+ @keyword selection: The internal structural selection object. This is
obtained by calling the selection() method with the atom ID string.
+ @type selection: lib.structure.internal.Internal_selection instance
+ """
# Loop over the models.
for model_cont in self.model_loop(model):
- # Loop over the molecules.
- for mol in model_cont.mol:
- # Skip non-matching molecules.
- if sel_obj and not sel_obj.contains_mol(mol.mol_name):
- continue
-
- # Loop over the atoms.
- for i in range(len(mol.atom_num)):
- # Skip non-matching atoms.
- if sel_obj and not sel_obj.contains_spin(mol.atom_num[i],
mol.atom_name[i], mol.res_num[i], mol.res_name[i], mol.mol_name):
- continue
-
- # Translate.
- mol.x[i] = mol.x[i] + T[0]
- mol.y[i] = mol.y[i] + T[1]
- mol.z[i] = mol.z[i] + T[2]
+ # Loop over all molecules and atoms in the selection.
+ for mol_index, i in selection.loop():
+ mol = model_cont.mol[mol_index]
+
+ # Translate.
+ mol.x[i] = mol.x[i] + T[0]
+ mol.y[i] = mol.y[i] + T[1]
+ mol.z[i] = mol.z[i] + T[2]
def to_xml(self, doc, element):
Modified: trunk/pipe_control/structure/main.py
URL:
http://svn.gna.org/viewcvs/relax/trunk/pipe_control/structure/main.py?rev=25977&r1=25976&r2=25977&view=diff
==============================================================================
--- trunk/pipe_control/structure/main.py (original)
+++ trunk/pipe_control/structure/main.py Tue Sep 23 18:43:56 2014
@@ -818,7 +818,8 @@
origin = array(origin, float64)
# Call the specific code.
- cdp.structure.rotate(R=R, origin=origin, model=model, atom_id=atom_id)
+ selection = cdp.structure.selection(atom_id=atom_id)
+ cdp.structure.rotate(R=R, origin=origin, model=model, selection=selection)
def set_vector(spin=None, xh_vect=None):
@@ -922,7 +923,8 @@
T = array(T, float64)
# Call the specific code.
- cdp.structure.translate(T=T, model=model, atom_id=atom_id)
+ selection = cdp.structure.selection(atom_id=atom_id)
+ cdp.structure.translate(T=T, model=model, selection=selection)
def vectors(spin_id1=None, spin_id2=None, model=None, verbosity=1, ave=True,
unit=True):
Modified: trunk/specific_analyses/frame_order/uf.py
URL:
http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/frame_order/uf.py?rev=25977&r1=25976&r2=25977&view=diff
==============================================================================
--- trunk/specific_analyses/frame_order/uf.py (original)
+++ trunk/specific_analyses/frame_order/uf.py Tue Sep 23 18:43:56 2014
@@ -99,6 +99,9 @@
# Make a copy of the structural object (so as to preserve the original
structure).
structure = deepcopy(cdp.structure)
+ # The internal structural selection object.
+ selection = structure.selection(atom_id=domain_moving())
+
# First rotate the moving domain to the average position.
R = zeros((3, 3), float64)
if hasattr(cdp, 'ave_pos_alpha'):
@@ -109,11 +112,11 @@
origin = pipe_centre_of_mass(atom_id=domain_moving(), verbosity=0)
else:
origin = array([cdp.pivot_x, cdp.pivot_y, cdp.pivot_z])
- structure.rotate(R=R, origin=origin, atom_id=domain_moving())
+ structure.rotate(R=R, origin=origin, selection=selection)
# Then translate the moving domain.
if not translation_fixed():
- structure.translate(T=[cdp.ave_pos_x, cdp.ave_pos_y, cdp.ave_pos_z],
atom_id=domain_moving())
+ structure.translate(T=[cdp.ave_pos_x, cdp.ave_pos_y, cdp.ave_pos_z],
selection=selection)
# Write out the PDB file.
file = open_write_file(file_name=file, dir=dir, force=force)
_______________________________________________
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