Source code for spateo.io.merfish

"""IO functions for MERFISH technology.
"""
import numpy as np
import pandas as pd
from anndata import AnnData
from scipy.sparse import csr_matrix

from ..configuration import SKM
from ..logging import logger_manager as lm


[docs]def read_merfish_as_anndata(path: str) -> AnnData: """Read MERFISH matrix as AnnData. Args: matrix_dir: Path to matrix file. Returns: AnnData of cell x genes. """ lm.main_info("Constructing count matrix.") X = pd.read_csv(path, index_col=0).transpose() obs = pd.DataFrame(index=X.index) var = pd.DataFrame(index=X.columns) return AnnData(X=csr_matrix(X, dtype=np.uint16), obs=obs, var=var)
[docs]def read_merfish_positions_as_dataframe(path: str) -> pd.DataFrame: """Read MERFISH cell positions CSV as dataframe. Args: path: Path to file Returns: DataFrame containing cell positions. """ df_loc = pd.read_excel(path, names=["x", "y"], index_col=0, dtype=np.float32) df_loc = df_loc - min(df_loc["x"].min(), df_loc["y"].min()) return df_loc
[docs]def read_merfish( path: str, positions_path: str, ) -> AnnData: """Read MERFISH data as AnnData. Args: path: Path to matrix files positions_path: Path to xlsx containing spatial coordinates """ adata = read_merfish_as_anndata(path) df_loc = read_merfish_positions_as_dataframe(positions_path) adata = adata[np.intersect1d(df_loc.index, adata.obs_names), :] adata.obsm["spatial"] = np.array(df_loc) scale, scale_unit = 1.0, None # Set uns SKM.init_adata_type(adata, SKM.ADATA_UMI_TYPE) SKM.init_uns_pp_namespace(adata) SKM.init_uns_spatial_namespace(adata) SKM.set_uns_spatial_attribute(adata, SKM.UNS_SPATIAL_SCALE_KEY, scale) SKM.set_uns_spatial_attribute(adata, SKM.UNS_SPATIAL_SCALE_UNIT_KEY, scale_unit) return adata