prj = sbioloadproject('Nanoparticle distribution.sbproj');
model = prj.m1;
parameterObjs = model.Parameters([9 11 12 14:17]);
means = arrayfun(@(x)x.Value, parameterObjs)';
sigma = means/4;
nRuns = 500;
ksamples = mvnrnd(zeros(size(means)), eye(size(means,2)), nRuns);
muLN = log((means.^2)./sqrt(sigma.^2+means.^2));
sigmaLN = sqrt(log(sigma.^2./(means.^2)+1));
ksamples = exp(ones(nRuns,size(means,2)).*muLN + ksamples.*sigmaLN);
observables = {'Plasma.Drug', 'Liver.Drug', 'Spleen.Drug', 'Lung.Drug',...
'Heart.Drug', 'Plasma.Nanoparticles', 'Liver.Nanoparticles', ...
'Spleen.Nanoparticles'};
parameters = get(parameterObjs,'Name');
doses = model.getdose;
dose = doses(1);
sfunction = model.createSimFunction(parameters, observables,...
dose, 'UseParallel', true);
[~, ax] = plotmatrix(ksamples);
set([ax(end,:).XLabel], {'String'}, parameters, 'Interpreter', 'None');
set([ax(:,1).YLabel], {'String'}, parameters, 'Interpreter', 'None', 'Rotation', 0, 'HorizontalAlignment', 'right');
pool = gcp;
sfunction.accelerate
constant = parallel.pool.Constant({sfunction, dose});
results = cell(nRuns,1);
parfor i = 1:size(ksamples, 1)
sfunction = constant.Value{1};
dose = constant.Value{2};
outputTimes = 0:.005:40;
simData = sfunction(ksamples(i,:), [], dose.getTable, outputTimes);
results{i} = table(simData.Time, simData.Data);
end
heartD = cellfun(@(x) x.Var2(:,5),results,'UniformOutput',false);
nTimePoints = size(heartD{1},1);
heartD = cell2mat(heartD);
heartD = reshape(heartD,[nTimePoints,nRuns]);
CI_heartD = prctile(heartD',[2.5,97.5]);
median_heartD = prctile(heartD',50);
time = results{1}.Var1;
semilogy(time, median_heartD','r')
hold on
semilogy(time,CI_heartD(1,:)','--b')
semilogy(time,CI_heartD(2,:)','--b')
axis([0 max(time) min(CI_heartD(1,:)) max(CI_heartD(2,:))])
xlabel('time [hr]')
ylabel('Heart.Drug [uM]')