Skip to content

cantinilab/champollion

Repository files navigation

Champollion

Tests Lint Docs Build codecov

Champollion learns an interpretable cross-modality cost from paired bridge cells and uses it to integrate unpaired single-cell profiles across modalities. It is designed for scverse workflows with AnnData and MuData, and exposes utilities for annotation transfer, barycentric projection, and interpretation of the learned interaction matrix.

Champollion model overview

Install

The package is currently being prepared for its first public release. During development, install it from a local checkout:

git clone git@github.com:cantinilab/champollion.git
cd champollion
pip install .

Optional Weights & Biases logging can be installed with:

pip install "champollion[wandb]"

Documentation

Documentation and tutorials are available at champollion-omics.readthedocs.io.

The PBMC tutorial included in tutorials/pbmc_tutorial.ipynb demonstrates fitting Champollion on bridge cells, transporting unpaired cells, transferring annotations, and building a joint visualization.

Getting Started

For a concrete application, see the PBMC tutorial; the example below is only a compact overview of the API. Champollion is fitted on a paired bridge stored in a MuData object. It can then be applied to modality-specific AnnData objects containing unpaired cells.

from champollion import Champollion

model = Champollion(
    epsilon=1.0,
    gamma=0.001,
    lambda_prior=20.0,
    use_keops=False,
    device="auto",
    random_state=0,
)

model.fit(
    mdata_bridge,
    modality_1="rna",
    modality_2="atac",
    x_1_rep="X_pca",
    x_2_rep="X_lsi",
    y_prior_1_rep="X_prior",
    y_prior_2_rep="X_prior",
)

result = model.transport(
    {"rna": adata_rna, "atac": adata_atac},
    x_reps={"rna": "X_pca", "atac": "X_lsi"},
    y_prior_reps={"rna": "X_prior", "atac": "X_prior"},
)

predicted_atac_labels = result.transfer_obs(
    key="cell_type",
    source="rna",
    kind="categorical",
)

The learned matrix can be inspected directly:

A = model.A_dataframe()
top_links = model.top_interactions("CD18", modality="protein", k=10)

Citation

The preprint is in preparation. Citation information will be added before the official release. if you're looking for the repository to reproduce the results in the article, please see the champollion_reproducibility repository!

About

A novel method for bridge integration (i.e. integration of partially paired single-cell multimodal data): Champollion

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors