--- license: mit tags: - single-cell - scRNA-seq - cell-type-classification - contrastive-learning - domain-adaptation library_name: pytorch pipeline_tag: feature-extraction --- # PANDA — Pan-tissue Adversarial Normalized Domain-invariant Anchored MLP Prototype-anchored MLP classifier for scRNA-seq cell identity across skin, hematopoietic, and pancreatic tissues. Trained under a composite of SupCon + VICReg + prototype-InfoNCE + GRL dataset+depth adversary + HSIC decorrelation + prototype-repulsion. Two variants: **PANDA-PCA** and **PANDA-Marker** (adds a marker gene channel). Code + paper: https://github.com/bryanc5864/PRISM ## Contents | Path | Description | |---|---| | `checkpoints/{system}/{pca,marker}/panda_final.pt` | Final trained weights per system × variant (6 core models) | | `checkpoints/pan_skin_dingwall_derm/panda_final.pt` | Line C: PANDA-Marker trained on Dingwall Derm labels | | `data/corpus/{system}/harmonized/` | Training corpora (h5ad + stats + PCA basis) | | `data/external_labels/` | Paper-supplement label files per source study | | `data/processed/dingwall_replica/` | Independent scanpy reproduction of Dingwall Seurat pipeline | | `discovery/` | Discovery-analysis outputs backing every paper claim | | `figures/` | Main + supplement + biology figures + merged PDFs | | `panda/`, `scripts/` | Model + analysis code (also on GitHub) | | `PAPER.tex`, `PAPER.pdf` | Manuscript | | `README.md` | Full end-to-end reproduction recipe | ## Quick fetch ```bash # essentials only (~30 GB) huggingface-cli download bryan7264/PANDA \ --local-dir . \ --include "checkpoints/**" "data/corpus/**" "data/external_labels/**" "discovery/**" # individual system huggingface-cli download bryan7264/PANDA \ --local-dir . \ --include "data/corpus/pan_skin/**" "checkpoints/pan_skin/**" ``` ## Usage ```python import torch from panda.model import PANDAEncoder ck = torch.load("checkpoints/pan_skin/marker/panda_final.pt", map_location="cpu", weights_only=False) model = PANDAEncoder(variant="marker", n_pca=50, n_markers=len(ck["marker_genes"]), n_classes=len(ck["classes"]), n_sub=3, n_datasets=len(ck["datasets"])) model.load_state_dict(ck["model"]) model.eval() ``` See PAPER.pdf for full experimental setup and README.md for the reproduction recipe.