Skip to content

Commit 8b0cc4e

Browse files
committed
add Priors to PEtab Import & Export
1 parent 5204c24 commit 8b0cc4e

File tree

4 files changed

+38
-19
lines changed

4 files changed

+38
-19
lines changed

arFramework3/Advanced/arLoadParsPEtab.m

+12-5
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,21 @@ function arLoadParsPEtab(filename)
4343
end
4444
end
4545

46+
% Remap PEtab prior types to d2d prior types
47+
T.initializationPriorType = cellstr(T.initializationPriorType); % Convert char array to cell array of strings
48+
petab_to_d2d = containers.Map({'parameterScaleUniform', 'normal', 'uniform', 'laplace'}, {0, 1, 2, 3});
49+
T.initializationPriorType = cellfun(@(x) petab_to_d2d(x), T.initializationPriorType);
50+
4651
% this is currently under development on the PEtab side.
47-
if isfield(T,'priorType')
52+
if isfield(T,'initializationPriorType')
4853
for i=1:length(BothPars)
49-
if ischar(T.priorType(ib(i)))
50-
if isnumeric(T.priorParameters)
51-
arSetPrior(ia(i),T.priorType(ib(i)),T.priorParameters(ib(i),1),T.priorParameters(ib(i),2))
54+
if ~isempty(T.initializationPriorType(ib(i)))
55+
if T.initializationPriorType(ib(i)) ~= 0
56+
PriorParameters = str2num(T.initializationPriorParameters(ib(i),:));
57+
arSetPrior(ia(i),T.initializationPriorType(ib(i),:), ...
58+
PriorParameters(1), PriorParameters(2))
5259
else
53-
arSetPrior(ia(i),T.priorType(ib(i)))
60+
arSetPrior(ia(i),T.initializationPriorType(ib(i),:))
5461
end
5562
end
5663
end

arFramework3/ImportExport/arExportPEtab.m

+22-1
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,32 @@ function writeParameterTable(IDs)
304304
lowerBound(ar.qLog10 == 1) = 10.^ar.lb(ar.qLog10 == 1);
305305
upperBound(ar.qLog10 == 1) = 10.^ar.ub(ar.qLog10 == 1);
306306

307+
% priors
308+
% map d2d prior definations 0-3 to corresponding PEtab prior definations
309+
priorTypes = {'parameterScaleUniform', 'normal', 'uniform', 'laplace'};
310+
initializationPriorType = priorTypes(ar.type + 1);
311+
% initializationPriorParameters
312+
initializationPriorParameters = cell(size(ar.type));
313+
for i = 1:length(ar.type)
314+
switch ar.type(i)
315+
case 0 % No prior
316+
initializationPriorParameters{i} = '';
317+
case 1 % Normal
318+
initializationPriorParameters{i} = sprintf('%f, %f', ar.mean(i), ar.std(i));
319+
case 2 % Uniform
320+
initializationPriorParameters{i} = sprintf('%f, %f', ar.lb(i), ar.ub(i));
321+
case 3 % Laplace
322+
initializationPriorParameters{i} = sprintf('%f, %f', ar.mean(i), ar.std(i));
323+
end
324+
end
325+
307326
% build table and write to disk
308327
variableNames = {'parameterId', 'parameterName', 'parameterScale', ...
309-
'lowerBound', 'upperBound', 'nominalValue', 'estimate',};
328+
'lowerBound', 'upperBound', 'nominalValue', 'estimate', ...
329+
'initializationPriorType', 'initializationPriorParameters'};
310330
parT = table(parameterId(:), parameterName(:), parameterScale(:), ...
311331
lowerBound(:), upperBound(:), nominalValue(:), estimate(:), ...
332+
initializationPriorType(:), initializationPriorParameters(:),...
312333
'VariableNames', variableNames);
313334
writetable(parT, ['PEtab' filesep IDs.name '_parameters.tsv'],...
314335
'Delimiter', '\t', 'FileType', 'text')

arFramework3/ImportExport/arImportPEtab.m

-11
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,6 @@ function arImportPEtab(name, doPreEq)
116116
arFindInputs(); % might overwrite parameters due to ar.pExtern, but input times might be in parameters table.
117117
arLoadParsPEtab(PEparas);
118118

119-
if exist('Tms','var')
120-
[BothPars,ia] = intersect(ar.pLabel,Tms_fn);
121-
for i=1:length(BothPars)
122-
if strcmp(Tms.(BothPars{i})(ms),'-') % if Tms.(BothPars{i})(ms) == 0
123-
arSetPars(BothPars(i), ar.p(ia), 0);
124-
%else
125-
% arSetPars(BothPars(i), ar.p(ia)*Tms.(BothPars{i})(ms));
126-
end
127-
end
128-
end
129-
130119
%% pre-equilibration
131120
if doPreEq
132121
tstart = -1e7;

arFramework3/arSetPrior.m

+4-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ function arSetPrior( par, type, mean, std )
5353

5454
for a = 1 : length( par )
5555
ar.type(par(a)) = type;
56-
ar.mean(par(a)) = mean;
57-
ar.std(par(a)) = std;
56+
if ar.type(par(a)) ~= 0
57+
ar.mean(par(a)) = mean;
58+
ar.std(par(a)) = std;
59+
end
5860
end
5961
end

0 commit comments

Comments
 (0)