Team:UPO-Sevilla/Software

The work here presented is part of the Universidad Pablo de Olavide Project for iGEM 2016 competition. It is intended to provide mathematical and computational support to the laboratory work carried out by this team.

Methabolic pathway modeling software

One of the focuses of this in silico approach has been to model the enzymatic pathways in which the project is based. Particularly, glycerol uptake and metabolism by recombinant Pseudomonas putida have been studied.

For this purpose, a computer software has been developed in collaboration with Barcelona iGEM team, to model biochemical routes using Michaelis-Menten kinetics. In that team's version of the software, a user can assess metabolite concentrations over time for a specific biochemical network. For this, the user can set the input parameters and check the results using a graphic interface. This makes very simple this type of simulations even for non programmers.

In our version of the program, the software employs text files as input, and produces text files as output. Therefore, the program is not as intuitive as the other version, but has the advantage that the process can be automatized and used more efficiently. In summary, this program is more intended for advanced users and developers.

The computer code has been created in the C programming language. The code is freely available (see annex I).

The software may be used not only for glycerol-related enzymatic reactions, but virtually for any sequence of enzymatic reactions in a specific order. Furthermore, the reactions in the pathway need not to be consecutive (figure 1), they may also be branched or circular (figure 2).

Example 1. Consecutive set of reactions.

Example 2. Circular set of reactions.

The program receives the files “input_compuestos.txt”, “input_reacciones.txt” and “input_parametros.txt” as input, and generates two files (“output1.txt” and “output2.txt”) as output.

In “input_compuestos.txt” each row represents a compound int the pathway. In every row, the first column consists of an identification number of the metabolite and the second column depicts that metabolite's initial concentration.

In “input_reacciones.txt” each row contains the information related to each reaction in the route. The first column contains an number identification of the reaction. The second and third columns show the reaction's substrate and product number identifications according to how they are identified in the input_compuestos.txt file.. For example, if the route is the following:

And the metabolites are identified as: A = 1, B = 2, C = 3, D = 4, E = 5, and the reactions as:

A → B = 1;

B → E = 2;

B → C = 3;

C → 3 = 4;

D → A = 5;

Then, the first three columns of the input_reacciones.txt file would correspond to:

1 1 2

2 2 5

3 2 3

4 3 4

5 4 1

The fourth column in “input_reacciones.txt” depicts the Michaelis constant for the reaction. Finally, the product of the fifth and sixth columns corresponds to the maximum velocity of the reaction. As seen later, this product allows for rapid identification of bottlenecks in the pathway by representing the maximum velocity in one of the factors and altering the value of the other. In this way, it is simple to assess whether varying the product of the maximum velocity by the other factor affects the yield of the route.

The file “input_parameters.txt” contains only two pieces of information. The first one is the differential of time at which each cycle of calculations is performed. The second one is the total process time.

The first of the output files (“output1.txt”) contains the metabolite concentrations over time. The display order corresponds to that followed when indentifying the metabolites in “input_compuestos.txt”.

The other output file (“output2.txt”) represents the mass differential for each metabolite at every instant.

Application of the methabolic pathway software to our project

One of the main focuses in the project is to generate...

... can be divided into three parts:

  1. From Glycerol to Dihydroxyacetone-P (Figure1).
  2. From Dyhydroxyacetone-P (DHAP) to Succinyl-CoA. In this set of reactions (from DHAP to Succinyl-CoA) central metabolic pathways are involved.
  3. From Succinyl-CoA to Propoanoate (Figure 2).

Figure 1. First set of reactions; from extracellular glycerol to Dihydroxyacetone-P (DHAP).

Genes of the related species Pseudomonas aeruginosa were used to transform P. putida's and increase its ability to metabolize glycerol and produce propanoate. Table 1 shows the kinetic properties of the different enyzmes:

Km (P. putida) Vmax (P. putida) Reference Km (P. aeruginosa) Vmax (P. aeruginosa) Reference
Extracellular glycerol --> Intracellular Glycerol - 0.235 Nikel et al (2014). 13 0.2933 Siegel & Phibbs (1979)
Glycerol --> G3P - 11.6 Comparing specific activities shown in Nikel et al (2014) Figure 5 and McCowen et al (1981) Table 2. 40 6160 McCowen et al (1987)
Glycerol-3P --> DHAP - 15 Comparing specific activities shown in Nikel et al (2014) Figure 5 and McCowen et al (1981) Table 2. 1660 7240 McCowen et al (1981)

Table 1. Kinetic parameters. Concentration unit: micromolar; time unit: seconds.

The simulation results of the first set of metabolic reactions demonstrate that the glycerol uptake step constitutes a major bottleneck (Figure 3 and Figure 4). Specifically, it would be necessary to overexpress ~23,000 times the glycerol-uptake-related proteins in order to overcome this bottleneck (Figure 5), which is not really viable.

Figure 3. Existence of a bottleneck. Increase in glycerol concentration in the medium does not correspond with increase in DHAP production by the bacteria.

Figure 4. The first step (glycerol uptake) is responsible for the bottleneck, as doubling the concentration of its related proteins also doubles DHAP production.

Figure 5. Glycerol uptake overexpression and DHAP production. Only with a high level of overexpression DHAP production does not depend on glycerol uptake.

A second putative bottleneck was identified in the event that the glycerol uptake step could be avoided by any other means. In this way, the conversion of Glycerol into Glycerol-3-P becomes the new bottleneck, although this time 10-fold glicerol kinase overexpression eliminates the barrier (Figure 6).

Figure 6. Second bottle neck. The light blue curves depicts DHAP production when avoiding the first bottleneck. The dark blue curve depicts DHAP production when in addition to eliminating the first bottleneck the second enzymatic step is overexpressed 10, 100 or 1000 times.

In our project, Pseudomonas putida is engineered to become a versatile biofilm forming microorganism capable of degrading glycerol. This is in turn a platform for the production of multiple kinds of metabolite of interest. Here we analyze a putative set of reactions for the production of propoanoate, employing the same software as that used for the analysis of glycerol assimilation. The biochemical reactions implied in the production of propanoate are depicted in Figure 7.

Figure 7. Reactions from Succinyl-CoA to Propanoate.

As far as this set of reactions is concerned, simulations were also performed. As Figure 8 indicates, the third step is responsible for a minor bottleneck, being necessary to overexpress only 5 times the particular enzyme (propionyl-CoA carboxilase) to suppress it. Table 2 shows the enzymatic kinetic parameters employed.

Table 2. Kinetic parameters of reactions from Succinyl-CoA to Propanoate.

Figure 8. Simulation of reactions from Succinyl-CoA to Propanoate.

Annex I. Biochemical network metabolite concentration analysis source code

#include

#include

#include

#define SIZECOMPUESTOS 30/*maximum number of metabolites in the biochemical network*/

#define SIZEREACCIONES 30/*maximum number of reactions in the biochemical network*/

int lectura_compuestos(double a[][SIZECOMPUESTOS])

{

int i=0;

FILE *g;

g=fopen("input_compuestos.txt","rt");

if(g==NULL)

{

printf("\n\nError al abrir el fichero con la información de compuestos.\n\n");

}

while(fscanf(g,"%lf %lf",&a[i][j],&a[i][j+1])!=EOF)

{

i++;

a[i][2]=0;

}

fclose(g);

return(i);

}

int lectura_reacciones(double b[][SIZEREACCIONES])

{

int i=0;

int j=0;

FILE *h;

h=fopen("input_reacciones.txt","rt");

if(h==NULL)

{

printf("\n\nError al abrir el fichero con la información de reacciones.\n\n");

}

while(fscanf(h,"%lf %lf %lf %lf %lf %lf",&b[i][j],&b[i][j+1],&b[i][j+2],&b[i][j+3],&b[i][j+4],&b[i][j+5])!=EOF)

{

i++;

b[i][j+6]=0;

}

fclose(h);

return (i);

}

int lectura_parametros(double c[][SIZEREACCIONES])

{

FILE *m;

m=fopen("input_parametros.txt","rt");

if(m==NULL)

{

printf("\n\nError al abrir el fichero con la información de parámetros.\n\n");

}

while(fscanf(m,"%lf %lf %lf",&c[0][0],&c[0][1],&c[0][2])!=EOF)

{

}

fclose(m);

}

double michaelis(double conc_sustrato,double km,double k2, double e0)

{

double var;

var=(k2*conc_sustrato*e0/(conc_sustrato+km));

return(var);

}

int main()

{

double tiempo=0;

double almacen;

int i;

int j;

double contador_impresion;

int bandera=0;

double sustrato[2];

double producto[2];

int numcompuest;

int numreacc;

FILE *m;

FILE *n;

m=fopen("output1.txt","at");

if(m==NULL)

{

printf("\n\nError al abrir el fichero de output 1.\n\n");

}

n=fopen("output2.txt","at");

if(n==NULL)

{

printf("Error output2");

}

double compuestos[SIZECOMPUESTOS][SIZECOMPUESTOS];

double reacciones[SIZEREACCIONES][SIZEREACCIONES];

double PARAMETROS[SIZEREACCIONES][SIZEREACCIONES];

contador_impresion=PARAMETROS[0][2];

numcompuest=lectura_compuestos(compuestos);

numreacc=lectura_reacciones(reacciones);

lectura_parametros(PARAMETROS);

while(tiempo<=PARAMETROS[0][1])

{

if(contador_impresion

{

contador_impresion=contador_impresion+1;

}else

{

fprintf(m,"%lf\t",tiempo);

for(i=0;i

{

fprintf(m,"%lf ",compuestos[i][1]);

}

fprintf(m,"\n");

fprintf(n,"%lf\t",tiempo);

for(i=0;i

{

fprintf(n,"%lf ",compuestos[i][2]);

}

fprintf(n,"\n");

contador_impresion=1;

for(i=0,j=0;i

{

sustrato[0]=reacciones[i][1];

producto[0]=reacciones[i][2];

while(bandera==0)

{

if(sustrato[0]==compuestos[j][0])

{

sustrato[1]=compuestos[j][1];

bandera=1;

j=0;

}else{

j++;

}

}

while(bandera==1)

{

if(producto[0]==compuestos[j][0])

{

producto[1]=compuestos[j][1];

bandera=0;

j=0;

}else{

j++;

}

}

reacciones[i][6]=michaelis(sustrato[1],reacciones[i][3],reacciones[i][4],reacciones[i][5]);

}

for(i=0;i

{

compuestos[i][2]=0;

almacen=compuestos[0][1];

for(j=0;j

{

if((compuestos[i][0]==reacciones[j][1]))

{

compuestos[i][1]=compuestos[i][1]-reacciones[j][6]*PARAMETROS[0][0];

compuestos[i][2]=compuestos[i][2]-reacciones[j][6];

}

if((compuestos[i][0]==reacciones[j][2]))

{

compuestos[i][1]=compuestos[i][1]+reacciones[j][6]*PARAMETROS[0][0];

compuestos[i][2]=compuestos[i][2]+reacciones[j][6];

}

}

if(i==0)

{

compuestos[i][1]=almacen;

}

if(compuestos[i][1]<0)

{

compuestos[i][1]=0;

}

}

tiempo=tiempo+PARAMETROS[0][0];

fclose(m);

fclose(n);

return 0;

}

References

Nikel, Kim, De Lorenzo. Metabolic and regulatory rearrangements underlying glycerol metabolism in Pseudomonas putida KT2440. 2014. Enviromental Microbiology. 16(1): 239-254.

Siegel & Phibbs. Glycerol and L-α-Glycerol-3-Phosphate Uptake by Pseudomonas aeruginosa. 1979. Current Microbiology. 2:251-256.

McCowen, Sellers, Phibbs. Characterization of Fructose-1,6-diphosphate-insensitive Catabolic Glycerol Kinase of Pseudomonas aeruginosa. 1987. Current Microbiology. 14:323-327.

McCowen, Phibbs, Feary. Glycerol Catabolism in Wild-Type and Mutant Strains of Pseudomonas aeruginosa. 1981. Current Microbiology. 5: 191-196.