Source code for svgbit.core.normalizers
from __future__ import annotations
from numpy import log as nlog
from pandas import SparseDtype
from .STDataset import STDataset
[docs]def cpm_normalizer(dataset: STDataset) -> STDataset:
"""
Perform CPM on dataset.
Parameters
==========
dataset : STDataset
STDataset to be normalized.
Returns
=======
dataset : STDataset
A new STDataset instance with normalized expression matrix.
"""
try:
count_df = dataset.count_df.sparse.to_dense()
except AttributeError:
pass
try:
scale_df = (count_df.T * 10000 / count_df.T.sum())
except AttributeError:
pass
return_dset = STDataset(
scale_df.T,
dataset.coordinate_df,
check_duplicate_genes=False,
sort_spots=False,
)
return_dset._normalizer = "cpm"
return_dset._array_coordinate = dataset._array_coordinate
return return_dset
[docs]def logcpm_normalizer(dataset: STDataset) -> STDataset:
"""
Perform logcpm on dataset.
Parameters
==========
dataset : STDataset
STDataset to be normalized.
Returns
=======
dataset : STDataset
A new STDataset instance with normalized expression matrix.
"""
try:
count_df = dataset.count_df.sparse.to_dense()
except AttributeError:
pass
scale_df = nlog(count_df.T * 10000 / count_df.T.sum() + 1)
return_dset = STDataset(
scale_df.T,
dataset.coordinate_df,
check_duplicate_genes=False,
sort_spots=False,
)
return_dset._normalizer = "logcpm"
return_dset._array_coordinate = dataset._array_coordinate
return return_dset