0001 function newModel=addGenesRaven(model,genesToAdd)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 newModel=model;
0026
0027 if isempty(genesToAdd)
0028 return;
0029 end
0030
0031
0032 if ~isfield(genesToAdd,'genes')
0033 EM='genes is a required field in genesToAdd';
0034 dispEM(EM);
0035 else
0036 genesToAdd.genes=convertCharArray(genesToAdd.genes);
0037 end
0038
0039
0040 nGenes=numel(genesToAdd.genes);
0041 nOldGenes=numel(model.genes);
0042 filler=cell(nGenes,1);
0043 filler(:)={''};
0044 largeFiller=cell(nOldGenes,1);
0045 largeFiller(:)={''};
0046
0047
0048 I=ismember(genesToAdd.genes,model.genes);
0049 if all(I)
0050 warning('All genes in genesToAdd.genes are already present in model.genes');
0051 return
0052 elseif any(I)
0053 existingGenes=strjoin(genesToAdd.genes(I), ', ');
0054 warning(['The following genes are already present in model.genes and will therefore not be added: ', existingGenes])
0055 genesToAdd.genes(I)=[];
0056 if isfield(genesToAdd,'geneShortNames')
0057 genesToAdd.geneShortNames(I)=[];
0058 end
0059 if isfield(genesToAdd,'geneMiriams')
0060 genesToAdd.geneMiriams(I)=[];
0061 end
0062 else
0063 newModel.genes=[newModel.genes;genesToAdd.genes(:)];
0064 end
0065
0066
0067 if isfield(genesToAdd,'geneShortNames')
0068 genesToAdd.geneShortNames=convertCharArray(genesToAdd.geneShortNames);
0069 if numel(genesToAdd.geneShortNames)~=nGenes
0070 EM='genesToAdd.geneShortNames must have the same number of elements as genesToAdd.genes';
0071 dispEM(EM);
0072 end
0073
0074 if ~isfield(newModel,'geneShortNames')
0075 newModel.geneShortNames=largeFiller;
0076 end
0077 newModel.geneShortNames=[newModel.geneShortNames;genesToAdd.geneShortNames(:)];
0078 else
0079
0080 if isfield(newModel,'geneShortNames')
0081 newModel.geneShortNames=[newModel.geneShortNames;filler];
0082 end
0083 end
0084
0085
0086 if isfield(genesToAdd,'geneMiriams')
0087 if numel(genesToAdd.geneMiriams)~=nGenes
0088 EM='genesToAdd.geneMiriams must have the same number of elements as genesToAdd.genes';
0089 dispEM(EM);
0090 end
0091
0092 if ~isfield(newModel,'geneMiriams')
0093 newModel.geneMiriams=cell(nOldGenes,1);
0094 end
0095 newModel.geneMiriams=[newModel.geneMiriams;genesToAdd.geneMiriams(:)];
0096 else
0097 if isfield(newModel,'geneMiriams')
0098 newModel.geneMiriams=[newModel.geneMiriams;cell(nGenes,1)];
0099 end
0100 end
0101
0102 if isfield(genesToAdd,'geneComps')
0103 if numel(genesToAdd.geneComps)~=nGenes
0104 EM='genesToAdd.geneComps must have the same number of elements as genesToAdd.genes';
0105 dispEM(EM);
0106 end
0107
0108 if ~isfield(newModel,'geneComps')
0109 newModel.geneComps=ones(nOldGenes,1);
0110 EM='Adding genes with compartment information to a model without such information. All existing genes will be assigned to the first compartment';
0111 dispEM(EM,false);
0112 end
0113 newModel.geneComps=[newModel.geneComps;genesToAdd.geneComps(:)];
0114 else
0115 if isfield(newModel,'geneComps')
0116 newModel.geneComps=[newModel.geneComps;ones(nGenes,1)];
0117 fprintf('NOTE: The added genes will be assigned to the first compartment\n');
0118 end
0119 end
0120
0121 if isfield(newModel,'geneFrom')
0122 newModel.geneFrom=[newModel.geneFrom;filler];
0123 end
0124
0125 if isfield(newModel,'rxnGeneMat')
0126 newModel.rxnGeneMat=[newModel.rxnGeneMat,zeros(length(newModel.rxns),nGenes)];
0127 end
0128 end