0001 function reducedModel=removeReactions(model,rxnsToRemove,removeUnusedMets,removeUnusedGenes,removeUnusedComps)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 if nargin<3
0022 removeUnusedMets=false;
0023 end
0024 if nargin<4
0025 removeUnusedGenes=false;
0026 end
0027 if nargin<5
0028 removeUnusedComps=false;
0029 end
0030 if ~islogical(rxnsToRemove) && ~isnumeric(rxnsToRemove)
0031 rxnsToRemove=convertCharArray(rxnsToRemove);
0032 end
0033
0034 reducedModel=model;
0035
0036 if ~isempty(rxnsToRemove) || removeUnusedMets || removeUnusedGenes
0037 indexesToDelete=getIndexes(model,rxnsToRemove,'rxns');
0038
0039
0040 if ~isempty(indexesToDelete)
0041 reducedModel.rxns(indexesToDelete)=[];
0042 if isfield(reducedModel,'lb')
0043 reducedModel.lb(indexesToDelete)=[];
0044 end
0045 if isfield(reducedModel,'ub')
0046 reducedModel.ub(indexesToDelete)=[];
0047 end
0048 if isfield(reducedModel,'rev')
0049 reducedModel.rev(indexesToDelete)=[];
0050 end
0051 if isfield(reducedModel,'c')
0052 reducedModel.c(indexesToDelete)=[];
0053 end
0054 if isfield(reducedModel,'S')
0055 reducedModel.S(:,indexesToDelete)=[];
0056 end
0057 if isfield(reducedModel,'rxnNames')
0058 reducedModel.rxnNames(indexesToDelete)=[];
0059 end
0060 if isfield(reducedModel,'rxnGeneMat')
0061 reducedModel.rxnGeneMat(indexesToDelete,:)=[];
0062 end
0063 if isfield(reducedModel,'grRules')
0064 reducedModel.grRules(indexesToDelete,:)=[];
0065 end
0066 if isfield(reducedModel,'subSystems')
0067 reducedModel.subSystems(indexesToDelete,:)=[];
0068 end
0069 if isfield(reducedModel,'eccodes')
0070 reducedModel.eccodes(indexesToDelete,:)=[];
0071 end
0072 if isfield(reducedModel,'equations')
0073 reducedModel.equations(indexesToDelete,:)=[];
0074 end
0075 if isfield(reducedModel,'rxnMiriams')
0076 reducedModel.rxnMiriams(indexesToDelete,:)=[];
0077 end
0078 if isfield(reducedModel,'rxnComps')
0079 reducedModel.rxnComps(indexesToDelete,:)=[];
0080 end
0081 if isfield(reducedModel,'rxnFrom')
0082 reducedModel.rxnFrom(indexesToDelete,:)=[];
0083 end
0084 if isfield(reducedModel,'rxnScores')
0085 reducedModel.rxnScores(indexesToDelete,:)=[];
0086 end
0087 if isfield(reducedModel,'rxnNotes')
0088 reducedModel.rxnNotes(indexesToDelete,:)=[];
0089 end
0090 if isfield(reducedModel,'rxnReferences')
0091 reducedModel.rxnReferences(indexesToDelete,:)=[];
0092 end
0093 if isfield(reducedModel,'rxnConfidenceScores')
0094 reducedModel.rxnConfidenceScores(indexesToDelete,:)=[];
0095 end
0096 if isfield(reducedModel,'rxnDeltaG')
0097 reducedModel.rxnDeltaG(indexesToDelete,:)=[];
0098 end
0099 if isfield(reducedModel,'pwys')
0100 reducedModel.pwys(indexesToDelete,:)=[];
0101 end
0102 if isfield(reducedModel,'spontaneous')
0103 reducedModel.spontaneous(indexesToDelete)=[];
0104 end
0105 end
0106
0107
0108 if removeUnusedMets==true
0109 if isfield(reducedModel,'S')
0110 [usedMets, ~]=find(reducedModel.S);
0111 unUsedMets=true(numel(reducedModel.mets),1);
0112 unUsedMets(usedMets)=false;
0113 reducedModel=removeMets(reducedModel,unUsedMets,false,false,false,removeUnusedComps);
0114 end
0115 end
0116
0117
0118 if removeUnusedGenes==true && isfield(reducedModel,'rxnGeneMat')
0119
0120 [~, b]=find(reducedModel.rxnGeneMat);
0121 toKeep=false(numel(reducedModel.genes),1);
0122 toKeep(b)=true;
0123
0124 reducedModel.genes=reducedModel.genes(toKeep);
0125 reducedModel.rxnGeneMat=reducedModel.rxnGeneMat(:,toKeep);
0126
0127 if isfield(reducedModel,'geneShortNames')
0128 reducedModel.geneShortNames=reducedModel.geneShortNames(toKeep);
0129 end
0130
0131 if isfield(reducedModel,'geneMiriams')
0132 reducedModel.geneMiriams=reducedModel.geneMiriams(toKeep);
0133 end
0134
0135 if isfield(reducedModel,'geneFrom')
0136 reducedModel.geneFrom=reducedModel.geneFrom(toKeep);
0137 end
0138
0139 if isfield(reducedModel,'geneComps')
0140 reducedModel.geneComps=reducedModel.geneComps(toKeep);
0141 end
0142 end
0143 else
0144 reducedModel=model;
0145 end
0146 end