mailRe: r13249 - in /branches/xyz: generic_fns/structure/main.py prompt/structure.py test_suite/system_tests/structure.py


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

Header


Content

Posted by Edward d'Auvergne on June 28, 2011 - 11:07:
Hi Han,

It looks like you accidentally had a change in the file
generic_fns/structure/main.py prior to the reversion, so that it was
included in the commit as well :S  This make things more difficult!
You'll first have to revert the new r13249 and commit.  Then try the
reversion of r13246 a second time.  This could make it interesting
when I try to bring this xyz branch back into the main line, the
svnmerge program might not quite understand what is happening.  That's
ok though, I'll be able to handle that problem if it arises.

Cheers,

Edward


On 28 June 2011 10:25,  <hasu@xxxxxxxxxxxxxxxxx> wrote:
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




Related Messages


Powered by MHonArc, Updated Wed Jun 29 13:40:16 2011