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-08-01

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-08-01
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     dispEM('genes is a required field in genesToAdd');
0037 end
0038 
0039 if ~iscellstr(genesToAdd.genes)
0040     dispEM('genesToAdd.genes must be a cell array of strings');
0041 end
0042 
0043 illegalCells=regexp(genesToAdd.genes,'[();:]', 'once');
0044 dispEM('Illegal character(s) in gene names:',true,genesToAdd.genes(~cellfun(@isempty,illegalCells)));
0045 
0046 %Number of genes
0047 nGenes=numel(genesToAdd.genes);
0048 nOldGenes=numel(model.genes);
0049 filler=cell(nGenes,1);
0050 filler(:)={''};
0051 largeFiller=cell(nOldGenes,1);
0052 largeFiller(:)={''};
0053 
0054 %Check that no gene ids are already present in the model
0055 I=ismember(genesToAdd.genes,model.genes);
0056 if any(I)
0057     dispEM('One or more elements in genesToAdd.genes are already present in model.genes');
0058 else
0059     newModel.genes=[newModel.genes;genesToAdd.genes(:)];
0060 end
0061 
0062 %Some more checks and if they pass then add each field to the structure
0063 if isfield(genesToAdd,'geneShortNames')
0064    if numel(genesToAdd.geneShortNames)~=nGenes
0065        dispEM('genesToAdd.geneShortNames must have the same number of elements as genesToAdd.genes');
0066    end
0067    if ~iscellstr(genesToAdd.geneShortNames)
0068         dispEM('genesToAdd.geneShortNames must be a cell array of strings');
0069    end
0070    %Add empty field if it doesn't exist
0071    if ~isfield(newModel,'geneShortNames')
0072         newModel.geneShortNames=largeFiller;
0073    end
0074    newModel.geneShortNames=[newModel.geneShortNames;genesToAdd.geneShortNames(:)];
0075 else
0076     %Add empty strings if structure is in model
0077     if isfield(newModel,'geneShortNames')
0078        newModel.geneShortNames=[newModel.geneShortNames;filler];
0079     end
0080 end
0081 
0082 %Don't check the type of geneMiriams
0083 if isfield(genesToAdd,'geneMiriams')
0084    if numel(genesToAdd.geneMiriams)~=nGenes
0085        dispEM('genesToAdd.geneMiriams must have the same number of elements as genesToAdd.genes');
0086    end
0087    %Add empty field if it doesn't exist
0088    if ~isfield(newModel,'geneMiriams')
0089         newModel.geneMiriams=cell(nOldGenes,1);
0090    end
0091    newModel.geneMiriams=[newModel.geneMiriams;genesToAdd.geneMiriams(:)]; 
0092 else
0093     if isfield(newModel,'geneMiriams')
0094        newModel.geneMiriams=[newModel.geneMiriams;cell(nGenes,1)]; 
0095     end
0096 end
0097 
0098 if isfield(genesToAdd,'geneComps')
0099    if numel(genesToAdd.geneComps)~=nGenes
0100        dispEM('genesToAdd.geneComps must have the same number of elements as genesToAdd.genes');
0101    end
0102    %Add empty field if it doesn't exist
0103    if ~isfield(newModel,'geneComps')
0104         newModel.geneComps=ones(nOldGenes,1);
0105         dispEM('Adding genes with compartment information to a model without such information. All existing genes will be assigned to the first compartment',false);
0106    end
0107    newModel.geneComps=[newModel.geneComps;genesToAdd.geneComps(:)]; 
0108 else
0109     if isfield(newModel,'geneComps')
0110        newModel.geneComps=[newModel.geneComps;ones(nGenes,1)]; 
0111        fprintf('NOTE: The added genes will be assigned to the first compartment\n');
0112     end
0113 end
0114 
0115 if isfield(newModel,'geneFrom')
0116     newModel.geneFrom=[newModel.geneFrom;filler];
0117 end
0118 
0119 if isfield(newModel,'rxnGeneMat')
0120     newModel.rxnGeneMat=[newModel.rxnGeneMat sparse(numel(model.rxns),nGenes)];
0121 end
0122 end

Generated on Mon 06-Jan-2014 14:58:12 by m2html © 2005