1. load libraries

2. Load Data into Seurat



 All_samples_Merged <- readRDS("../0-Seurat_RDS_OBJECT_FINAL/All_samples_Merged_with_STCAT_and_cleaned.rds")


gc()

3. Export to .h5ad (AnnData format)

library(Seurat)
library(SingleCellExperiment)
library(zellkonverter)

# 1️⃣ Set RNA assay as default
DefaultAssay(All_samples_Merged) <- "RNA"

# 2️⃣ Log-normalize counts (creates 'data' slot)
All_samples_Merged <- NormalizeData(
  All_samples_Merged,
  normalization.method = "LogNormalize",
  assay = "RNA",
  verbose = TRUE
)
Normalizing layer: counts
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# 3️⃣ Extract counts and logcounts
raw_counts <- GetAssayData(All_samples_Merged, slot = "counts", assay = "RNA")
Warning: The `slot` argument of `GetAssayData()` is deprecated as of SeuratObject 5.0.0.
Please use the `layer` argument instead.
logcounts <- GetAssayData(All_samples_Merged, slot = "data", assay = "RNA")

# 4️⃣ Prepare metadata
cell_metadata <- All_samples_Merged[[]]
gene_metadata <- data.frame(
  gene_symbol = rownames(raw_counts),
  row.names = rownames(raw_counts)
)

# 5️⃣ Create SingleCellExperiment (keep sparse matrices)
sce <- SingleCellExperiment(
  assays = list(
    counts = raw_counts, 
    logcounts = logcounts
  ),
  colData = cell_metadata,
  rowData = gene_metadata
)

# 6️⃣ Export to .h5ad
writeH5AD(sce, file = "All_samples_Merged_sparse_logcounts_for_PAGA.h5ad")
ℹ Using the 'counts' assay as the X matrix
LS0tCnRpdGxlOiAiVHJhamVjdG9yeSBpbmZlcmVuY2UgdXNpbmcgUEFHQSAoU2NhbnB5IFRvb2xraXQpLWg1ZEZvcm1hdCIKYXV0aG9yOiBOYXNpciBNYWhtb29kIEFiYmFzaQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICAjcm1kZm9ybWF0czo6cmVhZHRoZWRvd24KICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRvY19jb2xsYXBzZWQ6IHRydWUKLS0tCgojIDEuIGxvYWQgbGlicmFyaWVzCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQoKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoU2V1cmF0T2JqZWN0KQpsaWJyYXJ5KFNldXJhdERhdGEpCmxpYnJhcnkoU2luZ2xlQ2VsbEV4cGVyaW1lbnQpCmxpYnJhcnkocGF0Y2h3b3JrKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJtYXJrZG93bikKbGlicmFyeSh0aW55dGV4KQpsaWJyYXJ5KHplbGxrb252ZXJ0ZXIpCmxpYnJhcnkodGliYmxlKQoKYGBgCgoKIyAyLiBMb2FkIERhdGEgaW50byBTZXVyYXQKYGBge3IgbG9hZF9zZXVyYXR9CgoKIEFsbF9zYW1wbGVzX01lcmdlZCA8LSByZWFkUkRTKCIuLi8wLVNldXJhdF9SRFNfT0JKRUNUX0ZJTkFML0FsbF9zYW1wbGVzX01lcmdlZF93aXRoX1NUQ0FUX2FuZF9jbGVhbmVkLnJkcyIpCgoKZ2MoKQoKYGBgCgojIDMuIEV4cG9ydCB0byAuaDVhZCAoQW5uRGF0YSBmb3JtYXQpCmBgYHtyIEFubkRhdGEsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQpsaWJyYXJ5KFNldXJhdCkKbGlicmFyeShTaW5nbGVDZWxsRXhwZXJpbWVudCkKbGlicmFyeSh6ZWxsa29udmVydGVyKQoKIyAx77iP4oOjIFNldCBSTkEgYXNzYXkgYXMgZGVmYXVsdApEZWZhdWx0QXNzYXkoQWxsX3NhbXBsZXNfTWVyZ2VkKSA8LSAiUk5BIgoKIyAy77iP4oOjIExvZy1ub3JtYWxpemUgY291bnRzIChjcmVhdGVzICdkYXRhJyBzbG90KQpBbGxfc2FtcGxlc19NZXJnZWQgPC0gTm9ybWFsaXplRGF0YSgKICBBbGxfc2FtcGxlc19NZXJnZWQsCiAgbm9ybWFsaXphdGlvbi5tZXRob2QgPSAiTG9nTm9ybWFsaXplIiwKICBhc3NheSA9ICJSTkEiLAogIHZlcmJvc2UgPSBUUlVFCikKCiMgM++4j+KDoyBFeHRyYWN0IGNvdW50cyBhbmQgbG9nY291bnRzCnJhd19jb3VudHMgPC0gR2V0QXNzYXlEYXRhKEFsbF9zYW1wbGVzX01lcmdlZCwgc2xvdCA9ICJjb3VudHMiLCBhc3NheSA9ICJSTkEiKQpsb2djb3VudHMgPC0gR2V0QXNzYXlEYXRhKEFsbF9zYW1wbGVzX01lcmdlZCwgc2xvdCA9ICJkYXRhIiwgYXNzYXkgPSAiUk5BIikKCiMgNO+4j+KDoyBQcmVwYXJlIG1ldGFkYXRhCmNlbGxfbWV0YWRhdGEgPC0gQWxsX3NhbXBsZXNfTWVyZ2VkW1tdXQpnZW5lX21ldGFkYXRhIDwtIGRhdGEuZnJhbWUoCiAgZ2VuZV9zeW1ib2wgPSByb3duYW1lcyhyYXdfY291bnRzKSwKICByb3cubmFtZXMgPSByb3duYW1lcyhyYXdfY291bnRzKQopCgojIDXvuI/ig6MgQ3JlYXRlIFNpbmdsZUNlbGxFeHBlcmltZW50IChrZWVwIHNwYXJzZSBtYXRyaWNlcykKc2NlIDwtIFNpbmdsZUNlbGxFeHBlcmltZW50KAogIGFzc2F5cyA9IGxpc3QoCiAgICBjb3VudHMgPSByYXdfY291bnRzLCAKICAgIGxvZ2NvdW50cyA9IGxvZ2NvdW50cwogICksCiAgY29sRGF0YSA9IGNlbGxfbWV0YWRhdGEsCiAgcm93RGF0YSA9IGdlbmVfbWV0YWRhdGEKKQoKIyA277iP4oOjIEV4cG9ydCB0byAuaDVhZAp3cml0ZUg1QUQoc2NlLCBmaWxlID0gIkFsbF9zYW1wbGVzX01lcmdlZF9zcGFyc2VfbG9nY291bnRzX2Zvcl9QQUdBLmg1YWQiKQoKYGBgCgoKCgoKCg==