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

Reply via email to