Source code for monalisa.binning._mitosius_create
"""Port of src/mitosius/bmMitosius_create.m."""
import os
import numpy as np
from monalisa._mat import cell_items, cell_shape
from monalisa.array._index_to_multi_index import index_to_multi_index
from monalisa.io._create_dir import create_dir
from monalisa.io._mat73 import savemat73
[docs]
def mitosius_create(mitosius_dir, *varargin):
"""Write binned data to ``mitosius_dir/cell_<i>[_<j>...]/{y,t,ve}.mat`` (MATLAB v7.3)
and ``mitosius_size.mat``. Arguments: ``(y_cell, t_cell, ve_cell)`` or ``(mitosius_length,)``."""
y_cell = t_cell = ve_cell = None
mitosius_size = None
if len(varargin) == 1:
mitosius_length = int(np.asarray(varargin[0]).item())
elif len(varargin) == 3:
y_cell, t_cell, ve_cell = varargin
mitosius_size = np.array([cell_shape(y_cell)], dtype=np.float64)
mitosius_length = int(np.prod(mitosius_size))
else:
raise ValueError("Wrong list of arguments. ")
create_dir(mitosius_dir)
named = (("y", y_cell), ("t", t_cell), ("ve", ve_cell))
items = {k: (None if c is None else cell_items(c)) for k, c in named}
for i in range(mitosius_length):
idx = []
if mitosius_size is not None:
idx = index_to_multi_index(i + 1, mitosius_size).ravel().astype(np.int64)
cell_dir = os.path.join(mitosius_dir, "cell" + "".join(f"_{k}" for k in idx))
create_dir(cell_dir)
for name, vals in items.items():
if vals is not None:
savemat73(os.path.join(cell_dir, f"{name}.mat"), {name: vals[i]})
savemat73(os.path.join(mitosius_dir, "mitosius_size.mat"), {"mitosius_size": mitosius_size})