Skip to content

Repository files navigation

uTILity

Comprehensive collection of Single-Cell Tumor-Infiltrating Lymphocyte Data

Introduction

The original intent of assembling a data set of publicly-available tumor-infiltrating T cells (TILs) with paired TCR sequencing was to expand and improve the scRepertoire R package. However, after some discussion, we decided to release the data set for everyone, a complete summary of the sequencing runs and the sample information can be found in the meta data of the Seurat object.

This involves several steps 1) loading the respective GE data, 2) harmonizing the data by sample and cohort information, 3) iterating through automatic annotation, and 4) adding the TCR information. This information is stored in the meta data of the Seurat objects - an explanation of each variable is available here.

Folder Structure

├── config.yaml - parameters control for processing and integrating
├── data
│ ├── sequencingRuns - 10x Outputs
│ └── processedData - processed .rds and larger combined cohorts
├── environment.yml - python environment
├── figs - image ouputs for processing and integration
├── LICENSE.txt
├── NEWS.txt - update information
├── py - python scripts
├── R - R scripts
├── README.md
├── results - intermediate and final ouputs
├── run_pipeline.R - main pipeline to run
└── summary - tables summarizing the data

Sample ID:

Cohort Information

Cohort Summary

Last Updated: 2025-12-03

MetricCount
Total Cells2,606,129
Sequencing Runs722
Unique Tissues13
Unique Patients420
Cells with TCR1,841,128

Here is the current list of data sources, the number of cells that passed filtering by tissue type. Please cite the data if you are using uTILity.

TumorNormalBloodJuxtaLNMetCancer TypeCitations
CCR-20-43942676000000Ovariancite
EGAS0000100480918166700000Breastcite
GSE1147242765100000Breastcite
GSE12163611436012319000Renalcite
GSE1238147803400000Multiplecite
GSE139555931607862525363000Multiplecite
GSE14537066592409160000Esophagealcite
GSE1481902263062010156440Melanomacite
GSE15482614491134140000Lungcite
GSE1592518356047721057050Melanomacite
GSE16250014644023401376100Lungcite
GSE16452236990868114602704637636648Colorectalcite
GSE1688440055302000Lungcite
GSE17602143660912841113267307106332011Lungcite
GSE17999478574000062341Lungcite
GSE18026823215000296990HNSCCcite
GSE181061404292762237426000Renalcite
GSE185206163294172310098200Lungcite
GSE19548612251200000Ovariancite
GSE2002180000018495Melanomacite
GSE200996862350152722000HNSCCcite
GSE2014252288802778101135012253Biliarycite
GSE2115040033685000Melanomacite
GSE21221700229505000Endometrialcite
GSE2132432835018363002693Ovariancite
GSE21521926303066000000Lungcite
GSE2277085308700000Merkel Cellcite
GSE24247741595021595000Melanomacite
PRJNA705464988921511330340035050Renalcite

Methods

Single-Cell Data Processing

The filtered gene matrices output from Cell Ranger align function from individual sequencing runs (10x Genomics, Pleasanton, CA) loaded into the R global environment. For each sequencing run cell barcodes were appended to contain a unique prefix to prevent issues with duplicate barcodes. The results were then ported into individual Seurat objects (citation), where the cells with > 10% mitochondrial genes and/or 2.5x standard deviation from the mean of features were excluded for quality control purposes. At the individual sequencing run level, doublets were estimated using the scDblFinder (v1.4.0) R package.

Annotation of Cells

Automatic annotation was performed using the singler (v2.2.0) R package (citation) with the HPCA (citation) and DICE (citation) data sets as references and the fine label discriminators. Individual sequencing runs were subsetted to run through the singleR algorithm in order to reduce memory demands. The output of all the singleR analyses were collated and appended to the meta data of the Seurat object. Likewise, the Azimuth (v0.4.6.9004) R Package (citation was used for automatic annotation as a partially orthogonal approach.

Addition of TCR data

The filtered contig annotation T cell receptor (TCR) data for available sequencing runs were loaded into the R global environment. Individual contigs were combined using the combineTCR() function of scRepertoire (v2.0.0) R Package (citation). Clonotypes were assigned to barcodes and were multiple duplicate chains for individual cells were filtered to select for the top expressing contig by read count. The clonotype data was then added to the Seurat Object with proportion across individual patients being used to calculate frequency.

Session Info

Session Info for the initial data processing and analysis can be found here.


Citations

As of right now, there is no citation associated with the assembled data set. However if using the data, please find the corresponding manuscript for each data set summarized above or can be found in the summary table. In addition, if using the processed data, feel free to modify the language in the methods section (above) and please cite the appropriate manuscripts of the software or references that were used.

Itemized List of the Software Used

Itemized List of Reference Data Used


Installation

If you are interested in the set up and running of the evalauation of the uTILity pipeline, please download the processedData file from the zenodo archive, unzip and place it in the ./data directory.

Step 1: Clone the Repository

git clone https://github.com/ncborcherding/utility
cd utility

Step 2: Create the Conda Environment

The pipeline uses a single conda environment for all Python dependencies.

# Create the environment (this may take 5-10 minutes)
conda env create -f environment.yml
# Verify installation
conda activate sc-integration-benchmark
python -c "import scvi; import scanpy; print('✓ Python packages OK')"
conda deactivate
GPU Setup

For NVIDIA GPU acceleration, edit environment.yml before creating the environment:

Comment out - cpuonly Uncomment the appropriate CUDA version:

# Option B: CUDA 11.8
- pytorch>=2.2
- pytorch-cuda=11.8
# OR Option C: CUDA 12.1
- pytorch>=2.2
- pytorch-cuda=12.1

Verify GPU detection after installation:

conda activate sc-integration-benchmark
python -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}')"
Apple Silicon (M1/M2/M3)

The CPU-only configuration works on Apple Silicon. MPS (Metal Performance Shaders) acceleration is automatically detected but has limitations:

  • Mixed precision is not supported on MPS; the scripts automatically force precision: "32-true"
  • Batch sizes are capped at 128 for stability
  • Performance is good but not as fast as NVIDIA GPUs

No changes to environment.yml are needed for Apple Silicon.

Step 3: Install R Packages

# Install BiocManager if needed
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
# Core packages
install.packages(c("Seurat", "yaml", "dplyr", "data.table", "reticulate"))
# Bioconductor packages
BiocManager::install(c("batchelor", "rhdf5"))
# SeuratDisk (for h5ad conversion)
remotes::install_github("mojaveazure/seurat-disk")

Step 4: Configure reticulate

Configure per-session in R:

library(reticulate)
# Use the conda environment
use_condaenv("sc-integration-benchmark", required = TRUE)
# Verify
py_config()

License

The data and analysis of uTILity is provided under a CC BY-NC 4.0 license, please feel free to remix, transform, and build upon the material. However, the intent of this resource is noncommercial.


Contact

Questions, comments, suggestions, please feel free to contact Nick Borcherding via this repository.

About

Collection of Tumor-Infiltrating Lymphocyte Single-Cell Experiments with TCR

Resources

Stars

115 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages