Home > core > changeRxns.m

changeRxns

PURPOSE ^

changeRxns

SYNOPSIS ^

function model=changeRxns(model,rxns,equations,eqnType,compartment,allowNewMets)

DESCRIPTION ^

 changeRxns
   Modifies the equations of reactions

   model            a model structure
   rxns             cell array with reaction ids
   equations        cell array with equations. Alternatively, it can be a
                    structure with the fields "mets" and "stoichCoeffs",
                    in the same fashion as addRxns. E.g.:
                    equations.mets = {{'met1','met2'},{'met1','met3'}}
                    equations.stoichCoeffs = {[-1,+2],[-1,+1]}
   eqnType          double describing how the equation string should be
                    interpreted
                    1 - The metabolites are matched to model.mets. New
                        metabolites (if allowed) are added to
                        "compartment" (default)
                    2 - The metabolites are matched to model.metNames and
                        all metabolites are assigned to "compartment". Any
                        new metabolites that are added will be assigned
                        IDs "m1", "m2"... If IDs on the same form are
                        already used in the model then the numbering will
                        start from the highest used integer+1
                    3 - The metabolites are written as
                        "metNames[compNames]". Only compartments in
                        model.compNames are allowed. Any
                        new metabolites that are added will be assigned
                        IDs "m1", "m2"... If IDs on the same form are
                        already used in the model then the numbering will
                        start from the highest used integer+1
   compartment      a string with the compartment the metabolites should
                    be placed in when using eqnType=2. Must match
                    model.compNames (opt when eqnType=1 or eqnType=3)
   allowNewMets     true if the function is allowed to add new
                    metabolites. It is highly recommended to first add
                    any new metabolites with addMets rather than
                    automatically through this function. addMets supports
                    more annotation of metabolites, allows for the use of
                    exchange metabolites, and using it reduces the risk
                    of parsing errors (opt, default false)

   model            an updated model structure

   NOTE: This function should be used with some care, since it doesn't
   care about bounds on the reactions. Changing a irreversible reaction to
   a reversible one (or the other way around) will only change the
   model.rev field and not the model.lb/model.ub fields. The reaction will
   therefore still be having the same reversibility because of the
   bounds. Use setParams to change the bounds.

   NOTE: When adding metabolites to a compartment where it previously
   doesn't exist, the function will copy any available information from
   the metabolite in another compartment.

   Usage: model=changeRxns(model,rxns,equations,eqnType,compartment,allowNewMets)

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function model=changeRxns(model,rxns,equations,eqnType,compartment,allowNewMets)
0002 % changeRxns
0003 %   Modifies the equations of reactions
0004 %
0005 %   model            a model structure
0006 %   rxns             cell array with reaction ids
0007 %   equations        cell array with equations. Alternatively, it can be a
0008 %                    structure with the fields "mets" and "stoichCoeffs",
0009 %                    in the same fashion as addRxns. E.g.:
0010 %                    equations.mets = {{'met1','met2'},{'met1','met3'}}
0011 %                    equations.stoichCoeffs = {[-1,+2],[-1,+1]}
0012 %   eqnType          double describing how the equation string should be
0013 %                    interpreted
0014 %                    1 - The metabolites are matched to model.mets. New
0015 %                        metabolites (if allowed) are added to
0016 %                        "compartment" (default)
0017 %                    2 - The metabolites are matched to model.metNames and
0018 %                        all metabolites are assigned to "compartment". Any
0019 %                        new metabolites that are added will be assigned
0020 %                        IDs "m1", "m2"... If IDs on the same form are
0021 %                        already used in the model then the numbering will
0022 %                        start from the highest used integer+1
0023 %                    3 - The metabolites are written as
0024 %                        "metNames[compNames]". Only compartments in
0025 %                        model.compNames are allowed. Any
0026 %                        new metabolites that are added will be assigned
0027 %                        IDs "m1", "m2"... If IDs on the same form are
0028 %                        already used in the model then the numbering will
0029 %                        start from the highest used integer+1
0030 %   compartment      a string with the compartment the metabolites should
0031 %                    be placed in when using eqnType=2. Must match
0032 %                    model.compNames (opt when eqnType=1 or eqnType=3)
0033 %   allowNewMets     true if the function is allowed to add new
0034 %                    metabolites. It is highly recommended to first add
0035 %                    any new metabolites with addMets rather than
0036 %                    automatically through this function. addMets supports
0037 %                    more annotation of metabolites, allows for the use of
0038 %                    exchange metabolites, and using it reduces the risk
0039 %                    of parsing errors (opt, default false)
0040 %
0041 %   model            an updated model structure
0042 %
0043 %   NOTE: This function should be used with some care, since it doesn't
0044 %   care about bounds on the reactions. Changing a irreversible reaction to
0045 %   a reversible one (or the other way around) will only change the
0046 %   model.rev field and not the model.lb/model.ub fields. The reaction will
0047 %   therefore still be having the same reversibility because of the
0048 %   bounds. Use setParams to change the bounds.
0049 %
0050 %   NOTE: When adding metabolites to a compartment where it previously
0051 %   doesn't exist, the function will copy any available information from
0052 %   the metabolite in another compartment.
0053 %
0054 %   Usage: model=changeRxns(model,rxns,equations,eqnType,compartment,allowNewMets)
0055 
0056 if nargin<4
0057     eqnType=1;
0058 end
0059 
0060 if nargin<5
0061     compartment=[];
0062 end
0063 if nargin<6
0064     allowNewMets=false;
0065 end
0066 
0067 rxns=convertCharArray(rxns);
0068 compartment=char(compartment);
0069 
0070 %Find the indexes of the reactions and throw an error if they aren't all
0071 %found
0072 [I, J]=ismember(rxns,model.rxns);
0073 if ~all(I)
0074     EM='All reaction ids must exist in the model';
0075     dispEM(EM);
0076 end
0077 
0078 %The reactions are changed in the following manner. First create a
0079 %rxns-structure by copying info from the model. Then remove the old
0080 %reactions. Then add the updated ones using addRxns. Lastly, the model is
0081 %reordered to match the original order. This is done like this to make use
0082 %of the advanced parsing of equations that addRxns use.
0083 rxnsToChange.rxns=rxns;
0084 if isfield(equations,'mets') && isfield(equations,'stoichCoeffs')
0085     rxnsToChange.mets=equations.mets;
0086     rxnsToChange.stoichCoeffs=equations.stoichCoeffs;
0087 else
0088     rxnsToChange.equations=convertCharArray(equations);
0089 end
0090 if isfield(model,'rxnNames')
0091     rxnsToChange.rxnNames=model.rxnNames(J);
0092 end
0093 if isfield(model,'lb')
0094     rxnsToChange.lb=model.lb(J);
0095 end
0096 if isfield(model,'ub')
0097     rxnsToChange.ub=model.ub(J);
0098 end
0099 if isfield(model,'c')
0100     rxnsToChange.c=model.c(J);
0101 end
0102 if isfield(model,'eccodes')
0103     rxnsToChange.eccodes=model.eccodes(J);
0104 end
0105 if isfield(model,'subSystems')
0106     rxnsToChange.subSystems=model.subSystems(J);
0107 end
0108 if isfield(model,'rxnComps')
0109     rxnsToChange.rxnComps=model.rxnComps(J);
0110 end
0111 if isfield(model,'grRules')
0112     rxnsToChange.grRules=model.grRules(J);
0113 end
0114 if isfield(model,'rxnFrom')
0115     rxnsToChange.rxnFrom=model.rxnFrom(J);
0116 end
0117 if isfield(model,'rxnScores')
0118     rxnsToChange.rxnScores=model.rxnScores(J);
0119 end
0120 if isfield(model,'rxnMiriams')
0121     rxnsToChange.rxnMiriams=model.rxnMiriams(J);
0122 end
0123 if isfield(model,'rxnNotes')
0124     rxnsToChange.rxnNotes=model.rxnNotes(J);
0125 end
0126 if isfield(model,'rxnReferences')
0127     rxnsToChange.rxnReferences=model.rxnReferences(J);
0128 end
0129 if isfield(model,'rxnConfidenceScores')
0130     rxnsToChange.rxnConfidenceScores=model.rxnConfidenceScores(J);
0131 end
0132 if isfield(model,'rxnDeltaG')
0133     rxnsToChange.rxnDeltaG=model.rxnDeltaG(J);
0134 end
0135 if isfield(model,'pwys')
0136     rxnsToChange.pwys=model.pwys(J);
0137 end
0138 
0139 %Calculate the new order of reactions
0140 order=ones(numel(model.rxns),1);
0141 order(J)=0;
0142 order=cumsum(order);
0143 order(J)=order(end)+1:order(end)+numel(rxns);
0144 
0145 %Remove the original reactions
0146 model=removeReactions(model,rxns);
0147 
0148 model=addRxns(model,rxnsToChange,eqnType,compartment,allowNewMets);
0149 model=permuteModel(model,order,'rxns');
0150 end

Generated by m2html © 2005