1. load libraries

2. Load Seurat Object


All_samples_Merged <- readRDS("../0-Seurat_RDS_OBJECT_FINAL/All_samples_Merged_Harmony_integrated_Cell_line_renamed_03-07-2025.rds")

UMAP colored by cell type and expression - dittoDimPlot

spe <- All_samples_Merged

library(Ragas)
Registered S3 methods overwritten by 'treeio':
  method              from    
  MRCA.phylo          tidytree
  MRCA.treedata       tidytree
  Nnode.treedata      tidytree
  Ntip.treedata       tidytree
  ancestor.phylo      tidytree
  ancestor.treedata   tidytree
  child.phylo         tidytree
  child.treedata      tidytree
  full_join.phylo     tidytree
  full_join.treedata  tidytree
  groupClade.phylo    tidytree
  groupClade.treedata tidytree
  groupOTU.phylo      tidytree
  groupOTU.treedata   tidytree
  is.rooted.treedata  tidytree
  nodeid.phylo        tidytree
  nodeid.treedata     tidytree
  nodelab.phylo       tidytree
  nodelab.treedata    tidytree
  offspring.phylo     tidytree
  offspring.treedata  tidytree
  parent.phylo        tidytree
  parent.treedata     tidytree
  root.treedata       tidytree
  rootnode.phylo      tidytree
  sibling.phylo       tidytree
RunDimPlot(object = spe)

Create a Pi object

my.pbmc.pi
An object of class Pi 
6 fields in the object: seurat.obj, exp.freq, markers, ds, cell.prop, parent.meta.data.
The following field has been processed:
    seurat.obj: A Seurat object of 26176 features and 49305 cells.
        6 assays: RNA, ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3, SCT, and 5 reductions: integrated_dr, ref.umap, pca, umap, harmony
Metadata from the parent object provided? No 
Subclusters integrated? No

2. Marker gene identification

rm(spe)
Avis : objet 'spe' introuvable
my.pbmc.pi <- RunFindAllMarkers(my.pbmc.pi, 
                               logfc.threshold = 0.1,
                               min.pct = 0.1,
                               min.diff.pct = 0.1,
                               only.pos = FALSE,
                               ident = "seurat_clusters",          # Default test (Wilcoxon Rank Sum)
                               return.thresh = 0.05,)
Calculating cluster 0
Calculating cluster 1
Calculating cluster 2
Calculating cluster 3
Calculating cluster 4
Calculating cluster 5
Calculating cluster 6
Calculating cluster 7
Calculating cluster 8
Calculating cluster 9
Calculating cluster 10
Calculating cluster 11
Calculating cluster 12
Calculating cluster 13
PiData Markers|seurat_clusters|AllMarkers|test.use=wilcox already exisits. Overwriting...

2. Marker gene Visualization

p1 <- RunMatrixPlot(my.pbmc.pi,
              markers.key = "Markers|seurat_clusters|AllMarkers|test.use=wilcox", 
              column.anno.name.rot = 45, 
              heatmap.height = 8)
Set active identity to seurat_clusters
Performing relative-counts-normalization
Centering and scaling data matrix

  |                                                                                                              
  |                                                                                                        |   0%
  |                                                                                                              
  |========================================================================================================| 100%
p1

8. Save the Seurat object as an RDS


saveRDS(L7, file = "../0-RDS_Cell_lines/L7_clustered.rds")
LS0tCnRpdGxlOiAiRGF0YSBWaXN1YWxpemF0aW9uIChSYWdhcykiCmF1dGhvcjogIk5hc2lyIE1haG1vb2QgQWJiYXNpIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMKICB3b3JkX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIGRmX3ByaW50OiBwYWdlZAogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKCiMgMS4gbG9hZCBsaWJyYXJpZXMKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KFNldXJhdFdyYXBwZXJzKQpsaWJyYXJ5KG1vbm9jbGUzKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoaW5mZXJjbnYpCmxpYnJhcnkoU0NwdWJyKQoKIyBMb2FkIHJlcXVpcmVkIGxpYnJhcmllcwpsaWJyYXJ5KFNldXJhdCkKbGlicmFyeShNYXRyaXgpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShwYXRjaHdvcmspCgoKYGBgCgojIDIuIExvYWQgU2V1cmF0IE9iamVjdCAKYGBge3J9CgpBbGxfc2FtcGxlc19NZXJnZWQgPC0gcmVhZFJEUygiLi4vMC1TZXVyYXRfUkRTX09CSkVDVF9GSU5BTC9BbGxfc2FtcGxlc19NZXJnZWRfSGFybW9ueV9pbnRlZ3JhdGVkX0NlbGxfbGluZV9yZW5hbWVkXzAzLTA3LTIwMjUucmRzIikKCgpgYGAKCiMjIFVNQVAgY29sb3JlZCBieSBjZWxsIHR5cGUgYW5kIGV4cHJlc3Npb24gLSBkaXR0b0RpbVBsb3QKYGBge3J9CnNwZSA8LSBBbGxfc2FtcGxlc19NZXJnZWQKCmxpYnJhcnkoUmFnYXMpCgoKUnVuRGltUGxvdChvYmplY3QgPSBzcGUpCgpgYGAKCiMjIENyZWF0ZSBhIFBpIG9iamVjdApgYGB7cn0KbXkucGJtYy5waSA8LSBDcmVhdGVQb3N0SW50ZWdyYXRpb25PYmplY3Qob2JqZWN0ID0gc3BlKQoKUnVuRGltUGxvdChvYmplY3QgPSBteS5wYm1jLnBpKQoKbXkucGJtYy5waQpgYGAKCiMgMi4gTWFya2VyIGdlbmUgaWRlbnRpZmljYXRpb24KYGBge3J9CnJtKHNwZSkKbXkucGJtYy5waSA8LSBSdW5GaW5kQWxsTWFya2VycyhteS5wYm1jLnBpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZjLnRocmVzaG9sZCA9IDAuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi5wY3QgPSAwLjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4uZGlmZi5wY3QgPSAwLjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5LnBvcyA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSAic2V1cmF0X2NsdXN0ZXJzIiwgICAgICAgICAgIyBEZWZhdWx0IHRlc3QgKFdpbGNveG9uIFJhbmsgU3VtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuLnRocmVzaCA9IDAuMDUsKQoKCmBgYAoKIyAyLiBNYXJrZXIgZ2VuZSBWaXN1YWxpemF0aW9uCmBgYHtyLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xMH0KcDEgPC0gUnVuTWF0cml4UGxvdChteS5wYm1jLnBpLAogICAgICAgICAgICAgIG1hcmtlcnMua2V5ID0gIk1hcmtlcnN8c2V1cmF0X2NsdXN0ZXJzfEFsbE1hcmtlcnN8dGVzdC51c2U9d2lsY294IiwgCiAgICAgICAgICAgICAgY29sdW1uLmFubm8ubmFtZS5yb3QgPSA0NSwgCiAgICAgICAgICAgICAgaGVhdG1hcC5oZWlnaHQgPSA4KQpwMQpgYGAKCgojIDguIFNhdmUgdGhlIFNldXJhdCBvYmplY3QgYXMgYW4gUkRTCmBgYHtyIHNhdmVST0JKLCBlY2hvPVRSVUV9CgpzYXZlUkRTKEw3LCBmaWxlID0gIi4uLzAtUkRTX0NlbGxfbGluZXMvTDdfY2x1c3RlcmVkLnJkcyIpCgoKYGBg