load
libraries————————————
Load RDS with all
annotations
# Load main object with all annotations
All_samples_Merged <- readRDS("/home/bioinfo/1-Thesis_Final_Year_2025/2025-Year3_Analysis/1-scRNA_RESULTS-19-11-2025/17-Herrera_DATA_CELL_Annotation/All_samples_Herrera_with_all_annotations_ATLAS-Herrera-03-02-2026.rds")
# Load scATOMIC object
scATOMIC_obj <- readRDS("/home/bioinfo/1-Thesis_Final_Year_2025/2025-Year3_Analysis/1-scRNA_RESULTS-19-11-2025/17-Herrera_DATA_CELL_Annotation/All_samples_Herrera_scATOMIC_Herrera_04-02-2026.rds")
Idents(All_samples_Merged) <- "seurat_clusters"
cat("Clusters in All_samples_Merged:\n")
Clusters in All_samples_Merged:
print(table(All_samples_Merged@active.ident))
2 3 0 12 6 17 5 4 1 15 14 18 9 13 7 8 11 16 10
3241 1006 185 124 404 44 223 2278 92 48 183 10 84 150 230 923 727 4 829
Check metadata
columns
## Transfer scATOMIC labels to main object
# Transfer scATOMIC predictions
All_samples_Merged$scATOMIC_annotation <- scATOMIC_obj@meta.data[colnames(All_samples_Merged), "scATOMIC_pred"]
# Verify transfer
cat("\nTransferred scATOMIC annotations:\n")
Transferred scATOMIC annotations:
print(table(All_samples_Merged$scATOMIC_annotation, useNA = "always"))
Any Cell B Cell
12 362
Blood Cell CD14 Monocyte
63 885
CD16 Monocyte CD4 or CD8 T cell
88 99
CD4+ T cell CD8 T or NK cell
581 70
CD8+ T cell cDC1
71 3
cDC2 Dendritic Cell
120 1
Effector/Memory CD4+ T cells Effector/Memory CD8+ T cells
1455 1354
Exhausted CD8+ T cells HSPC
5 13
Macrophage or Dendritic Cell MAIT cells
27 159
Monocyte Naive CD4+ T cells
18 3992
Naive CD8+ T cells Natural killer cell
745 328
pDC Plasmablast
22 3
T or NK Cell T regulatory cells
3 64
Terminally differentiated effector CD4+ T cells Tfh/Th1 helper CD4+ T cells
1 208
<NA>
33
# Check coverage
cat("\nCells with scATOMIC annotation:", sum(!is.na(All_samples_Merged$scATOMIC_annotation)), "\n")
Cells with scATOMIC annotation: 10752
cat("Total cells:", ncol(All_samples_Merged), "\n")
Total cells: 10785
cat("Coverage:", round(sum(!is.na(All_samples_Merged$scATOMIC_annotation))/ncol(All_samples_Merged)*100, 2), "%\n")
Coverage: 99.69 %
# Verify the column was added
cat("\nNew column added to metadata:\n")
New column added to metadata:
cat("scATOMIC_annotation:", "scATOMIC_annotation" %in% colnames(All_samples_Merged@meta.data), "\n")
scATOMIC_annotation: TRUE
Create annotation
summary table
library(dplyr)
library(tidyr)
library(purrr)
# Define annotation methods (removed STCAT)
methods <- c(
"predicted.id", # scPred
"predicted.celltype.l2", # Azimuth (l2 prediction)
"singler.immune", # SingleR
"scATOMIC_annotation" # scATOMIC
)
# Create summary - most common label per cluster for each method
annotation_summary <- map_dfr(methods, function(m) {
df <- All_samples_Merged@meta.data
df %>%
filter(!is.na(.data[[m]])) %>%
group_by(seurat_clusters, label = .data[[m]]) %>%
summarise(n = n(), .groups = "drop") %>%
group_by(seurat_clusters) %>%
slice_max(n, n = 1, with_ties = FALSE) %>%
mutate(method = m)
})
# Set method order
annotation_summary$method <- factor(annotation_summary$method, levels = methods)
head(annotation_summary)
# Save annotation summary table
#write.csv(annotation_summary, "annotation_summary_Herrera_with_scATOMIC_04-02-2026.csv", row.names = FALSE)
Save RDS
## Save updated object with scATOMIC annotations
# saveRDS(All_samples_Merged,
# file = "/home/bioinfo/1-Thesis_Final_Year_2025/2025-Year3_Analysis/1-scRNA_RESULTS-19-11-2025/17-Herrera_DATA_CELL_Annotation/All_samples_Herrera_with_scATOMIC_04-02-2026.rds")
cat("\n✓ Saved updated object with scATOMIC annotations!\n")
✓ Saved updated object with scATOMIC annotations!
cat("File: All_samples_Herrera_with_scATOMIC_04-02-2026.rds\n")
File: All_samples_Herrera_with_scATOMIC_04-02-2026.rds
cat("Location: 17-Herrera_DATA_CELL_Annotation/\n")
Location: 17-Herrera_DATA_CELL_Annotation/
cat("Ready for Cross-Method Annotation Comparison!\n")
Ready for Cross-Method Annotation Comparison!
LS0tCnRpdGxlOiAiMy1UcmFuc2ZlciBzY0FUT01JQyBhbmQgQ3Jvc3MtTWV0aG9kIEFubm90YXRpb24gQ29tcGFyaXNvbiBUYWJsZSAtIEhlcnJlcmEgRGF0YXNldCIKYXV0aG9yOiBOYXNpciBNYWhtb29kIEFiYmFzaQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiB0cnVlCiAgICB0aGVtZTogam91cm5hbAotLS0KCgojIyBsb2FkIGxpYnJhcmllcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCiAgICBsaWJyYXJ5KFNldXJhdCkKICAgIGxpYnJhcnkoZHBseXIpCiAgICBsaWJyYXJ5KHBhdGNod29yaykKICAgIGxpYnJhcnkoZ2dwbG90MikKICAgIGxpYnJhcnkocGhlYXRtYXApCiAgICBsaWJyYXJ5KHNjUHJlZCkKICAgIGxpYnJhcnkoY2VsbGRleCkKICAgIGxpYnJhcnkoU2luZ2xlUikKICAgIGxpYnJhcnkocmVtb3RlcykKICAgIGxpYnJhcnkocHJlc3RvKQogICAgbGlicmFyeShTZXVyYXREaXNrKQogICAgbGlicmFyeShTZXVyYXREYXRhKQogICAgbGlicmFyeShBemltdXRoKQoKYGBgCgoKCgojIExvYWQgUkRTIHdpdGggYWxsIGFubm90YXRpb25zCmBgYHtyfQoKIyBMb2FkIG1haW4gb2JqZWN0IHdpdGggYWxsIGFubm90YXRpb25zCkFsbF9zYW1wbGVzX01lcmdlZCA8LSByZWFkUkRTKCIvaG9tZS9iaW9pbmZvLzEtVGhlc2lzX0ZpbmFsX1llYXJfMjAyNS8yMDI1LVllYXIzX0FuYWx5c2lzLzEtc2NSTkFfUkVTVUxUUy0xOS0xMS0yMDI1LzE3LUhlcnJlcmFfREFUQV9DRUxMX0Fubm90YXRpb24vQWxsX3NhbXBsZXNfSGVycmVyYV93aXRoX2FsbF9hbm5vdGF0aW9uc19BVExBUy1IZXJyZXJhLTAzLTAyLTIwMjYucmRzIikKCiMgTG9hZCBzY0FUT01JQyBvYmplY3QKc2NBVE9NSUNfb2JqIDwtIHJlYWRSRFMoIi9ob21lL2Jpb2luZm8vMS1UaGVzaXNfRmluYWxfWWVhcl8yMDI1LzIwMjUtWWVhcjNfQW5hbHlzaXMvMS1zY1JOQV9SRVNVTFRTLTE5LTExLTIwMjUvMTctSGVycmVyYV9EQVRBX0NFTExfQW5ub3RhdGlvbi9BbGxfc2FtcGxlc19IZXJyZXJhX3NjQVRPTUlDX0hlcnJlcmFfMDQtMDItMjAyNi5yZHMiKQoKSWRlbnRzKEFsbF9zYW1wbGVzX01lcmdlZCkgPC0gInNldXJhdF9jbHVzdGVycyIKY2F0KCJDbHVzdGVycyBpbiBBbGxfc2FtcGxlc19NZXJnZWQ6XG4iKQpwcmludCh0YWJsZShBbGxfc2FtcGxlc19NZXJnZWRAYWN0aXZlLmlkZW50KSkKCgpgYGAKCiMjIENoZWNrIG1ldGFkYXRhIGNvbHVtbnMKCmBgYHtyIH0KY2F0KCJcbnNjQVRPTUlDX29iaiBtZXRhZGF0YSBjb2x1bW5zOlxuIikKcHJpbnQoY29sbmFtZXMoc2NBVE9NSUNfb2JqQG1ldGEuZGF0YSkpCgpgYGAKIyMgQ2hlY2sgbWV0YWRhdGEgY29sdW1ucwpgYGB7ciB9CiMjIFRyYW5zZmVyIHNjQVRPTUlDIGxhYmVscyB0byBtYWluIG9iamVjdAoKIyBUcmFuc2ZlciBzY0FUT01JQyBwcmVkaWN0aW9ucwpBbGxfc2FtcGxlc19NZXJnZWQkc2NBVE9NSUNfYW5ub3RhdGlvbiA8LSBzY0FUT01JQ19vYmpAbWV0YS5kYXRhW2NvbG5hbWVzKEFsbF9zYW1wbGVzX01lcmdlZCksICJzY0FUT01JQ19wcmVkIl0KCiMgVmVyaWZ5IHRyYW5zZmVyCmNhdCgiXG5UcmFuc2ZlcnJlZCBzY0FUT01JQyBhbm5vdGF0aW9uczpcbiIpCnByaW50KHRhYmxlKEFsbF9zYW1wbGVzX01lcmdlZCRzY0FUT01JQ19hbm5vdGF0aW9uLCB1c2VOQSA9ICJhbHdheXMiKSkKCiMgQ2hlY2sgY292ZXJhZ2UKY2F0KCJcbkNlbGxzIHdpdGggc2NBVE9NSUMgYW5ub3RhdGlvbjoiLCBzdW0oIWlzLm5hKEFsbF9zYW1wbGVzX01lcmdlZCRzY0FUT01JQ19hbm5vdGF0aW9uKSksICJcbiIpCmNhdCgiVG90YWwgY2VsbHM6IiwgbmNvbChBbGxfc2FtcGxlc19NZXJnZWQpLCAiXG4iKQpjYXQoIkNvdmVyYWdlOiIsIHJvdW5kKHN1bSghaXMubmEoQWxsX3NhbXBsZXNfTWVyZ2VkJHNjQVRPTUlDX2Fubm90YXRpb24pKS9uY29sKEFsbF9zYW1wbGVzX01lcmdlZCkqMTAwLCAyKSwgIiVcbiIpCgojIFZlcmlmeSB0aGUgY29sdW1uIHdhcyBhZGRlZApjYXQoIlxuTmV3IGNvbHVtbiBhZGRlZCB0byBtZXRhZGF0YTpcbiIpCmNhdCgic2NBVE9NSUNfYW5ub3RhdGlvbjoiLCAic2NBVE9NSUNfYW5ub3RhdGlvbiIgJWluJSBjb2xuYW1lcyhBbGxfc2FtcGxlc19NZXJnZWRAbWV0YS5kYXRhKSwgIlxuIikKCgpgYGAKIyBDcmVhdGUgYW5ub3RhdGlvbiBzdW1tYXJ5IHRhYmxlCmBgYHtyIH0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShwdXJycikKCiMgRGVmaW5lIGFubm90YXRpb24gbWV0aG9kcyAocmVtb3ZlZCBTVENBVCkKbWV0aG9kcyA8LSBjKAogICJwcmVkaWN0ZWQuaWQiLCAgICAgICAgICAgICAjIHNjUHJlZAogICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCAgICAjIEF6aW11dGggKGwyIHByZWRpY3Rpb24pCiAgInNpbmdsZXIuaW1tdW5lIiwgICAgICAgICAgICMgU2luZ2xlUgogICJzY0FUT01JQ19hbm5vdGF0aW9uIiAgICAgICAjIHNjQVRPTUlDCikKCiMgQ3JlYXRlIHN1bW1hcnkgLSBtb3N0IGNvbW1vbiBsYWJlbCBwZXIgY2x1c3RlciBmb3IgZWFjaCBtZXRob2QKYW5ub3RhdGlvbl9zdW1tYXJ5IDwtIG1hcF9kZnIobWV0aG9kcywgZnVuY3Rpb24obSkgewogIGRmIDwtIEFsbF9zYW1wbGVzX01lcmdlZEBtZXRhLmRhdGEKICBkZiAlPiUKICAgIGZpbHRlcighaXMubmEoLmRhdGFbW21dXSkpICU+JQogICAgZ3JvdXBfYnkoc2V1cmF0X2NsdXN0ZXJzLCBsYWJlbCA9IC5kYXRhW1ttXV0pICU+JQogICAgc3VtbWFyaXNlKG4gPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpICU+JQogICAgZ3JvdXBfYnkoc2V1cmF0X2NsdXN0ZXJzKSAlPiUKICAgIHNsaWNlX21heChuLCBuID0gMSwgd2l0aF90aWVzID0gRkFMU0UpICU+JQogICAgbXV0YXRlKG1ldGhvZCA9IG0pCn0pCgojIFNldCBtZXRob2Qgb3JkZXIKYW5ub3RhdGlvbl9zdW1tYXJ5JG1ldGhvZCA8LSBmYWN0b3IoYW5ub3RhdGlvbl9zdW1tYXJ5JG1ldGhvZCwgbGV2ZWxzID0gbWV0aG9kcykKCmhlYWQoYW5ub3RhdGlvbl9zdW1tYXJ5KQoKIyBTYXZlIGFubm90YXRpb24gc3VtbWFyeSB0YWJsZQojd3JpdGUuY3N2KGFubm90YXRpb25fc3VtbWFyeSwgImFubm90YXRpb25fc3VtbWFyeV9IZXJyZXJhX3dpdGhfc2NBVE9NSUNfMDQtMDItMjAyNi5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKCmBgYAojIFNhdmUgUkRTCmBgYHtyfQoKIyMgU2F2ZSB1cGRhdGVkIG9iamVjdCB3aXRoIHNjQVRPTUlDIGFubm90YXRpb25zCgojIHNhdmVSRFMoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKIyAgICAgICAgIGZpbGUgPSAiL2hvbWUvYmlvaW5mby8xLVRoZXNpc19GaW5hbF9ZZWFyXzIwMjUvMjAyNS1ZZWFyM19BbmFseXNpcy8xLXNjUk5BX1JFU1VMVFMtMTktMTEtMjAyNS8xNy1IZXJyZXJhX0RBVEFfQ0VMTF9Bbm5vdGF0aW9uL0FsbF9zYW1wbGVzX0hlcnJlcmFfd2l0aF9zY0FUT01JQ18wNC0wMi0yMDI2LnJkcyIpCgpjYXQoIlxu4pyTIFNhdmVkIHVwZGF0ZWQgb2JqZWN0IHdpdGggc2NBVE9NSUMgYW5ub3RhdGlvbnMhXG4iKQpjYXQoIkZpbGU6IEFsbF9zYW1wbGVzX0hlcnJlcmFfd2l0aF9zY0FUT01JQ18wNC0wMi0yMDI2LnJkc1xuIikKY2F0KCJMb2NhdGlvbjogMTctSGVycmVyYV9EQVRBX0NFTExfQW5ub3RhdGlvbi9cbiIpCmNhdCgiUmVhZHkgZm9yIENyb3NzLU1ldGhvZCBBbm5vdGF0aW9uIENvbXBhcmlzb24hXG4iKQoKCgpgYGA=