Metabolic visualisation of Recon3Map with Minerva

Authors: Ines Thiele*, Ronan M.T. Fleming*#, Alberto Noronha$,

Affiliations: *National University of Ireland, Galway; *#Leiden University; $University of Luxembourg.



The visualisation of metabolic pathways is an essential tool to understand the biological meaning underlying COBRA metabolic models. This would allow the user to visualise what can not be appreciated at first sight by directly looking to the model outputs. Here we present a visualisation through Recon3Map [1] a visualisation of human metabolism, derived from Recon3 [2], using the Minerva platform [3]. Other human models and maps can be found at the Virtual Metabolic Human [4] website:


In order to access remotely to Recon3Map, the user has to be registered. To obtain your credentials, you must access the ADMIN area and request an account. To access ReconMap follow the link: .
Then, use your credentials to remotely access to
minerva.minervaURL = ''; = 'ReconMap-3';
if 1
%minerva.login = 'user_name';
%minerva.password = 'user_password';
minerva.login = 'cobratoolbox-test';
minerva.password = 'test';
minerva.login = 'ronan.fleming';
minerva.password = 'ronan.fleming1';
%minerva.login = 'cobratoolbox-test';
%minerva.password = 'test';
minerva.googleLicenseConsent = 'true';
Initialise the Cobra Toolbox.
A specific solver might be required (depending on the analysis you want to realise in the COBRA model).
> changeCobraSolver: IBM ILOG CPLEX interface added to MATLAB path.
changeCobraSolver('ibm_cplex', 'LP');
> changeCobraSolver: IBM ILOG CPLEX interface added to MATLAB path.
Load your generic metabolic model. Recon's most recent version "Recon2.04" can be freely downloaded from
model = load('Recon3DModel_301.mat')
model = struct with fields: model: [1×1 struct]
if isfield(model,'model')


1. Overlay a flux distribution
As an example of layout, we would like to see the the fluxes when maximizing ATP production through complex V (ATP synthase) in the Electron Transport Chain. To do so, we use Flux Balance Analysis (FBA) and set as an objective function the reaction responsible of this process ('ATPS4m').
ChangeObjective function, changes the objective function of a constraint-based model
optimizeCbModel function solves a flux balance analysis problem.
formula = printRxnFormula(model, 'ATPS4mi')
ATPS4mi adp[m] + pi[m] + 4 h[i] -> h2o[m] + 3 h[m] + atp[m]
formula = 1×1 cell array {'adp[m] + pi[m] + 4 h[i] -> h2o[m] + 3 h[m] + atp[m] '}
model_atp_production = model % re-name the model to do not modify the original one.
model_atp_production = struct with fields:
S: [5835×10600 double] mets: {5835×1 cell} b: [5835×1 double] csense: [5835×1 char] rxns: {10600×1 cell} lb: [10600×1 double] ub: [10600×1 double] c: [10600×1 double] osense: -1 genes: {2248×1 cell} rules: {10600×1 cell} metCharges: [5835×1 int64] metFormulas: {5835×1 cell} metSmiles: {5835×1 cell} metNames: {5835×1 cell} metHMDBID: {5835×1 cell} metInChIString: {5835×1 cell} metKEGGID: {5835×1 cell} metPubChemID: {5835×1 cell} description: 'Recon3DModel.mat' grRules: {10600×1 cell} rxnGeneMat: [10600×2248 double] rxnConfidenceScores: [10600×1 double] rxnNames: {10600×1 cell} rxnNotes: {10600×1 cell} rxnECNumbers: {10600×1 cell} rxnReferences: {10600×1 cell} rxnKEGGID: {10600×1 cell} subSystems: {10600×1 cell} metCHEBIID: {5835×1 cell} metPdMap: {5835×1 cell} metReconMap: {5835×1 cell} modelID: 'Recon3DModel' rxnCOG: {10600×1 cell} rxnKeggOrthology: {10600×1 cell} rxnReconMap: {10600×1 cell} version: 'Recon3D_01' PleaseCite: 'Brunk et al, Nat Biotech, 2018; doi:10.1038/nbt.4072'
model_atp_production = changeObjective(model_atp_production, 'ATPS4mi');
Regularised flux balance analysis
solution_atp_prod_max_regularised = optimizeCbModel(model_atp_production, 'max',1e-6);
Sparse flux balance anaysis
solution_atp_prod_max_sparse = optimizeCbModel(model_atp_production, 'max','zero');
This reaction, (S)-2-Methylbutanoyl Coenzyme A:Acceptor 2, 3-Oxidoreductase Valine, Leucine And Isoleucine Degradation ('r0603') is expressed in the regularised flux balance analysis solution, but not in the sparse flux balance analysis solution.
formula = printRxnFormula(model, 'r0603');
r0603 2mbcoa[m] + q10[m] -> 2mb2coa[m] + q10h2[m]
ans = 10600
ans = 2.3688
ans = 41
ans = 0


The buildFluxDistLayout function creates a layout that is automatically sent to the ReconMap website. After this, you can visualise your layout in Use your credentials to log in as it is previously explained. Select your input map (minerva.model) and go to "overlays" section to find your layout.
serverResponse = buildFluxDistLayout(minerva, model, solution_atp_prod_max_sparse, 'atp_prod_max_sparse_2020','#6617B5')
Overlay generated successfully.
serverResponse = 'Overlay generated successfully.'
% why does this does not work at present?
% perhaps because the size of the curl post is too large?
if 0
serverResponse = buildFluxDistLayout(minerva, model, solution_atp_prod_max_regularised, 'atp_prod_max_2020','#6617B5')
If everything is correctly defined you should get a structure with 2 values. If everything works fine, the output of this function should be:
[1] 'Overlay generated successfully.'
If there is any error, the message obtained will display:
[0] 'Overlay NOT generated successfully.'
Note: If the "layout name" selected has been already given, an error might appear. Please, try to give a new layout name each time you run the code.
[0] 'ERROR. Layout with given identifier ("atp_productio…'
2. Overlay a SubSystem
There is also the possibility to highlight a specific subSystems by using the function generateSubsytemsLayout. A subSystem is a group of metabolic reactions involved in the same metabolic pathway, such as glycolysis, Oxidative phosphorylation, citric acid cycle, etc. Add the name of a specific subSystem you want to highlight from the COBRA model (see the example, TCA cycle), and the color reference.
generateSubsytemsLayout(minerva, model, 'Citric acid cycle', '#6617B5');
Overlay generated successfully.