Hi Troels,

This is the problematic commit which causes the unit tests to fail.
The model_loop() API method needs to be used instead.  The logic of
matching to the spin ID needs to then go back into the methods that
use the model_loop().  This logic could possible be put into a
function in specific_analyses.relax_disp.model or one of the other
dispersion modules.

Cheers,

Edward


On 6 October 2014 05:19,  <[email protected]> wrote:
> Author: tlinnet
> Date: Mon Oct  6 05:19:08 2014
> New Revision: 26159
>
> URL: http://svn.gna.org/viewcvs/relax?rev=26159&view=rev
> Log:
> Moved the looping over cluster spin ids into its own function in the API.
>
> Bug #22754 (https://gna.org/bugs/index.php?22754): The minimise.calculate() 
> does not calculate chi2 value for clustered residues.
>
> Modified:
>     trunk/specific_analyses/relax_disp/api.py
>
> Modified: trunk/specific_analyses/relax_disp/api.py
> URL: 
> http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/relax_disp/api.py?rev=26159&r1=26158&r2=26159&view=diff
> ==============================================================================
> --- trunk/specific_analyses/relax_disp/api.py   (original)
> +++ trunk/specific_analyses/relax_disp/api.py   Mon Oct  6 05:19:08 2014
> @@ -261,82 +261,8 @@
>          check_mol_res_spin_data()
>          check_model_type()
>
> -        # Initialise cluster ids.
> -        cluster_ids = ['free spins']
> -
> -        # Add the defined cluster IDs.
> -        if hasattr(cdp, 'clustering'):
> -            for key in list(cdp.clustering.keys()):
> -                if key not in cluster_ids:
> -                    cluster_ids.append(key)
> -
> -        # Now collect spins and spin_id per cluster ids.
> -        cluster_spin_list = []
> -        cluster_spin_id_list = []
> -        clust_contain_spin_id_list = []
> -
> -        # Loop over the cluster ids
> -        if hasattr(cdp, 'clustering'):
> -            # Now loop over the cluster_ids in the list, and collect per id.
> -            for cluster_id in cluster_ids:
> -                cluster_id_spin_list = []
> -                cluster_id_spin_id_list = []
> -                # Now loop through spins in the clustered id, and collect
> -                col_sel_str = ''
> -                mol_token = None
> -                for clust_spin_id in cdp.clustering[cluster_id]:
> -                    clust_spin = return_spin(clust_spin_id)
> -
> -                    # Skip de-selected
> -                    if not clust_spin.select:
> -                        continue
> -
> -                    # Skip protons for MMQ data.
> -                    if clust_spin.model in MODEL_LIST_MMQ and 
> clust_spin.isotope == '1H':
> -                        continue
> -
> -                    # Add to list.
> -                    cluster_id_spin_list.append(clust_spin)
> -                    cluster_id_spin_id_list.append(clust_spin_id)
> -
> -                    # Add id to string
> -                    mol_token, res_token, spin_token = 
> tokenise(clust_spin_id)
> -                    col_sel_str += '%s,' % (res_token)
> -
> -                # Make selection for molecule.
> -                if mol_token == None:
> -                    col_sel_str = ':' + col_sel_str
> -                else:
> -                    col_sel_str = '#%s:' % mol_token + col_sel_str
> -
> -                # Make a selection object, based on the cluster id.
> -                select_obj = Selection(col_sel_str)
> -                # Does the current cluster id contain the spin of interest.
> -                clust_contain_spin_id = select_obj.contains_spin_id(spin_id)
> -                # If the spin_id is set to None, then we calculate for all:
> -                if spin_id == None:
> -                    clust_contain_spin_id = True
> -
> -                cluster_spin_list.append(cluster_id_spin_list)
> -                cluster_spin_id_list.append(cluster_id_spin_id_list)
> -                clust_contain_spin_id_list.append(clust_contain_spin_id)
> -
> -        # If clustering has not been specified, then collect for free spins, 
> according to selection.
> -        else:
> -            # Now loop over selected spins.
> -            free_spin_list = []
> -            free_spin_id_list = []
> -            for cur_spin, cur_spin_id in spin_loop(selection=spin_id, 
> return_id=True, skip_desel=True):
> -                # Skip protons for MMQ data.
> -                if cur_spin.model in MODEL_LIST_MMQ and cur_spin.isotope == 
> '1H':
> -                    continue
> -
> -                free_spin_list.append(cur_spin)
> -                free_spin_id_list.append(cur_spin_id)
> -
> -            cluster_spin_list.append(free_spin_list)
> -            cluster_spin_id_list.append(free_spin_id_list)
> -            clust_contain_spin_id_list.append(True)
> +        # Get the looping list over cluster ids.
> +        cluster_ids, cluster_spin_list, cluster_spin_id_list, 
> clust_contain_spin_id_list = self.loop_cluster_ids(spin_id=spin_id)
>
>          # Special exponential curve-fitting for the R2eff model.
>          if cdp.model_type == MODEL_R2EFF:
> @@ -706,6 +632,96 @@
>
>          # Minimisation.
>          self.minimise(min_algor='grid', lower=lower, upper=upper, inc=inc, 
> scaling_matrix=scaling_matrix, constraints=constraints, verbosity=verbosity, 
> sim_index=sim_index)
> +
> +
> +    def loop_cluster_ids(self, spin_id=None):
> +        """Create list of cluster ids, and its associated list of spin 
> containers and spin_ids.
> +
> +        @param spin_id:     The spin identification string.
> +        @type spin_id:      None
> +        @return:            The list of cluster ids, the nested list of spin 
> container instances, the nested list of spin ids and list of boolean if 
> spin_id is contained in cluster_id.
> +        @rtype:             list of str, list of list of spin container, 
> list of list of spin ids, list of bool
> +        """
> +
> +        # Initialise cluster ids.
> +        cluster_ids = ['free spins']
> +
> +        # Add the defined cluster IDs.
> +        if hasattr(cdp, 'clustering'):
> +            for key in list(cdp.clustering.keys()):
> +                if key not in cluster_ids:
> +                    cluster_ids.append(key)
> +
> +        # Now collect spins and spin_id per cluster ids.
> +        cluster_spin_list = []
> +        cluster_spin_id_list = []
> +        clust_contain_spin_id_list = []
> +
> +        # Loop over the cluster ids
> +        if hasattr(cdp, 'clustering'):
> +            # Now loop over the cluster_ids in the list, and collect per id.
> +            for cluster_id in cluster_ids:
> +                cluster_id_spin_list = []
> +                cluster_id_spin_id_list = []
> +                # Now loop through spins in the clustered id, and collect
> +                col_sel_str = ''
> +                mol_token = None
> +                for clust_spin_id in cdp.clustering[cluster_id]:
> +                    clust_spin = return_spin(clust_spin_id)
> +
> +                    # Skip de-selected
> +                    if not clust_spin.select:
> +                        continue
> +
> +                    # Skip protons for MMQ data.
> +                    if clust_spin.model in MODEL_LIST_MMQ and 
> clust_spin.isotope == '1H':
> +                        continue
> +
> +                    # Add to list.
> +                    cluster_id_spin_list.append(clust_spin)
> +                    cluster_id_spin_id_list.append(clust_spin_id)
> +
> +                    # Add id to string
> +                    mol_token, res_token, spin_token = 
> tokenise(clust_spin_id)
> +                    col_sel_str += '%s,' % (res_token)
> +
> +                # Make selection for molecule.
> +                if mol_token == None:
> +                    col_sel_str = ':' + col_sel_str
> +                else:
> +                    col_sel_str = '#%s:' % mol_token + col_sel_str
> +
> +                # Make a selection object, based on the cluster id.
> +                select_obj = Selection(col_sel_str)
> +                # Does the current cluster id contain the spin of interest.
> +                clust_contain_spin_id = select_obj.contains_spin_id(spin_id)
> +                # If the spin_id is set to None, then we calculate for all:
> +                if spin_id == None:
> +                    clust_contain_spin_id = True
> +
> +                cluster_spin_list.append(cluster_id_spin_list)
> +                cluster_spin_id_list.append(cluster_id_spin_id_list)
> +                clust_contain_spin_id_list.append(clust_contain_spin_id)
> +
> +        # If clustering has not been specified, then collect for free spins, 
> according to selection.
> +        else:
> +            # Now loop over selected spins.
> +            free_spin_list = []
> +            free_spin_id_list = []
> +            for cur_spin, cur_spin_id in spin_loop(selection=spin_id, 
> return_id=True, skip_desel=True):
> +                # Skip protons for MMQ data.
> +                if cur_spin.model in MODEL_LIST_MMQ and cur_spin.isotope == 
> '1H':
> +                    continue
> +
> +                free_spin_list.append(cur_spin)
> +                free_spin_id_list.append(cur_spin_id)
> +
> +            cluster_spin_list.append(free_spin_list)
> +            cluster_spin_id_list.append(free_spin_id_list)
> +            clust_contain_spin_id_list.append(True)
> +
> +
> +        return cluster_ids, cluster_spin_list, cluster_spin_id_list, 
> clust_contain_spin_id_list
>
>
>      def map_bounds(self, param, spin_id=None):
>
>
> _______________________________________________
> 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

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel 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-devel

Reply via email to