Note

This page was generated from Morpholoy.ipynb. Interactive online version: Colab badge. Some tutorial content may look better in light mode.

Morphological features of 3D models#

This notebook demonstrates the calculation of morphological features of 3D reconstructed model, including length, surface area, volume, cell density, cell distribution, etc.

[1]:
import warnings
warnings.filterwarnings('ignore')
import spateo as st
2023-07-25 12:25:01.846617: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT

Load the data#

[2]:
cpo = [(553, 1098, 277), (1.967, -6.90, -2.21), (0, 0, 1)]

adata = st.sample_data.drosophila(filename="E7-9h_cellbin.h5ad")
adata.uns["__type"] = "UMI"
adata
[2]:
AnnData object with n_obs × n_vars = 25921 × 8136
    obs: 'area', 'slices', 'anno_cell_type', 'anno_tissue', 'anno_germ_layer', 'actual_stage'
    uns: '__type'
    obsm: '3d_align_spatial'
    layers: 'counts_X', 'spliced', 'unspliced'

Reconstruct the mesh model corresponding to the 3D spatial transcriptomics data#

See also 3D Reconstruction for more details on 3D reconstructed models.

[25]:
# Reconstruct point cloud model
pc, plot_cmap = st.tdr.construct_pc(adata=adata.copy(), spatial_key="3d_align_spatial", groupby="anno_tissue")

# Reconstruct mesh model
mesh, _, _ = st.tdr.construct_surface(pc=pc, alpha=0.3, cs_method="marching_cube", cs_args={"mc_scale_factor": 1.8}, smooth=8000, scale_factor=1.0)

# Visualization
st.pl.three_d_plot(model=st.tdr.collect_models([pc, mesh]), key="groups", model_style=["points", "surface"], jupyter="static", cpo=cpo)
../../../_images/tutorials_notebooks_5_tdr_Morpholoy_5_0.png

Calculate the cells’ kernel density of drosophila embryo#

[27]:
st.tdr.pc_KDE(pc=pc, bandwidth=5, key_added="cells_kde", colormap="hot_r", inplace=True)
st.pl.three_d_plot(model=pc, key="cells_kde", colormap="hot_r", opacity=0.6, model_style="points", jupyter="static", cpo=cpo)
../../../_images/tutorials_notebooks_5_tdr_Morpholoy_7_0.png

Calculate the volume, surface area, length, etc. of drosophila embryo#

The coordinates in anndata need a unified unit, such as all coordinates are in microns

[32]:
um_pc_model, um_mesh_model = pc.copy(), mesh.copy()

um_pc_model.points = um_pc_model.points / 1000
um_mesh_model.points = um_mesh_model.points / 1000
[33]:
morph = st.tdr.model_morphology(model=um_mesh_model, pc=um_pc_model)
morph
|-----> Length (x) of model: 0.54292;
|-----> Width (y) of model: 0.23302;
|-----> Height (z) of model: 0.20113;
|-----> Surface area of model: 0.3212;
|-----> Volume of model: 0.01364;
|-----> Volume / surface area ratio of model: 0.04247.
|-----> Cell density of model: 1900366.56891.
[33]:
{'Length(x)': 0.54292,
 'Width(y)': 0.23302,
 'Height(z)': 0.20113,
 'Surface_area': 0.3212,
 'Volume': 0.01364,
 'V/SA_ratio': 0.04247,
 'cell_density': 1900366.56891}
[ ]: