0001 function [model KOModel]=getModelFromKEGG(keggPath,keepUndefinedStoich,keepIncomplete,keepGeneral)
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
0030
0031
0032
0033
0034 if nargin<2
0035 keepUndefinedStoich=true;
0036 end
0037 if nargin<3
0038 keepIncomplete=true;
0039 end
0040 if nargin<4
0041 keepGeneral=true;
0042 end
0043
0044
0045 model=getRxnsFromKEGG(keggPath,keepUndefinedStoich,keepIncomplete,keepGeneral);
0046 fprintf('KEGG reactions loaded\n');
0047
0048
0049
0050 KOs=cell(numel(model.rxns)*2,1);
0051
0052 addToIndex=1;
0053
0054 for i=1:numel(model.rxns)
0055 if isstruct(model.rxnMiriams{i})
0056 for j=1:numel(model.rxnMiriams{i}.name)
0057 if strcmpi('urn:miriam:kegg.ko',model.rxnMiriams{i}.name{j});
0058
0059 KOs(addToIndex)=model.rxnMiriams{i}.value(j);
0060 addToIndex=addToIndex+1;
0061 end
0062 end
0063 end
0064 end
0065
0066 KOs=KOs(1:addToIndex-1);
0067 KOs=unique(KOs);
0068
0069
0070
0071 KOModel=getGenesFromKEGG(keggPath,KOs);
0072 fprintf('KEGG genes loaded\n');
0073
0074 model.genes=KOModel.genes;
0075
0076
0077
0078
0079 KOsToRemove=setdiff(KOs, KOModel.rxns);
0080
0081
0082 for i=1:numel(model.rxns)
0083 if isstruct(model.rxnMiriams{i})
0084 for j=1:numel(model.rxnMiriams{i}.name)
0085 toDel=[];
0086 if strcmp(model.rxnMiriams{i}.name{j},'urn:miriam:kegg.ko')
0087 if ismember(model.rxnMiriams{i}.value{j},KOsToRemove)
0088 toDel=[toDel;j];
0089 end
0090 end
0091 end
0092
0093 if any(toDel)
0094
0095 if numel(toDel)==j
0096 model.rxnMiriams{i}=[];
0097 else
0098 model.rxnMiriams{i}.name(toDel)=[];
0099 model.rxnMiriams{i}.value(toDel)=[];
0100 end
0101 end
0102 end
0103 end
0104
0105
0106
0107 r=zeros(10000000,1);
0108 c=zeros(10000000,1);
0109 counter=1;
0110 for i=1:numel(model.rxns)
0111 if isstruct(model.rxnMiriams{i})
0112 I=strncmp('urn:miriam:kegg.ko',model.rxnMiriams{i}.name,18);
0113 [J K]=ismember(model.rxnMiriams{i}.value(I),KOModel.rxns);
0114
0115 [crap L]=find(KOModel.rxnGeneMat(K(J),:));
0116 if any(L)
0117
0118 if counter+numel(L)-1>=numel(r)
0119 r=[r;zeros(numel(r),1)];
0120 c=[c;zeros(numel(c),1)];
0121 end
0122 r(counter:counter+numel(L)-1)=ones(numel(L),1)*i;
0123 c(counter:counter+numel(L)-1)=L(:);
0124 counter=counter+numel(L);
0125 end
0126 end
0127 end
0128
0129 model.rxnGeneMat=sparse(r(1:counter-1),c(1:counter-1),ones(counter-1,1));
0130 if size(model.rxnGeneMat,1)~=numel(model.rxns) || size(model.rxnGeneMat,2)~=numel(KOModel.genes)
0131 model.rxnGeneMat(numel(model.rxns),numel(KOModel.genes))=0;
0132 end
0133
0134
0135 metModel=getMetsFromKEGG(keggPath);
0136 fprintf('KEGG metabolites loaded\n');
0137
0138
0139 [a b]=ismember(model.mets,metModel.mets);
0140 a=find(a);
0141 b=b(a);
0142
0143 if ~isfield(model,'metNames')
0144 model.metNames=cell(numel(model.mets),1);
0145 model.metNames(:)={''};
0146 end
0147 model.metNames(a)=metModel.metNames(b);
0148
0149 if ~isfield(model,'metFormulas')
0150 model.metFormulas=cell(numel(model.mets),1);
0151 model.metFormulas(:)={''};
0152 end
0153 model.metFormulas(a)=metModel.metFormulas(b);
0154
0155 if ~isfield(model,'inchis')
0156 model.inchis=cell(numel(model.mets),1);
0157 model.inchis(:)={''};
0158 end
0159 model.inchis(a)=metModel.inchis(b);
0160
0161 if ~isfield(model,'metMiriams')
0162 model.metMiriams=cell(numel(model.mets),1);
0163 end
0164 model.metMiriams(a)=metModel.metMiriams(b);
0165
0166
0167
0168 model.comps={'s'};
0169 model.compNames={'System'};
0170 model.compOutside={''};
0171 model.metComps=ones(numel(model.mets),1);
0172
0173
0174
0175
0176
0177
0178 I=find(cellfun(@any,strfind(model.mets,'n')) | cellfun(@any,strfind(model.mets,'m')));
0179 model.metNames(I)=model.mets(I);
0180 repNums=1:numel(I);
0181 repIDs=strcat('undefined_',cellfun(@num2str,num2cell(repNums(:)),'UniformOutput',false));
0182 model.mets(I)=repIDs;
0183
0184
0185
0186 I=cellfun(@isempty,model.metNames);
0187 model.metNames(I)=model.mets(I);
0188 end