Author: han87
Date: Tue Jun 28 10:25:55 2011
New Revision: 13249
URL: http://svn.gna.org/viewcvs/relax?rev=13249&view=rev
Log:
Reverted r13246 as different approach will be used.
The command used was:
svn merge -r 13246:13239 .
The new function vectors_xyz() in the /prompt/structure.py is not
needed. The current code will be fixed for xyz file format
suggested in https://mail.gna.org/public/relax-devel/2011-06/
msg00244.html.
Modified:
branches/xyz/generic_fns/structure/main.py
branches/xyz/prompt/structure.py
branches/xyz/test_suite/system_tests/structure.py
Modified: branches/xyz/generic_fns/structure/main.py
URL: http://svn.gna.org/viewcvs/relax/branches/xyz/generic_fns/
structure/main.py?rev=13249&r1=13248&r2=13249&view=diff
=====================================================================
=========
--- branches/xyz/generic_fns/structure/main.py (original)
+++ branches/xyz/generic_fns/structure/main.py Tue Jun 28 10:25:55
2011
@@ -609,6 +609,140 @@
raise RelaxError("No vectors could be extracted.")
+def vectors_xyz(spin_id1=None, spin_id2=None, model=None,
verbosity=1, ave=True, unit=True):
+ """Extract the bond vectors from the loaded structures and
store them in the spin container.
+
+ @keyword attached: The spin identifier string of the
atom 1.
+ @type attached: str
+ @keyword spin_id: The spin identifier string of the
atom 2.
+ @type spin_id: str
+ @keyword model: The model to extract the vector
from. If None, all vectors will be
+ extracted.
+ @type model: str
+ @keyword verbosity: The higher the value, the more
information is printed to screen.
+ @type verbosity: int
+ @keyword ave: A flag which if True will cause the
average of all vectors to be
+ extracted.
+ @type ave: bool
+ @keyword unit: A flag which if True will cause the
function to calculate the unit
+ vectors.
+ @type unit: bool
+ """
+
+ # Test if the PDB file has been loaded.
+ if not hasattr(cdp, 'structure'):
+ raise RelaxPdbError
+
+ # Test if sequence data is loaded.
+ if not exists_mol_res_spin_data():
+ raise RelaxNoSequenceError
+
+ # Print out.
+ if verbosity:
+ # Number of models.
+ num_models = cdp.structure.num_models()
+
+ # Multiple models loaded.
+ if num_models > 1:
+ if model:
+ print(("Extracting vectors for model '%s'." %
model))
+ else:
+ print(("Extracting vectors for all %s models." %
num_models))
+ if ave:
+ print("Averaging all vectors.")
+
+ # Single model loaded.
+ else:
+ print("Extracting vectors from the single model.")
+
+ # Unit vectors.
+ if unit:
+ print("Calculating the unit vectors.")
+
+ # Loop over the spins.
+ no_vectors = True
+ for spin1, mol_name1, res_num1, res_name1 in spin_loop
(selection=spin_id1, full_info=True):
+ # Skip deselected spins.
+ if not spin.select:
+ continue
+
+ # The spin identification string. The residue name and
spin num is not included to allow molecules with point mutations
to be used as different models.
+ id1 = generate_spin_id(res_num1=res_num1, res_name1=None,
spin_num1=res_num1)
+
+ # Test that the spin number or name are set (one or both
are essential for the identification of the atom).
+ if spin.num == None and spin.name == None:
+ warn(RelaxWarning("Either the spin number or name
must be set for the spin " + repr(id) + " to identify the
corresponding atom in the molecule."))
+ continue
+
+ # The bond vector already exists.
+ if hasattr(spin, object_name):
+ obj = getattr(spin, object_name)
+ if obj:
+ warn(RelaxWarning("The bond vector for the spin "
+ repr(id) + " already exists."))
+ continue
+
+ # Get the bond info.
+ bond_vectors, attached_name, warnings =
cdp.structure.bond_vectors(attached_atom=attached,
model_num=model, res_num=res_num, spin_name=spin.name,
return_name=True, return_warnings=True)
+
+ # No attached atom.
+ if not bond_vectors:
+ # Warning messages.
+ if warnings:
+ warn(RelaxWarning(warnings + " (atom ID " + repr
(id) + ")."))
+
+ # Skip the spin.
+ continue
+
+ # Set the attached atom name.
+ if not hasattr(spin, 'attached_atom'):
+ spin.attached_atom = attached_name
+ elif spin.attached_atom != attached_name:
+ raise RelaxError("The " + repr(spin.attached_atom) +
" atom already attached to the spin does not match the attached
atom " + repr(attached_name) + ".")
+
+ # Initialise the average vector.
+ if ave:
+ ave_vector = zeros(3, float64)
+
+ # Loop over the individual vectors.
+ for i in xrange(len(bond_vectors)):
+ # Unit vector.
+ if unit:
+ # Normalisation factor.
+ norm_factor = norm(bond_vectors[i])
+
+ # Test for zero length.
+ if norm_factor == 0.0:
+ warn(RelaxZeroVectorWarning(id))
+
+ # Calculate the normalised vector.
+ else:
+ bond_vectors[i] = bond_vectors[i] / norm_factor
+
+ # Sum the vectors.
+ if ave:
+ ave_vector = ave_vector + bond_vectors[i]
+
+ # Average.
+ if ave:
+ vector = ave_vector / float(len(bond_vectors))
+ else:
+ vector = bond_vectors
+
+ # Set the vector.
+ setattr(spin, object_name, vector)
+
+ # We have a vector!
+ no_vectors = False
+
+ # Print out of modified spins.
+ if verbosity:
+ print(("Extracted " + spin.name + "-" + attached_name
+ " vectors for " + repr(id) + '.'))
+
+ # Right, catch the problem of missing vectors to prevent
massive user confusion!
+ if no_vectors:
+ raise RelaxError("No vectors could be extracted.")
+
+
def write_pdb(file=None, dir=None, model_num=None, force=False):
"""The PDB writing function.
Modified: branches/xyz/prompt/structure.py
URL: http://svn.gna.org/viewcvs/relax/branches/xyz/prompt/
structure.py?rev=13249&r1=13248&r2=13249&view=diff
=====================================================================
=========
--- branches/xyz/prompt/structure.py (original)
+++ branches/xyz/prompt/structure.py Tue Jun 28 10:25:55 2011
@@ -686,76 +686,6 @@
generic_fns.structure.main.vectors(attached=attached,
spin_id=spin_id, model=model, verbosity=verbosity, ave=ave,
unit=unit)
- def vectors_xyz(self, spin_id1=None, spin_id2=None,
model=None, verbosity=1, ave=True, unit=True):
- """Extract and store the bond vectors from the loaded
structures in the spin container.
-
- Keyword arguments
- ~~~~~~~~~~~~~~~~~
-
- spin_id1: The spin identification string of the spin 1.
-
- spin_id2: The spin identification string of the spin 2.
-
- model: The model to extract bond vectors from (which if
set to None will cause the vectors
- of all models to be extracted).
-
- verbosity: The amount of information to print to
screen. Zero corresponds to minimal
- output while higher values increase the amount of
output. The default value is 1.
-
- ave: A flag which if True will cause the bond vectors
from all models to be averaged. If
- vectors from only one model is extracted, this argument
will have no effect.
-
- unit: A flag which if True will cause the unit vector to
calculated rather than the full
- length bond vector.
-
-
- Description
- ~~~~~~~~~~~
-
- For a number of types of analysis, bond vectors or unit
bond vectors are required for the
- calculations. This user function allows these vectors to
be extracted from the loaded
- structures. The bond vector will be that from the two
atoms of a xyz file loaded in relax.
-
- The extraction of vectors can occur in a number of ways.
For example if an NMR structure
- with N models is loaded or if multiple molecules, from
any source, of the same compound are
- loaded as different models, there are three options for
extracting the bond vector. Firstly
- the bond vector of a single model can be extracted by
setting the 'model' argument.
- Secondly the bond vectors from all models can be
extracted if 'model' is None and 'ave' is
- set to False. Thirdly, if 'model' is None and 'ave' is
set to True, then a single vector
- which is the average for all models will be calculated.
-
-
- Example
- ~~~~~~~
-
- To extract a vector of two atoms from xyz file, type:
-
- relax> structure.vectors(spin_id1='#SSS-cluster4-new-
test_mol1@2', spin_id1='#SSS-cluster4-new-test_mol1@1')
- """
-
- # Function intro text.
- if self._exec_info.intro:
- text = self._exec_info.ps3 + "structure.vectors("
- text = text + "spin_id1=" + repr(spin_id1)
- text = text + ", spin_id2=" + repr(spin_id2)
- text = text + ", model=" + repr(model)
- text = text + ", verbosity=" + repr(verbosity)
- text = text + ", ave=" + repr(ave)
- text = text + ", unit=" + repr(unit) + ")"
- print(text)
-
- # The argument checks.
- arg_check.is_str(spin_id1, 'spin_identification_string',
can_be_none=True)
- arg_check.is_str(spin_id2, 'spin identification string',
can_be_none=True)
- arg_check.is_int(model, 'model', can_be_none=True)
- arg_check.is_int(verbosity, 'verbosity level')
- arg_check.is_bool(ave, 'average vector flag')
- arg_check.is_bool(unit, 'unit vector flag')
-
- # Execute the functional code.
- generic_fns.structure.main.vectors_xyz(spin_id1=spin_id1,
spin_id2=spin_id2, model=model, verbosity=verbosity, ave=ave,
unit=unit)
-
-
def write_pdb(self, file=None, dir=None, model_num=None,
force=False):
"""The PDB writing function.
Modified: branches/xyz/test_suite/system_tests/structure.py
URL: http://svn.gna.org/viewcvs/relax/branches/xyz/test_suite/
system_tests/structure.py?rev=13249&r1=13248&r2=13249&view=diff
=====================================================================
=========
--- branches/xyz/test_suite/system_tests/structure.py (original)
+++ branches/xyz/test_suite/system_tests/structure.py Tue Jun 28
10:25:55 2011
@@ -685,7 +685,3 @@
# And now all the rest of the atoms.
self.interpreter.structure.load_spins()
- # Extract a vector between first two spins.
- self.interpreter.structure.vectors_xyz(spin_id1='#SSS-
cluster4-new-test_mol1@1', spin_id2='#SSS-cluster4-new-test_mol1@2')
- print((cdp.mol[0].res[0].spin[0]))
- self.assert_(hasattr(cdp.mol[0].res[0].spin[0],
'bond_vect'))
_______________________________________________
relax (http://nmr-relax.com)
This is the relax-commits mailing list
relax-commits@xxxxxxx
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