Testing of the U_R model

by Evgenii Kovrigin, 05/31/2011

Process A: R + L = RL Process B: R = R*

Contents

close all
clear all
figures_folder='U_R_testing_figures';

TEST COMPUTATION OF EQUILIBRIUM POPULATIONS

Set some meaningful parameters

Rtotal=1e-3; % Receptor concentration, M
LRratio_array=[0 : 0.02 : 1.45]; % Array of L/R
K_a_A=1e6;  % Binding affinity constant
K_a_B=4;  % Isomerization constant (to make it similar to the U-R2 test case)

% Set appropriate options for the model (see model file for details)
model_numeric_solver='analytical'  ;
model_numeric_options='none';

Compute arrays for populations and plot

concentrations_array=[];
for counter=1:length(LRratio_array)
    % compute
    [concentrations species_names] = equilibrium_thermodynamic_equations.U_R_model(...
        Rtotal, LRratio_array(counter), K_a_A, K_a_B,...
        model_numeric_solver, model_numeric_options);
    % collect
    concentrations_array = [concentrations_array ; concentrations];
end

Plot

Figure_title= 'U-R model';
X_range=[0 max(LRratio_array)+0.1 ]; % extend X just a bit past last point
Y_range=[]; % keep automatic scaling for Y
% display figure
figure_handle=equilibrium_thermodynamic_equations.plot_populations(...
    LRratio_array, concentrations_array, species_names, Figure_title, X_range, Y_range);
% save it
results_output.output_figure(figure_handle, figures_folder, 'Concentrations_plot');

Correct behavior: the R is split between R and R* with a constant ratio.

TEST OF NMR LINE SHAPE CALCULATION FOR U-R

We will generate line shapes for U-R in conditions where we can expect specific patterns. We will plot a spectrum at a specific solution conditions (we will not use Series of datasets for simplicity).

1. Ligand-free receptor in slow exchange should show two separate peaks with areas proportional to their equilibrium concentrations. This ratio should be fixed and independent of Rtotal.

2. Fast exchange in the same setting should reveal population-weighted average peak. Similarly, dilution should not have any effect on peak positions.

3. Addition of saturating concentration of ligand should give us a single peak at the RL frequency.

% Create data object for  1D NMR line shapes
test1=NMRLineShapes1D('Simulation','Test_1');
test1.set_active_model('U_R-model', model_numeric_solver, model_numeric_options)
test1.show_active_model() % to look up necessary parameters of the model
ans =

Active model:
Model 6:  "U_R-model"
Model description
"1D NMR line shape for the U-R model, no temperature/field dependence, analytical"
Model handle: line_shape_equations_1D.U_R_model_1D
Current solver: analytical
Model parameters: 
1: Rtotal     2: LRratio     3: log10(K_A)     4: log10(K_B)     5: k_2_A     6: k_2_B     7: w0_R     8: w0_Rstar     9: w0_RL     10: FWHH_R     11: FWHH_Rstar     12: FWHH_RL     13: ScaleFactor     



Set range for X to extend beyond resonances

w_min= -300;
w_max= 500;
datapoints=100;  % Does not matter much because smooth curve is anyway calculated
test1.set_X(linspace(w_min, w_max, datapoints));
test1.X_range=[w_min w_max]; % this sets display range in the plots
% Set fixed range for Y
test1.Y_range=[0 8e-5] ;
% Set noise RMSD to 0 for both X and Y
X_RMSD=0;
Y_RMSD=0;

Slow exchange in free receptor

Use the same thermodynamic parameters as above. Add spectral and kinetic parameters:

LRratio = 0.001 ;
Log10_K_A = log10(K_a_A);
Log10_K_B = log10(K_a_B);
k_2_A    = 1;   % dissociation rate constant of the complex, 1/s
k_2_B    = 1;   % dissociation rate constant of the receptor dimer, 1/s
w0_R     = -200;    % NMR frequency of the free receptor R, 1/s
w0_R2    = 200;  % NMR frequency of the dimer R2, 1/s
w0_RL    = 400;  % NMR frequency of the bound complex RL, 1/s
FWHH_R   = 20;     % line width at half height of the peak of R, 1/s
FWHH_R2  = 20;     % line width at half height of the peak of R2, 1/s
FWHH_RL  = 20;     % line width at half height of the peak of RL, 1/s
ScaleFactor = 1;  % a multiplier for spectral amplitude (used only when fitting data)

% compute equilbrium concentrations
[concentrations species_names] = equilibrium_thermodynamic_equations.U_R_model(...
        Rtotal, LRratio, K_a_A, K_a_B,...
        model_numeric_solver, model_numeric_options)


% plot line shapes
parameters=[ Rtotal  LRratio   Log10_K_A   Log10_K_B  k_2_A  k_2_B ...
     w0_R  w0_R2  w0_RL  FWHH_R  FWHH_R2  FWHH_RL  ScaleFactor ];



test1.simulate_noisy_data(parameters, X_RMSD, Y_RMSD);
figure_handle=test1.plot_simulation('Slow: free R');
results_output.output_figure(figure_handle, figures_folder, 'Slow_concentrated_R');
concentrations =

   1.0e-03 *

    0.1998    0.7992    0.0010    0.0000


species_names = 

    'Req'    'Rstareq'    'RLeq'    'Leq'

Expected ratio of R* peak to R peak is 4:1.

Prepare TotalFit session for easy display of many graphs

storage_session=TotalFit('All_tests');
% set aside for plotting later
storage_session.copy_dataset_into_array(test1);

Dilution of free receptor

Rtotal=1e-4;

% compute equilbrium concentrations
[concentrations species_names] = equilibrium_thermodynamic_equations.U_R_model(...
        Rtotal, LRratio, K_a_A, K_a_B,...
        model_numeric_solver, model_numeric_options)



parameters=[ Rtotal  LRratio   Log10_K_A   Log10_K_B  k_2_A  k_2_B ...
     w0_R  w0_R2  w0_RL  FWHH_R  FWHH_R2  FWHH_RL  ScaleFactor ];


test1.simulate_noisy_data(parameters, X_RMSD, Y_RMSD);
figure_handle=test1.plot_simulation('Slow: 1/10 R');
results_output.output_figure(figure_handle, figures_folder, 'Slow_diluted_R');
% set aside for plotting later
storage_session.copy_dataset_into_array(test1);
concentrations =

   1.0e-04 *

    0.1998    0.7992    0.0010    0.0000


species_names = 

    'Req'    'Rstareq'    'RLeq'    'Leq'

When receptor is diluted there is no change in the ratio between the areas of two peaks reflecting independence of R-R* equilibrium of concentration.

Fast exchange in free receptor

Diluted

k_2_B=1000;
parameters=[ Rtotal  LRratio   Log10_K_A   Log10_K_B  k_2_A  k_2_B ...
     w0_R  w0_R2  w0_RL  FWHH_R  FWHH_R2  FWHH_RL  ScaleFactor ];


test1.simulate_noisy_data(parameters, X_RMSD, Y_RMSD);
figure_handle=test1.plot_simulation('Fast: 1/10 R');
results_output.output_figure(figure_handle, figures_folder, 'Fast_diluted_R');
% set aside for plotting later
storage_session.copy_dataset_into_array(test1);

The weighted average peak is at 4/5 and 1/4 between resonance frequencies of R* and R.

Concentrated: Return to the original condition

Rtotal=1e-3;

% compute equilbrium concentrations
[concentrations species_names] = equilibrium_thermodynamic_equations.U_R_model(...
        Rtotal, LRratio, K_a_A, K_a_B,...
        model_numeric_solver, model_numeric_options)



parameters=[ Rtotal  LRratio   Log10_K_A   Log10_K_B  k_2_A  k_2_B ...
     w0_R  w0_R2  w0_RL  FWHH_R  FWHH_R2  FWHH_RL  ScaleFactor ];


test1.simulate_noisy_data(parameters, X_RMSD, Y_RMSD);
figure_handle=test1.plot_simulation('Fast: 1/1 R');
results_output.output_figure(figure_handle, figures_folder, 'Fast_concentrated_R');
% set aside for plotting later
storage_session.copy_dataset_into_array(test1);
concentrations =

   1.0e-03 *

    0.1998    0.7992    0.0010    0.0000


species_names = 

    'Req'    'Rstareq'    'RLeq'    'Leq'

The peak is not shifted upon increasing Rtotal as expected.

A fully saturated receptor

LRratio = 10 ;
parameters=[ Rtotal  LRratio   Log10_K_A   Log10_K_B  k_2_A  k_2_B ...
     w0_R  w0_R2  w0_RL  FWHH_R  FWHH_R2  FWHH_RL  ScaleFactor ];

test1.simulate_noisy_data(parameters, X_RMSD, Y_RMSD);
figure_handle=test1.plot_simulation('saturated RL');
results_output.output_figure(figure_handle, figures_folder, 'Saturated_RL');
% set aside for plotting later
storage_session.copy_dataset_into_array(test1);

We observe a peak at a frequency of bound form

Summary of individual plots

storage_session.define_series('All-tests',1:length(storage_session.dataset_array));
figure_handle=storage_session.plot_1D_series('All-tests', 'All tests', 0);
results_output.output_figure(figure_handle, figures_folder, 'All_tests');

This is a comparison graph of all previous plots

Create a titration series

(see Tutorial 3 for details) Choose parameters

ZERO_LRratio= 1e-3; % This number cannot be too small---the model is numeric and will NOT converge!
LRratio_vector=[ZERO_LRratio 0.1 0.2   0.4   0.6  0.8   1.0   1.2   1.4 ];
k_2_A=2000;  % fast exchange in A
k_2_B=1;  % slow exchange in B

% choose the same parameters as above
session_name='Series';
session=TotalFit(session_name);
series_name='U-R_simulation';
dataset_class_name='NMRLineShapes1D';
model_name='U_R-model';
number_of_datasets=length(LRratio_vector);
X_column=test1.X; % use the same range

% create TotalFit session
session.create_simulation_series(series_name, dataset_class_name, model_name, ...
                 model_numeric_solver, model_numeric_options,...
                 number_of_datasets, X_column);

session.initialize_relation_matrix(sprintf('%s.all_datasets.txt', session_name));

% link parameters
parameter_number_array=[ 1    3 4 5 6 7 8 9 10 11 12 13];
session.batch_link_parameters_in_series(series_name, parameter_number_array);
session.generate_fitting_environment(sprintf('%s.fitting_environment.txt', session_name))

% prepare parameters
first_dataset_index=session.dataset_index(series_name,1);
FAKE_VALUE=1E-6;  % individual (unlinked) parameters: to be assigned later

ideal_parameters=[ Rtotal  FAKE_VALUE   Log10_K_A   Log10_K_B  k_2_A  k_2_B ...
     w0_R  w0_R2  w0_RL  FWHH_R  FWHH_R2  FWHH_RL  ScaleFactor ];

% prepare formal limits
fake_limits=zeros(1,length(ideal_parameters));
Monte_Carlo_range_min=fake_limits;
Monte_Carlo_range_max=fake_limits;
parameter_limits_min=fake_limits;
parameter_limits_max=fake_limits;

% assign
session.assign_parameter_values(first_dataset_index, ideal_parameters, ...
        Monte_Carlo_range_min, Monte_Carlo_range_max, parameter_limits_min, parameter_limits_max);

% Assign unlinked LRratio and ranges
parameter_number=2;
values_array=LRratio_vector;

unlinked_fake_ranges=zeros(1,number_of_datasets);
MonteCarlo_range_min_array=unlinked_fake_ranges;
MonteCarlo_range_max_array=unlinked_fake_ranges;
parameter_limits_min_array=unlinked_fake_ranges;
parameter_limits_max_array=unlinked_fake_ranges;

session.assign_unlinked_parameter_in_series(...
             series_name, parameter_number, values_array, ...
             MonteCarlo_range_min_array, MonteCarlo_range_max_array, ...
             parameter_limits_min_array, parameter_limits_max_array);

% Simulate series
X_standard_dev=0;
Y_standard_dev=1e-8;  % something really small
session.simulate_series(series_name, X_standard_dev, Y_standard_dev);

% Plot
Y_offset_percent=10;  % to offset figures vertically for easier viewing
% set plotting ranges
X_range=test1.X_range;  % use old
Y_range=[];  % automatic
session.set_XY_ranges_series(series_name, X_range, Y_range)
figure_handle=session.plot_1D_series(series_name, session.name, Y_offset_percent);
results_output.output_figure(figure_handle, figures_folder, 'Series');
Dataset listing is written to "Series.all_datasets.txt".

Fitting environment saved in Series.fitting_environment.txt.

ans =

New parameter relations (indexed as in all_parameters vector):

[1]     1:Rtotal | 2:Rtotal | 3:Rtotal | 4:Rtotal | 5:Rtotal | 6:Rtotal | 7:Rtotal | 8:Rtotal | 9:Rtotal
[2]     1:LRratio
[3]     1:log10(K_A) | 2:log10(K_A) | 3:log10(K_A) | 4:log10(K_A) | 5:log10(K_A) | 6:log10(K_A) | 7:log10(K_A) | 8:log10(K_A) | 9:log10(K_A)
[4]     1:log10(K_B) | 2:log10(K_B) | 3:log10(K_B) | 4:log10(K_B) | 5:log10(K_B) | 6:log10(K_B) | 7:log10(K_B) | 8:log10(K_B) | 9:log10(K_B)
[5]     1:k_2_A | 2:k_2_A | 3:k_2_A | 4:k_2_A | 5:k_2_A | 6:k_2_A | 7:k_2_A | 8:k_2_A | 9:k_2_A
[6]     1:k_2_B | 2:k_2_B | 3:k_2_B | 4:k_2_B | 5:k_2_B | 6:k_2_B | 7:k_2_B | 8:k_2_B | 9:k_2_B
[7]     1:w0_R | 2:w0_R | 3:w0_R | 4:w0_R | 5:w0_R | 6:w0_R | 7:w0_R | 8:w0_R | 9:w0_R
[8]     1:w0_Rstar | 2:w0_Rstar | 3:w0_Rstar | 4:w0_Rstar | 5:w0_Rstar | 6:w0_Rstar | 7:w0_Rstar | 8:w0_Rstar | 9:w0_Rstar
[9]     1:w0_RL | 2:w0_RL | 3:w0_RL | 4:w0_RL | 5:w0_RL | 6:w0_RL | 7:w0_RL | 8:w0_RL | 9:w0_RL
[10]     1:FWHH_R | 2:FWHH_R | 3:FWHH_R | 4:FWHH_R | 5:FWHH_R | 6:FWHH_R | 7:FWHH_R | 8:FWHH_R | 9:FWHH_R
[11]     1:FWHH_Rstar | 2:FWHH_Rstar | 3:FWHH_Rstar | 4:FWHH_Rstar | 5:FWHH_Rstar | 6:FWHH_Rstar | 7:FWHH_Rstar | 8:FWHH_Rstar | 9:FWHH_Rstar
[12]     1:FWHH_RL | 2:FWHH_RL | 3:FWHH_RL | 4:FWHH_RL | 5:FWHH_RL | 6:FWHH_RL | 7:FWHH_RL | 8:FWHH_RL | 9:FWHH_RL
[13]     1:ScaleFactor | 2:ScaleFactor | 3:ScaleFactor | 4:ScaleFactor | 5:ScaleFactor | 6:ScaleFactor | 7:ScaleFactor | 8:ScaleFactor | 9:ScaleFactor
[14]   n/a
[15]     2:LRratio
[16]   n/a
[17]   n/a
[18]   n/a
[19]   n/a
[20]   n/a
[21]   n/a
[22]   n/a
[23]   n/a
[24]   n/a
[25]   n/a
[26]   n/a
[27]   n/a
[28]     3:LRratio
[29]   n/a
[30]   n/a
[31]   n/a
[32]   n/a
[33]   n/a
[34]   n/a
[35]   n/a
[36]   n/a
[37]   n/a
[38]   n/a
[39]   n/a
[40]   n/a
[41]     4:LRratio
[42]   n/a
[43]   n/a
[44]   n/a
[45]   n/a
[46]   n/a
[47]   n/a
[48]   n/a
[49]   n/a
[50]   n/a
[51]   n/a
[52]   n/a
[53]   n/a
[54]     5:LRratio
[55]   n/a
[56]   n/a
[57]   n/a
[58]   n/a
[59]   n/a
[60]   n/a
[61]   n/a
[62]   n/a
[63]   n/a
[64]   n/a
[65]   n/a
[66]   n/a
[67]     6:LRratio
[68]   n/a
[69]   n/a
[70]   n/a
[71]   n/a
[72]   n/a
[73]   n/a
[74]   n/a
[75]   n/a
[76]   n/a
[77]   n/a
[78]   n/a
[79]   n/a
[80]     7:LRratio
[81]   n/a
[82]   n/a
[83]   n/a
[84]   n/a
[85]   n/a
[86]   n/a
[87]   n/a
[88]   n/a
[89]   n/a
[90]   n/a
[91]   n/a
[92]   n/a
[93]     8:LRratio
[94]   n/a
[95]   n/a
[96]   n/a
[97]   n/a
[98]   n/a
[99]   n/a
[100]   n/a
[101]   n/a
[102]   n/a
[103]   n/a
[104]   n/a
[105]   n/a
[106]     9:LRratio
[107]   n/a
[108]   n/a
[109]   n/a
[110]   n/a
[111]   n/a
[112]   n/a
[113]   n/a
[114]   n/a
[115]   n/a
[116]   n/a
[117]   n/a

Summary of datasets with lookup vectors (position of each parameter in all_parameter vector)
--------
Dataset 1/U-R_simulation-1,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   2   3   4   5   6   7   8   9   10   11   12   13

Dataset 2/U-R_simulation-2,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   15   3   4   5   6   7   8   9   10   11   12   13

Dataset 3/U-R_simulation-3,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   28   3   4   5   6   7   8   9   10   11   12   13

Dataset 4/U-R_simulation-4,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   41   3   4   5   6   7   8   9   10   11   12   13

Dataset 5/U-R_simulation-5,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   54   3   4   5   6   7   8   9   10   11   12   13

Dataset 6/U-R_simulation-6,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   67   3   4   5   6   7   8   9   10   11   12   13

Dataset 7/U-R_simulation-7,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   80   3   4   5   6   7   8   9   10   11   12   13

Dataset 8/U-R_simulation-8,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   93   3   4   5   6   7   8   9   10   11   12   13

Dataset 9/U-R_simulation-9,  model "U_R-model"
Parameters          :    Rtotal    LRratio    log10(K_A)    log10(K_B)    k_2_A    k_2_B    w0_R    w0_Rstar    w0_RL    FWHH_R    FWHH_Rstar    FWHH_RL    ScaleFactor
Lookup vector       :   1   106   3   4   5   6   7   8   9   10   11   12   13



This is an expected result. RL resonance frequency averages with R frequency creating a shifting peak that crosses position of R* peak. R* disappears in-place in slow exchange with R.

CONCLUSIONS

The U-R model for NMR 1D line shapes works as expected.