Home > RAVEN > addGenes.m

addGenes

PURPOSE ^

addGenes

SYNOPSIS ^

function newModel=addGenes(model,genesToAdd)

DESCRIPTION ^

 addGenes
   Adds genes to a model

   model        a model structure
   genesToAdd   the genes genesToAdd can have the following fields:
                genes          cell array with unique strings that 
                               identifies each gene. Only character which are
                               allowed in SBML ids are allowed (mainly a-z,
                               0-9 and '_'). However, there is no check
                               for this performed, as it only matters if
                               the model should be exported to SBML
                geneShortNames cell array of gene abbreviations (opt,
                               default '')
                geneMiriams    cell array with MIRIAM structures (opt,
                               default [])

   newModel     an updated model structure

   NOTE: This function does not make extensive checks about MIRIAM formats,
   forbidden characters or such.

   Usage: newModel=addGenes(model,genesToAdd)

   Rasmus Agren, 2013-04-19

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function newModel=addGenes(model,genesToAdd)
0002 % addGenes
0003 %   Adds genes to a model
0004 %
0005 %   model        a model structure
0006 %   genesToAdd   the genes genesToAdd can have the following fields:
0007 %                genes          cell array with unique strings that
0008 %                               identifies each gene. Only character which are
0009 %                               allowed in SBML ids are allowed (mainly a-z,
0010 %                               0-9 and '_'). However, there is no check
0011 %                               for this performed, as it only matters if
0012 %                               the model should be exported to SBML
0013 %                geneShortNames cell array of gene abbreviations (opt,
0014 %                               default '')
0015 %                geneMiriams    cell array with MIRIAM structures (opt,
0016 %                               default [])
0017 %
0018 %   newModel     an updated model structure
0019 %
0020 %   NOTE: This function does not make extensive checks about MIRIAM formats,
0021 %   forbidden characters or such.
0022 %
0023 %   Usage: newModel=addGenes(model,genesToAdd)
0024 %
0025 %   Rasmus Agren, 2013-04-19
0026 %
0027 
0028 newModel=model;
0029 
0030 if isempty(genesToAdd)
0031     return;
0032 end
0033 
0034 %Check some stuff regarding the required fields
0035 if ~isfield(genesToAdd,'genes')
0036     throw(MException('','genes is a required field in genesToAdd'));
0037 end
0038 
0039 if ~iscellstr(genesToAdd.genes)
0040     throw(MException('','genesToAdd.genes must be a cell array of strings'));
0041 end
0042 
0043 illegalCells=regexp(genesToAdd.genes,'[();:]', 'once');
0044 if ~isempty(cell2mat(illegalCells))
0045     errorText='Illegal character(s) in gene names:\n';
0046     for i=1:length(illegalCells)
0047         if ~isempty(illegalCells{i})
0048             errorText=[errorText genesToAdd.genes{i} '\n'];
0049         end
0050     end
0051     throw(MException('',errorText));
0052 end
0053 
0054 %Number of genes
0055 nGenes=numel(genesToAdd.genes);
0056 nOldGenes=numel(model.genes);
0057 filler=cell(nGenes,1);
0058 filler(:)={''};
0059 largeFiller=cell(nOldGenes,1);
0060 largeFiller(:)={''};
0061 
0062 %Check that no gene ids are already present in the model
0063 I=ismember(genesToAdd.genes,model.genes);
0064 if any(I)
0065     throw(MException('','One or more elements in genesToAdd.genes are already present in model.genes'));
0066 else
0067     newModel.genes=[newModel.genes;genesToAdd.genes(:)];
0068 end
0069 
0070 %Some more checks and if they pass then add each field to the structure
0071 if isfield(genesToAdd,'geneShortNames')
0072    if numel(genesToAdd.geneShortNames)~=nGenes
0073        throw(MException('','genesToAdd.geneShortNames must have the same number of elements as genesToAdd.genes'));
0074    end
0075    if ~iscellstr(genesToAdd.geneShortNames)
0076         throw(MException('','genesToAdd.geneShortNames must be a cell array of strings'));
0077    end
0078    %Add empty field if it doesn't exist
0079    if ~isfield(newModel,'geneShortNames')
0080         newModel.geneShortNames=largeFiller;
0081    end
0082    newModel.geneShortNames=[newModel.geneShortNames;genesToAdd.geneShortNames(:)];
0083 else
0084     %Add empty strings if structure is in model
0085     if isfield(newModel,'geneShortNames')
0086        newModel.geneShortNames=[newModel.geneShortNames;filler];
0087     end
0088 end
0089 
0090 %Don't check the type of geneMiriams
0091 if isfield(genesToAdd,'geneMiriams')
0092    if numel(genesToAdd.geneMiriams)~=nGenes
0093        throw(MException('','genesToAdd.geneMiriams must have the same number of elements as genesToAdd.genes'));
0094    end
0095    %Add empty field if it doesn't exist
0096    if ~isfield(newModel,'geneMiriams')
0097         newModel.geneMiriams=cell(nOldGenes,1);
0098    end
0099    newModel.geneMiriams=[newModel.geneMiriams;genesToAdd.geneMiriams(:)]; 
0100 else
0101     if isfield(newModel,'geneMiriams')
0102        newModel.geneMiriams=[newModel.geneMiriams;cell(nGenes,1)]; 
0103     end
0104 end
0105 
0106 if isfield(newModel,'geneFrom')
0107     newModel.geneFrom=[newModel.geneFrom;filler];
0108 end
0109 
0110 if isfield(newModel,'rxnGeneMat')
0111     newModel.rxnGeneMat=[newModel.rxnGeneMat sparse(numel(model.rxns),nGenes)];
0112 end
0113 end

Generated on Tue 23-Apr-2013 15:18:37 by m2html © 2005