File size: 1,730 Bytes
141bacd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""cache full + dermal-only umap for dingwall replica."""
from __future__ import annotations
import warnings
warnings.filterwarnings("ignore")
from pathlib import Path
import numpy as np
import scanpy as sc
import anndata as ad

import os as _os
from pathlib import Path as _Path
PANDA_ROOT = _Path(_os.environ.get("PANDA_ROOT", str(_Path(__file__).resolve().parents[2])))
ROOT = Path(str(PANDA_ROOT))
OUT = ROOT / "figures/biology"
OUT.mkdir(parents=True, exist_ok=True)
CACHE = OUT / "_cache_dingwall_umap.npz"


def main():
    a = ad.read_h5ad(ROOT / "data/processed/dingwall_replica/dingwall_replica.h5ad")
    print(f"[cache] loaded dingwall_replica: {a.shape}")

    sc.pp.neighbors(a, use_rep="X_pca_harmony", n_neighbors=30, random_state=42)
    sc.tl.umap(a, random_state=42, min_dist=0.3)
    umap_full = a.obsm["X_umap"].copy()

    # recompute on dermal-only so Derm0..Derm11 separate
    is_derm = a.obs["is_dermal_paper"].astype(bool).values
    adx = a[is_derm].copy()
    print(f"[cache] dermal subset: {adx.shape}")
    sc.pp.neighbors(adx, use_rep="X_pca_harmony", n_neighbors=30, random_state=42)
    sc.tl.umap(adx, random_state=42, min_dist=0.3)
    umap_derm = adx.obsm["X_umap"].copy()
    derm_index = np.where(is_derm)[0]

    np.savez(
        CACHE,
        umap_full=umap_full,
        umap_derm=umap_derm,
        derm_index=derm_index,
        obs_names=a.obs_names.astype(str).values,
        sample=a.obs["sample"].astype(str).values,
        derm_label=a.obs["derm_label"].astype(str).values,
        paper_cluster_23=a.obs["paper_cluster_23"].astype(str).values,
    )
    print(f"[cache] wrote {CACHE}")


if __name__ == "__main__":
    main()