Home > core > addGenesRaven.m

addGenesRaven

PURPOSE ^

addGenesRaven

SYNOPSIS ^

function newModel=addGenesRaven(model,genesToAdd)

DESCRIPTION ^

 addGenesRaven
   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=addGenesRaven(model,genesToAdd)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function newModel=addGenesRaven(model,genesToAdd)
0002 % addGenesRaven
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=addGenesRaven(model,genesToAdd)
0024 
0025 newModel=model;
0026 
0027 if isempty(genesToAdd)
0028     return;
0029 end
0030 
0031 %Check some stuff regarding the required fields
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 %Number of genes
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 %Check that no gene ids are already present in the model
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 %Some more checks and if they pass then add each field to the structure
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     %Add empty field if it doesn't exist
0074     if ~isfield(newModel,'geneShortNames')
0075         newModel.geneShortNames=largeFiller;
0076     end
0077     newModel.geneShortNames=[newModel.geneShortNames;genesToAdd.geneShortNames(:)];
0078 else
0079     %Add empty strings if structure is in model
0080     if isfield(newModel,'geneShortNames')
0081         newModel.geneShortNames=[newModel.geneShortNames;filler];
0082     end
0083 end
0084 
0085 %Don't check the type of geneMiriams
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     %Add empty field if it doesn't exist
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     %Add empty field if it doesn't exist
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

Generated by m2html © 2005