0001 function model = changeGeneAssociation(model,rxnName,grRule,geneNameList,systNameList)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 if (nargin < 4)
0023 translateNamesFlag = false;
0024 else
0025 translateNamesFlag = true;
0026 end
0027
0028 [isInModel,rxnID] = ismember(rxnName,model.rxns);
0029
0030 if (~isInModel)
0031 error(['Reaction ' rxnName ' not in the model']);
0032 end
0033
0034 if ~isfield(model,'genes')
0035 model.genes = {};
0036 end
0037 nGenes = length(model.genes);
0038 model.rules{rxnID} = '';
0039
0040 model.rxnGeneMat(rxnID,:) = zeros(1,nGenes);
0041
0042 grRule = regexprep(grRule,'\s{2,}',' ');
0043 grRule = regexprep(grRule,'( ','(');
0044 grRule = regexprep(grRule,' )',')');
0045
0046 if (~isempty(grRule))
0047 [genes,rule] = parseBoolean(grRule);
0048 for i = 1:length(genes)
0049 if (translateNamesFlag)
0050
0051 [isInList,translID] = ismember(genes{i},geneNameList);
0052 if isInList
0053 newGene = systNameList{translID};
0054 grRule = regexprep(grRule,[genes{i} '$'],newGene);
0055 grRule = regexprep(grRule,[genes{i} '\s'],[newGene ' ']);
0056 grRule = regexprep(grRule,[genes{i} ')'],[newGene ')']);
0057 genes{i} = newGene;
0058 else
0059 warning(['Gene name ' genes{i} ' not in translation list']);
0060 end
0061 end
0062 geneID = find(strcmp(model.genes,genes{i}));
0063 if (isempty(geneID))
0064 warning(['New gene ' genes{i} ' added to model']);
0065
0066 model.genes = [model.genes; genes(i)];
0067 nGenes = length(model.genes);
0068 model.rxnGeneMat(rxnID,end+1) = 1;
0069 rule = strrep(rule,['x(' num2str(i) ')'],['x(' num2str(nGenes) ')']);
0070 else
0071 model.rxnGeneMat(rxnID,geneID) = 1;
0072 rule = strrep(rule,['x(' num2str(i) ')'],['x(' num2str(geneID) ')']);
0073 end
0074 end
0075 model.rules{rxnID} = rule;
0076 end
0077
0078 model.grRules{rxnID} = grRule;
0079
0080
0081 model.rules = columnVector(model.rules);
0082 model.grRules = columnVector(model.grRules);