# FTBL format evolution

Even if FTBL is no more a front-end format for `influx_si` software (it was replaced by MTF to this end), we consider useful to keep track of its evolution during `influx_si` development.

## Introduction

FTBL format was conceived by authors of `13CFlux` software in late 1990’s (cf. https://www.13cflux.net/). At the beginning of 2000’s, `13CFlux` became well spread in scientific community working on metabolism and isotope labeling. When we published the first version of `influx_s` in 2011, we adopted FTBL format to avoid cumbersome rewriting of networks and data already in use by the community. Second version of 13CFlux, published in 2012, abandoned FTBL format which was replaced by FluxML (XML) and was accompanied by a tool for automatic conversion of FTBL to FluxML.

On our side, we decided to continue to use FTBL by extending and evolving some of its features till its replacement by MTF (starting from v6.0). These extensions and evolution are presented hereafter for keeping tracks only. This chapter is not necessary for reading to successfully use `influx_si` software. Version number in titles indicates when described feature was first introduced to `influx_si`.

### `METABOLITE_POOLS` and `METAB_MEASUREMENTS` (v2.0)

Sections `METABOLITE_POOLS` and `METAB_MEASUREMENTS` concerning metabolite pools were added. These sections can be useful for stationary labeling when growth fluxes are modeled with \(\mu M\) terms (cf. Growth flux option) or when some metabolites are confounded in measurements due to cell compartmentation of co-elution during HPLC step or whatever reason. These sections become mandatory for `influx_i` usage for instationary labeling as not only fluxes but also metabolite concentrations impact label propagation dynamics.

`METABOLITE_POOLS` is structured in two columns named `META_NAME` and `META_SIZE` and as ussual for FTBL indented and separated by tabulations, e.g.

    METABOLITE_POOLS
            META_NAME       META_SIZE
            AKG     -0.5
            ...

Note

The value `-0.5` is not aligned with its column name `META_SIZE` because by default, tab characters are expanded to 8 spaces. As `META_NAME` occupies 9 spaces, `META_SIZE` is just shifted to the next tab position. User has to use only one tab character to separate columns even if they don’t look aligned on his screen.

For `influx_i`, every internal metabolite (i.e. metabolites present in `NETWORK` section and not being input or output metabolites) and participating in carbon exchange must be referenced in this section. The value given in the column `META_SIZE` is a metabolite concentration. The unit used for these values must be in accordance with the units used for fluxes. For example, if metabolite concentrations are measured in mM/g then fluxes are supposed to be measured in mM/(g*[time_unit]). If the value is positive then corresponding metabolite is considered as having constant concentration which does not vary during fitting iterations. If the value is negative, then this metabolite concentration will be part of fitted variables and its absolute value is used as a starting value for these iterations. A final fitted value will be expressed as a positive number.

For `influx_s`, this section is optional and only few (not all) internal metabolites can be present in this section.

`METAB_MEASUREMENTS` section regroups measurements of internal metabolite concentrations. Input and output metabolites may have concentrations varying during an experiment as they are consumed or produced. So they cannot appear in this section. `METAB_MEASUREMENTS` section has 3 columns: `META_NAME`, `VALUE` and `DEVIATION`, e.g.

    METAB_MEASUREMENTS
            META_NAME       VALUE   DEVIATION
            Fru6P   0.43    0.01
            ...

Column names are self explanatory.

In case of confounded measurements, confounded metabolites can be given as a sum, e.g.

    METAB_MEASUREMENTS
            META_NAME       VALUE   DEVIATION
            R5P_c+R5P_m     0.32    0.01
            ...

In this case, the value `0.32` will be fitted by a sum of simulated metabolite concentrations.

### Long reactions (v4.0)

Initially, FTBL admitted no more than 2 metabolites on each side of reactions put in `NETWORK` section. We had to overcome this limit to facilitate FTBL creation for studies including reactions much longer than that. Now, chemical reaction having more than two metabolites on any side can be split in several sub-reactions, each of which has no more then 2 metabolites on every side. It is important that all sub-reactions be put together one after another and that they have the same name. Based on this name, `influx_si` will assemble all parts in one reaction. E.g. a reaction named `Val_syn`

    Val_syn: Pyr (abc) + Pyr (def) + Glu (ghijk) + NADPH -> Val (abcef) + CO2 (d) + AKG (ghijk)

can be translated into FTBL format as

    NETWORK
           FLUX_NAME       EDUCT_1 EDUCT_2 PRODUCT_1       PRODUCT_2
           Val_syn Pyr     Pyr     Val     CO2
                   #abc    #def    #abcef  #d
           Val_syn Glu     NADPH   AKG
                   #ghijk  #       #ghijk

If some reactions have the same name but not placed sequentially one after another, it will be signaled as an error.

### Cofactors (v4.0)

Here, we call cofactors metabolites that does not participate in carbon transfer from one or several molecules to another. The main interest of entering cofactors in carbon transferring reactions is additional balance equations that we can put in stoechiometric system. Thus the number of free fluxes is diminished and fluxes are constrained to more realistic values, not violating cofactor balances.

To indicate that a metabolite is a cofactor, user can simply put an empty carbon string in the corresponding carbon transferring line. For example, a reaction

    v8: PEP (abc) -> Pyr (abc) + ATP

can be translated into FTBL as

    NETWORK
           FLUX_NAME       EDUCT_1 EDUCT_2 PRODUCT_1       PRODUCT_2
           v8      PEP             Pyr     ATP
                   #abc            #abc    #

Note an empty carbon string `#` at the place corresponding to `ATP`. An important difference between cofactors and other metabolites that the former are allowed to have stoechiometric coefficients different from 1. These coefficients must be separated from cofactors by `*` sign, e.g. a reaction

    v41: Asp (abcd) + 2 ATP + NH3 -> Asn (abcd)

can be translated into FTBL as

    NETWORK
           FLUX_NAME       EDUCT_1 EDUCT_2 PRODUCT_1       PRODUCT_2
           v41     Asp     2*ATP   Asn
                   #abcd   #       #abcd
           v41     NH3
                   #

Note the presence of `2*ATP` term.

### Same metabolite on both sides of reaction (v4.0)

In some particular cases, it can be necessary to have a same metabolite on both sides of reaction. Let us illustrate this situation with the following example:

    v71: CO2.unlabeled (a) + CO2 (b) -> CO2 (a) + CO2.out (b)

Metabolite CO2 is present on both sides of reaction but its carbon atom is not the same. This is the main reason for introducing this feature, to allow tracer rearrangement. In FTBL, it gives

    NETWORK
           FLUX_NAME       EDUCT_1 EDUCT_2 PRODUCT_1       PRODUCT_2
           v71     CO2.unlabeled   CO2     CO2     CO2.out
                   #a      #b      #a      #b

### Section `NOTRACER_NETWORK` (v4.0)

In addition to reactions with carbon rearrangements, it can be useful to add reactions with no carbon transfer. The most known reaction of such type is biomass composition but it can there be others, e.g. involving exclusively cofactors:

    v61: NADH + 0.5 O2 -> 2 ATP

This optional section is structured in 2 columns: `FLUX_NAME` and `EQUATION`:

    NOTRACER_NETWORK
           FLUX_NAME       EQUATION
           v61     NADH+0.5*O2 = 2*ATP

You can see that the reaction is written in a manner very different form `NETWORK` section. Its sides are separated by `=` sign, metabolites are separated by `+` and they can have stoechiometric coefficients separated by `*` symbol. It is not visible in this example, but there can be as many metabolites as desired on each side of reaction. The limit “no more than 2 metabolites by side” proper to `NETWORK` section does not apply here.

### Sub-sections `EQUALITY/METAB` and `INEQUALITY/METAB` (v2.11)

In the same manner as for fluxes, user can have to constrain variable metabolite concentrations. Constraints can be by equalities and inequalities. These subsections are organized in the same way as for fluxes. In `EQUALITY/METAB` there are 2 columns `VALUE` and `FORMULA` while in `INEQUALITY/METAB` there are 3 of them: `VALUE`, `COMP` and `FORMULA`. For example,

    EQUALITIES
           METAB
                   VALUE   FORMULA
                   0       R5P - 1.5*X5P
                   ...
    INEQUALITIES
           METAB
                   VALUE   COMP    FORMULA
                   0.001   <=      PEP
                   10      >=      PEP
                   ...

### `NA` in measurements (v2.5)

Missing values marked as `NA` are admitted in measurement sections, in columns designated to values. In contrast, they are not admitted in columns designated to standard deviations. The main difference between a measurement just omitted and those marked as `NA` is that the latter will be simulated and reported in corresponding simulation sections of the result file. This feature can be useful for preliminary simulations when there is no yet data available but user want to know e.g. if fluxes of interest will be well determined or not based on a supposed set of measurements. In this case, all presumed data can be set to `NA` (but not their SD).

### Optimization control parameters (v5.3)

Optimization method(s) can be tuned by control parameters that can be put in `OPTIONS` section. The format of those fields has changed. Before, the field names were looking like `optctrl_maxit` i.e. a prefix `optctrl_` followed by a parameter name, here `maxit`. Starting from v5.3, they look like `optctrl:nlsic:maxit` i.e. a prefix `optctrl` followed by a method name (here `nlsic`) and ended by parameter name, like `maxit`, all 3 separated by colon `:`. This new format allows tuning parameters for multiple optimization methods simultaneously. It became necessary, as starting from v5.3, several optimization methods can be used successively in one `influx_si` run. More about parameters can be found in the section Optimization options.