Skip to content
Snippets Groups Projects
ternary_frap.m 8.06 KiB
Newer Older
%% Boundary condition: Jump makes sense
[~, ind] = min(abs(T.x+T.a)); % Find x position of boundary
plot(max(T.sol(:, 1:ind-1), [], 2)./min(T.sol(:, ind+1:end), [], 2), 'LineWidth', 2)
make_graph_pretty('time', 'ratio outside/inside', 'unbleached component');
figure; % Shouldn't be symmetric, different SS for phi_u and phi_b??
plot(min(T.u0+T.e-T.sol(:, 1:ind-1), [], 2)./max(T.u0-T.sol(:, ind+1:end), [], 2),...
make_graph_pretty('time', 'ratio outside/inside', 'bleached component');
xlim([0, 3]); ylim([0, 0.5]); 
xlabel('x [\mum]'); ylabel('volume fraction'); 
plot(T.x, T.sol(1:2:200, :), 'LineWidth', 2, 'Color', [135/255  204/255 250/255]);
plot(T.x, Ternary_model.phi_tot(T.x, T.a, T.b, T.e, T.u0), 'LineWidth', 4,...
    'LineStyle', '--', 'Color', [247/255, 139/255, 7/255]);
print([T.pa, 'ternary_time_course'], '-depsc');
%% Plot and check derivatives of pt
figure; hold on;
plot(T.x, Ternary_model.phi_tot(T.x, T.a, T.b, T.e, T.u0));
plot(T.x, Ternary_model.gradient_analytical(T.x, T.a, T.b, T.e));
plot(T.x(1:end-1)+mean(diff(T.x))/2, ...
     diff(Ternary_model.phi_tot(T.x, T.a, T.b, T.e, T.u0)/mean(diff(T.x))));
plot(T.x, Ternary_model.gamma0(T.x, T.a, T.b, T.e_g0, T.o_g0));
axis([0, 3, 0, 1])
figure;
plot(Ternary_model.gamma0(T.x, T.a, T.b, T.e_g0, T.o_g0),...
     Ternary_model.spacing(Ternary_model.gamma0(T.x, T.a, T.b, T.e_g0, T.o_g0),...
     T.a, T.b, T.e_g0, T.o_g0));
%% Fit with experimental BCs
T = Ternary_model(2, 'FRAP', [], linspace(0.0, 400, 5000));
T.solve_tern_frap();
x_seed = 60;
s = T.sol(1:end, 1:30)./max(T.sol(1:end, 1:30))/1.022;
ts = T.t(1:end)';
f_min = @(x) to_minimize(s, ts, x, 'simple_drop', s(:, end));
opt = optimset('MaxFunEvals', 2000, 'PlotFcns',@optimplotfval);
x_seed = fminsearch(f_min, x_seed, opt);
%%
[cost, v_fit, r_n, v_fit_end] = to_minimize(s, ts, x_seed, 'simple_drop', s(:, end));
%% Plot for 
figure; hold on;
s_all = T.sol(1:end, 1:400)./max(max(T.sol(1:end, 1:30)))/1.022;
plot(T.x(1:340), s_all(1:10:200, 1:340), 'Color', [0.5294, 0.8, 0.98], 'LineWidth', 2.5);
plot(T.x(1:30), v_fit(1:10:200, :)', '.', 'Color', [0.83, 0.23, 0.09], 'MarkerSize', 10);
make_graph_pretty('$x [\mu m]$', 'intensity [a.u.]', '');
% print([T.pa, 'Timecourse_model_only'],'-depsc')
%% Plot boundary condition (read out)
figure; hold on;
plot(ts(1:200), s(1:200, end), 'Color', [0.1608    0.5412    0.2118])
make_graph_pretty('t [s]', 'intensity [a.u.]', '');
print([T.pa, 'Timecourse_BC'],'-depsc')
%% Fit boundary condition with exponential
f = fit(ts(1:200), s(1:200, end), 'B+C-B*exp(-x/tau)-C*exp(-x/tau2)');
plot(f)
%% Plot flux at boundary (x close to 1) Only works close to boundary!
% T = Ternary_model(2, 'FRAP', [], linspace(0.0, 400, 2000));
% T.e_g0 = 0.001;
% T.b = 0.001;
% T.solve_tern_frap();
[~, ind_in] = min(abs(T.x+T.a+0.02)); % Find x position of boundary close to 0.9
% Calculate local diffusion coefficient
g0 = Ternary_model.gamma0((T.x(ind_in)+T.x(ind_in+1))/2, T.a, T.b, T.e_g0, T.o_g0);
pt = Ternary_model.phi_tot((T.x(ind_in)+T.x(ind_in+1))/2, T.a, T.b, T.e, T.u0);
D_in = g0*(1-pt);
Diffs_in = D_in*diff(T.sol')/(T.x(ind_in+1)-T.x(ind_in));
[~, ind_out] = min(abs(T.x+T.a-0.02)); % Find x position of boundary close to 0.9
% Calculate local diffusion coefficient
g0 = Ternary_model.gamma0((T.x(ind_out)+T.x(ind_out+1))/2, T.a, T.b, T.e_g0, T.o_g0);
pt = Ternary_model.phi_tot((T.x(ind_out)+T.x(ind_out+1))/2, T.a, T.b, T.e, T.u0);
D_out = g0*(1-pt);
Diffs_out = D_out*diff(T.sol')/(T.x(ind_out+1)-T.x(ind_out));
figure; hold on;
plot(Diffs_in(ind_in, :))
plot(Diffs_out(ind_out, :));
make_graph_pretty('time', '\bf{j}', 'boundary flux inside/outside of drop');
axis([0, 200, 0, 0.035])
%% Check out inner and outer length scales
e_g0 = [0.01, 0.05, 0.1, 0.2, 0.5, 3, 10, 100];
for i = 1:8
%     T1{i} = Ternary_model(2, 'FRAP', [], linspace(0.0, 400, 5000));
%     T1{i}.e_g0 = e_g0(i);
%     T1{i}.solve_tern_frap();
    T1{i}.calc_time_scales();
end
%%
figure; hold on;
for i = 1:length(T1)
    [~, ind] = min(abs(T1{i}.x+T1{i}.a)); 
    plot(T1{i}.t, sum(T1{i}.sol(:, 1:ind), 2)); axis([0, 100, 0, 80]);
end
%% Mix
o_g0 = [0.01, 0.05, 0.1, 0.2, 0.5, 3, 10, 100];
for i = 1:8
    T2{i} = Ternary_model(2, 'FRAP', [], linspace(0.0, 400, 5000));
    T2{i}.o_g0 = o_g0(i);
    T2{i}.solve_tern_frap();
    T2{i}.calc_time_scales();
end
%%
figure; hold on;
for i = 1:length(T1)
    [~, ind] = min(abs(T2{i}.x+T2{i}.a)); 
    plot(T2{i}.t, sum(T2{i}.sol(:, 1:ind), 2)); axis([0, 100, 0, 80]);
end
%%
%%
o_g0 = [0.01, 0.05, 0.1, 0.2, 0.5, 3, 10, 100];
for i = 1:8
    T3{i} = Ternary_model(2, 'FRAP', [], linspace(0.0, 400, 5000));
    T3{i}.e_g0 = 0.01;
    T3{i}.o_g0 = o_g0(i);
    T3{i}.solve_tern_frap();
    T3{i}.calc_time_scales();
end
%%
figure; hold on;
for i = 1:length(T1)
    [~, ind] = min(abs(T2{i}.x+T2{i}.a)); 
    plot(T2{i}.t, sum(T2{i}.sol(:, 1:ind), 2)); axis([0, 100, 0, 80]);
end
%% Outside time scale
fol = '~/ownCloud/Dropbox_Lars_Christoph/DropletFRAP/Latex/Figures/SpatialAnalysisAdvantages/';
p = logspace(1, 3, 20);
R_in = 1;
tau_out = p.^(1/3);
plot(p, tau_out);
make_graph_pretty('partitioning coefficient \xi', '\tau_{out}', '');
print([fol, 'partitioning_vs_tau'],'-depsc');
T_large_p = Ternary_model(2, 'FRAP', [-1, 0.025, 0.0005, 0.5-0.0005, 5, 0.16],...
                            linspace(0.0, 400, 5000));
T_large_p.solve_tern_frap()
%%
T_middle_p = Ternary_model(2, 'FRAP', [-1, 0.025, 0.0015, 0.5-0.0015, 5, 0.16],...
                            linspace(0.0, 400, 5000));
T_middle_p.solve_tern_frap()
%%
T_small_p = Ternary_model(2, 'FRAP', [-1, 0.025, 0.04, 0.5-0.04, 5, 0.16],...
                            linspace(0.0, 400, 5000));
T_small_p.solve_tern_frap()
%%
T_middle_p.plot_sim('plot', 10);
print([fol, 'middle_partitioning'],'-depsc');
T_large_p.plot_sim('plot', 10)
print([fol, 'large_partitioning'],'-depsc');
T_small_p.plot_sim('plot', 10)
print([fol, 'small_partitioning'],'-depsc');
Lars Hubatsch's avatar
Lars Hubatsch committed
%% Partitioning time scales outside/inside
start = [141, 202, 240];
stop = [242, 139, 18];
c = [linspace(start(1), stop(1), 256)', linspace(start(2), stop(2), 256)', linspace(start(3), stop(3), 256)']/256;
Din_Dout=logspace(-3, 1, 100);
Xi = logspace(0, 4, 100);
[X,Y]=meshgrid(Xi,Din_Dout);
Z=Y.*X.^(2/3);
figure; hold on;
hAx=subplot(1, 1, 1);
surf(X,Y,log(Z));
set(hAx,'xscale','log');
set(hAx,'yscale','log');
h = colorbar('northoutside', 'XTickLabel',{'10^{-6}','10^{-4}','10^{-2}','1','10^2','10^4','10^6','10^8'}, ...
Lars Hubatsch's avatar
Lars Hubatsch committed
            'YTick',-6:2:8);
ylabel(h, [char(964) '_{in}/' char(964) '_{out}']);
% set(h,'YTick',[-6:2:8], '10);
Lars Hubatsch's avatar
Lars Hubatsch committed
colormap(c)
shading interp
view(2)
plot(Xi, Xi.^(-2/3), 'k');
ylim([10^-3, 10]);
Lars Hubatsch's avatar
Lars Hubatsch committed
make_graph_pretty('Partitioning \xi', 'D_{in}/D_{out}', '');
print([fol, 'partitioning_DinDout'],'-depsc');
%%
chi = 7/3;
b = nu^(1/3)*sqrt(chi/(chi-2));
e = sqrt(3/8*(chi-2));
Lars Hubatsch's avatar
Lars Hubatsch committed
t = linspace(0.0, 40, 500);
T = Ternary_model(2, 'FRAP', [-1, b, 0.5, e, 1, 0.5], t);
Lars Hubatsch's avatar
Lars Hubatsch committed
T.solve_tern_frap();
Lars Hubatsch's avatar
Lars Hubatsch committed
%%
x_q = linspace(0, 0.9, 100);
v_q = interp1(T.x, T.sol', x_q);
v_q = v_q/max(v_q(:));
% plot(sum(v_q, 1))
x_fit = [10, 2];
model = 'simple_drop';
f_min = @(x_fit) intensity_fit(v_q', t', x_fit, model, sum(v_q, 1));
opt = optimset('MaxFunEvals', 2000, 'PlotFcns',@optimplotfval);
for i = 1:1
    x_fit = fminsearch(f_min, x_fit, opt);
end
%%
x_fit = [8, 2];
intensity_fit(v_q', t', x_fit, model, sum(v_q, 1))
[~, v_fit] = to_minimize(v_q', t', x_fit, model);
figure; hold on;
plot(v_q);
plot(v_fit')
figure; hold on;
plot(sum(v_q));
plot(sum(v_fit, 2));
%%
color = ['r', 'b', 'k', 'm', 'y', 'g'];
figure; hold on;
wi = [0.1, 0.5, 1.1, 5, 10, 2];
tic
Ts{i} =Ternary_model(2, 'FRAP', [-1, 0.02, 0.5, 0.3, 0.3, 0.5], t);
Ts{i}.create_mesh(wi(i));
Ts{i}.solve_tern_frap();
% T.create_mesh(i);
% plot(T.x, color(i), 'Marker', '.');
% length(T.x)
toc
axis([0, 1000, 0, 2])
%%
figure; hold on;
Ts{1}.plot_sim('plot', 10, 'red')
Ts{2}.plot_sim('plot', 10, 'blue')
Ts{3}.plot_sim('plot', 10, 'black')
Ts{4}.plot_sim('plot', 10, 'yellow')
Ts{5}.plot_sim('plot', 10, 'magenta')
Ts{end}.plot_sim('plot', 10, 'green')
xlim([0, 2]); ylim([0, 1]);