Pairing of alpha/beta TCR chains
2025-11-24
pairing_zenodo_data.RmdTutorial overview
This vignette shows how to generate paired TCR and single-chain “pseudo-bulk” data using raw TIRTLseq TCR-alpha/beta read counts from half of a 384-well plate. We find TCR pairs for CD8+ T-cells isolated from patient samples before and after naturally acquired SARS-CoV-2 infection and re-create a figure from the TIRTLseq paper showing changes in the patient’s TCR repertoire over time.
Study details
For this example, we use data from the St. Jude Tracking Study of Immune Responses Associated with COVID-19 (SJTRC), a clinical trial launched in 2020 to study the T-cell receptor repertoires of adults with naturally acquired COVID-19. This was a prospective, longitudinal cohort study involving adult employees (18 years and older) at St. Jude Children’s Research Hospital in Memphis, TN, USA.
Participants underwent weekly PCR screening for SARS-CoV-2 infection while on the St. Jude campus. Blood samples were collected in 8-ml cell preparation tubes, processed within 24 h into cellular and plasma components, aliquoted and then frozen for future analysis.
Here, we use samples from a healthy 33-year-old female donor with
naturally acquired mild SARS-CoV-2 infection and no prior history of
SARS-CoV-2 infection or vaccination. Samples were collected 143 days
before this donor’s first positive SARS-CoV-2 PCR test
(baseline sample), 6 days after (acute sample)
and 29 days after (convalescent sample).
Instructions
Download data
You will need to download the data from Zenodo before running
this code. The data we are using is exp3_clones.tar.gz,
which includes well-level TIRTLseq data from three 384-well plates. You
will need to unzip the tar.gz file as well as the data for each
plate.
Note: These are large files. The tar.gz file is 1.4 GB and the uncompressed data is 7.8 GB.
Set up input/output directories
Change the folder locations in the following code block to the
directory with your downloaded and unzipped data (folder)
and the directory you would like to save the paired TCR output to
(save_folder).
folder = "~/Downloads/zenodo/exp3_clones/" ### change this to the directory with your downloaded data!
save_folder = "~/git/TIRTLtools/extra/exp3_cd8" ### change this to the folder you would like to save paired output in (if the folder does not exist it will be created)Select plate rows and columns
CD4+ and CD8+ T-cells were isolated from peripheral blood mononuclear cells (PBMCs) in each sample. For each timepoint, CD8+ cells were plated on the left half of wells in a 384-well plate and CD4+ cells were plated on the right half.
In this case, we will pair the CD8+ cells, so we select columns 1 through 12 (the left half of the plate) and rows 1 through 16 (or A through P, all rows).
## Loading required package: ggplot2
tp1 = file.path(folder, "TCR_clones_ID02") ## baseline (pre-infection)
tp2 = file.path(folder, "TCR_clones_ID03") ## acute (6 days after infection)
tp3 = file.path(folder, "TCR_clones_ID04") ## convalescent (29 days after infection)
cd8_wells = get_well_subset(row_range = 1:16, col_range = 1:12) ## left half of the plate (CD8+)Run pairing algorithms
The run_pairing() function will run the pairing scripts,
which implement the MAD-HYPE and T-SHELL algorithms. These algorithms
are implemented in Python using GPU-accelerated packages (with numpy as
a CPU-only backup) for fast calculation. The package should
automatically install a python environment with the necessary packages
and detect the GPU type (NVIDIA or Apple Silicon) of your machine, if it
has one available.
Each function call may take a few minutes to run.
The main arguments of the function are:
-
folder_path- the path of the folder with well-level data -
folder_out- the path of the folder to write results to (the function will create the folder if it does not exist) -
prefix- a prefix (e.g. the sample name) for the output file names -
well_filter_thres- a threshold on the number of unique clones found in a well, for quality control -
well_pos- the position of the well ID (e.g. “B5”) in the file names. -
wellset1- a vector of wells to use for the pairing.
For more information, check the documentation with
?run_pairing.
The well-level data files in each folder are named something like
MVP113_TIRTLseq_P12_S263.TCRa_ID02.clones_TRA.tsv, so the
well ID (P12 in this case) is in the third position
(separate by underscores) so we use well_pos=3. We use the
get_well_subset() function above to generate the vector of
wells for the left side of the plate. With this, we run the
run_pairing() function, saving the output from CD8+ cells
in each plate to the same folder, with a different prefix for each:
<experiment>_<timepoint>_<marker>.
### This function will attempt to automatically install a Python environment with necessary packages for GPU computation
run_pairing(folder_path = tp1, folder_out = save_folder, prefix = "exp3_tp1_cd8", well_filter_thres = 0.5,
well_pos = 3, wellset1 = cd8_wells)## [1] "start"
## [1] "2026-03-11 21:44:57 CDT"
## [1] "Folder already exists: ~/git/TIRTLtools/extra/exp3_cd8"
## [1] "384 TCRalpha well files loaded"
## [1] "384 TCRalpha well files loaded"
## [1] "2026-03-11 21:45:27 CDT"
## [1] "Clone threshold for QC:"
## [1] 3210
## [1] "Alpha wells passing QC:"
##
## FALSE TRUE
## 193 191
## [1] "Beta wells passing QC:"
##
## FALSE TRUE
## 193 191
## [1] "Tabulating TCRalpha pseudobulk counts"
## [1] "2026-03-11 21:45:27 CDT"
## [1] "Tabulating TCRbeta pseudobulk counts"
## [1] "2026-03-11 21:45:49 CDT"
## [1] "Pseudobulk done."
## [1] "2026-03-11 21:46:09 CDT"
## [1] "Merging alpha clonesets..."
## [1] "Done! Unique alpha clones and wells after filtering:"
## [1] 937875 191
## [1] "2026-03-11 21:46:11 CDT"
## [1] "Unique alpha clones and wells in more than: 2 wells"
## [1] 36679 191
## [1] "Done! beta clones and wells after filtering:"
## [1] 928777 191
## [1] "2026-03-11 21:46:11 CDT"
## [1] "Unique beta clones and wells in more than: 2 wells"
## [1] 36080 191
## [1] "2026-03-11 21:46:11 CDT"
## [1] "Pre-computing look-up table:"
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 3% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======== | 11% | |======== | 12% | |========= | 13% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 19% | |============== | 20% | |=============== | 21% | |=============== | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 25% | |================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================= | 34% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 40% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |================================== | 49% | |=================================== | 50% | |==================================== | 51% | |==================================== | 52% | |===================================== | 52% | |===================================== | 53% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 60% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 70% | |================================================= | 71% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 80% | |======================================================== | 81% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 87% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 97% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
## [1] "2026-03-11 21:46:14 CDT"
## [1] "Filtering results, adding amino acid and V segment information"
## [1] "Scoring unique pairs..."
## [1] "2026-03-11 21:46:44 CDT"
## [1] "All is done! Number of paired clones:"
##
## madhype tshell
## 13379 7311
## Key: <wi, wj, wij>
## wi wj wij alpha_nuc
## <num> <num> <num> <char>
## 1: 0 0 3 TGTGTGAGAGCCGGAGGCTTCAAAACTATCTTT
## 2: 0 0 3 TGTGTGAGAGCCGGAGGCTTCAAAACTATCTTT
## 3: 0 0 3 TGTGCAATGAGAAATCGTAGTTCCGGGTATGCACTCAACTTC
## 4: 0 0 3 TGTGCTCTGAGCCATACTGGAGGCTTCAAAACTATCTTT
## 5: 0 0 3 TGTGCTCTAATCCGCAATTCAGGAAACACACCTCTTGTCTTT
## ---
## 20686: 92 0 38 TGTGGGGGTTACCAGAAAGTTACCTTT
## 20687: 94 0 42 TGTGCTCTTGGGGAAAGGATGGACAGCTGGGGGAAATTGCAGTTT
## 20688: 97 0 56 TGTGCTCTAGAACCTGGTGGCTACAATAAGCTGATTTTT
## 20689: 98 0 49 TGTGCAATGAGTGCATCAGGAGGAAGCTACATACCTACATTT
## 20690: 101 0 53 TGTGCTCTTTACAGCAGTGCTTCCAAGATAATCTTT
## beta_nuc wa wb
## <char> <int> <int>
## 1: TGCAGTGCTACATCTCGGAGAGAGCCCTACGAGCAGTACTTC 3 3
## 2: TGCGCCAGCAGCCCCGTCTGACGAATTGGAAACACCATATATTTT 3 3
## 3: TGTGCCAGCAGTGAGACAGGGCTCTCCTACGAGCAGTACTTC 3 3
## 4: TGTGCCAGCAGCCATGATGGCTCCTACGAGCAGTACTTC 3 3
## 5: TGTGCCAGCAGCTCCGGCGAAAGAAGGTCCTACAATGAGCAGTTCTTC 3 3
## ---
## 20686: TGTGCCAGTAGTATCAACGGTTACTCCCCCGGGGAGCTGTTTTTTT 130 38
## 20687: TGTGCCAGCAGTTACACGTCCGTGGGGCGCAGCGGTGAAAAACTGTTTTTTT 136 42
## 20688: TGTGCCATCAGTGACGATGCCACCCCCAAGAGACCCAGTACTTC 153 56
## 20689: TGTGCAAGTCGCCTAGGACTAGCGGGAGAGACCCAGTACTTC 147 49
## 20690: TGCGCCAGCAGCTTGGTTCCCTCGGACAGGGCCAATCAGCCCCAGCACTTT 154 53
## alpha_nuc_seq
## <char>
## 1: TGTGTGAGAGCCGGAGGCTTCAAAACTATCTTT
## 2: TGTGTGAGAGCCGGAGGCTTCAAAACTATCTTT
## 3: TGTGCAATGAGAAATCGTAGTTCCGGGTATGCACTCAACTTC
## 4: TGTGCTCTGAGCCATACTGGAGGCTTCAAAACTATCTTT
## 5: TGTGCTCTAATCCGCAATTCAGGAAACACACCTCTTGTCTTT
## ---
## 20686: TGTGGGGGTTACCAGAAAGTTACCTTT
## 20687: TGTGCTCTTGGGGAAAGGATGGACAGCTGGGGGAAATTGCAGTTT
## 20688: TGTGCTCTAGAACCTGGTGGCTACAATAAGCTGATTTTT
## 20689: TGTGCAATGAGTGCATCAGGAGGAAGCTACATACCTACATTT
## 20690: TGTGCTCTTTACAGCAGTGCTTCCAAGATAATCTTT
## beta_nuc_seq
## <char>
## 1: TGCAGTGCTACATCTCGGAGAGAGCCCTACGAGCAGTACTTC
## 2: TGCGCCAGCAGCCCCGTCTGACGAATTGGAAACACCATATATTTT
## 3: TGTGCCAGCAGTGAGACAGGGCTCTCCTACGAGCAGTACTTC
## 4: TGTGCCAGCAGCCATGATGGCTCCTACGAGCAGTACTTC
## 5: TGTGCCAGCAGCTCCGGCGAAAGAAGGTCCTACAATGAGCAGTTCTTC
## ---
## 20686: TGTGCCAGTAGTATCAACGGTTACTCCCCCGGGGAGCTGTTTTTTT
## 20687: TGTGCCAGCAGTTACACGTCCGTGGGGCGCAGCGGTGAAAAACTGTTTTTTT
## 20688: TGTGCCATCAGTGACGATGCCACCCCCAAGAGACCCAGTACTTC
## 20689: TGTGCAAGTCGCCTAGGACTAGCGGGAGAGACCCAGTACTTC
## 20690: TGCGCCAGCAGCTTGGTTCCCTCGGACAGGGCCAATCAGCCCCAGCACTTT
## alpha_beta
## <char>
## 1: TGTGTGAGAGCCGGAGGCTTCAAAACTATCTTT_TGCAGTGCTACATCTCGGAGAGAGCCCTACGAGCAGTACTTC
## 2: TGTGTGAGAGCCGGAGGCTTCAAAACTATCTTT_TGCGCCAGCAGCCCCGTCTGACGAATTGGAAACACCATATATTTT
## 3: TGTGCAATGAGAAATCGTAGTTCCGGGTATGCACTCAACTTC_TGTGCCAGCAGTGAGACAGGGCTCTCCTACGAGCAGTACTTC
## 4: TGTGCTCTGAGCCATACTGGAGGCTTCAAAACTATCTTT_TGTGCCAGCAGCCATGATGGCTCCTACGAGCAGTACTTC
## 5: TGTGCTCTAATCCGCAATTCAGGAAACACACCTCTTGTCTTT_TGTGCCAGCAGCTCCGGCGAAAGAAGGTCCTACAATGAGCAGTTCTTC
## ---
## 20686: TGTGGGGGTTACCAGAAAGTTACCTTT_TGTGCCAGTAGTATCAACGGTTACTCCCCCGGGGAGCTGTTTTTTT
## 20687: TGTGCTCTTGGGGAAAGGATGGACAGCTGGGGGAAATTGCAGTTT_TGTGCCAGCAGTTACACGTCCGTGGGGCGCAGCGGTGAAAAACTGTTTTTTT
## 20688: TGTGCTCTAGAACCTGGTGGCTACAATAAGCTGATTTTT_TGTGCCATCAGTGACGATGCCACCCCCAAGAGACCCAGTACTTC
## 20689: TGTGCAATGAGTGCATCAGGAGGAAGCTACATACCTACATTT_TGTGCAAGTCGCCTAGGACTAGCGGGAGAGACCCAGTACTTC
## 20690: TGTGCTCTTTACAGCAGTGCTTCCAAGATAATCTTT_TGCGCCAGCAGCTTGGTTCCCTCGGACAGGGCCAATCAGCCCCAGCACTTT
## method r ts pval pval_adj loss_a_frac loss_b_frac score
## <char> <num> <num> <num> <num> <num> <num> <num>
## 1: madhype NA NA NA NA 0 0.0000000 0.6184880
## 2: madhype NA NA NA NA 0 0.0000000 0.6184880
## 3: madhype NA NA NA NA 0 0.0000000 0.6184880
## 4: madhype NA NA NA NA 0 0.0000000 0.6184880
## 5: madhype NA NA NA NA 0 0.0000000 0.6184880
## ---
## 20686: madhype NA NA NA NA 0 0.7076923 1.8528944
## 20687: madhype NA NA NA NA 0 0.6911765 1.7626683
## 20688: madhype NA NA NA NA 0 0.6339869 1.1176341
## 20689: madhype NA NA NA NA 0 0.6666667 1.1736806
## 20690: madhype NA NA NA NA 0 0.6558442 0.5082625
## cdr3a va ja cdr3b vb jb
## <char> <char> <char> <char> <char> <char>
## 1: CVRAGGFKTIF TRAV12-1 TRAJ9 CSATSRREPYEQYF TRBV20-1 TRBJ2-7
## 2: CVRAGGFKTIF TRAV12-1 TRAJ9 CASSPV*RIGNTIYF TRBV5-1 TRBJ1-3
## 3: CAMRNRSSGYALNF TRAV14/DV4 TRAJ41 CASSETGLSYEQYF TRBV25-1 TRBJ2-7
## 4: CALSHTGGFKTIF TRAV9-2 TRAJ9 CASSHDGSYEQYF TRBV3-1 TRBJ2-7
## 5: CALIRNSGNTPLVF TRAV16 TRAJ29 CASSSGERRSYNEQFF TRBV5-4 TRBJ2-1
## ---
## 20686: CGGYQKVTF TRAV12-3 TRAJ13 CASSINGY_PPGSCFF TRBV19 TRBJ2-2
## 20687: CALGERMDSWGKLQF TRDV1 TRAJ24 CASSYTSVG_AAVKNCFF TRBV6-6 TRBJ1-4
## 20688: CALEPGGYNKLIF TRAV6 TRAJ4 CAISDDA_PQETQYF TRBV10-3 TRBJ2-5
## 20689: CAMSASGGSYIPTF TRAV14/DV4 TRAJ6 CASRLGLAGETQYF TRBV12-2 TRBJ2-5
## 20690: CALYSSASKIIF TRAV6 TRAJ3 CASSLVPSDRANQPQHF TRBV5-1 TRBJ1-5
run_pairing(folder_path = tp2, folder_out = save_folder, prefix = "exp3_tp2_cd8", well_filter_thres = 0.5,
well_pos = 3, wellset1 = cd8_wells)## [1] "start"
## [1] "2026-03-11 21:46:44 CDT"
## [1] "Folder already exists: ~/git/TIRTLtools/extra/exp3_cd8"
## [1] "384 TCRalpha well files loaded"
## [1] "384 TCRalpha well files loaded"
## [1] "2026-03-11 21:47:05 CDT"
## [1] "Clone threshold for QC:"
## [1] 3844
## [1] "Alpha wells passing QC:"
##
## FALSE TRUE
## 193 191
## [1] "Beta wells passing QC:"
##
## FALSE TRUE
## 193 191
## [1] "Tabulating TCRalpha pseudobulk counts"
## [1] "2026-03-11 21:47:05 CDT"
## [1] "Tabulating TCRbeta pseudobulk counts"
## [1] "2026-03-11 21:47:29 CDT"
## [1] "Pseudobulk done."
## [1] "2026-03-11 21:47:50 CDT"
## [1] "Merging alpha clonesets..."
## [1] "Done! Unique alpha clones and wells after filtering:"
## [1] 980522 191
## [1] "2026-03-11 21:47:51 CDT"
## [1] "Unique alpha clones and wells in more than: 2 wells"
## [1] 58954 191
## [1] "Done! beta clones and wells after filtering:"
## [1] 895688 191
## [1] "2026-03-11 21:47:52 CDT"
## [1] "Unique beta clones and wells in more than: 2 wells"
## [1] 56637 191
## [1] "2026-03-11 21:47:52 CDT"
## [1] "Pre-computing look-up table:"
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 3% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======== | 11% | |======== | 12% | |========= | 13% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 19% | |============== | 20% | |=============== | 21% | |=============== | 22% | |================ | 23% | |================ | 24% | |================= | 24% | |================= | 25% | |================== | 25% | |================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 29% | |===================== | 30% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================= | 34% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 40% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 47% | |================================= | 48% | |================================== | 48% | |================================== | 49% | |=================================== | 50% | |==================================== | 51% | |==================================== | 52% | |===================================== | 52% | |===================================== | 53% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 60% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 70% | |================================================= | 71% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 75% | |===================================================== | 76% | |====================================================== | 76% | |====================================================== | 77% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 80% | |======================================================== | 81% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 87% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 97% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
## [1] "2026-03-11 21:47:55 CDT"
## [1] "Filtering results, adding amino acid and V segment information"
## [1] "Scoring unique pairs..."
## [1] "2026-03-11 21:48:38 CDT"
## [1] "All is done! Number of paired clones:"
##
## madhype tshell
## 16369 9891
## Key: <wi, wj, wij>
## wi wj wij alpha_nuc
## <num> <num> <num> <char>
## 1: 0 0 3 TGTGCTACGGACGCGGAAACCGGCACTGCCAGTAAACTCACCTTT
## 2: 0 0 3 TGTGCTGTCTTCCTCAAAGCTGCAGGCAACAAGCTAACTTTT
## 3: 0 0 3 TGTGCTCTCCAGGGGAATAACAATGCCAGACTCATGTTT
## 4: 0 0 3 TGTGCTCTCCTCCTTGTTTCAGATGGCCAGAAGCTGCTCTTT
## 5: 0 0 3 TGTGCTGTGAGTCAGAAGAACAGAGATGACAAGATCATCTTT
## ---
## 26256: 95 0 36 TGCATCCTGAGAGAAGGGGGGAGTGACATGCGCTTT
## 26257: 97 0 31 TGTGCCGTCCTCTGGGGGGTTTCAGGAAACACACCTCTTGTCTTT
## 26258: 97 0 51 TGTGCAGAGAGGGGTGGAGGCTTCAAAACTATCTTT
## 26259: 97 0 53 TGTGTTGTGAGTGGCTTTATACTCACGGGAGGAGGAAACAAACTCACCTTT
## 26260: 98 0 46 TGTGCTCTGAGTGAGGCGAATTCAGATGGCCAGAAGCTGCTCTTT
## beta_nuc wa wb
## <char> <int> <int>
## 1: TGTGCCAGCAGCGTAGCTCTGTCAGGGGGCTTCTATGGCTACACCTTC 3 3
## 2: TGTGCCAGCAGCTTAGACGTCAGGGGCAGACACTGAAGCTTTCTTT 3 3
## 3: TGCGCCAGCAGCTTGGCCGGAGTTCACAGGACCACAGATACGCAGTATTTT 3 3
## 4: TGCGCCAGCAGCTTGGCCGGAGTTCACAGGACCACAGATACGCAGTATTTT 3 3
## 5: TGCAGCGTCCGACTAGCGGGAGAAACCGAGCAGTACTTC 3 3
## ---
## 26256: TGTGCCAGCAGCTTATGGGGGGGGGGGGACACTGAAGCTTTCTTT 131 36
## 26257: TGTGCCAGCAGTCCCCTCCCATGGGGGATGACACAGATACGCAGTATTTT 128 31
## 26258: TGCGCCAGCAGCTTGCGGGACCAGCCCTACAACGAGCAGTTCTTC 148 51
## 26259: TGTGCCAGCAGCCAAGAAGGACTAGCGGGGGGGCCTACACCGGGGAGCTGTTTTTT 150 53
## 26260: TGTGCCAGCAGTTTTTTGGGAGAACAATGAGCAGTTCTTC 144 46
## alpha_nuc_seq
## <char>
## 1: TGTGCTACGGACGCGGAAACCGGCACTGCCAGTAAACTCACCTTT
## 2: TGTGCTGTCTTCCTCAAAGCTGCAGGCAACAAGCTAACTTTT
## 3: TGTGCTCTCCAGGGGAATAACAATGCCAGACTCATGTTT
## 4: TGTGCTCTCCTCCTTGTTTCAGATGGCCAGAAGCTGCTCTTT
## 5: TGTGCTGTGAGTCAGAAGAACAGAGATGACAAGATCATCTTT
## ---
## 26256: TGCATCCTGAGAGAAGGGGGGAGTGACATGCGCTTT
## 26257: TGTGCCGTCCTCTGGGGGGTTTCAGGAAACACACCTCTTGTCTTT
## 26258: TGTGCAGAGAGGGGTGGAGGCTTCAAAACTATCTTT
## 26259: TGTGTTGTGAGTGGCTTTATACTCACGGGAGGAGGAAACAAACTCACCTTT
## 26260: TGTGCTCTGAGTGAGGCGAATTCAGATGGCCAGAAGCTGCTCTTT
## beta_nuc_seq
## <char>
## 1: TGTGCCAGCAGCGTAGCTCTGTCAGGGGGCTTCTATGGCTACACCTTC
## 2: TGTGCCAGCAGCTTAGACGTCAGGGGCAGACACTGAAGCTTTCTTT
## 3: TGCGCCAGCAGCTTGGCCGGAGTTCACAGGACCACAGATACGCAGTATTTT
## 4: TGCGCCAGCAGCTTGGCCGGAGTTCACAGGACCACAGATACGCAGTATTTT
## 5: TGCAGCGTCCGACTAGCGGGAGAAACCGAGCAGTACTTC
## ---
## 26256: TGTGCCAGCAGCTTATGGGGGGGGGGGGACACTGAAGCTTTCTTT
## 26257: TGTGCCAGCAGTCCCCTCCCATGGGGGATGACACAGATACGCAGTATTTT
## 26258: TGCGCCAGCAGCTTGCGGGACCAGCCCTACAACGAGCAGTTCTTC
## 26259: TGTGCCAGCAGCCAAGAAGGACTAGCGGGGGGGCCTACACCGGGGAGCTGTTTTTT
## 26260: TGTGCCAGCAGTTTTTTGGGAGAACAATGAGCAGTTCTTC
## alpha_beta
## <char>
## 1: TGTGCTACGGACGCGGAAACCGGCACTGCCAGTAAACTCACCTTT_TGTGCCAGCAGCGTAGCTCTGTCAGGGGGCTTCTATGGCTACACCTTC
## 2: TGTGCTGTCTTCCTCAAAGCTGCAGGCAACAAGCTAACTTTT_TGTGCCAGCAGCTTAGACGTCAGGGGCAGACACTGAAGCTTTCTTT
## 3: TGTGCTCTCCAGGGGAATAACAATGCCAGACTCATGTTT_TGCGCCAGCAGCTTGGCCGGAGTTCACAGGACCACAGATACGCAGTATTTT
## 4: TGTGCTCTCCTCCTTGTTTCAGATGGCCAGAAGCTGCTCTTT_TGCGCCAGCAGCTTGGCCGGAGTTCACAGGACCACAGATACGCAGTATTTT
## 5: TGTGCTGTGAGTCAGAAGAACAGAGATGACAAGATCATCTTT_TGCAGCGTCCGACTAGCGGGAGAAACCGAGCAGTACTTC
## ---
## 26256: TGCATCCTGAGAGAAGGGGGGAGTGACATGCGCTTT_TGTGCCAGCAGCTTATGGGGGGGGGGGGACACTGAAGCTTTCTTT
## 26257: TGTGCCGTCCTCTGGGGGGTTTCAGGAAACACACCTCTTGTCTTT_TGTGCCAGCAGTCCCCTCCCATGGGGGATGACACAGATACGCAGTATTTT
## 26258: TGTGCAGAGAGGGGTGGAGGCTTCAAAACTATCTTT_TGCGCCAGCAGCTTGCGGGACCAGCCCTACAACGAGCAGTTCTTC
## 26259: TGTGTTGTGAGTGGCTTTATACTCACGGGAGGAGGAAACAAACTCACCTTT_TGTGCCAGCAGCCAAGAAGGACTAGCGGGGGGGCCTACACCGGGGAGCTGTTTTTT
## 26260: TGTGCTCTGAGTGAGGCGAATTCAGATGGCCAGAAGCTGCTCTTT_TGTGCCAGCAGTTTTTTGGGAGAACAATGAGCAGTTCTTC
## method r ts pval pval_adj loss_a_frac loss_b_frac score
## <char> <num> <num> <num> <num> <num> <num> <num>
## 1: madhype NA NA NA NA 0 0.0000000 0.417523
## 2: madhype NA NA NA NA 0 0.0000000 0.417523
## 3: madhype NA NA NA NA 0 0.0000000 0.417523
## 4: madhype NA NA NA NA 0 0.0000000 0.417523
## 5: madhype NA NA NA NA 0 0.0000000 0.417523
## ---
## 26256: madhype NA NA NA NA 0 0.7251908 1.073628
## 26257: madhype NA NA NA NA 0 0.7578125 0.388667
## 26258: madhype NA NA NA NA 0 0.6554054 1.113315
## 26259: madhype NA NA NA NA 0 0.6466667 1.052812
## 26260: madhype NA NA NA NA 0 0.6805556 0.990934
## cdr3a va ja cdr3b vb jb
## <char> <char> <char> <char> <char> <char>
## 1: CATDAETGTASKLTF TRAV17 TRAJ44 CASSVALSGGFYGYTF TRBV9 TRBJ1-2
## 2: CAVFLKAAGNKLTF TRAV3 TRAJ17 CASSLDVR_ADTEAFF TRBV11-2 TRBJ1-1
## 3: CALQGNNNARLMF TRAV21 TRAJ31 CASSLAGVHRTTDTQYF TRBV5-1 TRBJ2-3
## 4: CALLLVSDGQKLLF TRAV6 TRAJ16 CASSLAGVHRTTDTQYF TRBV5-1 TRBJ2-3
## 5: CAVSQKNRDDKIIF TRAV8-6 TRAJ30 CSVRLAGETEQYF TRBV29-1 TRBJ2-7
## ---
## 26256: CILREGGSDMRF TRAV26-2 TRAJ43 CASSLWGGGDTEAFF TRBV7-2 TRBJ1-1
## 26257: CAVLWGVSGNTPLVF TRAV12-2 TRAJ29 CASSPLPW_DDTDTQYF TRBV12-3 TRBJ2-3
## 26258: CAERGGGFKTIF TRAV5 TRAJ9 CASSLRDQPYNEQFF TRBV5-1 TRBJ2-1
## 26259: CVVSGFILTGGGNKLTF TRAV8-2 TRAJ10 CASSQEGLA_GAYTGELFF TRBV3-1 TRBJ2-2
## 26260: CALSEANSDGQKLLF TRAV19 TRAJ16 CASSFLG_NNEQFF TRBV28 TRBJ2-1
run_pairing(folder_path = tp3, folder_out = save_folder, prefix = "exp3_tp3_cd8", well_filter_thres = 0.5,
well_pos = 3, wellset1 = cd8_wells)## [1] "start"
## [1] "2026-03-11 21:48:38 CDT"
## [1] "Folder already exists: ~/git/TIRTLtools/extra/exp3_cd8"
## [1] "384 TCRalpha well files loaded"
## [1] "384 TCRalpha well files loaded"
## [1] "2026-03-11 21:48:58 CDT"
## [1] "Clone threshold for QC:"
## [1] 3036
## [1] "Alpha wells passing QC:"
##
## FALSE TRUE
## 192 192
## [1] "Beta wells passing QC:"
##
## FALSE TRUE
## 192 192
## [1] "Tabulating TCRalpha pseudobulk counts"
## [1] "2026-03-11 21:48:58 CDT"
## [1] "Tabulating TCRbeta pseudobulk counts"
## [1] "2026-03-11 21:49:18 CDT"
## [1] "Pseudobulk done."
## [1] "2026-03-11 21:49:37 CDT"
## [1] "Merging alpha clonesets..."
## [1] "Done! Unique alpha clones and wells after filtering:"
## [1] 850578 192
## [1] "2026-03-11 21:49:37 CDT"
## [1] "Unique alpha clones and wells in more than: 2 wells"
## [1] 37721 192
## [1] "Done! beta clones and wells after filtering:"
## [1] 830552 192
## [1] "2026-03-11 21:49:38 CDT"
## [1] "Unique beta clones and wells in more than: 2 wells"
## [1] 38382 192
## [1] "2026-03-11 21:49:38 CDT"
## [1] "Pre-computing look-up table:"
## | | | 0% | | | 1% | |= | 1% | |= | 2% | |== | 3% | |=== | 4% | |=== | 5% | |==== | 5% | |==== | 6% | |===== | 7% | |===== | 8% | |====== | 8% | |====== | 9% | |======= | 9% | |======= | 10% | |======== | 11% | |======== | 12% | |========= | 12% | |========= | 13% | |========= | 14% | |========== | 14% | |========== | 15% | |=========== | 15% | |=========== | 16% | |============ | 17% | |============ | 18% | |============= | 18% | |============= | 19% | |============== | 20% | |=============== | 21% | |=============== | 22% | |================ | 22% | |================ | 23% | |================= | 24% | |================== | 25% | |================== | 26% | |=================== | 27% | |=================== | 28% | |==================== | 28% | |==================== | 29% | |===================== | 30% | |====================== | 31% | |====================== | 32% | |======================= | 32% | |======================= | 33% | |======================== | 34% | |======================== | 35% | |========================= | 35% | |========================= | 36% | |========================== | 36% | |========================== | 37% | |========================== | 38% | |=========================== | 38% | |=========================== | 39% | |============================ | 40% | |============================ | 41% | |============================= | 41% | |============================= | 42% | |============================== | 42% | |============================== | 43% | |=============================== | 44% | |=============================== | 45% | |================================ | 45% | |================================ | 46% | |================================= | 47% | |================================== | 48% | |================================== | 49% | |=================================== | 49% | |=================================== | 50% | |=================================== | 51% | |==================================== | 51% | |==================================== | 52% | |===================================== | 53% | |====================================== | 54% | |====================================== | 55% | |======================================= | 55% | |======================================= | 56% | |======================================== | 57% | |======================================== | 58% | |========================================= | 58% | |========================================= | 59% | |========================================== | 59% | |========================================== | 60% | |=========================================== | 61% | |=========================================== | 62% | |============================================ | 62% | |============================================ | 63% | |============================================ | 64% | |============================================= | 64% | |============================================= | 65% | |============================================== | 65% | |============================================== | 66% | |=============================================== | 67% | |=============================================== | 68% | |================================================ | 68% | |================================================ | 69% | |================================================= | 70% | |================================================== | 71% | |================================================== | 72% | |=================================================== | 72% | |=================================================== | 73% | |==================================================== | 74% | |==================================================== | 75% | |===================================================== | 76% | |====================================================== | 77% | |====================================================== | 78% | |======================================================= | 78% | |======================================================= | 79% | |======================================================== | 80% | |========================================================= | 81% | |========================================================= | 82% | |========================================================== | 82% | |========================================================== | 83% | |=========================================================== | 84% | |=========================================================== | 85% | |============================================================ | 85% | |============================================================ | 86% | |============================================================= | 86% | |============================================================= | 87% | |============================================================= | 88% | |============================================================== | 88% | |============================================================== | 89% | |=============================================================== | 90% | |=============================================================== | 91% | |================================================================ | 91% | |================================================================ | 92% | |================================================================= | 92% | |================================================================= | 93% | |================================================================== | 94% | |================================================================== | 95% | |=================================================================== | 95% | |=================================================================== | 96% | |==================================================================== | 97% | |===================================================================== | 98% | |===================================================================== | 99% | |======================================================================| 99% | |======================================================================| 100%
## [1] "2026-03-11 21:49:41 CDT"
## [1] "Filtering results, adding amino acid and V segment information"
## [1] "Scoring unique pairs..."
## [1] "2026-03-11 21:50:09 CDT"
## [1] "All is done! Number of paired clones:"
##
## madhype tshell
## 13076 7474
## Key: <wi, wj, wij>
## wi wj wij alpha_nuc
## <num> <num> <num> <char>
## 1: 0 0 3 TGTGCCGTGGGCCTTACCGGCACTGCCAGTAAACTCACCTTT
## 2: 0 0 3 TTCGACAGACTCATGTTT
## 3: 0 0 3 TGTGCTGTGACCAATGGGGCAGGCAAATCAACCTTT
## 4: 0 0 3 TGTGCTGTGACCAATGGGGCAGGCAAATCAACCTTT
## 5: 0 0 3 TGTGCCGCTGTTAACAATGACATGCGCTTT
## ---
## 20546: 94 0 37 TGTGCCGTGGAGGGGGAGTCTGGTGGCTACAATAAGCTGATTTTT
## 20547: 96 0 50 TGTGCCCCCATGGATAGCAACTATCAGTTAATCTGG
## 20548: 97 0 36 TGCGCTGTGAGAGATAGGGACACCAATGCAGGCAAATCAACCTTT
## 20549: 101 0 36 TGTGCAGACGGCCCCCAAGGAAATCTCATCTTT
## 20550: 103 0 46 TGCGGCACAGAGAGTGGAGGTAGCAACTATAAACTGACATTT
## beta_nuc wa wb
## <char> <int> <int>
## 1: TGTGCCAGCAGGGGAAACAATCAGCCCCAGCATTTT 3 3
## 2: TGTGCCAGCAGTGCCGCACCAGCAAACACTGAAGCTTTCTTT 3 3
## 3: TGCGCCAGCAGCCAAGGGGGGGGGGGGGACCAAGAGACCCAGTACTTC 3 3
## 4: TGCGCCAGCAGCCAAGGGGGGGGGGGGACCAAGAGACCCAGTACTTC 3 3
## 5: TGTGCCAGCAGTGAAAACTCCTACGAGCAGTACTTC 3 3
## ---
## 20546: TGTGCCAGCAGCGCCCACGGGGAAGGGAACGAAAAACTGTTTTTTT 131 37
## 20547: TGCAGTGCTAAATTAGCGGGCGACACCGGGGAGCTGTTTTTTT 146 50
## 20548: TGTGCCAGCAGTTTTTGCGGGGGCGGGCTACGAGCAGTACTTC 133 36
## 20549: TGTGCCAGCAGTTTTTGCGGGGGCGGGCTACGAGCAGTACTTC 137 36
## 20550: TGTGCCAGCAGCTGGGACAAAACCTACGAGCAGTACTTC 149 46
## alpha_nuc_seq
## <char>
## 1: TGTGCCGTGGGCCTTACCGGCACTGCCAGTAAACTCACCTTT
## 2: TTCGACAGACTCATGTTT
## 3: TGTGCTGTGACCAATGGGGCAGGCAAATCAACCTTT
## 4: TGTGCTGTGACCAATGGGGCAGGCAAATCAACCTTT
## 5: TGTGCCGCTGTTAACAATGACATGCGCTTT
## ---
## 20546: TGTGCCGTGGAGGGGGAGTCTGGTGGCTACAATAAGCTGATTTTT
## 20547: TGTGCCCCCATGGATAGCAACTATCAGTTAATCTGG
## 20548: TGCGCTGTGAGAGATAGGGACACCAATGCAGGCAAATCAACCTTT
## 20549: TGTGCAGACGGCCCCCAAGGAAATCTCATCTTT
## 20550: TGCGGCACAGAGAGTGGAGGTAGCAACTATAAACTGACATTT
## beta_nuc_seq
## <char>
## 1: TGTGCCAGCAGGGGAAACAATCAGCCCCAGCATTTT
## 2: TGTGCCAGCAGTGCCGCACCAGCAAACACTGAAGCTTTCTTT
## 3: TGCGCCAGCAGCCAAGGGGGGGGGGGGGACCAAGAGACCCAGTACTTC
## 4: TGCGCCAGCAGCCAAGGGGGGGGGGGGACCAAGAGACCCAGTACTTC
## 5: TGTGCCAGCAGTGAAAACTCCTACGAGCAGTACTTC
## ---
## 20546: TGTGCCAGCAGCGCCCACGGGGAAGGGAACGAAAAACTGTTTTTTT
## 20547: TGCAGTGCTAAATTAGCGGGCGACACCGGGGAGCTGTTTTTTT
## 20548: TGTGCCAGCAGTTTTTGCGGGGGCGGGCTACGAGCAGTACTTC
## 20549: TGTGCCAGCAGTTTTTGCGGGGGCGGGCTACGAGCAGTACTTC
## 20550: TGTGCCAGCAGCTGGGACAAAACCTACGAGCAGTACTTC
## alpha_beta
## <char>
## 1: TGTGCCGTGGGCCTTACCGGCACTGCCAGTAAACTCACCTTT_TGTGCCAGCAGGGGAAACAATCAGCCCCAGCATTTT
## 2: TTCGACAGACTCATGTTT_TGTGCCAGCAGTGCCGCACCAGCAAACACTGAAGCTTTCTTT
## 3: TGTGCTGTGACCAATGGGGCAGGCAAATCAACCTTT_TGCGCCAGCAGCCAAGGGGGGGGGGGGGACCAAGAGACCCAGTACTTC
## 4: TGTGCTGTGACCAATGGGGCAGGCAAATCAACCTTT_TGCGCCAGCAGCCAAGGGGGGGGGGGGACCAAGAGACCCAGTACTTC
## 5: TGTGCCGCTGTTAACAATGACATGCGCTTT_TGTGCCAGCAGTGAAAACTCCTACGAGCAGTACTTC
## ---
## 20546: TGTGCCGTGGAGGGGGAGTCTGGTGGCTACAATAAGCTGATTTTT_TGTGCCAGCAGCGCCCACGGGGAAGGGAACGAAAAACTGTTTTTTT
## 20547: TGTGCCCCCATGGATAGCAACTATCAGTTAATCTGG_TGCAGTGCTAAATTAGCGGGCGACACCGGGGAGCTGTTTTTTT
## 20548: TGCGCTGTGAGAGATAGGGACACCAATGCAGGCAAATCAACCTTT_TGTGCCAGCAGTTTTTGCGGGGGCGGGCTACGAGCAGTACTTC
## 20549: TGTGCAGACGGCCCCCAAGGAAATCTCATCTTT_TGTGCCAGCAGTTTTTGCGGGGGCGGGCTACGAGCAGTACTTC
## 20550: TGCGGCACAGAGAGTGGAGGTAGCAACTATAAACTGACATTT_TGTGCCAGCAGCTGGGACAAAACCTACGAGCAGTACTTC
## method r ts pval pval_adj loss_a_frac loss_b_frac score
## <char> <num> <num> <num> <num> <num> <num> <num>
## 1: madhype NA NA NA NA 0 0.0000000 0.6057843
## 2: madhype NA NA NA NA 0 0.0000000 0.6057843
## 3: madhype NA NA NA NA 0 0.0000000 0.6057843
## 4: madhype NA NA NA NA 0 0.0000000 0.6057843
## 5: madhype NA NA NA NA 0 0.0000000 0.6057843
## ---
## 20546: madhype NA NA NA NA 0 0.7175573 1.5618088
## 20547: madhype NA NA NA NA 0 0.6575342 1.6288014
## 20548: madhype NA NA NA NA 0 0.7293233 1.0688280
## 20549: madhype NA NA NA NA 0 0.7372263 0.5297975
## 20550: madhype NA NA NA NA 0 0.6912752 0.4727439
## cdr3a va ja cdr3b vb jb
## <char> <char> <char> <char> <char> <char>
## 1: CAVGLTGTASKLTF TRAV39 TRAJ44 CASRGNNQPQHF TRBV27 TRBJ1-5
## 2: FDRLMF TRAV1-1 TRAJ31 CASSAAPANTEAFF TRBV6-4 TRBJ1-1
## 3: CAVTNGAGKSTF TRAV8-4 TRAJ27 CASSQGGGGDQETQYF TRBV4-1 TRBJ2-5
## 4: CAVTNGAGKSTF TRAV8-4 TRAJ27 CASSQGGG_DQETQYF TRBV4-1 TRBJ2-5
## 5: CAAVNNDMRF TRAV12-2 TRAJ43 CASSENSYEQYF TRBV6-1 TRBJ2-7
## ---
## 20546: CAVEGESGGYNKLIF TRAV12-2 TRAJ4 CASSAHGE_GTKNCFF TRBV9 TRBJ1-4
## 20547: CAPMDSNYQLIW TRAV1-2 TRAJ33 CSAKLAG_TPGSCFF TRBV20-1 TRBJ2-2
## 20548: CAVRDRDTNAGKSTF TRAV1-1 TRAJ27 CASSFCG_AGYEQYF TRBV28 TRBJ2-7
## 20549: CADGPQGNLIF TRAV13-2 TRAJ42 CASSFCG_AGYEQYF TRBV28 TRBJ2-7
## 20550: CGTESGGSNYKLTF TRAV30 TRAJ53 CASSWDKTYEQYF TRBV5-1 TRBJ2-7
Load paired TCR data
The output from each call to run_pairing() is 3
tab-separated text files (.tsv):
-
<sample-name>_TIRTLoutput.tsv(.gz)– Paired TCRs – a table of computationally paired alpha/beta TCRs -
<sample-name>_pseudobulk_TRA.tsv(.gz)– Alpha chain “pseudo-bulk” data – a table of read count summary metrics for alpha-chains across all wells on a plate -
<sample-name>_pseudobulk_TRB.tsv(.gz)– Beta chain “pseudo-bulk” data – a table of read count summary metrics for beta-chains across all wells on a plate
The load_tirtlseq() function can be used to load all of
the data in the folder.
This function loads the data into a “list”, which can contain any type of unstructured data, with the following structure:
your_data_object (list)
├───meta (metadata dataframe)
└───data (list)
└───sample_1 (list)
├───alpha (alpha pseudobulk dataframe)
├───beta (beta pseudobulk dataframe)
└───paired (paired pseudobulk dataframe)
...
└───sample_n (list)
├───alpha (alpha pseudobulk dataframe)
├───beta (beta pseudobulk dataframe)
└───paired (paired pseudobulk dataframe)
The list contains two slots.
-
meta- a data frame with sample metadata -
data- a list with data for each sample
Since we used
<experiment>_<timepoint>_<marker> for the
prefix for each set of output files, we add this in the
meta_columns argument, so that the function creates a data
frame of sample metadata with this information.
data = load_tirtlseq(save_folder, sep = "_", verbose = FALSE,
meta_columns = c("experiment", "timepoint", "marker"))## Loading files from: ~/git/TIRTLtools/extra/exp3_cd8...
## Found 3 beta chain pseudo-bulk files.
## Found 3 paired chain files.
## Loaded 9 files from 3 samples.
## 3.7 seconds
Plot changes in TCR repertoire over time
After loading the data, we can use the
plot_sample_vs_sample() function to make a scatter plot of
clone frequencies between two samples.
We can re-create the top half of Figure 3B from the paper, showing clone comparisons from baseline (pre-infection) to acute (6 days post-infection) and from acute to convalescent (29 days post-infection)
gg1 = plot_sample_vs_sample(
data$data$exp3_tp1_cd8, data$data$exp3_tp2_cd8,
labelx = "Frequency at baseline", labely = "Frequency at acute",
log2fc_cutoff = 3,
sem_cutoff = 2.5,
smooth_sem = "none"
)
gg2 = plot_sample_vs_sample(
data$data$exp3_tp2_cd8, data$data$exp3_tp3_cd8,
labelx = "Frequency at acute", labely = "Frequency at conv",
log2fc_cutoff = 3,
sem_cutoff = 2.5,
smooth_sem = "none"
)
gg1 ## baseline vs. acute (top left of Fig. 3B)
gg2 ## acute vs. convalescent (top right of Fig. 3B)
Note that the objects returned by the plotting functions in the
package are almost all ggplot objects, so they can be
modified by any functions in the ggplot2 package such as
the theme() function. ggplot2 function are
loaded by default in TIRTLtools, so they are available to
the user without specifying ggplot2:: before the function
name.
Since the figures are smaller in the paper and without a legend, we can re-create that here.
gg1 + theme(legend.position = "none") ## baseline vs. acute (top left of Fig. 3B)
gg2 + theme(legend.position = "none") ## acute vs. convalescent (top right of Fig. 3B)
Find the number of expanded and contracted clones
We can also call the same function with
return_data = TRUE to get the data used to create the plot,
with read fractions, log2 fold-change, and labels for whether the clone
is expanded, contracted, or stable.
baseline_to_acute_df = plot_sample_vs_sample(data$data$exp3_tp1_cd8, data$data$exp3_tp2_cd8,
return_data = TRUE, smooth_sem = "none")
acute_to_conv_df = plot_sample_vs_sample(data$data$exp3_tp2_cd8, data$data$exp3_tp3_cd8,
return_data = TRUE, smooth_sem = "none")
baseline_to_acute_df## Key: <targetSequences, aaSeqCDR3, v, j>
## targetSequences
## <char>
## 1: CACAGCGCCGGGACACCTTATGGCTACACCTTC
## 2: CCCGAGCGGCGAGAGATCGGGTTAGAGCAGTACTTC
## 3: CCCTACTCACGGGGCTTACACTGAAGCTTTCTTT
## 4: CGCAGCAGAGGCGCAGATACGCAGTATTTT
## 5: CGCAGCGCCGGAGGGAACACTGAAGCTTTCTTT
## ---
## 44269: TTGTGCTAGTGGTTCTTGGACAGGCAATGAGCAGTTCTTC
## 44270: TTGTGCTAGTGGTTTGATAGGTCAAAACCCAAATGAGCAGTTCTTC
## 44271: TTGTGCTAGTGGTTTGGTGACTAGCGGGAGGGCGGACACCGGGGAGCTGTTTTTT
## 44272: TTTGCCAGTAGTGTTGGCAGAACTGGCTACACCTTC
## 44273: TTTGCCGCGGGACTAGCGGGTCGGGAGCAGTACTTC
## aaSeqCDR3 v j readCount.x n_wells.x
## <char> <char> <char> <num> <num>
## 1: HSAGTPYGYTF TRBV29-1 TRBJ1-2 0 0
## 2: PERREIGLEQYF TRBV19 TRBJ2-7 0 0
## 3: PYSRGL_TEAFF TRBV30 TRBJ1-1 258 11
## 4: RSRGADTQYF TRBV20-1 TRBJ2-3 18 5
## 5: RSAGGNTEAFF TRBV29-1 TRBJ1-1 0 0
## ---
## 44269: LC*WFLD_GNEQFF TRBV12-5 TRBJ2-1 148 16
## 44270: LC*WFDRS_NPNEQFF TRBV12-5 TRBJ2-1 0 0
## 44271: LC*WFGD*R_RADTGELFF TRBV12-5 TRBJ2-2 0 0
## 44272: FASSVGRTGYTF TRBV19 TRBJ1-2 0 0
## 44273: FAAGLAGREQYF TRBV4-2 TRBJ2-7 144 13
## readCount_max.x readCount_median.x sem.x readFraction.x
## <num> <num> <num> <num>
## 1: 0 0 5.627777e-06 0.000000e+00
## 2: 0 0 5.627777e-06 0.000000e+00
## 3: 37 24 8.155221e-07 2.623903e-06
## 4: 7 4 9.325517e-08 1.830630e-07
## 5: 0 0 5.627777e-06 0.000000e+00
## ---
## 44269: 28 9 3.981132e-07 1.505185e-06
## 44270: 0 0 5.627777e-06 0.000000e+00
## 44271: 0 0 5.627777e-06 0.000000e+00
## 44272: 0 0 5.627777e-06 0.000000e+00
## 44273: 21 11 3.998983e-07 1.464504e-06
## max_wells.x avg.x readCount.y n_wells.y readCount_max.y
## <num> <num> <num> <num> <num>
## 1: 0 0.000000e+00 8 6 2
## 2: 0 0.000000e+00 159 17 20
## 3: 191 2.623903e-06 48 6 11
## 4: 191 1.830630e-07 4 1 4
## 5: 0 0.000000e+00 36 6 9
## ---
## 44269: 191 1.505185e-06 64 15 7
## 44270: 0 0.000000e+00 23 5 7
## 44271: 0 0.000000e+00 108 25 14
## 44272: 0 0.000000e+00 288 13 31
## 44273: 191 1.464504e-06 11 2 7
## readCount_median.y sem.y readFraction.y max_wells.y avg.y
## <num> <num> <num> <num> <num>
## 1: 1.0 3.870094e-08 1.000851e-07 191 1.000851e-07
## 2: 9.0 5.352627e-07 1.989191e-06 191 1.989191e-06
## 3: 9.0 2.728054e-07 6.005106e-07 191 6.005106e-07
## 4: 4.0 2.211298e-06 5.004255e-08 191 5.004255e-08
## 5: 7.0 2.013660e-07 4.503830e-07 191 4.503830e-07
## ---
## 44269: 5.0 2.237762e-07 8.006808e-07 191 8.006808e-07
## 44270: 4.0 1.475716e-07 2.877447e-07 191 2.877447e-07
## 44271: 4.0 2.984159e-07 1.351149e-06 191 1.351149e-06
## 44272: 22.0 1.009929e-06 3.603064e-06 191 3.603064e-06
## 44273: 5.5 2.211298e-06 1.376170e-07 191 1.376170e-07
## log2FC sign
## <num> <char>
## 1: 0.1376151 stable
## 2: 1.5797553 stable
## 3: -1.1790120 stable
## 4: -0.1720791 stable
## 5: 0.5364339 stable
## ---
## 44269: -0.4763744 stable
## 44270: 0.3648466 stable
## 44271: 1.2333659 stable
## 44272: 2.2025944 stable
## 44273: -1.1152823 stable
acute_to_conv_df## Key: <targetSequences, aaSeqCDR3, v, j>
## targetSequences
## <char>
## 1: CACAGCGCCGGGACACCTTATGGCTACACCTTC
## 2: CCCGAGCGGCGAGAGATCGGGTTAGAGCAGTACTTC
## 3: CCCTACTCACGGGGCTTACACTGAAGCTTTCTTT
## 4: CGCAGCCCCCAGGAGGGAGGCTATGGCTACACCTTC
## 5: CGCAGCGCCGGAGGGAACACTGAAGCTTTCTTT
## ---
## 43622: TTGTGCTAGTGGTTCTTGGACAGGCAATGAGCAGTTCTTC
## 43623: TTGTGCTAGTGGTTTGATAGGTCAAAACCCAAATGAGCAGTTCTTC
## 43624: TTGTGCTAGTGGTTTGGTGACTAGCGGGAGGGCGGACACCGGGGAGCTGTTTTTT
## 43625: TTTAGCGGCAAGGGATGGTGGAATCAGCCCCAGCATTTT
## 43626: TTTGCCAGTAGTGTTGGCAGAACTGGCTACACCTTC
## aaSeqCDR3 v j readCount.x n_wells.x
## <char> <char> <char> <num> <num>
## 1: HSAGTPYGYTF TRBV29-1 TRBJ1-2 8 6
## 2: PERREIGLEQYF TRBV19 TRBJ2-7 159 17
## 3: PYSRGL_TEAFF TRBV30 TRBJ1-1 48 6
## 4: RSPQEGGYGYTF TRBV29-1 TRBJ1-2 8 3
## 5: RSAGGNTEAFF TRBV29-1 TRBJ1-1 36 6
## ---
## 43622: LC*WFLD_GNEQFF TRBV12-5 TRBJ2-1 64 15
## 43623: LC*WFDRS_NPNEQFF TRBV12-5 TRBJ2-1 23 5
## 43624: LC*WFGD*R_RADTGELFF TRBV12-5 TRBJ2-2 108 25
## 43625: FSGKGWWNQPQHF TRBV14 TRBJ1-5 0 0
## 43626: FASSVGRTGYTF TRBV19 TRBJ1-2 288 13
## readCount_max.x readCount_median.x sem.x readFraction.x
## <num> <num> <num> <num>
## 1: 2 1 3.870094e-08 1.000851e-07
## 2: 20 9 5.352627e-07 1.989191e-06
## 3: 11 9 2.728054e-07 6.005106e-07
## 4: 5 2 8.333671e-08 1.000851e-07
## 5: 9 7 2.013660e-07 4.503830e-07
## ---
## 43622: 7 5 2.237762e-07 8.006808e-07
## 43623: 7 4 1.475716e-07 2.877447e-07
## 43624: 14 4 2.984159e-07 1.351149e-06
## 43625: 0 0 2.134084e-06 0.000000e+00
## 43626: 31 22 1.009929e-06 3.603064e-06
## max_wells.x avg.x readCount.y n_wells.y readCount_max.y
## <num> <num> <num> <num> <num>
## 1: 191 1.000851e-07 0 0 0
## 2: 191 1.989191e-06 0 0 0
## 3: 191 6.005106e-07 70 2 35
## 4: 191 1.000851e-07 14 6 3
## 5: 191 4.503830e-07 15 3 12
## ---
## 43622: 191 8.006808e-07 146 19 16
## 43623: 191 2.877447e-07 25 4 10
## 43624: 191 1.351149e-06 79 14 10
## 43625: 0 0.000000e+00 95 8 18
## 43626: 191 3.603064e-06 290 14 32
## readCount_median.y sem.y readFraction.y max_wells.y avg.y
## <num> <num> <num> <num> <num>
## 1: 0.0 3.884462e-06 0.000000e+00 0 0.000000e+00
## 2: 0.0 3.884462e-06 0.000000e+00 0 0.000000e+00
## 3: 35.0 3.884462e-06 8.434052e-07 192 8.434052e-07
## 4: 2.0 6.673244e-08 1.686810e-07 192 1.686810e-07
## 5: 2.0 1.446004e-07 1.807297e-07 192 1.807297e-07
## ---
## 43622: 7.0 4.064522e-07 1.759102e-06 192 1.759102e-06
## 43623: 5.0 1.979693e-07 3.012161e-07 192 3.012161e-07
## 43624: 5.0 2.602906e-07 9.518430e-07 192 9.518430e-07
## 43625: 11.5 3.799922e-07 1.144621e-06 192 1.144621e-06
## 43626: 18.5 9.497320e-07 3.494107e-06 192 3.494107e-06
## log2FC sign
## <num> <char>
## 1: -0.13761513 stable
## 2: -1.57975527 stable
## 3: 0.20384100 stable
## 4: 0.08726611 stable
## 5: -0.29675516 stable
## ---
## 43622: 0.61565649 stable
## 43623: 0.01501407 stable
## 43624: -0.26852885 stable
## 43625: 1.10072296 stable
## 43626: -0.03455981 stable
table(baseline_to_acute_df$sign)##
## down stable up
## 113 43180 980
table(acute_to_conv_df$sign)##
## down stable up
## 321 43197 108
The numbers of expanded and contracted clones match the figures from the paper, with small differences due to differing quality control settings.