Quickstart#

Load datasets#

from pathlib import Path

import anndata as ad
import torch

from popari.model import Popari

datasets = []
replicate_names = []
for fov in range(5):
    dataset = ad.read_h5ad(f"./example_st_dataset_fov_{replicate}.h5ad") # Each dataset must have spatial information stored as an adjacency matrix
    name = f"{fov}"
    datasets.append(dataset)
    replicate_names.append(name)

Define hyperparameters#

K = 20 # Number of metagenes
lambda_Sigma_x_inv = 1e-4 # Spatial affinity regularization hyperparameter
torch_context = dict(device='cuda:0', dtype=torch.float32) # Context for PyTorch tensor instantiation 

Initialize#

popari_demo = Popari(
    K=K,
    datasets=datasets,
    lambda_Sigma_x_inv=lambda_Sigma_x_inv,
    torch_context=torch_context
)

Train#

# Initialization with NMF
for iteration in range(5):
    popari_demo.estimate_parameters(update_spatial_affinities=False)
    popari_demo.estimate_weights(use_neighbors=False)

# Using spatial information
num_iterations = 200
for iteration in range(num_iterations):
    popari_demo.estimate_parameters()
    popari_demo.estimate_weights()

Save to disk#

result_filepath = Path(f"./demo_{num_iterations}_iterations.h5ad")
popari_demo.save_results(result_filepath)

See Analysis Demo for examples of how to analyze Popari outputs.