0001 function [essentialRxns, essentialRxnsIndexes]=getEssentialRxns(model,ignoreRxns)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 if nargin<2
0018 ignoreRxns={};
0019 else
0020 ignoreRxns=convertCharArray(ignoreRxns);
0021 end
0022
0023
0024 model.c=zeros(numel(model.rxns),1);
0025
0026
0027 [sol, hsSolOut]=solveLP(model,1);
0028
0029 if sol.stat==-1 || isempty(sol.x)
0030 EM='No feasible solution to the full model';
0031 dispEM(EM);
0032 end
0033
0034
0035
0036 rxnsToCheck=setdiff(model.rxns(abs(sol.x)>10^-12),ignoreRxns);
0037 nToCheck=numel(rxnsToCheck);
0038 minimize=true;
0039 while 1
0040 if minimize==true
0041 sol=solveLP(setParam(model,'obj',rxnsToCheck,-1));
0042 else
0043 sol=solveLP(setParam(model,'obj',rxnsToCheck,1));
0044 end
0045 rxnsToCheck=intersect(rxnsToCheck,model.rxns(abs(sol.x)>10^-8));
0046 if numel(rxnsToCheck)>=nToCheck
0047 if minimize==true
0048 minimize=false;
0049 else
0050 break;
0051 end
0052 else
0053 nToCheck=numel(rxnsToCheck);
0054 end
0055 end
0056
0057 essentialRxns={};
0058 for i=1:numel(rxnsToCheck)
0059 sol=solveLP(setParam(model,'eq',rxnsToCheck(i),0),0,[],hsSolOut);
0060 if sol.stat==-1 || isempty(sol.x)
0061 essentialRxns=[essentialRxns;rxnsToCheck(i)];
0062 end
0063 end
0064
0065 [~, essentialRxnsIndexes]=ismember(essentialRxns,model.rxns);
0066 end