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

