1. Load libraries

# Load necessary libraries
library(Seurat)
library(scplotter)
library(dplyr)
library(ggplot2)
library(patchwork)
library(Matrix)

# IMPORTANT: Replace this with the actual path and command to load your object
TCR <- readRDS("../../0-robj/TCR_Seurat_with_cloneSize_12_11_2025_finalized.rds")



TCR
An object of class Seurat 
62900 features across 44333 samples within 6 assays 
Active assay: SCT (26176 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
 5 dimensional reductions calculated: integrated_dr, ref.umap, pca, umap, harmony

2. ClonalVolumePlot

ClonalVolumePlot(TCR)

ClonalVolumePlot

TCR_subset <- subset(TCR, subset = orig.ident != "CD4T_lab")


ClonalVolumePlot(TCR_subset)

ClonalVolumePlot

ClonalVolumePlot(TCR, x = "seurat_clusters")

ClonalVolumePlot

ClonalVolumePlot(TCR_subset, x = "seurat_clusters")

ClonalVolumePlot

ClonalVolumePlot(TCR, x = "Condition")

ClonalVolumePlot

ClonalVolumePlot(TCR_subset, x = "Condition")

ClonalVolumePlot

ClonalVolumePlot(TCR_subset,
    plot_type = "box", x = "Condition", comparisons = TRUE,
    group_by = "age_at_diagnosis"
)

ClonalVolumePlot

ClonalVolumePlot(TCR, group_by = "seurat_clusters")

ClonalVolumePlot

ClonalVolumePlot(TCR_subset, group_by = "seurat_clusters")

3.ClonalCompositionPlot

ClonalCompositionPlot(TCR)



ClonalCompositionPlot(TCR_subset)

ClonalCompositionPlot

ClonalCompositionPlot(TCR, method = "top")



ClonalCompositionPlot(TCR_subset, method = "top")

ClonalCompositionPlot

ClonalCompositionPlot(TCR,  plot_type = "ring")



ClonalCompositionPlot(TCR_subset,  plot_type = "ring")

ClonalCompositionPlot

ClonalCompositionPlot(TCR, group_by = "Condition", plot_type = "box", comparison = TRUE,
 clone_split = list(Small = 0.001, Medium = 0.01, Large = 0.1, Hyperexpanded = 1))


ClonalCompositionPlot(TCR_subset, group_by = "Condition", plot_type = "box", comparison = TRUE,
 clone_split = list(Small = 0.001, Medium = 0.01, Large = 0.1, Hyperexpanded = 1))

4.ClonalOverlapPlot

ClonalOverlapPlot(TCR)



ClonalOverlapPlot(TCR_subset)

ClonalOverlapPlot

ClonalOverlapPlot(TCR, clone_call = "strict", label_cutoff = 0,
  label_accuracy = 0.001, method = "morisita", full = FALSE)



ClonalOverlapPlot(TCR_subset, clone_call = "strict", label_cutoff = 0,
  label_accuracy = 0.001, method = "morisita", full = FALSE)

ClonalOverlapPlot

ClonalOverlapPlot(TCR, group_by = c("Condition", "orig.ident"))



ClonalOverlapPlot(TCR_subset, group_by = c("Condition", "orig.ident"))

ClonalOverlapPlot

ClonalOverlapPlot(TCR, group_by = "orig.ident", split_by = "Condition" )



ClonalOverlapPlot(TCR_subset, group_by = "orig.ident", split_by = "Condition")

4.ClonalGeneUsagePlot

ClonalGeneUsagePlot(TCR, top = 40, plot_type = "heatmap", group_by = "CTgene")


ClonalGeneUsagePlot(TCR_subset, top = 40, plot_type = "heatmap", group_by = "CTgene")

5.ClonalStatPlot



ClonalStatPlot(TCR_subset, group_by = "orig.ident", groups = c("L1", "L2"))
LS0tCnRpdGxlOiAiVENSIHNjcGxvdHRlciBWaXN1YWxpemF0aW9uIGZvciBTZXphcnkgU3luZHJvbWUiCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgdG9jX2NvbGxhcHNlZDogeWVzCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICBkZl9wcmludDogcGFnZWQKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwotLS0KCiMgMS4gTG9hZCBsaWJyYXJpZXMKYGBge3J9CiMgTG9hZCBuZWNlc3NhcnkgbGlicmFyaWVzCmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KHNjcGxvdHRlcikKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShNYXRyaXgpCgojIElNUE9SVEFOVDogUmVwbGFjZSB0aGlzIHdpdGggdGhlIGFjdHVhbCBwYXRoIGFuZCBjb21tYW5kIHRvIGxvYWQgeW91ciBvYmplY3QKVENSIDwtIHJlYWRSRFMoIi4uLy4uLzAtcm9iai9UQ1JfU2V1cmF0X3dpdGhfY2xvbmVTaXplXzEyXzExXzIwMjVfZmluYWxpemVkLnJkcyIpCgoKClRDUgpgYGAKCgojIDIuIENsb25hbFZvbHVtZVBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CkNsb25hbFZvbHVtZVBsb3QoVENSKQpgYGAKIyMgQ2xvbmFsVm9sdW1lUGxvdApgYGB7ciwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KI1RDUl9zdWJzZXQgPC0gc3Vic2V0KFRDUiwgc3Vic2V0ID0gb3JpZy5pZGVudCAhPSAiQ0Q0VF9sYWIiKQoKCkNsb25hbFZvbHVtZVBsb3QoVENSX3N1YnNldCkKYGBgCgoKIyMgQ2xvbmFsVm9sdW1lUGxvdApgYGB7ciwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KQ2xvbmFsVm9sdW1lUGxvdChUQ1IsIHggPSAic2V1cmF0X2NsdXN0ZXJzIikKYGBgCiMjIENsb25hbFZvbHVtZVBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CkNsb25hbFZvbHVtZVBsb3QoVENSX3N1YnNldCwgeCA9ICJzZXVyYXRfY2x1c3RlcnMiKQpgYGAKIyMgQ2xvbmFsVm9sdW1lUGxvdApgYGB7ciwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KQ2xvbmFsVm9sdW1lUGxvdChUQ1IsIHggPSAiQ29uZGl0aW9uIikKYGBgCgojIyBDbG9uYWxWb2x1bWVQbG90CmBgYHtyLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQpDbG9uYWxWb2x1bWVQbG90KFRDUl9zdWJzZXQsIHggPSAiQ29uZGl0aW9uIikKYGBgCgojIyBDbG9uYWxWb2x1bWVQbG90CmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQpDbG9uYWxWb2x1bWVQbG90KFRDUl9zdWJzZXQsCiAgICBwbG90X3R5cGUgPSAiYm94IiwgeCA9ICJDb25kaXRpb24iLCBjb21wYXJpc29ucyA9IFRSVUUsCiAgICBncm91cF9ieSA9ICJhZ2VfYXRfZGlhZ25vc2lzIgopCgpgYGAKCiMjIENsb25hbFZvbHVtZVBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CkNsb25hbFZvbHVtZVBsb3QoVENSLCBncm91cF9ieSA9ICJzZXVyYXRfY2x1c3RlcnMiKQoKYGBgCgoKIyMgQ2xvbmFsVm9sdW1lUGxvdApgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KQ2xvbmFsVm9sdW1lUGxvdChUQ1Jfc3Vic2V0LCBncm91cF9ieSA9ICJzZXVyYXRfY2x1c3RlcnMiKQoKYGBgCgoKCiMgMy5DbG9uYWxDb21wb3NpdGlvblBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CkNsb25hbENvbXBvc2l0aW9uUGxvdChUQ1IpCgoKQ2xvbmFsQ29tcG9zaXRpb25QbG90KFRDUl9zdWJzZXQpCgpgYGAKCgojIyBDbG9uYWxDb21wb3NpdGlvblBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CkNsb25hbENvbXBvc2l0aW9uUGxvdChUQ1IsIG1ldGhvZCA9ICJ0b3AiKQoKCkNsb25hbENvbXBvc2l0aW9uUGxvdChUQ1Jfc3Vic2V0LCBtZXRob2QgPSAidG9wIikKYGBgCgojIyBDbG9uYWxDb21wb3NpdGlvblBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CkNsb25hbENvbXBvc2l0aW9uUGxvdChUQ1IsICBwbG90X3R5cGUgPSAicmluZyIpCgoKQ2xvbmFsQ29tcG9zaXRpb25QbG90KFRDUl9zdWJzZXQsICBwbG90X3R5cGUgPSAicmluZyIpCmBgYAoKIyMgQ2xvbmFsQ29tcG9zaXRpb25QbG90CmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQpDbG9uYWxDb21wb3NpdGlvblBsb3QoVENSLCBncm91cF9ieSA9ICJDb25kaXRpb24iLCBwbG90X3R5cGUgPSAiYm94IiwgY29tcGFyaXNvbiA9IFRSVUUsCiBjbG9uZV9zcGxpdCA9IGxpc3QoU21hbGwgPSAwLjAwMSwgTWVkaXVtID0gMC4wMSwgTGFyZ2UgPSAwLjEsIEh5cGVyZXhwYW5kZWQgPSAxKSkKCkNsb25hbENvbXBvc2l0aW9uUGxvdChUQ1Jfc3Vic2V0LCBncm91cF9ieSA9ICJDb25kaXRpb24iLCBwbG90X3R5cGUgPSAiYm94IiwgY29tcGFyaXNvbiA9IFRSVUUsCiBjbG9uZV9zcGxpdCA9IGxpc3QoU21hbGwgPSAwLjAwMSwgTWVkaXVtID0gMC4wMSwgTGFyZ2UgPSAwLjEsIEh5cGVyZXhwYW5kZWQgPSAxKSkKCmBgYAoKCgojIDQuQ2xvbmFsT3ZlcmxhcFBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTh9CkNsb25hbE92ZXJsYXBQbG90KFRDUikKCgpDbG9uYWxPdmVybGFwUGxvdChUQ1Jfc3Vic2V0KQoKYGBgCgojIyBDbG9uYWxPdmVybGFwUGxvdApgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KQ2xvbmFsT3ZlcmxhcFBsb3QoVENSLCBjbG9uZV9jYWxsID0gInN0cmljdCIsIGxhYmVsX2N1dG9mZiA9IDAsCiAgbGFiZWxfYWNjdXJhY3kgPSAwLjAwMSwgbWV0aG9kID0gIm1vcmlzaXRhIiwgZnVsbCA9IEZBTFNFKQoKCkNsb25hbE92ZXJsYXBQbG90KFRDUl9zdWJzZXQsIGNsb25lX2NhbGwgPSAic3RyaWN0IiwgbGFiZWxfY3V0b2ZmID0gMCwKICBsYWJlbF9hY2N1cmFjeSA9IDAuMDAxLCBtZXRob2QgPSAibW9yaXNpdGEiLCBmdWxsID0gRkFMU0UpCmBgYAoKCiMjIENsb25hbE92ZXJsYXBQbG90CmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQpDbG9uYWxPdmVybGFwUGxvdChUQ1IsIGdyb3VwX2J5ID0gYygiQ29uZGl0aW9uIiwgIm9yaWcuaWRlbnQiKSkKCgpDbG9uYWxPdmVybGFwUGxvdChUQ1Jfc3Vic2V0LCBncm91cF9ieSA9IGMoIkNvbmRpdGlvbiIsICJvcmlnLmlkZW50IikpCmBgYAoKIyMgQ2xvbmFsT3ZlcmxhcFBsb3QKYGBge3IsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTEwfQpDbG9uYWxPdmVybGFwUGxvdChUQ1IsIGdyb3VwX2J5ID0gIm9yaWcuaWRlbnQiLCBzcGxpdF9ieSA9ICJDb25kaXRpb24iICkKCgpDbG9uYWxPdmVybGFwUGxvdChUQ1Jfc3Vic2V0LCBncm91cF9ieSA9ICJvcmlnLmlkZW50Iiwgc3BsaXRfYnkgPSAiQ29uZGl0aW9uIikKYGBgCgoKCgojIDQuQ2xvbmFsR2VuZVVzYWdlUGxvdApgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KQ2xvbmFsR2VuZVVzYWdlUGxvdChUQ1IsIHRvcCA9IDQwLCBwbG90X3R5cGUgPSAiaGVhdG1hcCIsIGdyb3VwX2J5ID0gIkNUZ2VuZSIpCgoKQ2xvbmFsR2VuZVVzYWdlUGxvdChUQ1Jfc3Vic2V0LCB0b3AgPSA0MCwgcGxvdF90eXBlID0gImhlYXRtYXAiLCBncm91cF9ieSA9ICJDVGdlbmUiKQoKYGBgCgoKCgoKIyA1LkNsb25hbFN0YXRQbG90CmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQoKCkNsb25hbFN0YXRQbG90KFRDUl9zdWJzZXQsIGdyb3VwX2J5ID0gIm9yaWcuaWRlbnQiLCBncm91cHMgPSBjKCJMMSIsICJMMiIpKQoKYGBgCgoKCgoKCgoKCgoKCgoKCg==