def generate_theta_dic(): # 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(spin_id=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, Delta_omega, w_eff = 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]))
def generate_theta_dic(): # 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, Delta_omega, w_eff = 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]))
def back_calc(ri_id=None, ri_type=None, frq=None): """Back calculate the relaxation data. If no relaxation data currently exists, then the ri_id, ri_type, and frq args are required. @keyword ri_id: The relaxation data ID string. If not given, all relaxation data will be back calculated. @type ri_id: None or str @keyword ri_type: The relaxation data type. This should be one of 'R1', 'R2', or 'NOE'. @type ri_type: None or str @keyword frq: The spectrometer proton frequency in Hz. @type frq: None or float """ # Test if the current pipe exists. check_pipe() # Test if sequence data is loaded. if not exists_mol_res_spin_data(): raise RelaxNoSequenceError # Check that ri_type and frq are supplied if no relaxation data exists. if ri_id and (not hasattr(cdp, 'ri_ids') or ri_id not in cdp.ri_ids) and (ri_type == None or frq == None): raise RelaxError( "The 'ri_type' and 'frq' arguments must be supplied as no relaxation data corresponding to '%s' exists." % ri_id) # Check if the type is valid. if ri_type and ri_type not in VALID_TYPES: raise RelaxError("The relaxation data type '%s' must be one of %s." % (ri_type, VALID_TYPES)) # Frequency checks. frequency_checks(frq) # Initialise the global data for the current pipe if necessary. if not hasattr(cdp, 'ri_type'): cdp.ri_type = {} if not hasattr(cdp, 'ri_ids'): cdp.ri_ids = [] # Update the global data if needed. if ri_id and ri_id not in cdp.ri_ids: cdp.ri_ids.append(ri_id) cdp.ri_type[ri_id] = ri_type set_frequency(id=ri_id, frq=frq) # The specific analysis API object. api = return_api() # The IDs to loop over. if ri_id == None: ri_ids = cdp.ri_ids else: ri_ids = [ri_id] # The data types. if ri_type == None: ri_types = cdp.ri_type else: ri_types = {ri_id: ri_type} # The frequencies. if frq == None: frqs = cdp.spectrometer_frq else: frqs = {ri_id: frq} # Loop over the spins. for spin, spin_id in spin_loop(return_id=True): # Skip deselected spins. if not spin.select: continue # The global index. spin_index = find_index(spin_id) # Initialise the spin data if necessary. if not hasattr(spin, 'ri_data_bc'): spin.ri_data_bc = {} # Back-calculate the relaxation value. for ri_id in ri_ids: spin.ri_data_bc[ri_id] = api.back_calc_ri(spin_index=spin_index, ri_id=ri_id, ri_type=ri_types[ri_id], frq=frqs[ri_id])
def back_calc(ri_id=None, ri_type=None, frq=None): """Back calculate the relaxation data. If no relaxation data currently exists, then the ri_id, ri_type, and frq args are required. @keyword ri_id: The relaxation data ID string. If not given, all relaxation data will be back calculated. @type ri_id: None or str @keyword ri_type: The relaxation data type. This should be one of 'R1', 'R2', or 'NOE'. @type ri_type: None or str @keyword frq: The spectrometer proton frequency in Hz. @type frq: None or float """ # Test if the current pipe exists. pipes.test() # Test if sequence data is loaded. if not exists_mol_res_spin_data(): raise RelaxNoSequenceError # Check that ri_type and frq are supplied if no relaxation data exists. if ri_id and (not hasattr(cdp, 'ri_ids') or ri_id not in cdp.ri_ids) and (ri_type == None or frq == None): raise RelaxError("The 'ri_type' and 'frq' arguments must be supplied as no relaxation data corresponding to '%s' exists." % ri_id) # Check if the type is valid. if ri_type and ri_type not in VALID_TYPES: raise RelaxError("The relaxation data type '%s' must be one of %s." % (ri_type, VALID_TYPES)) # Frequency checks. frequency_checks(frq) # Initialise the global data for the current pipe if necessary. if not hasattr(cdp, 'ri_type'): cdp.ri_type = {} if not hasattr(cdp, 'ri_ids'): cdp.ri_ids = [] # Update the global data if needed. if ri_id and ri_id not in cdp.ri_ids: cdp.ri_ids.append(ri_id) cdp.ri_type[ri_id] = ri_type set_frequency(id=ri_id, frq=frq) # Specific Ri back calculate function setup. back_calculate = specific_analyses.setup.get_specific_fn('back_calc_ri', pipes.get_type()) # The IDs to loop over. if ri_id == None: ri_ids = cdp.ri_ids else: ri_ids = [ri_id] # The data types. if ri_type == None: ri_types = cdp.ri_type else: ri_types = {ri_id: ri_type} # The frequencies. if frq == None: frqs = cdp.spectrometer_frq else: frqs = {ri_id: frq} # Loop over the spins. for spin, spin_id in spin_loop(return_id=True): # Skip deselected spins. if not spin.select: continue # The global index. spin_index = find_index(spin_id) # Initialise the spin data if necessary. if not hasattr(spin, 'ri_data_bc'): spin.ri_data_bc = {} # Back-calculate the relaxation value. for ri_id in ri_ids: spin.ri_data_bc[ri_id] = back_calculate(spin_index=spin_index, ri_id=ri_id, ri_type=ri_types[ri_id], frq=frqs[ri_id])