@@ -279,134 +279,141 @@ <h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" sr
2792790177 < span class ="comment "> % Add a new metabolite named prot_standard</ span >
2802800178 proteinStdMets.mets = < span class ="string "> 'prot_standard'</ span > ;
2812810179 proteinStdMets.metNames = proteinStdMets.mets;
282- 0180 proteinStdMets.compartments = < span class ="string " > 'c' </ span > ;
283- 0181 < span class =" keyword " > if </ span > isfield (model, < span class =" string " > 'metNotes' </ span > )
284- 0182 proteinStdMets.metNotes = < span class ="string " > 'Standard enzyme-usage pseudometabolite' </ span > ;
285- 0183 < span class ="keyword "> end </ span >
286- 0184 model = addMets(model, proteinStdMets);
287- 0185
288- 0186 < span class =" comment " > % Add a protein usage reaction if not a light version </ span >
289- 0187 proteinStdUsageRxn.rxns = { < span class =" string " > 'usage_prot_standard' </ span > };
290- 0188 proteinStdUsageRxn.rxnNames = proteinStdUsageRxn.rxns;
291- 0189 proteinStdUsageRxn.mets = { proteinStdMets.mets, < span class ="string "> 'prot_pool '</ span > } ;
292- 0190 proteinStdUsageRxn.stoichCoeffs = [-1, 1];
293- 0191 proteinStdUsageRxn.lb = -1000 ;
294- 0192 proteinStdUsageRxn.ub = 0;
295- 0193 proteinStdUsageRxn.grRules = proteinStdGenes.genes;
296- 0194
297- 0195 model = addRxns(model, proteinStdUsageRxn) ;
298- 0196 < span class ="keyword " > end </ span >
299- 0197 < span class =" comment " > % Update .ec structure in model </ span >
300- 0198 model.ec.genes(end+1) = { < span class =" string " > 'standard' </ span > } ;
301- 0199 model.ec.enzymes(end+1) = { < span class =" string " > 'standard' </ span > } ;
302- 0200 model.ec.mw(end+1) = standardMW ;
303- 0201 model.ec.sequence(end+1) = { < span class =" string " > '' </ span > };
304- 0202 < span class =" comment " > % Additional info </ span >
305- 0203 < span class ="keyword "> if </ span > isfield(model.ec, < span class =" string " > 'concs' </ span > )
306- 0204 model .ec.concs(end+1) = nan();
307- 0205 < span class ="keyword " > end </ span >
308- 0206
309- 0207 < span class =" comment " > % Expand the enzyme rxns matrix </ span >
310- 0208 model.ec.rxnEnzMat = [model.ec.rxnEnzMat, zeros(length(model.ec.rxns), 1)]; < span class ="comment " > % 1 new enzyme </ span >
311- 0209 model.ec.rxnEnzMat = [model.ec.rxnEnzMat; zeros(length(rxnsMissingGPR), length(model.ec.enzymes))]; < span class ="comment "> % new rxns </ span >
312- 0210 < span class ="keyword "> end </ span >
313- 0211 stdMetIdx = find(strcmpi( model.ec.enzymes, < span class =" string " > 'standard' </ span > ) );
314- 0212
315- 0213 < span class =" comment " > % Remove previous standard kcat assignment </ span >
316- 0214 oldStandardEnz = find(strcmp(model.ec.source, < span class ="string " > 'standard' </ span > ));
317- 0215 < span class ="keyword " > if </ span > ~isempty(oldStandardEnz)
318- 0216 oldStandardProt = logical( model.ec.rxnEnzMat(oldStandardEnz,stdMetIdx));
319- 0217 < span class ="comment " > % If annotated with real enzyme => set kcat to zero </ span >
320- 0218 model.ec.kcat(oldStandardEnz(~oldStandardProt)) = 0 ;
321- 0219 model.ec.source(oldStandardEnz(~oldStandardProt)) = { < span class =" string " > '' </ span > };
322- 0220 < span class ="comment "> % If annotated with standard protein => remove entry </ span >
323- 0221 model.ec.rxns(oldStandardEnz(oldStandardProt)) = [] ;
324- 0222 model.ec.kcat (oldStandardEnz(oldStandardProt)) = [];
325- 0223 model.ec.source (oldStandardEnz(oldStandardProt)) = [] ;
326- 0224 model.ec.notes(oldStandardEnz(oldStandardProt)) = [];
327- 0225 model.ec.eccodes (oldStandardEnz(oldStandardProt)) = [] ;
328- 0226 model.ec.rxnEnzMat (oldStandardEnz(oldStandardProt),:) = [] ;
329- 0227 < span class ="keyword " > end </ span >
330- 0228
331- 0229 numRxns = length( model.ec.rxns) ;
332- 0230 < span class =" keyword " > for </ span > i = 1:numel(rxnsMissingGPR)
333- 0231 rxnIdx = rxnsMissingGPR(i) ;
334- 0232
335- 0233 < span class =" comment " > % Update .ec structure in model </ span >
336- 0234 < span class ="keyword "> if </ span > ~model.ec.geckoLight
337- 0235 model.ec.rxns(end+1) = model.rxns(rxnIdx);
338- 0236 < span class =" comment " > % Add prefix in case is light version </ span >
339- 0237 < span class ="keyword "> else </ span >
340- 0238 model.ec.rxns{end+1} = [ < span class =" string " > '001_' </ span > model.rxns{rxnIdx}] ;
341- 0239 < span class =" keyword " > end </ span >
342- 0240
343- 0241 < span class ="keyword "> if</ span > ~standard
344- 0242 kcatSubSystemIdx = strcmpi(enzSubSystem_names, model.subSystems{rxnIdx}(1) );
345- 0243 < span class ="keyword " > if </ span > all(kcatSubSystemIdx)
346- 0244 model.ec.kcat(end+1) = kcatSubSystem(kcatSubSystemIdx);
347- 0245 < span class ="keyword " > else </ span >
348- 0246 model.ec.kcat(end+1) = standardKcat;
349- 0247 < span class =" keyword " > end </ span >
350- 0248 < span class ="keyword "> else </ span >
351- 0249 model.ec.kcat(end+1) = standardKcat ;
352- 0250 < span class ="keyword "> end </ span >
353- 0251
354- 0252 model.ec.source(end+1) = { < span class ="string " > 'standard' </ span > };
355- 0253 model.ec.notes (end+1) = { < span class =" string " > '' </ span > } ;
356- 0254 model.ec.eccodes(end+1) = { < span class ="string " > '' </ span > };
357- 0255
358- 0256 < span class =" comment " > % Update the enzyme rxns matrix </ span >
359- 0257 model.ec.rxnEnzMat(numRxns+i, stdMetIdx) = 1;
360- 0258 < span class =" keyword " > end </ span >
361- 0259 < span class =" comment " > % Get the rxns identifiers of the updated rxns </ span >
362- 0260 rxnsMissingGPR = model.rxns(rxnsMissingGPR) ;
363- 0261
364- 0262 < span class =" keyword " > if </ span > fillZeroKcat
365- 0263 zeroKcat = model.ec.kcat == 0 | isnan(model.ec.kcat);
366- 0264 model.ec.kcat(zeroKcat) = standardKcat ;
367- 0265 model.ec.source(zeroKcat) = { < span class ="string " > 'standard' </ span > };
368- 0266 rxnsNoKcat = model.ec. rxns(zeroKcat);
369- 0267 < span class =" keyword " > else </ span >
370- 0268 rxnsNoKcat = [];
371- 0269 < span class ="keyword "> end </ span >
372- 0270 < span class =" keyword " > end </ span >
373- 0271
374- 0272 < a name =" _sub1 " href =" #_subfunctions " class ="code " > function Cflat = flattenCell(C,strFlag) </ a >
375- 0273 < span class =" comment " > %FLATTENCELL Flatten a nested column cell array into a matrix cell array. </ span >
376- 0274 < span class ="comment " > % </ span >
377- 0275 < span class =" comment " > % CFLAT = FLATTENCELL(C) takes a column cell array in which one or more </ span >
378- 0276 < span class ="comment " > % entries is a nested cell array, and flattens it into a 2D matrix cell </ span >
379- 0277 < span class ="comment " > % array, where the nested entries are spread across new columns. </ span >
380- 0278 < span class =" comment " > % </ span >
381- 0279 < span class ="comment " > % CFLAT = FLATTENCELL (C,STRFLAG) if STRFLAG is TRUE, empty entries in the </ span >
382- 0280 < span class ="comment "> % resulting CFLAT will be replaced with empty strings {''}. Default = FALSE </ span >
383- 0281 < span class ="keyword " > if </ span > nargin < 2
384- 0282 strFlag = false;
385- 0283 < span class ="keyword " > end </ span >
386- 0284
387- 0285 < span class ="comment "> % determine which entries are cells </ span >
388- 0286 cells = cellfun(@iscell,C);
389- 0287
390- 0288 < span class ="comment " > % determine number of elements in each nested cell </ span >
391- 0289 cellsizes = cellfun(@numel,C) ;
392- 0290 cellsizes(~cells) = 1; < span class ="comment " > % ignore non-cell entries </ span >
282+ 0180 < span class ="comment " > % Validate compartment </ span >
283+ 0181 proteinStdMets.compartments = strcmp (model.compNames,params.enzyme_comp);
284+ 0182 < span class ="keyword " > if </ span > ~any(proteinStdMets.compartments)
285+ 0183 error([ < span class ="string " > 'Compartment ' </ span > params.enzyme_comp < span class =" string " > ' (specified in params.enzyme_comp) ' </ span > < span class =" keyword "> ... </ span >
286+ 0184 < span class =" string " > 'cannot be found in model.compNames' </ span > ])
287+ 0185 < span class =" keyword " > end </ span >
288+ 0186 proteinStdMets.compartments = model.comps(compartmentID);
289+ 0187
290+ 0188 < span class =" keyword " > if </ span > isfield(model, < span class =" string " > 'metNotes' </ span > )
291+ 0189 proteinStdMets.metNotes = < span class ="string "> 'Standard enzyme-usage pseudometabolite '</ span > ;
292+ 0190 < span class =" keyword " > end </ span >
293+ 0191 model = addMets(model, proteinStdMets) ;
294+ 0192
295+ 0193 < span class =" comment " > % Add a protein usage reaction if not a light version </ span >
296+ 0194 proteinStdUsageRxn.rxns = { < span class =" string " > 'usage_prot_standard' </ span > };
297+ 0195 proteinStdUsageRxn.rxnNames = proteinStdUsageRxn.rxns ;
298+ 0196 proteinStdUsageRxn.mets = {proteinStdMets.mets, < span class ="string " > 'prot_pool' </ span > };
299+ 0197 proteinStdUsageRxn.stoichCoeffs = [-1, 1];
300+ 0198 proteinStdUsageRxn.lb = -1000 ;
301+ 0199 proteinStdUsageRxn.ub = 0 ;
302+ 0200 proteinStdUsageRxn.grRules = proteinStdGenes.genes ;
303+ 0201
304+ 0202 model = addRxns(model, proteinStdUsageRxn);
305+ 0203 < span class ="keyword "> end </ span >
306+ 0204 < span class =" comment " > % Update .ec structure in model </ span >
307+ 0205 model.ec.genes(end+1) = { < span class ="string " > 'standard' </ span > };
308+ 0206 model.ec.enzymes(end+1) = { < span class =" string " > 'standard' </ span > };
309+ 0207 model.ec.mw(end+1) = standardMW;
310+ 0208 model.ec.sequence(end+1) = { < span class ="string " > '' </ span > };
311+ 0209 < span class ="comment "> % Additional info </ span >
312+ 0210 < span class ="keyword "> if </ span > isfield(model.ec, < span class =" string " > 'concs' </ span > )
313+ 0211 model.ec.concs(end+1) = nan( );
314+ 0212 < span class =" keyword " > end </ span >
315+ 0213
316+ 0214 < span class ="comment " > % Expand the enzyme rxns matrix </ span >
317+ 0215 model.ec.rxnEnzMat = [model.ec.rxnEnzMat, zeros(length(model.ec.rxns), 1)]; < span class ="comment " > % 1 new enzyme </ span >
318+ 0216 model.ec.rxnEnzMat = [ model.ec.rxnEnzMat; zeros(length(rxnsMissingGPR), length(model.ec.enzymes))]; < span class =" comment " > % new rxns </ span >
319+ 0217 < span class ="keyword " > end </ span >
320+ 0218 stdMetIdx = find(strcmpi( model.ec.enzymes, < span class =" string " > 'standard' </ span > )) ;
321+ 0219
322+ 0220 < span class ="comment "> % Remove previous standard kcat assignment </ span >
323+ 0221 oldStandardEnz = find(strcmp( model.ec.source, < span class =" string " > 'standard' </ span > )) ;
324+ 0222 < span class =" keyword " > if </ span > ~isempty (oldStandardEnz)
325+ 0223 oldStandardProt = logical( model.ec.rxnEnzMat (oldStandardEnz,stdMetIdx)) ;
326+ 0224 < span class =" comment " > % If annotated with real enzyme => set kcat to zero </ span >
327+ 0225 model.ec.kcat (oldStandardEnz(~ oldStandardProt)) = 0 ;
328+ 0226 model.ec.source (oldStandardEnz(~ oldStandardProt)) = { < span class =" string " > '' </ span > } ;
329+ 0227 < span class ="comment " > % If annotated with standard protein => remove entry </ span >
330+ 0228 model.ec.rxns(oldStandardEnz(oldStandardProt)) = [];
331+ 0229 model.ec.kcat(oldStandardEnz(oldStandardProt)) = [] ;
332+ 0230 model.ec.source(oldStandardEnz(oldStandardProt)) = [];
333+ 0231 model.ec.notes(oldStandardEnz(oldStandardProt)) = [] ;
334+ 0232 model.ec.eccodes(oldStandardEnz(oldStandardProt)) = [];
335+ 0233 model .ec.rxnEnzMat(oldStandardEnz(oldStandardProt),:) = [];
336+ 0234 < span class ="keyword "> end </ span >
337+ 0235
338+ 0236 numRxns = length(model.ec.rxns);
339+ 0237 < span class ="keyword "> for </ span > i = 1:numel(rxnsMissingGPR)
340+ 0238 rxnIdx = rxnsMissingGPR(i) ;
341+ 0239
342+ 0240 < span class =" comment " > % Update .ec structure in model </ span >
343+ 0241 < span class ="keyword "> if</ span > ~model.ec.geckoLight
344+ 0242 model.ec.rxns(end+1) = model.rxns(rxnIdx );
345+ 0243 < span class ="comment " > % Add prefix in case is light version </ span >
346+ 0244 < span class =" keyword " > else </ span >
347+ 0245 model.ec.rxns{end+1} = [ < span class ="string " > '001_' </ span > model.rxns{rxnIdx}];
348+ 0246 < span class =" keyword " > end </ span >
349+ 0247
350+ 0248 < span class ="keyword "> if </ span > ~standard
351+ 0249 kcatSubSystemIdx = strcmpi(enzSubSystem_names, model.subSystems{rxnIdx}(1)) ;
352+ 0250 < span class ="keyword "> if </ span > all(kcatSubSystemIdx)
353+ 0251 model.ec.kcat(end+1) = kcatSubSystem(kcatSubSystemIdx);
354+ 0252 < span class ="keyword " > else </ span >
355+ 0253 model.ec.kcat (end+1) = standardKcat ;
356+ 0254 < span class ="keyword " > end </ span >
357+ 0255 < span class =" keyword " > else </ span >
358+ 0256 model.ec.kcat(end+1) = standardKcat;
359+ 0257 < span class =" keyword " > end </ span >
360+ 0258
361+ 0259 model.ec.source(end+1) = { < span class =" string " > 'standard' </ span > };
362+ 0260 model.ec.notes(end+1) = { < span class =" string " > '' </ span > } ;
363+ 0261 model.ec.eccodes(end+1) = { < span class =" string " > '' </ span > };
364+ 0262
365+ 0263 < span class =" comment " > % Update the enzyme rxns matrix </ span >
366+ 0264 model.ec.rxnEnzMat(numRxns+i, stdMetIdx) = 1 ;
367+ 0265 < span class ="keyword " > end </ span >
368+ 0266 < span class =" comment " > % Get the rxns identifiers of the updated rxns</ span >
369+ 0267 rxnsMissingGPR = model.rxns(rxnsMissingGPR);
370+ 0268
371+ 0269 < span class ="keyword "> if </ span > fillZeroKcat
372+ 0270 zeroKcat = model.ec.kcat == 0 | isnan(model.ec.kcat);
373+ 0271 model.ec.kcat(zeroKcat) = standardKcat;
374+ 0272 model.ec.source(zeroKcat) = { < span class ="string " > 'standard' </ span > };
375+ 0273 rxnsNoKcat = model.ec.rxns(zeroKcat);
376+ 0274 < span class ="keyword " > else </ span >
377+ 0275 rxnsNoKcat = [];
378+ 0276 < span class ="keyword " > end </ span >
379+ 0277 < span class ="keyword " > end </ span >
380+ 0278
381+ 0279 < a name =" _sub1 " href =" #_subfunctions " class ="code " > function Cflat = flattenCell (C,strFlag) </ a >
382+ 0280 < span class ="comment "> %FLATTENCELL Flatten a nested column cell array into a matrix cell array. </ span >
383+ 0281 < span class ="comment " > % </ span >
384+ 0282 < span class =" comment " > % CFLAT = FLATTENCELL(C) takes a column cell array in which one or more </ span >
385+ 0283 < span class ="comment " > % entries is a nested cell array, and flattens it into a 2D matrix cell </ span >
386+ 0284 < span class =" comment " > % array, where the nested entries are spread across new columns. </ span >
387+ 0285 < span class ="comment "> %</ span >
388+ 0286 < span class =" comment " > % CFLAT = FLATTENCELL(C,STRFLAG) if STRFLAG is TRUE, empty entries in the </ span >
389+ 0287 < span class =" comment " > % resulting CFLAT will be replaced with empty strings {''}. Default = FALSE </ span >
390+ 0288 < span class ="keyword " > if </ span > nargin < 2
391+ 0289 strFlag = false ;
392+ 0290 < span class ="keyword " > end </ span >
3933930291
394- 0292 < span class ="comment "> % flatten single-entry cells</ span >
395- 0293 Cflat = C ;
396- 0294 Cflat(cells & (cellsizes == 1)) = cellfun(@(x) x{1},Cflat(cells & (cellsizes == 1)), < span class =" string " > 'UniformOutput' </ span > ,false);
397- 0295
398- 0296 < span class =" comment " > % iterate through multi-entry cells </ span >
399- 0297 multiCells = find(cellsizes > 1);
400- 0298 < span class =" keyword " > for </ span > i = 1:length(multiCells)
401- 0299 cellContents = Cflat{multiCells(i)};
402- 0300 Cflat(multiCells(i),1:length(cellContents)) = cellContents ;
403- 0301 < span class ="keyword " > end </ span >
394+ 0292 < span class ="comment "> % determine which entries are cells</ span >
395+ 0293 cells = cellfun(@iscell,C) ;
396+ 0294
397+ 0295 < span class =" comment " > % determine number of elements in each nested cell </ span >
398+ 0296 cellsizes = cellfun(@numel,C);
399+ 0297 cellsizes(~cells) = 1; < span class =" comment " > % ignore non-cell entries </ span >
400+ 0298
401+ 0299 < span class =" comment " > % flatten single-entry cells </ span >
402+ 0300 Cflat = C ;
403+ 0301 Cflat(cells & (cellsizes == 1)) = cellfun(@(x) x{1},Cflat(cells & (cellsizes == 1)), < span class ="string " > 'UniformOutput' </ span > ,false);
4044040302
405- 0303 < span class ="comment "> % change empty elements to strings, if specified</ span >
406- 0304 < span class ="keyword "> if</ span > ( strFlag )
407- 0305 Cflat(cellfun(@isempty,Cflat)) = {< span class ="string "> ''</ span > };
408- 0306 < span class ="keyword "> end</ span >
409- 0307 < span class ="keyword "> end</ span > </ pre > </ div >
405+ 0303 < span class ="comment "> % iterate through multi-entry cells</ span >
406+ 0304 multiCells = find(cellsizes > 1);
407+ 0305 < span class ="keyword "> for</ span > i = 1:length(multiCells)
408+ 0306 cellContents = Cflat{multiCells(i)};
409+ 0307 Cflat(multiCells(i),1:length(cellContents)) = cellContents;
410+ 0308 < span class ="keyword "> end</ span >
411+ 0309
412+ 0310 < span class ="comment "> % change empty elements to strings, if specified</ span >
413+ 0311 < span class ="keyword "> if</ span > ( strFlag )
414+ 0312 Cflat(cellfun(@isempty,Cflat)) = {< span class ="string "> ''</ span > };
415+ 0313 < span class ="keyword "> end</ span >
416+ 0314 < span class ="keyword "> end</ span > </ pre > </ div >
410417< hr > < address > Generated by < strong > < a href ="http://www.artefact.tk/software/matlab/m2html/ " title ="Matlab Documentation in HTML "> m2html</ a > </ strong > © 2005</ address >
411418</ body >
412419</ html >
0 commit comments