0001 function [wtRes,delRes] = simpleOptKnock(model,targetRxn,deletions,geneDelFlag,minGrowth,doubleDelFlag)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 if (nargin < 3)
0030 deletions = model.rxns;
0031 end
0032 if (nargin < 4)
0033 geneDelFlag = false;
0034 end
0035 if (nargin < 5)
0036 minGrowth = 0.05;
0037 end
0038 if (nargin < 6)
0039 doubleDelFlag = false;
0040 end
0041
0042 tol = 1e-7;
0043
0044
0045 nDel = length(deletions);
0046
0047
0048 solWT = optimizeCbModel(model);
0049 grRounded = floor(solWT.f/tol)*tol;
0050 modelWT = changeRxnBounds(model,model.rxns(model.c==1),grRounded,'l');
0051 modelWT = changeObjective(modelWT,targetRxn,1);
0052 solMax = optimizeCbModel(modelWT);
0053 solMin = optimizeCbModel(modelWT);
0054
0055 wtRes.growth = solWT.f;
0056 wtRes.maxProd = solMax.f;
0057 wtRes.minProd = solMin.f;
0058
0059 if (doubleDelFlag)
0060 growthRate = sparse(nDel,nDel);
0061 maxProd = sparse(nDel,nDel);
0062 minProd = sparse(nDel,nDel);
0063 else
0064 growthRate = zeros(nDel,1);
0065 maxProd = zeros(nDel,1);
0066 minProd = zeros(nDel,1);
0067 end
0068
0069
0070 if (~doubleDelFlag)
0071 h = waitbar(0,'Simple OptKnock in progress ...');
0072 end
0073 t0 = cputime;
0074 delCounter = 0;
0075 for i = 1:nDel
0076 if (~doubleDelFlag)
0077 if mod(i,10) == 0
0078 waitbar(i/nDel,h);
0079 end
0080 end
0081 if (geneDelFlag)
0082
0083 modelKO = deleteModelGenes(model,deletions{i});
0084 else
0085
0086 modelKO = changeRxnBounds(model,deletions{i},0,'b');
0087 end
0088
0089 solKO = optimizeCbModel(modelKO);
0090
0091 growthRate(i,1) = solKO.f;
0092 if (solKO.f > minGrowth && solKO.stat == 1)
0093
0094 grRounded = floor(solKO.f/tol)*tol;
0095 modelKO = changeRxnBounds(modelKO,modelKO.rxns(modelKO.c==1),grRounded,'l');
0096 modelKO = changeObjective(modelKO,targetRxn,1);
0097 solMax = optimizeCbModel(modelKO,'max');
0098 solMin = optimizeCbModel(modelKO,'min');
0099 if (~doubleDelFlag)
0100 maxProd(i,1) = solMax.f;
0101 minProd(i,1) = solMin.f;
0102
0103 else
0104 maxProd(i,i) = solMax.f;
0105 minProd(i,i) = solMin.f;
0106 for j = i+1:nDel
0107 delCounter = delCounter+1;
0108 if mod(j,50) == 0
0109 fComp = delCounter/(nDel*(nDel-1)/2);
0110 fprintf('%d\t%f\t%f\n',delCounter,100*fComp,(cputime-t0)/60);
0111 end
0112 if (geneDelFlag)
0113
0114 modelKO2 = deleteModelGenes(model,deletions{i});
0115 modelKO2 = deleteModelGenes(modelKO2,deletions{j});
0116 else
0117 modelKO2 = changeRxnBounds(model,deletions{i},0,'b');
0118 modelKO2 = changeRxnBounds(modelKO2,deletions{j},0,'b');
0119 end
0120
0121 solKO2 = optimizeCbModel(modelKO2);
0122 growthRate(i,j) = solKO2.f;
0123
0124 if (solKO2.f > minGrowth && solKO2.stat == 1)
0125 grRounded2 = floor(solKO2.f/tol)*tol;
0126 modelKO2 = changeRxnBounds(modelKO2,modelKO2.rxns(modelKO2.c==1),grRounded2,'l');
0127 modelKO2 = changeObjective(modelKO2,targetRxn,1);
0128 solMax2 = optimizeCbModel(modelKO2,'max');
0129 solMin2 = optimizeCbModel(modelKO2,'min');
0130 if (solMin2.f > 0)
0131 fprintf('%s %s %f %f %f\n',deletions{i},deletions{j},solKO2.f,solMax2.f,solMin2.f);
0132 end
0133 maxProd(i,j) = solMax2.f;
0134 minProd(i,j) = solMin2.f;
0135 end
0136 end
0137 end
0138 end
0139 end
0140 if (~doubleDelFlag)
0141 close(h);
0142 end
0143
0144
0145 delRes.maxProd = maxProd;
0146 delRes.minProd = minProd;
0147 delRes.growth = growthRate;