/bimato

A library containing all the biopolymer matrix topology analyses published by the Biological Physics Group, (BIP), Peter Debye Institute, University Leipzig.

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

BiMaTo

DOI1 DOI2 GPLv3 license PyPI version shields.io Documentation Status

Bio Matrix Topology (BiMaTo) is a library containing all the biopolymer matrix topology analyses published by the Biological Physics Group, (BIP), Peter Debye Institute, University Leipzig, Germany.

Documentation can be found here.

How to install

bimato uses Python3.8 and up. Installation is trivial:

pip install bimato

Exemplary analysis workflow

This is an exemplary workflow to analyze pore sizes of two different collagen scaffolds. The matrices have been fluorescently stained and 3D images were recorded using an LSM.

Usually, we have for example different collagen scaffolds and want to compare structural parameters. For this, we would load several images, calculate their structural parameters and plot them. Below is an exemplary workflow for this:

  • load each image in the LIF file
  • analyze it
  • extract meta-data such as collagen concentration from image name
  • concatenate this data to global DataFrame
  • plot comparison boxplot

Pore-Size

We load a lif file with multiple samples per collagen concentration and analyze these in a loop:

import pandas as pd
from readlif.reader import LifFile
import seaborn as sns
import bimato

lif_file = LifFile("/path/to/sample.lif")

df_poresize = list()
for lif_image in lif_file.get_iter_image():

    data = bimato.utils.read_lif_image(lif_image)
    bw = bimato.get_binary(data)

    sampling = {
        'x': 1/lif_image.info["scale"][0],
        'y': 1/lif_image.info["scale"][1],
        'z': 1/lif_image.info["scale"][2]
    }

    df_tmp = bimato.get_pore_sizes(binary=bw, sampling=sampling)

    df_tmp['Concentration [g/l]'] = lif_image.name
    df_poresize.append(df_tmp)

df_poresize = pd.concat(df_poresize)

g = sns.catplot(
    data=df_poresize,
    kind='box',
    x='Concentration [g/l]',
    y='Diameter [µm],
)
g.set_ylabels("Pore-size [µm]")

Resulting in the following plot:

boxplot of poresize between two differently concentrated collagen matrices

Inhomogeneity

We load a lif file with multiple samples per collagen concentration and analyze these in a loop:

import pandas as pd
from readlif.reader import LifFile
import seaborn as sns
import bimato

lif_file = LifFile("/path/to/sample.lif")

df_inhomogeneity = list()
for lif_image in lif_file.get_iter_image():

    data = bimato.utils.read_lif_image(lif_image)
    bw = bimato.get_binary(data)

    sampling = {
        'x': 1/lif_image.info["scale"][0],
        'y': 1/lif_image.info["scale"][1],
        'z': 1/lif_image.info["scale"][2]
    }

    df_tmp = bimato.poresize.get_fragmented_poresizes(binary=bw, sampling=sampling, part_size_micron=30)
    df_tmp['Inhomogeneity'] = bimato.poresize.calc_inhomogeneity(df_tmp)

    df_tmp['Concentration [g/l]'] = lif_image.name
    df_inhomogeneity.append(df_tmp)

df_inhomogeneity = pd.concat(df_inhomogeneity)

g = sns.catplot(
    data=df_poresize,
    kind='box',
    x='Concentration [g/l]',
    y='Inhomogeneity,
)

Resulting in the following plot:

boxplot of inhomogeneity between two differently concentrated collagen matrices

How to cite