def _assemble_experiment(self): """Assemble the experimental data.""" # Get the spectrometer info. frq_Hz = get_frequencies(units='MHz') frq_T = get_frequencies(units='T') # Loop over all data points. for exp_type, frq, point, time, ei, mi, di, ti in loop_exp_frq_point_time(return_indices=True): # The frequency data. self.cpmg_delay[mi] = str(time) # Loop over the experiments. for i in range(cdp.spectrometer_frq_count): # Spectrometer info. self.spec_frq[i] = str(frq_Hz[i] / g1H * g15N) self.B0[i] = str(frq_T[i])
def _assemble_experiment(self): """Assemble the experimental data.""" # Get the spectrometer info. frq_Hz = get_frequencies(units='MHz') frq_T = get_frequencies(units='T') # Loop over all data points. for exp_type, frq, point, time, ei, mi, di, ti in loop_exp_frq_point_time( return_indices=True): # The frequency data. self.cpmg_delay[mi] = str(time) # Loop over the experiments. for i in range(cdp.spectrometer_frq_count): # Spectrometer info. self.spec_frq[i] = str(frq_Hz[i] / periodic_table.gyromagnetic_ratio('1H') * periodic_table.gyromagnetic_ratio('15N')) self.B0[i] = str(frq_T[i])
def create_spin_input(function=None, spin=None, spin_id=None, dir=None): """Generate the CPMGFit file for the given spin. @keyword function: The CPMGFit model or function name. @type function: str @keyword spin: The spin container to generate the input file for. @type spin: SpinContainer instance @keyword spin_id: The spin ID string corresponding to the spin container. @type spin_id: str @keyword dir: The directory to place the file into. @type dir: str or None @return: The name of the file created. @rtype: str """ # The output file. file_name = spin_file_name(spin_id=spin_id) file = open_write_file(file_name=file_name, dir=dir, force=True) # The title. file.write("title %s\n" % spin_id) # The proton frequencies. frq = get_frequencies(units='T') # The frequency info. file.write("fields %s" % len(frq)) for i in range(len(frq)): file.write(" %.10f" % frq[i]) file.write("\n") # The function and parameters. if function == 'CPMG': # Function. file.write("function CPMG\n") # Parameters. file.write("R2 1 10 20\n") file.write("Rex 0 100.0 100\n") file.write("Tau 0 10.0 100\n") # The function and parameters. elif function == 'Full_CPMG': # Function. file.write("function Full_CPMG\n") # Parameters. file.write("R2 1 10 20\n") file.write("papb 0.01 0.49 20\n") file.write("dw 0 10.0 100\n") file.write("kex 0.1 1.0 100\n") # The function and parameters. elif function == "Ishima": # Function. file.write("function Ishima\n") # Parameters. file.write("R2 1 10 20\n") file.write("Rex 0 100.0 50\n") file.write("PaDw 2 10.0 50\n") file.write("Tau 0.1 10.0 50\n") # The function and parameters. if function == '3-site_CPMG': # Function. file.write("function 3-site_CPMG\n") # Parameters. file.write("R2 1 10 20\n") file.write("Rex1 0 100.0 20\n") file.write("Tau1 0 10.0 20\n") file.write("Rex2 0 100.0 20\n") file.write("Tau2 0 10.0 20\n") # The Grace setup. file.write("xmgr\n") file.write("@ xaxis label \"1/tcp (1/ms)\"\n") file.write("@ yaxis label \"R2(tcp) (rad/s)\"\n") file.write("@ xaxis ticklabel format decimal\n") file.write("@ yaxis ticklabel format decimal\n") file.write("@ xaxis ticklabel char size 0.8\n") file.write("@ yaxis ticklabel char size 0.8\n") file.write("@ world xmin 0.0\n") # The data. file.write("data\n") for exp_type, frq, offset, point in loop_exp_frq_offset_point(): # The parameter key. param_key = return_param_key_from_data(exp_type=exp_type, frq=frq, offset=offset, point=point) # No data. if param_key not in spin.r2eff: continue # Tesla units. B0 = frq * 2.0 * pi / periodic_table.gyromagnetic_ratio('1H') # The X value of 1/tcp (or 1/tau_CPMG) in ms. This assumes Art's usage of the definition that nu_CPMG = 1 / (2 * tau_CPMG). x = 2.0 * point / 1000.0 # Write out the data and error. file.write("%-20f %-20f %-20f %-20f\n" % (x, spin.r2eff[param_key], spin.r2eff_err[param_key], B0)) # Close the file and return its name. file.close() return file_name
def create_spin_input(function=None, spin=None, spin_id=None, dir=None): """Generate the CPMGFit file for the given spin. @keyword function: The CPMGFit model or function name. @type function: str @keyword spin: The spin container to generate the input file for. @type spin: SpinContainer instance @keyword spin_id: The spin ID string corresponding to the spin container. @type spin_id: str @keyword dir: The directory to place the file into. @type dir: str or None @return: The name of the file created. @rtype: str """ # The output file. file_name = spin_file_name(spin_id=spin_id) file = open_write_file(file_name=file_name, dir=dir, force=True) # The title. file.write("title %s\n" % spin_id) # The proton frequencies. frq = get_frequencies(units='T') # The frequency info. file.write("fields %s" % len(frq)) for i in range(len(frq)): file.write(" %.10f" % frq[i]) file.write("\n") # The function and parameters. if function == 'CPMG': # Function. file.write("function CPMG\n") # Parameters. file.write("R2 1 10 20\n") file.write("Rex 0 100.0 100\n") file.write("Tau 0 10.0 100\n") # The function and parameters. elif function == 'Full_CPMG': # Function. file.write("function Full_CPMG\n") # Parameters. file.write("R2 1 10 20\n") file.write("papb 0.01 0.49 20\n") file.write("dw 0 10.0 100\n") file.write("kex 0.1 1.0 100\n") # The function and parameters. elif function == "Ishima": # Function. file.write("function Ishima\n") # Parameters. file.write("R2 1 10 20\n") file.write("Rex 0 100.0 50\n") file.write("PaDw 2 10.0 50\n") file.write("Tau 0.1 10.0 50\n") # The function and parameters. if function == '3-site_CPMG': # Function. file.write("function 3-site_CPMG\n") # Parameters. file.write("R2 1 10 20\n") file.write("Rex1 0 100.0 20\n") file.write("Tau1 0 10.0 20\n") file.write("Rex2 0 100.0 20\n") file.write("Tau2 0 10.0 20\n") # The Grace setup. file.write("xmgr\n") file.write("@ xaxis label \"1/tcp (1/ms)\"\n") file.write("@ yaxis label \"R2(tcp) (rad/s)\"\n") file.write("@ xaxis ticklabel format decimal\n") file.write("@ yaxis ticklabel format decimal\n") file.write("@ xaxis ticklabel char size 0.8\n") file.write("@ yaxis ticklabel char size 0.8\n") file.write("@ world xmin 0.0\n") # The data. file.write("data\n") for exp_type, frq, offset, point in loop_exp_frq_offset_point(): # The parameter key. param_key = return_param_key_from_data(exp_type=exp_type, frq=frq, offset=offset, point=point) # No data. if param_key not in spin.r2eff: continue # Tesla units. B0 = frq * 2.0 * pi / periodic_table.gyromagnetic_ratio('1H') # The X value of 1/tcp (or 1/tau_CPMG) in ms. This assumes Art's usage of the definition that nu_CPMG = 1 / (2 * tau_CPMG). x = 2.0 * point / 1000.0 # Write out the data and error. file.write("%-20f %-20f %-20f %-20f\n" % (x, spin.r2eff[param_key], spin.r2eff_err[param_key], B0)) # Close the file and return its name. file.close() return file_name
def write_results(self): """Create Grace plots of the final model-free results.""" # Save the results file. dir = self.write_results_dir + 'final' self.interpreter.results.write(file='results', dir=dir, force=True) # The Grace plots. dir = self.write_results_dir + 'final' + sep + 'grace' self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2', file='s2.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2f', file='s2f.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='res_num', y_data_type='s2s', file='s2s.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='res_num', y_data_type='te', file='te.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='res_num', y_data_type='tf', file='tf.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='res_num', y_data_type='ts', file='ts.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='res_num', y_data_type='rex', file='rex.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='s2', y_data_type='te', file='s2_vs_te.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='s2', y_data_type='rex', file='s2_vs_rex.agr', dir=dir, force=True) self.interpreter.grace.write(x_data_type='te', y_data_type='rex', file='te_vs_rex.agr', dir=dir, force=True) # Write the values to text files. dir = self.write_results_dir + 'final' self.interpreter.value.write(param='s2', file='s2.txt', dir=dir, force=True) self.interpreter.value.write(param='s2f', file='s2f.txt', dir=dir, force=True) self.interpreter.value.write(param='s2s', file='s2s.txt', dir=dir, force=True) self.interpreter.value.write(param='te', file='te.txt', dir=dir, force=True) self.interpreter.value.write(param='tf', file='tf.txt', dir=dir, force=True) self.interpreter.value.write(param='ts', file='ts.txt', dir=dir, force=True) self.interpreter.value.write(param='rex', file='rex.txt', dir=dir, force=True) self.interpreter.value.write(param='local_tm', file='local_tm.txt', dir=dir, force=True) frqs = spectrometer.get_frequencies() for i in range(len(frqs)): comment = "This is the Rex value with units rad.s^-1 scaled to a magnetic field strength of %s MHz." % (frqs[i]/1e6) self.interpreter.value.write(param='rex', file='rex_%s.txt'%int(frqs[i]/1e6), dir=dir, scaling=(2.0*pi*frqs[i])**2, comment=comment, force=True) # Create the PyMOL macros. dir = self.write_results_dir + 'final' + sep + 'pymol' self.interpreter.pymol.macro_write(data_type='s2', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='s2f', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='s2s', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='amp_fast', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='amp_slow', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='te', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='tf', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='ts', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='time_fast', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='time_slow', dir=dir, force=True) self.interpreter.pymol.macro_write(data_type='rex', dir=dir, force=True) # Create the Molmol macros. dir = self.write_results_dir + 'final' + sep + 'molmol' self.interpreter.molmol.macro_write(data_type='s2', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='s2f', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='s2s', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='amp_fast', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='amp_slow', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='te', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='tf', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='ts', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='time_fast', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='time_slow', dir=dir, force=True) self.interpreter.molmol.macro_write(data_type='rex', dir=dir, force=True) # Create a diffusion tensor representation of the tensor, if a PDB file is present and the local tm global model has not been selected. if hasattr(cdp, 'structure') and hasattr(cdp, 'diff_tensor'): dir = self.write_results_dir + 'final' self.interpreter.structure.create_diff_tensor_pdb(file="tensor.pdb", dir=dir, force=True)