0001 function modelRev = convertToReversible(model)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 modelRev.rxns = {};
0018 modelRev.S = [];
0019 modelRev.lb = [];
0020 modelRev.ub = [];
0021 modelRev.rev = [];
0022 modelRev.c = [];
0023
0024
0025 rxnProcessed = false*ones(length(model.rxns),1);
0026
0027 cnt = 0;
0028 for i = 1:length(model.rxns)
0029 if (model.match(i) == 0)
0030
0031 cnt = cnt + 1;
0032 if (strcmp(model.rxns{i}(end-1:end),'_r') | strcmp(model.rxns{i}(end-1:end),'_b'))
0033 modelRev.rxns{end+1} = model.rxns{i}(1:end-2);
0034 modelRev.S(:,end+1) = -model.S(:,i);
0035 modelRev.ub(end+1) = -model.lb(i);
0036 modelRev.lb(end+1) = -model.ub(i);
0037 modelRev.c(end+1) = -model.c(i);
0038 else
0039 if (strcmp(model.rxns{i}(end-1:end),'_f'))
0040 modelRev.rxns{end+1} = model.rxns{i}(1:end-2);
0041 else
0042 modelRev.rxns{end+1} = model.rxns{i};
0043 end
0044 modelRev.S(:,end+1) = model.S(:,i);
0045 modelRev.lb(end+1) = model.lb(i);
0046 modelRev.ub(end+1) = model.ub(i);
0047 modelRev.c(end+1) = model.c(i);
0048 end
0049 modelRev.rev(end+1) = false;
0050 map(cnt) = i;
0051 else
0052
0053 if (~rxnProcessed(i))
0054 cnt = cnt + 1;
0055 map(cnt) = i;
0056 modelRev.rxns{end+1} = model.rxns{i}(1:end-2);
0057 modelRev.S(:,end+1) = model.S(:,i);
0058 modelRev.ub(end+1) = model.ub(i);
0059 modelRev.rev(end+1) = true;
0060 revRxnID = model.match(i);
0061 rxnProcessed(revRxnID) = true;
0062
0063 modelRev.lb(end+1) = -model.ub(revRxnID);
0064
0065 if (model.c(i) ~= 0)
0066 modelRev.c(end+1) = model.c(i);
0067 elseif (model.c(revRxnID) ~= 0)
0068 modelRev.c(end+1) = -modelRev.c(revRxnID);
0069 else
0070 modelRev.c(end+1) = 0;
0071 end
0072 end
0073 end
0074 end
0075
0076 modelRev.ub = columnVector(modelRev.ub);
0077 modelRev.lb = columnVector(modelRev.lb);
0078 modelRev.rxns = columnVector(modelRev.rxns);
0079 modelRev.c = columnVector(modelRev.c);
0080 modelRev.rev = columnVector(modelRev.rev);
0081 modelRev.mets = columnVector(model.mets);
0082 if (isfield(model,'b'))
0083 modelRev.b = model.b;
0084 end
0085 if isfield(model,'description')
0086 modelRev.description = [model.description ' reversible'];
0087 end
0088 if isfield(model,'subSystems')
0089 modelRev.subSystems = model.subSystems(map);
0090 end
0091 if isfield(model,'genes')
0092 modelRev.genes = model.genes;
0093 modelRev.rxnGeneMat = model.rxnGeneMat(map,:);
0094 modelRev.rules = model.rules(map);
0095 end
0096 modelRev.reversibleModel = true;