convertToReversible

PURPOSE ^

convertToReversible convert a model structure from reversible format to

SYNOPSIS ^

function modelRev = convertToReversible(model)

DESCRIPTION ^

convertToReversible convert a model structure from reversible format to
irreversible format

 modelRev = convertToReversible(model)

INPUT
 model     COBRA model in irreversible format (forward/backward reactions
           separated)

OUTPUT
 modelRev  Model in reversible format

 Greg Hannum 7/22/05

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function modelRev = convertToReversible(model)
0002 %convertToReversible convert a model structure from reversible format to
0003 %irreversible format
0004 %
0005 % modelRev = convertToReversible(model)
0006 %
0007 %INPUT
0008 % model     COBRA model in irreversible format (forward/backward reactions
0009 %           separated)
0010 %
0011 %OUTPUT
0012 % modelRev  Model in reversible format
0013 %
0014 % Greg Hannum 7/22/05
0015 
0016 % Initialize
0017 modelRev.rxns = {};
0018 modelRev.S = [];
0019 modelRev.lb = [];
0020 modelRev.ub = [];
0021 modelRev.rev = [];
0022 modelRev.c = [];
0023 
0024 % Has this rxn been processed
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     % Non-reversible reaction
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     % Reversible reaction
0053     if (~rxnProcessed(i)) % Don't bother if this has already been processed
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       % Get the correct ub for the reverse reaction
0063       modelRev.lb(end+1) = -model.ub(revRxnID);
0064       % Get correct objective coefficient
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;

Generated on Thu 21-Jun-2012 15:39:23 by m2html © 2003