Hi Troels, One consideration you need to make for the functions of the relax library is that these are independent of the relax data store and the pipe_control package (used to manipulate the data store) and the specific_analyses package. I.e. you should be able to use all functions without the rest of relax, hence it could be distributed with other GPL v3+ NMR software. Here you have used a number of pipe_control.mol_res_spin and specific_analyses.relax_disp.disp_data functions. Therefore this indicates that the code would be better located in the specific_analyses.relax_disp.disp_data module. A calc_tilt_angle() function in the relax library would essentially need to take all its data as arguments (spin-lock field and offset and chemical shift) and return the tilt angle.
The other problem is the storing of theta in the spin containers. This should not be done as the user can change the(spin-lock field, offset, or chemical shift and hence the tilt angle theta will change. It is much better to generate theta when needed by the relax_disp.plot_disp_curves user function, and then not store it (so it is destroyed automatically by Python). Such non-permanent parameters are used extensively throughout relax, especially in the N-state or ensemble analysis code. Regards, Edward On 7 March 2014 11:42, <tlin...@nmr-relax.com> wrote: > Author: tlinnet > Date: Fri Mar 7 11:42:36 2014 > New Revision: 22427 > > URL: http://svn.gna.org/viewcvs/relax?rev=22427&view=rev > Log: > Added lib.rotating_frame module containing functions related to rotating > frame NMR calculations. > > Regarding sr #3124, (https://gna.org/support/index.php?3124) - Grace graphs > production for R1rho analysis with R2_eff as function of Omega_eff. > > Added: > trunk/lib/rotating_frame.py > > Added: trunk/lib/rotating_frame.py > URL: > http://svn.gna.org/viewcvs/relax/trunk/lib/rotating_frame.py?rev=22427&view=auto > ============================================================================== > --- trunk/lib/rotating_frame.py (added) > +++ trunk/lib/rotating_frame.py Fri Mar 7 11:42:36 2014 > @@ -0,0 +1,77 @@ > +############################################################################### > +# > # > +# Copyright (C) 2014 Troels E. Linnet > # > +# > # > +# This file is part of the program relax (http://www.nmr-relax.com). > # > +# > # > +# This program is free software: you can redistribute it and/or modify > # > +# it under the terms of the GNU General Public License as published by > # > +# the Free Software Foundation, either version 3 of the License, or > # > +# (at your option) any later version. > # > +# > # > +# This program is distributed in the hope that it will be useful, > # > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > # > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > # > +# GNU General Public License for more details. > # > +# > # > +# You should have received a copy of the GNU General Public License > # > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > # > +# > # > +############################################################################### > + > +# Module docstring. > +"""Module containing functions related to rotating frame NMR calculations.""" > + > +# Python module imports. > +from os import sep > + > +# relax module imports. > +from pipe_control.mol_res_spin import find_index, get_spin_ids, > index_molecule, index_residue, return_spin, spin_loop > +from specific_analyses.relax_disp.disp_data import loop_exp_frq_offset, > return_offset_data, return_param_key_from_data, return_spin_lock_nu1 > + > +def calc_tilt_angle(): > + # Get the field count > + field_count = cdp.spectrometer_frq_count > + > + # Get the spin_lock_field points > + spin_lock_nu1 = return_spin_lock_nu1(ref_flag=False) > + > + # Initialize data containers > + all_spin_ids = get_spin_ids() > + > + # Containers for only selected spins > + cur_spin_ids = [] > + cur_spins = [] > + for curspin_id in all_spin_ids: > + # Get the spin > + curspin = return_spin(curspin_id) > + > + # Check if is selected > + if curspin.select == True: > + cur_spin_ids.append(curspin_id) > + cur_spins.append(curspin) > + > + # The offset and R1 data. > + chemical_shifts, offsets, tilt_angles = > return_offset_data(spins=cur_spins, spin_ids=cur_spin_ids, > field_count=field_count, fields=spin_lock_nu1) > + > + # Loop over the index of spins, then exp_type, frq, offset > + print("Printing the following") > + print("exp_type curspin_id frq offset{ppm} > offsets[ei][si][mi][oi]{rad/s} ei mi oi si di cur_spin.chemical_shift{ppm} > chemical_shifts[ei][si][mi]{rad/s} spin_lock_nu1{Hz} > tilt_angles[ei][si][mi][oi]{rad}") > + for si in range(len(cur_spin_ids)): > + theta_spin_dic = dict() > + curspin_id = cur_spin_ids[si] > + cur_spin = cur_spins[si] > + for exp_type, frq, offset, ei, mi, oi in > loop_exp_frq_offset(return_indices=True): > + # Loop over the dispersion points. > + spin_lock_fields = spin_lock_nu1[ei][mi][oi] > + for di in range(len(spin_lock_fields)): > + print("%-8s %-10s %11.1f %8.4f %12.5f %i %i %i %i %i > %7.3f %12.5f %12.5f %12.5f"%(exp_type, curspin_id, frq, offset, > offsets[ei][si][mi][oi], ei, mi, oi, si, di, cur_spin.chemical_shift, > chemical_shifts[ei][si][mi], spin_lock_fields[di], > tilt_angles[ei][si][mi][oi][di])) > + dic_key = return_param_key_from_data(exp_type=exp_type, > frq=frq, offset=offset, point=spin_lock_fields[di]) > + theta_spin_dic["%s"%(dic_key)] = > tilt_angles[ei][si][mi][oi][di] > + # Store the data > + cur_spin.theta = theta_spin_dic > + > + print("\nThe theta data now resides in") > + for curspin, mol_name, res_num, res_name, spin_id in > spin_loop(full_info=True, return_id=True, skip_desel=True): > + spin_index = find_index(selection=spin_id, global_index=False) > + print("%s cdp.mol[%i].res[%i].spin[%i].theta"%(spin_id, > spin_index[0], spin_index[1], spin_index[2])) > > > _______________________________________________ > relax (http://www.nmr-relax.com) > > This is the relax-commits mailing list > relax-comm...@gna.org > > 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 relax-devel@gna.org 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