1. load libraries
2. Load Seurat Object
#Load Seurat Object merged from cell lines and a control(PBMC) after filtration
SS_All_samples_Merged <- load("SS_All_Sample_Merged_Azimuth_ProjectTils_singleR_ANNOTATION_on_My_UMAP0.7_HPC.Robj")
All_samples_Merged
An object of class Seurat
63193 features across 49193 samples within 6 assays
Active assay: SCT (26469 features, 3000 variable features)
3 layers present: counts, data, scale.data
5 other assays present: RNA, ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3
4 dimensional reductions calculated: pca, umap, integrated_dr, ref.umap
3. QC
Idents(All_samples_Merged) <- "cell_line"
VlnPlot(All_samples_Merged, features = c("nFeature_RNA",
"nCount_RNA",
"percent.mito"),
ncol = 3)

FeatureScatter(All_samples_Merged,
feature1 = "nCount_RNA",
feature2 = "nFeature_RNA") +
geom_smooth(method = 'lm')

##FeatureScatter is typically used to visualize feature-feature
relationships ##for anything calculated by the object, ##i.e. columns in
object metadata, PC scores etc.
FeatureScatter(All_samples_Merged,
feature1 = "nCount_RNA",
feature2 = "percent.mito")+
geom_smooth(method = 'lm')

FeatureScatter(All_samples_Merged,
feature1 = "nCount_RNA",
feature2 = "nFeature_RNA")+
geom_smooth(method = 'lm')

5. Harmony TEST
P1 <- DimPlot(object = All_samples_Merged, group.by = "cell_line") +
labs(title = 'Colored by cellline')
P1

P2 <- DimPlot(object = All_samples_Merged, group.by = "predicted.celltype.l2") +
labs(title = 'Colored by celltype')
P2

P3 <- DimPlot(object = All_samples_Merged, group.by = "cell_line", reduction = "pca") +
labs(title = 'Colored by cellline')
P3

P4 <- DimPlot(object = All_samples_Merged, group.by = "predicted.celltype.l2", reduction = "pca") +
labs(title = 'Colored by celltype')
P4

cowplot::plot_grid(P1, P2, P3, P4, nrow = 2)

6. Apply Harmony
All_samples_Merged_integrated <- RunUMAP(All_samples_Merged_integrated, reduction = "harmony", dims = 1:8)
19:57:08 UMAP embedding parameters a = 0.9922 b = 1.112
19:57:08 Read 49193 rows and found 8 numeric columns
19:57:08 Using Annoy for neighbor search, n_neighbors = 30
19:57:08 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
19:57:14 Writing NN index file to temp file /tmp/RtmplH6bu4/file1b9e1ed5314d7
19:57:14 Searching Annoy index using 1 thread, search_k = 3000
19:57:37 Annoy recall = 100%
19:57:38 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
19:57:42 Initializing from normalized Laplacian + noise (using RSpectra)
19:57:46 Commencing optimization for 200 epochs, with 1982706 positive edges
Using method 'umap'
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
19:58:16 Optimization finished
DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "umap")

DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "harmony")

DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "integrated_dr")

DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "pca")

DimPlot(object = All_samples_Merged_integrated, group.by = "predicted.celltype.l2", label = T, label.box = T, repel = T, reduction = "ref.umap")

DimPlot(object = All_samples_Merged_integrated, group.by = "cell_line", label = T, label.box = T, repel = T, reduction = "umap")

DimPlot(object = All_samples_Merged_integrated, group.by = "seurat_clusters", label = T, label.box = T, repel = T, reduction = "umap")

7. Cell Distribution
cell_distribution_table <- table(All_samples_Merged_integrated$cell_line, All_samples_Merged_integrated$seurat_clusters)
cell_distribution_df <- as.data.frame.matrix(cell_distribution_table)
print(cell_distribution_df)
write.csv(cell_distribution_df, file = "15-2-integration_table_HARMONY-TEST2.csv", row.names = TRUE)
Save the Seurat object as an Robj file———————————————————————-
# save
#save(All_samples_Merged_integrated,file = "15-2_All_samples_Merged_integrated.Robj")
```
LS0tCnRpdGxlOiAiaGFybW9ueSBpbnRlZ3JhdGlvbiBvbiBTQ1QiCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogIjIwMjQtMDUtMDgiCm91dHB1dDoKICBodG1sX25vdGVib29rOiAKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCiAgICB0aGVtZTogZGFya2x5Ci0tLQoKIyAxLiBsb2FkIGxpYnJhcmllcwpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KFNldXJhdE9iamVjdCkKbGlicmFyeShTZXVyYXREYXRhKQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShBemltdXRoKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJtYXJrZG93bikKbGlicmFyeSh0aW55dGV4KQoKCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZGl0dG9TZXEpCmxpYnJhcnkoZ2dyZXBlbCkKI2xpYnJhcnkoZ2d0cmVlKQpsaWJyYXJ5KHBhcmFsbGVsKQpsaWJyYXJ5KHBsb3RseSkgICMgM0QgcGxvdApsaWJyYXJ5KFNldXJhdCkgICMgSWRlbnRzKCkKbGlicmFyeShTZXVyYXREaXNrKSAgIyBTYXZlSDVTZXVyYXQoKQpsaWJyYXJ5KHRpYmJsZSkgICMgcm93bm5hbWVzX3RvX2NvbHVtbgpsaWJyYXJ5KGhhcm1vbnkpICMgUnVuSGFybW9ueSgpCiNvcHRpb25zKG1jLmNvcmVzID0gZGV0ZWN0Q29yZXMoKSAtIDEpCgoKCmBgYAoKCiMgMi4gTG9hZCBTZXVyYXQgT2JqZWN0IApgYGB7ciBsb2FkX3NldXJhdH0KCiNMb2FkIFNldXJhdCBPYmplY3QgbWVyZ2VkIGZyb20gY2VsbCBsaW5lcyBhbmQgYSBjb250cm9sKFBCTUMpIGFmdGVyIGZpbHRyYXRpb24KU1NfQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIGxvYWQoIlNTX0FsbF9TYW1wbGVfTWVyZ2VkX0F6aW11dGhfUHJvamVjdFRpbHNfc2luZ2xlUl9BTk5PVEFUSU9OX29uX015X1VNQVAwLjdfSFBDLlJvYmoiKQoKQWxsX3NhbXBsZXNfTWVyZ2VkCmBgYAojIDMuIFFDCmBgYHtyIFFDLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCklkZW50cyhBbGxfc2FtcGxlc19NZXJnZWQpIDwtICJjZWxsX2xpbmUiClZsblBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCBmZWF0dXJlcyA9IGMoIm5GZWF0dXJlX1JOQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyY2VudC5taXRvIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2wgPSAzKQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJuRmVhdHVyZV9STkEiKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2xtJykKCmBgYAoKIyNGZWF0dXJlU2NhdHRlciBpcyB0eXBpY2FsbHkgdXNlZCB0byB2aXN1YWxpemUgZmVhdHVyZS1mZWF0dXJlIHJlbGF0aW9uc2hpcHMKIyNmb3IgYW55dGhpbmcgY2FsY3VsYXRlZCBieSB0aGUgb2JqZWN0LCAKIyNpLmUuIGNvbHVtbnMgaW4gb2JqZWN0IG1ldGFkYXRhLCBQQyBzY29yZXMgZXRjLgoKYGBge3IgRkMsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJwZXJjZW50Lm1pdG8iKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAnbG0nKQoKRmVhdHVyZVNjYXR0ZXIoQWxsX3NhbXBsZXNfTWVyZ2VkLCAKICAgICAgICAgICAgICAgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIAogICAgICAgICAgICAgICBmZWF0dXJlMiA9ICJuRmVhdHVyZV9STkEiKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAnbG0nKQoKYGBgCiMgNC4gUGVyZm9ybSBQQ0EKYGBge3IgUENBLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCgpFbGJvd1Bsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkKQoKCmBgYAojIDUuIEhhcm1vbnkgVEVTVApgYGB7ciBQQ0EtVEVTVCwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTB9CgpQMSA8LSBEaW1QbG90KG9iamVjdCA9IEFsbF9zYW1wbGVzX01lcmdlZCwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIikgKyAKICBsYWJzKHRpdGxlID0gJ0NvbG9yZWQgYnkgY2VsbGxpbmUnKQpQMQoKClAyIDwtIERpbVBsb3Qob2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiKSArIAogIGxhYnModGl0bGUgPSAnQ29sb3JlZCBieSBjZWxsdHlwZScpClAyCgoKUDMgPC0gRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gImNlbGxfbGluZSIsIHJlZHVjdGlvbiA9ICJwY2EiKSArIAogIGxhYnModGl0bGUgPSAnQ29sb3JlZCBieSBjZWxsbGluZScpClAzCgoKUDQgPC0gRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIHJlZHVjdGlvbiA9ICJwY2EiKSArIAogIGxhYnModGl0bGUgPSAnQ29sb3JlZCBieSBjZWxsdHlwZScpClA0Cgpjb3dwbG90OjpwbG90X2dyaWQoUDEsIFAyLCBQMywgUDQsIG5yb3cgPSAyKQpgYGAKIyA2LiBBcHBseSBIYXJtb255CmBgYHtyIEMxLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMH0KCgpBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCA8LSBSdW5IYXJtb255KEFsbF9zYW1wbGVzX01lcmdlZCwgImNlbGxfbGluZSIpCkFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkIDwtIFJ1blVNQVAoQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQsIHJlZHVjdGlvbiA9ICJoYXJtb255IiwgZGltcyA9IDE6OCkKCgoKYGBgCgoKYGBge3IgQzIsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwfQoKRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBULCByZXBlbCA9IFQsIHJlZHVjdGlvbiA9ICJ1bWFwIikKCkRpbVBsb3Qob2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5jZWxsdHlwZS5sMiIsIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCwgcmVwZWwgPSBULCByZWR1Y3Rpb24gPSAiaGFybW9ueSIpCgpEaW1QbG90KG9iamVjdCA9IEFsbF9zYW1wbGVzX01lcmdlZF9pbnRlZ3JhdGVkLCBncm91cC5ieSA9ICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCBsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQsIHJlcGVsID0gVCwgcmVkdWN0aW9uID0gImludGVncmF0ZWRfZHIiKQoKRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBULCByZXBlbCA9IFQsIHJlZHVjdGlvbiA9ICJwY2EiKQoKRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLmNlbGx0eXBlLmwyIiwgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBULCByZXBlbCA9IFQsIHJlZHVjdGlvbiA9ICJyZWYudW1hcCIpCgoKRGltUGxvdChvYmplY3QgPSBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIiwgbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBULCByZXBlbCA9IFQsIHJlZHVjdGlvbiA9ICJ1bWFwIikKCkRpbVBsb3Qob2JqZWN0ID0gQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQsIGdyb3VwLmJ5ID0gInNldXJhdF9jbHVzdGVycyIsIGxhYmVsID0gVCwgbGFiZWwuYm94ID0gVCwgcmVwZWwgPSBULCByZWR1Y3Rpb24gPSAidW1hcCIpCgpgYGAKCiMgNy4gQ2VsbCBEaXN0cmlidXRpb24KYGBge3IgY2VsbER9CgoKY2VsbF9kaXN0cmlidXRpb25fdGFibGUgPC0gdGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQkY2VsbF9saW5lLCBBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCRzZXVyYXRfY2x1c3RlcnMpCgpjZWxsX2Rpc3RyaWJ1dGlvbl9kZiA8LSBhcy5kYXRhLmZyYW1lLm1hdHJpeChjZWxsX2Rpc3RyaWJ1dGlvbl90YWJsZSkKCgpwcmludChjZWxsX2Rpc3RyaWJ1dGlvbl9kZikKCgp3cml0ZS5jc3YoY2VsbF9kaXN0cmlidXRpb25fZGYsIGZpbGUgPSAiMTUtMi1pbnRlZ3JhdGlvbl90YWJsZV9IQVJNT05ZLVRFU1QyLmNzdiIsIHJvdy5uYW1lcyA9IFRSVUUpCgoKYGBgCgojIFNhdmUgdGhlIFNldXJhdCBvYmplY3QgYXMgYW4gUm9iaiBmaWxlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgYGB7ciBzYXZlUkRTfQoKCiMgc2F2ZQojc2F2ZShBbGxfc2FtcGxlc19NZXJnZWRfaW50ZWdyYXRlZCxmaWxlID0gIjE1LTJfQWxsX3NhbXBsZXNfTWVyZ2VkX2ludGVncmF0ZWQuUm9iaiIpCgpgYGAKCmBgYAoKCgo=