0001 function newModel=expandModel(model)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 rxnsToExpand=false(numel(model.rxns),1);
0023
0024 for i=1:numel(model.rxns)
0025 if findstr(model.grRules{i},' or ');
0026 rxnsToExpand(i)=true;
0027 end
0028 end
0029
0030 rxnsToExpand=find(rxnsToExpand);
0031
0032 if any(rxnsToExpand)
0033
0034 for i=1:numel(rxnsToExpand)
0035
0036
0037 if findstr(model.grRules{rxnsToExpand(i)},' and ')
0038 fprintf(['WARNING: Reaction ' model.rxns{rxnsToExpand(i)} ' contains nested and/or-relations. Large risk of errors\n']);
0039 end
0040
0041
0042
0043 geneString=model.grRules{rxnsToExpand(i)};
0044 geneString=strrep(geneString,'(','');
0045 geneString=strrep(geneString,')','');
0046 geneString=strrep(geneString,' or ',';');
0047
0048
0049 [crap crap crap crap crap crap geneNames]=regexp(geneString,';');
0050
0051
0052 model.grRules{rxnsToExpand(i)}=['(' geneNames{1} ')'];
0053
0054 index=strmatch(geneNames(1),model.genes,'exact');
0055 model.rxnGeneMat(rxnsToExpand(i),:)=0;
0056 model.rxnGeneMat(rxnsToExpand(i),index)=1;
0057
0058
0059
0060 for j=2:numel(geneNames)
0061 model.rxns=[model.rxns;[model.rxns{rxnsToExpand(i)} '_EXP_' num2str(j)]];
0062 model.rxnNames=[model.rxnNames;model.rxnNames(rxnsToExpand(i))];
0063 model.lb=[model.lb;model.lb(rxnsToExpand(i))];
0064 model.ub=[model.ub;model.ub(rxnsToExpand(i))];
0065 model.rev=[model.rev;model.rev(rxnsToExpand(i))];
0066 model.c=[model.c;model.c(rxnsToExpand(i))];
0067 model.S=[model.S model.S(:,rxnsToExpand(i))];
0068 model.grRules=[model.grRules;['(' geneNames{j} ')']];
0069
0070 index=strmatch(geneNames(j),model.genes,'exact');
0071 pad=sparse(1,numel(model.genes));
0072 pad(index)=1;
0073 model.rxnGeneMat=[model.rxnGeneMat;pad];
0074
0075 if isfield(model,'subSystems')
0076 model.subSystems=[model.subSystems;model.subSystems(rxnsToExpand(i))];
0077 end
0078 if isfield(model,'eccodes')
0079 model.eccodes=[model.eccodes;model.eccodes(rxnsToExpand(i))];
0080 end
0081 if isfield(model,'equations')
0082 model.equations=[model.equations;model.equations(rxnsToExpand(i))];
0083 end
0084 if isfield(model,'rxnMiriams')
0085 model.rxnMiriams=[model.rxnMiriams;model.rxnMiriams(rxnsToExpand(i))];
0086 end
0087 if isfield(model,'rxnComps')
0088 model.rxnComps=[model.rxnComps;model.rxnComps(rxnsToExpand(i))];
0089 end
0090 if isfield(model,'rxnFrom')
0091 model.rxnFrom=[model.rxnFrom;model.rxnFrom(rxnsToExpand(i))];
0092 end
0093 end
0094 end
0095 newModel=model;
0096 else
0097
0098 newModel=model;
0099 end
0100 end