Author: bugman
Date: Wed Oct 22 14:52:21 2014
New Revision: 26348

URL: http://svn.gna.org/viewcvs/relax?rev=26348&view=rev
Log:
Implemented the spin_selection Boolean argument for the interatom.define user 
function.

This has been added to the frontend with a description, and to the backend.  
When set, it allows the
spin selections to define the interatomic data container selection.


Modified:
    trunk/pipe_control/interatomic.py
    trunk/user_functions/interatom.py

Modified: trunk/pipe_control/interatomic.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/pipe_control/interatomic.py?rev=26348&r1=26347&r2=26348&view=diff
==============================================================================
--- trunk/pipe_control/interatomic.py   (original)
+++ trunk/pipe_control/interatomic.py   Wed Oct 22 14:52:21 2014
@@ -195,19 +195,21 @@
     return dp.interatomic.add_item(spin_id1=spin_id1, spin_id2=spin_id2)
 
 
-def define(spin_id1=None, spin_id2=None, pipe=None, direct_bond=False, 
verbose=True):
+def define(spin_id1=None, spin_id2=None, pipe=None, direct_bond=False, 
spin_selection=True, verbose=True):
     """Set up the magnetic dipole-dipole interaction.
 
-    @keyword spin_id1:      The spin identifier string of the first spin of 
the pair.
-    @type spin_id1:         str
-    @keyword spin_id2:      The spin identifier string of the second spin of 
the pair.
-    @type spin_id2:         str
-    @param pipe:        The data pipe to operate on.  Defaults to the current 
data pipe.
-    @type pipe:         str
-    @keyword direct_bond:   A flag specifying if the two spins are directly 
bonded.
-    @type direct_bond:      bool
-    @keyword verbose:       A flag which if True will result in printouts of 
the created interatomoic data containers.
-    @type verbose:          bool
+    @keyword spin_id1:          The spin identifier string of the first spin 
of the pair.
+    @type spin_id1:             str
+    @keyword spin_id2:          The spin identifier string of the second spin 
of the pair.
+    @type spin_id2:             str
+    @param pipe:                The data pipe to operate on.  Defaults to the 
current data pipe.
+    @type pipe:                 str
+    @keyword direct_bond:       A flag specifying if the two spins are 
directly bonded.
+    @type direct_bond:          bool
+    @keyword spin_selection:    Define the interatomic data container 
selection based on the spin selection.  If either spin is deselected, the 
interatomic container will also be deselected.  Otherwise the container will be 
selected.
+    @type spin_selection:       bool
+    @keyword verbose:           A flag which if True will result in printouts 
of the created interatomoic data containers.
+    @type verbose:              bool
     """
 
     # The data pipe.
@@ -219,6 +221,7 @@
 
     # Initialise the spin ID pairs list.
     ids = []
+    spin_selections = []
 
     # Use the structural data to find connected atoms.
     if hasattr(dp, 'structure'):
@@ -232,7 +235,8 @@
             id1 = generate_spin_id_unique(pipe_cont=dp, mol_name=mol_name1, 
res_num=res_num1, res_name=res_name1, spin_num=atom_num1, spin_name=atom_name1)
 
             # Do the spin exist?
-            if not return_spin(id1):
+            spin1 = return_spin(id1)
+            if not spin1:
                 continue
 
             # Loop over the atoms of the second spin selection.
@@ -251,11 +255,13 @@
                 id2 = generate_spin_id_unique(pipe_cont=dp, 
mol_name=mol_name2, res_num=res_num2, res_name=res_name2, spin_num=atom_num2, 
spin_name=atom_name2)
 
                 # Do the spin exist?
-                if not return_spin(id2):
+                spin2 = return_spin(id2)
+                if not spin2:
                     continue
 
                 # Store the IDs for the printout.
                 ids.append([id1, id2])
+                spin_selections.append([spin1.select, spin2.select])
 
     # No structural data present or the spin IDs are not in the structural 
data, so use spin loops and some basic rules.
     if ids == []:
@@ -288,6 +294,7 @@
 
                 # Store the IDs for the printout.
                 ids.append([id1, id2])
+                spin_selections.append([spin1.select, spin2.select])
 
     # No matches, so fail!
     if not len(ids):
@@ -310,7 +317,9 @@
             raise RelaxError("Unknown error.")
 
     # Define the interaction.
-    for id1, id2 in ids:
+    for i in range(len(ids)):
+        # Unpack.
+        id1, id2 = ids[i]
         # Get the interatomic data object, if it exists.
         interatom = return_interatom(id1, id2, pipe=pipe)
 
@@ -324,6 +333,12 @@
 
         # Set a flag indicating that a dipole-dipole interaction is present.
         interatom.dipole_pair = True
+
+        # Set the selection.
+        if spin_selection:
+            interatom.select = False
+            if spin_selections[i][0] and spin_selections[i][1]:
+                interatom.select = True
 
     # Printout.
     if verbose:

Modified: trunk/user_functions/interatom.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/user_functions/interatom.py?rev=26348&r1=26347&r2=26348&view=diff
==============================================================================
--- trunk/user_functions/interatom.py   (original)
+++ trunk/user_functions/interatom.py   Wed Oct 22 14:52:21 2014
@@ -134,6 +134,13 @@
     desc = "This is a flag which if True means that the two spins are directly 
bonded.  This flag is useful to simplify the set up of the main heteronuclear 
relaxation mechanism or one-bond residual dipolar couplings."
 )
 uf.add_keyarg(
+    name = "spin_selection",
+    default = True,
+    py_type = "bool",
+    desc_short = "selection from the spins",
+    desc = "Define the interatomic data container selection based on the spin 
selection.  If either spin is deselected, the interatomic container will also 
be deselected.  Otherwise the container will be selected."
+)
+uf.add_keyarg(
     name = "pipe",
     py_type = "str",
     desc_short = "alternative data pipe",
@@ -147,6 +154,7 @@
 uf.desc.append(Desc_container())
 uf.desc[-1].add_paragraph("To analyse relaxation or residual dipolar coupling 
(RDC) data, for example, pairs of spins which are coupled need to be defined.  
This can be via the magnetic dipole-dipole interaction or scalar coupling 
interaction.  This function will create an interatomic data object connecting 
two existing spins.  This data container will be used to store all information 
about the interactomic interaction including interatomic vectors and 
distances.")
 uf.desc[-1].add_paragraph("For analyses which use relaxation data, simply 
defining the interatomic interaction will indicate that there is a dipolar 
relaxation mechanism operating between the two spins.  Note that for model-free 
analyses or reduced spectral density mapping, only a single relaxation 
mechanism can be handled.  For RDC dependent analyses, the presence of the 
interatomic interaction indicates that dipolar coupling is expected between the 
two spins.")
+uf.desc[-1].add_paragraph("If the spin selection flag is set, then the newly 
created interatomic data container will be selected based on the current 
selection status of the two spins defining the interaction.  If either of the 
spins are deselected, then the new interatomic data container will also be 
deselected.  If both spins are selected, then the interatomic data container 
will also be selected.")
 # Prompt examples.
 uf.desc.append(Desc_container("Prompt examples"))
 uf.desc[-1].add_paragraph("To connect the spins ':1@N' to ':1@H', type one 
of:")
@@ -158,8 +166,8 @@
 uf.backend = interatomic.define
 uf.menu_text = "&define"
 uf.gui_icon = "oxygen.actions.list-add-relax-blue"
-uf.wizard_height_desc = 350
-uf.wizard_size = (900, 700)
+uf.wizard_height_desc = 380
+uf.wizard_size = (950, 700)
 uf.wizard_image = WIZARD_IMAGE_PATH + 'dipole_pair' + sep + 
'NH_dipole_pair.png'
 
 


_______________________________________________
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

Reply via email to