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
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!
LS0tCnRpdGxlOiAiVHJhbnNmZXIgc2NBVE9NSUMgYW5kIENyb3NzLU1ldGhvZCBBbm5vdGF0aW9uIENvbXBhcmlzb24gVGFibGUgLSBIZXJyZXJhIERhdGFzZXQiCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogdHJ1ZQogICAgdGhlbWU6IGpvdXJuYWwKLS0tCgoKIyMgbG9hZCBsaWJyYXJpZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CgogICAgbGlicmFyeShTZXVyYXQpCiAgICBsaWJyYXJ5KGRwbHlyKQogICAgbGlicmFyeShwYXRjaHdvcmspCiAgICBsaWJyYXJ5KGdncGxvdDIpCiAgICBsaWJyYXJ5KHBoZWF0bWFwKQogICAgbGlicmFyeShzY1ByZWQpCiAgICBsaWJyYXJ5KGNlbGxkZXgpCiAgICBsaWJyYXJ5KFNpbmdsZVIpCiAgICBsaWJyYXJ5KHJlbW90ZXMpCiAgICBsaWJyYXJ5KHByZXN0bykKICAgIGxpYnJhcnkoU2V1cmF0RGlzaykKICAgIGxpYnJhcnkoU2V1cmF0RGF0YSkKICAgIGxpYnJhcnkoQXppbXV0aCkKCmBgYAoKCgoKIyBMb2FkIFJEUyB3aXRoIGFsbCBhbm5vdGF0aW9ucwpgYGB7cn0KCiMgTG9hZCBtYWluIG9iamVjdCB3aXRoIGFsbCBhbm5vdGF0aW9ucwpBbGxfc2FtcGxlc19NZXJnZWQgPC0gcmVhZFJEUygiL2hvbWUvYmlvaW5mby8xLVRoZXNpc19GaW5hbF9ZZWFyXzIwMjUvMjAyNS1ZZWFyM19BbmFseXNpcy8xLXNjUk5BX1JFU1VMVFMtMTktMTEtMjAyNS8xNy1IZXJyZXJhX0RBVEFfQ0VMTF9Bbm5vdGF0aW9uL0FsbF9zYW1wbGVzX0hlcnJlcmFfd2l0aF9hbGxfYW5ub3RhdGlvbnNfQVRMQVMtSGVycmVyYS0wMy0wMi0yMDI2LnJkcyIpCgojIExvYWQgc2NBVE9NSUMgb2JqZWN0CnNjQVRPTUlDX29iaiA8LSByZWFkUkRTKCIvaG9tZS9iaW9pbmZvLzEtVGhlc2lzX0ZpbmFsX1llYXJfMjAyNS8yMDI1LVllYXIzX0FuYWx5c2lzLzEtc2NSTkFfUkVTVUxUUy0xOS0xMS0yMDI1LzE3LUhlcnJlcmFfREFUQV9DRUxMX0Fubm90YXRpb24vQWxsX3NhbXBsZXNfSGVycmVyYV9zY0FUT01JQ19IZXJyZXJhXzA0LTAyLTIwMjYucmRzIikKCklkZW50cyhBbGxfc2FtcGxlc19NZXJnZWQpIDwtICJzZXVyYXRfY2x1c3RlcnMiCmNhdCgiQ2x1c3RlcnMgaW4gQWxsX3NhbXBsZXNfTWVyZ2VkOlxuIikKcHJpbnQodGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkQGFjdGl2ZS5pZGVudCkpCgoKYGBgCgojIyBDaGVjayBtZXRhZGF0YSBjb2x1bW5zCgpgYGB7ciB9CmNhdCgiXG5zY0FUT01JQ19vYmogbWV0YWRhdGEgY29sdW1uczpcbiIpCnByaW50KGNvbG5hbWVzKHNjQVRPTUlDX29iakBtZXRhLmRhdGEpKQoKYGBgCiMjIENoZWNrIG1ldGFkYXRhIGNvbHVtbnMKYGBge3IgfQojIyBUcmFuc2ZlciBzY0FUT01JQyBsYWJlbHMgdG8gbWFpbiBvYmplY3QKCiMgVHJhbnNmZXIgc2NBVE9NSUMgcHJlZGljdGlvbnMKQWxsX3NhbXBsZXNfTWVyZ2VkJHNjQVRPTUlDX2Fubm90YXRpb24gPC0gc2NBVE9NSUNfb2JqQG1ldGEuZGF0YVtjb2xuYW1lcyhBbGxfc2FtcGxlc19NZXJnZWQpLCAic2NBVE9NSUNfcHJlZCJdCgojIFZlcmlmeSB0cmFuc2ZlcgpjYXQoIlxuVHJhbnNmZXJyZWQgc2NBVE9NSUMgYW5ub3RhdGlvbnM6XG4iKQpwcmludCh0YWJsZShBbGxfc2FtcGxlc19NZXJnZWQkc2NBVE9NSUNfYW5ub3RhdGlvbiwgdXNlTkEgPSAiYWx3YXlzIikpCgojIENoZWNrIGNvdmVyYWdlCmNhdCgiXG5DZWxscyB3aXRoIHNjQVRPTUlDIGFubm90YXRpb246Iiwgc3VtKCFpcy5uYShBbGxfc2FtcGxlc19NZXJnZWQkc2NBVE9NSUNfYW5ub3RhdGlvbikpLCAiXG4iKQpjYXQoIlRvdGFsIGNlbGxzOiIsIG5jb2woQWxsX3NhbXBsZXNfTWVyZ2VkKSwgIlxuIikKY2F0KCJDb3ZlcmFnZToiLCByb3VuZChzdW0oIWlzLm5hKEFsbF9zYW1wbGVzX01lcmdlZCRzY0FUT01JQ19hbm5vdGF0aW9uKSkvbmNvbChBbGxfc2FtcGxlc19NZXJnZWQpKjEwMCwgMiksICIlXG4iKQoKIyBWZXJpZnkgdGhlIGNvbHVtbiB3YXMgYWRkZWQKY2F0KCJcbk5ldyBjb2x1bW4gYWRkZWQgdG8gbWV0YWRhdGE6XG4iKQpjYXQoInNjQVRPTUlDX2Fubm90YXRpb246IiwgInNjQVRPTUlDX2Fubm90YXRpb24iICVpbiUgY29sbmFtZXMoQWxsX3NhbXBsZXNfTWVyZ2VkQG1ldGEuZGF0YSksICJcbiIpCgoKYGBgCiMgQ3JlYXRlIGFubm90YXRpb24gc3VtbWFyeSB0YWJsZQpgYGB7ciB9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkocHVycnIpCgojIERlZmluZSBhbm5vdGF0aW9uIG1ldGhvZHMgKHJlbW92ZWQgU1RDQVQpCm1ldGhvZHMgPC0gYygKICAicHJlZGljdGVkLmlkIiwgICAgICAgICAgICAgIyBzY1ByZWQKICAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgICAgIyBBemltdXRoIChsMiBwcmVkaWN0aW9uKQogICJzaW5nbGVyLmltbXVuZSIsICAgICAgICAgICAjIFNpbmdsZVIKICAic2NBVE9NSUNfYW5ub3RhdGlvbiIgICAgICAgIyBzY0FUT01JQwopCgojIENyZWF0ZSBzdW1tYXJ5IC0gbW9zdCBjb21tb24gbGFiZWwgcGVyIGNsdXN0ZXIgZm9yIGVhY2ggbWV0aG9kCmFubm90YXRpb25fc3VtbWFyeSA8LSBtYXBfZGZyKG1ldGhvZHMsIGZ1bmN0aW9uKG0pIHsKICBkZiA8LSBBbGxfc2FtcGxlc19NZXJnZWRAbWV0YS5kYXRhCiAgZGYgJT4lCiAgICBmaWx0ZXIoIWlzLm5hKC5kYXRhW1ttXV0pKSAlPiUKICAgIGdyb3VwX2J5KHNldXJhdF9jbHVzdGVycywgbGFiZWwgPSAuZGF0YVtbbV1dKSAlPiUKICAgIHN1bW1hcmlzZShuID0gbigpLCAuZ3JvdXBzID0gImRyb3AiKSAlPiUKICAgIGdyb3VwX2J5KHNldXJhdF9jbHVzdGVycykgJT4lCiAgICBzbGljZV9tYXgobiwgbiA9IDEsIHdpdGhfdGllcyA9IEZBTFNFKSAlPiUKICAgIG11dGF0ZShtZXRob2QgPSBtKQp9KQoKIyBTZXQgbWV0aG9kIG9yZGVyCmFubm90YXRpb25fc3VtbWFyeSRtZXRob2QgPC0gZmFjdG9yKGFubm90YXRpb25fc3VtbWFyeSRtZXRob2QsIGxldmVscyA9IG1ldGhvZHMpCgpoZWFkKGFubm90YXRpb25fc3VtbWFyeSkKCiMgU2F2ZSBhbm5vdGF0aW9uIHN1bW1hcnkgdGFibGUKd3JpdGUuY3N2KGFubm90YXRpb25fc3VtbWFyeSwgImFubm90YXRpb25fc3VtbWFyeV9IZXJyZXJhX3dpdGhfc2NBVE9NSUNfMDQtMDItMjAyNi5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKCmBgYAojIFNhdmUgUkRTCmBgYHtyfQoKIyMgU2F2ZSB1cGRhdGVkIG9iamVjdCB3aXRoIHNjQVRPTUlDIGFubm90YXRpb25zCgpzYXZlUkRTKEFsbF9zYW1wbGVzX01lcmdlZCwgCiAgICAgICAgZmlsZSA9ICIvaG9tZS9iaW9pbmZvLzEtVGhlc2lzX0ZpbmFsX1llYXJfMjAyNS8yMDI1LVllYXIzX0FuYWx5c2lzLzEtc2NSTkFfUkVTVUxUUy0xOS0xMS0yMDI1LzE3LUhlcnJlcmFfREFUQV9DRUxMX0Fubm90YXRpb24vQWxsX3NhbXBsZXNfSGVycmVyYV93aXRoX3NjQVRPTUlDXzA0LTAyLTIwMjYucmRzIikKCmNhdCgiXG7inJMgU2F2ZWQgdXBkYXRlZCBvYmplY3Qgd2l0aCBzY0FUT01JQyBhbm5vdGF0aW9ucyFcbiIpCmNhdCgiRmlsZTogQWxsX3NhbXBsZXNfSGVycmVyYV93aXRoX3NjQVRPTUlDXzA0LTAyLTIwMjYucmRzXG4iKQpjYXQoIkxvY2F0aW9uOiAxNy1IZXJyZXJhX0RBVEFfQ0VMTF9Bbm5vdGF0aW9uL1xuIikKY2F0KCJSZWFkeSBmb3IgQ3Jvc3MtTWV0aG9kIEFubm90YXRpb24gQ29tcGFyaXNvbiFcbiIpCgoKCmBgYA==