Hi Troels, It is still useful to add docstrings to all functions/methods/modules/classes/etc. so that future developers and power users will better understand the intent of the code. In Python there is no equivalent to this 'iterator' statement in PyMOL. But we do have generator functions which can be far more powerful. See https://wiki.python.org/moin/Generators for example. These are used quite a lot in relax:
$ grep -r "yield " . --colour=always | grep "\.py" Regards, Edward On 26 September 2014 17:46, Troels Emtekær Linnet <[email protected]> wrote: > Hi Edward. > > As you may have noticed, 1/3 of the code is iterating over the same theme. > > The best thing would be to device a custom iterator function. > Like pymol: http://www.pymolwiki.org/index.php/Iterate > > Then a general write statistics "to file", and a new grace plot function, to > plot from these files. > > But I don't have time to look into this at the moment. > > > Best > Troels > > > > 2014-09-26 17:40 GMT+02:00 Edward d'Auvergne <[email protected]>: >> >> Hi Troels, >> >> To help future users of your analysis, to better document it, and to >> help future developers maintain it, you should try to include full >> docstrings including epydoc documentation of all arguments for all the >> methods of your auto-analysis. >> >> Cheers, >> >> Edward >> >> >> On 26 September 2014 17:29, <[email protected]> wrote: >> > Author: tlinnet >> > Date: Fri Sep 26 17:29:39 2014 >> > New Revision: 26065 >> > >> > URL: http://svn.gna.org/viewcvs/relax?rev=26065&view=rev >> > Log: >> > Implemented getting the statistics for parameters and comparing to init >> > NI. >> > >> > Task #7826 (https://gna.org/task/index.php?7826): Write an python class >> > for the repeated analysis of dispersion data. >> > >> > Modified: >> > trunk/auto_analyses/relax_disp_repeat_cpmg.py >> > >> > Modified: trunk/auto_analyses/relax_disp_repeat_cpmg.py >> > URL: >> > http://svn.gna.org/viewcvs/relax/trunk/auto_analyses/relax_disp_repeat_cpmg.py?rev=26065&r1=26064&r2=26065&view=diff >> > >> > ============================================================================== >> > --- trunk/auto_analyses/relax_disp_repeat_cpmg.py (original) >> > +++ trunk/auto_analyses/relax_disp_repeat_cpmg.py Fri Sep 26 >> > 17:29:39 2014 >> > @@ -1943,6 +1943,94 @@ >> > plt.show() >> > >> > >> > + def get_min_stat_dic(self, list_r2eff_dics=None, >> > list_glob_ini=None): >> > + >> > + # Loop over the result dictionaries: >> > + res_dic = {} >> > + for i, min_dic in enumerate(list_r2eff_dics): >> > + # Let the reference dic be initial dic >> > + min_dic_ref = list_r2eff_dics[0] >> > + method_ref = min_dic_ref['method'] >> > + res_dic['method_ref'] = method_ref >> > + glob_ini_ref = list_glob_ini[0] >> > + res_dic['glob_ini_ref'] = str(glob_ini_ref) >> > + selection = min_dic_ref['selection'] >> > + res_dic['selection'] = selection >> > + params_list = >> > min_dic_ref[str(glob_ini_ref)]['params']['params_list'] >> > + res_dic['params_list'] = params_list >> > + >> > + # Loop over params >> > + for j, param in enumerate(params_list): >> > + res_dic[param] = {} >> > + >> > + # Let the reference param array be the initial glob. >> > + param_arr_ref = >> > min_dic_ref[str(glob_ini_ref)]['params'][param] >> > + res_dic[param]['param_arr_ref'] = param_arr_ref >> > + >> > + # Get the current method >> > + method_cur = min_dic['method'] >> > + >> > + res_dic[param][method_cur] = {} >> > + res_dic[param][method_cur]['method'] = method_cur >> > + res_dic[param][method_cur]['sampling_sparseness'] = [] >> > + res_dic[param][method_cur]['glob_ini'] = [] >> > + >> > + # Other stats. >> > + res_dic[param][method_cur]['r_xy'] = [] >> > + res_dic[param][method_cur]['a'] = [] >> > + >> > + # Now loop over glob_ini: >> > + for glob_ini in list_glob_ini: >> > + # Get the array, if it exists. >> > + if str(glob_ini) not in min_dic: >> > + continue >> > + >> > + # Get the data. >> > + param_arr = min_dic[str(glob_ini)]['params'][param] >> > + >> > + # This require that all number of points are equal. >> > + # If they are not of same length, then dont even >> > bother to continue. >> > + if len(param_arr) != len(param_arr_ref): >> > + continue >> > + >> > + # Store x >> > + sampling_sparseness = float(glob_ini) / >> > float(glob_ini_ref) * 100. >> > + >> > res_dic[param][method_cur]['sampling_sparseness'].append(sampling_sparseness) >> > + >> > res_dic[param][method_cur]['glob_ini'].append(glob_ini) >> > + >> > + # Store to result dic. >> > + res_dic[param][method_cur][str(glob_ini)] = {} >> > + >> > res_dic[param][method_cur][str(glob_ini)]['sampling_sparseness'] = >> > sampling_sparseness >> > + >> > res_dic[param][method_cur][str(glob_ini)]['param_arr'] = param_arr >> > + >> > + # With intercept at axis. >> > + # Calculate sample correlation coefficient, measure >> > of goodness-of-fit of linear regression >> > + x = param_arr_ref >> > + x_m = mean(x) >> > + y = param_arr >> > + y_m = mean(y) >> > + >> > + # Without intercept. >> > + a = sum(x*y) / sum(x**2) >> > + r_xy = sum(x*y) / sqrt(sum(x**2) * sum(y**2)) >> > + >> > + print(param, method_ref, method_cur, >> > sampling_sparseness, glob_ini, r_xy**2, a) >> > + >> > + # Store to result dic. >> > + res_dic[param][method_cur][str(glob_ini)]['r_xy'] = >> > r_xy >> > + res_dic[param][method_cur]['r_xy'].append(r_xy) >> > + res_dic[param][method_cur][str(glob_ini)]['a'] = a >> > + res_dic[param][method_cur]['a'].append(a) >> > + >> > + res_dic[param][method_cur]['sampling_sparseness'] = >> > asarray(res_dic[param][method_cur]['sampling_sparseness']) >> > + res_dic[param][method_cur]['glob_ini'] = >> > asarray(res_dic[param][method_cur]['glob_ini']) >> > + >> > + res_dic[param][method_cur]['r_xy'] = >> > asarray(res_dic[param][method_cur]['r_xy']) >> > + res_dic[param][method_cur]['a'] = >> > asarray(res_dic[param][method_cur]['a']) >> > + >> > + return res_dic >> > + >> > + >> > def interpreter_start(self): >> > # Load the interpreter. >> > self.interpreter = Interpreter(show_script=False, >> > raise_relax_error=True) >> > >> > >> > _______________________________________________ >> > 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 > > _______________________________________________ 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

