|
227 | 227 | nOldRxns=numel(model.rxns); |
228 | 228 | filler=cell(nRxns,1); |
229 | 229 | filler(:)={''}; |
230 | | -cellfiller=cellfun(@(x) cell(0,0),filler,'UniformOutput',false); |
| 230 | +cellfiller=cell(nRxns,1); |
| 231 | +cellfiller(:)={{''}}; |
231 | 232 | largeFiller=cell(nOldRxns,1); |
232 | 233 | largeFiller(:)={''}; |
233 | | -celllargefiller=cellfun(@(x) cell(0,0),largeFiller,'UniformOutput',false); |
| 234 | +largeCellFiller=cell(nOldRxns,1); |
| 235 | +largeCellFiller(:)={{''}}; |
234 | 236 |
|
235 | 237 | %***Add everything to the model except for the equations. |
236 | 238 | if numel(rxnsToAdd.equations)~=nRxns |
|
350 | 352 | end |
351 | 353 |
|
352 | 354 | if isfield(rxnsToAdd,'subSystems') |
353 | | - if numel(rxnsToAdd.subSystems)~=nRxns |
354 | | - EM='rxnsToAdd.subSystems must have the same number of elements as rxnsToAdd.rxns'; |
355 | | - dispEM(EM); |
| 355 | + % Has to be cell array |
| 356 | + if ischar(rxnsToAdd.subSystems) |
| 357 | + rxnsToAdd.subSystems = {rxnsToAdd.subSystems}; |
| 358 | + end |
| 359 | + % If all nested cells are 1x1, then unnest |
| 360 | + if all(cellfun(@(x) iscell(x) && isscalar(x), rxnsToAdd.subSystems)) |
| 361 | + rxnsToAdd.subSystems = transpose([rxnsToAdd.subSystems{:}]); |
356 | 362 | end |
357 | | - for i=1:numel(rxnsToAdd.subSystems) |
358 | | - if ischar(rxnsToAdd.subSystems{i}) |
359 | | - rxnsToAdd.subSystems{i}=rxnsToAdd.subSystems(i); |
| 363 | + % Cell array should now be as simple as possible. Check if it is nested |
| 364 | + subSysRxnsNested = any(cellfun(@(x) iscell(x), rxnsToAdd.subSystems)); |
| 365 | + if isfield(newModel,'subSystems') |
| 366 | + subSysModelNested = any(cellfun(@(x) iscell(x), newModel.subSystems)); |
| 367 | + else |
| 368 | + subSysModelNested = subSysRxnsNested; |
| 369 | + if subSysRxnsNested |
| 370 | + newModel.subSystems=largeCellFiller; |
| 371 | + else |
| 372 | + newModel.subSystems=largeFiller; |
360 | 373 | end |
361 | 374 | end |
362 | | - %Fill with standard if it doesn't exist |
363 | | - if ~isfield(newModel,'subSystems') |
364 | | - newModel.subSystems=celllargefiller; |
| 375 | + if subSysRxnsNested && ~subSysModelNested |
| 376 | + % Make all existing subSystems nested |
| 377 | + newModel.subSystems = cellfun(@(x) {x}, newModel.subSystems, 'uni', 0); |
| 378 | + elseif ~subSysRxnsNested && subSysModelNested |
| 379 | + rxnsToAdd.subSystems = cellfun(@(x) {x}, rxnsToAdd.subSystems, 'uni', 0); |
| 380 | + end |
| 381 | + if numel(rxnsToAdd.subSystems)~=nRxns |
| 382 | + EM='rxnsToAdd.subSystems must have the same number of elements as rxnsToAdd.rxns'; |
| 383 | + dispEM(EM); |
365 | 384 | end |
366 | 385 | newModel.subSystems=[newModel.subSystems;rxnsToAdd.subSystems(:)]; |
367 | 386 | else |
368 | | - %Fill with standard if it doesn't exist |
| 387 | + %Fill with standard if it does not exist |
369 | 388 | if isfield(newModel,'subSystems') |
370 | | - newModel.subSystems=[newModel.subSystems;cellfiller]; |
| 389 | + if any(cellfun(@(x) iscell(x), newModel.subSystems)) |
| 390 | + newModel.subSystems=[newModel.subSystems;cellfiller]; |
| 391 | + else |
| 392 | + newModel.subSystems=[newModel.subSystems;filler]; |
| 393 | + end |
371 | 394 | end |
372 | 395 | end |
373 | 396 | if isfield(rxnsToAdd,'rxnMiriams') |
|
0 commit comments