<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Archiving and Interchange DTD v2.3 20070202//EN" "archivearticle.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="methods-article" dtd-version="2.3" xml:lang="EN">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Immunol.</journal-id>
<journal-title>Frontiers in Immunology</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Immunol.</abbrev-journal-title>
<issn pub-type="epub">1664-3224</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fimmu.2023.1241283</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Immunology</subject>
<subj-group>
<subject>Methods</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Using combined single-cell gene expression, TCR sequencing and cell surface protein barcoding to characterize and track CD4+ T cell clones from murine tissues</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Nedwed</surname><given-names>Annekathrin Silvia</given-names>
</name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="author-notes" rid="fn002"><sup>&#x2020;</sup></xref>
<uri xlink:href="https://loop.frontiersin.org/people/2500939"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Helbich</surname><given-names>Sara Salome</given-names>
</name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<xref ref-type="author-notes" rid="fn002"><sup>&#x2020;</sup></xref>
<uri xlink:href="https://loop.frontiersin.org/people/2380025"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Braband</surname><given-names>Kathrin Luise</given-names>
</name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<uri xlink:href="https://loop.frontiersin.org/people/2070343"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Volkmar</surname><given-names>Michael</given-names>
</name>
<xref ref-type="aff" rid="aff4"><sup>4</sup></xref>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Delacher</surname><given-names>Michael</given-names>
</name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<xref ref-type="author-notes" rid="fn001"><sup>*</sup></xref>
<xref ref-type="author-notes" rid="fn003"><sup>&#x2021;</sup></xref>
<uri xlink:href="https://loop.frontiersin.org/people/1731171"/>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Marini</surname><given-names>Federico</given-names>
</name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="aff" rid="aff3"><sup>3</sup></xref>
<xref ref-type="author-notes" rid="fn001"><sup>*</sup></xref>
<xref ref-type="author-notes" rid="fn003"><sup>&#x2021;</sup></xref>
<uri xlink:href="https://loop.frontiersin.org/people/921676"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>Institute of Medical Biostatistics, Epidemiology and Informatics (IMBEI), University Medical Center Mainz</institution>, <addr-line>Mainz</addr-line>, <country>Germany</country></aff>
<aff id="aff2"><sup>2</sup><institution>Institute of Immunology, University Medical Center Mainz</institution>, <addr-line>Mainz</addr-line>, <country>Germany</country></aff>
<aff id="aff3"><sup>3</sup><institution>Research Center for Immunotherapy, University Medical Center Mainz</institution>, <addr-line>Mainz</addr-line>, <country>Germany</country></aff>
<aff id="aff4"><sup>4</sup><institution>Helmholtz-Institute for Translational Oncology Mainz (HI-TRON Mainz)</institution>, <addr-line>Mainz</addr-line>, <country>Germany</country></aff>
<author-notes>
<fn fn-type="edited-by">
<p>Edited by: Matthieu Perreau, Centre Hospitalier Universitaire Vaudois (CHUV), Switzerland</p>
</fn>
<fn fn-type="edited-by">
<p>Reviewed by: Ping Zhang, University of Oxford, United Kingdom; Mark Izraelson, Institute of Bioorganic Chemistry (RAS), Russia</p>
</fn>
<fn fn-type="corresp" id="fn001">
<p>*Correspondence: Michael Delacher, <email xlink:href="mailto:delacher@uni-mainz.de">delacher@uni-mainz.de</email>; Federico Marini, <email xlink:href="mailto:marinif@uni-mainz.de">marinif@uni-mainz.de</email>
</p>
</fn>
<fn fn-type="equal" id="fn002">
<p>&#x2020;These authors have contributed equally to this work and share first authorship</p>
</fn>
<fn fn-type="equal" id="fn003">
<p>&#x2021;These authors have contributed equally to this work and share last authorship</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>12</day>
<month>10</month>
<year>2023</year>
</pub-date>
<pub-date pub-type="collection">
<year>2023</year>
</pub-date>
<volume>14</volume>
<elocation-id>1241283</elocation-id>
<history>
<date date-type="received">
<day>16</day>
<month>06</month>
<year>2023</year>
</date>
<date date-type="accepted">
<day>31</day>
<month>08</month>
<year>2023</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2023 Nedwed, Helbich, Braband, Volkmar, Delacher and Marini</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>Nedwed, Helbich, Braband, Volkmar, Delacher and Marini</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>Single-cell gene expression analysis using sequencing (scRNA-seq) has gained increased attention in the past decades for studying cellular transcriptional programs and their heterogeneity in an unbiased manner, and novel protocols allow the simultaneous measurement of gene expression, T-cell receptor clonality and cell surface protein expression. In this article, we describe the methods to isolate scRNA/TCR-seq-compatible CD4<sup>+</sup> T cells from murine tissues, such as skin, spleen, and lymph nodes. We describe the processing of cells and quality control parameters during library preparation, protocols for multiplexing of samples, and strategies for sequencing. Moreover, we describe a step-by-step bioinformatic analysis pipeline from sequencing data generated using these protocols. This includes quality control, preprocessing of sequencing data and demultiplexing of individual samples. We perform quantification of gene expression and extraction of T-cell receptor alpha and beta chain sequences, followed by quality control and doublet detection, and methods for harmonization and integration of datasets. Next, we describe the identification of highly variable genes and dimensionality reduction, clustering and pseudotemporal ordering of data, and we demonstrate how to visualize the results with interactive and reproducible dashboards. We will combine different analytic R-based frameworks such as <italic>Bioconductor</italic> and <italic>Seurat</italic>, illustrating how these can be interoperable to optimally analyze scRNA/TCR-seq data of CD4<sup>+</sup> T cells from murine tissues.</p>
</abstract>
<kwd-group>
<kwd>scRNA seq</kwd>
<kwd>scTCR seq</kwd>
<kwd>TCR (T-cell receptor)</kwd>
<kwd>CD4 T cell</kwd>
<kwd>tissue CD4 T cell</kwd>
</kwd-group>
<counts>
<fig-count count="16"/>
<table-count count="27"/>
<equation-count count="0"/>
<ref-count count="50"/>
<page-count count="39"/>
<word-count count="15135"/>
</counts>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-in-acceptance</meta-name>
<meta-value>Cancer Immunity and Immunotherapy</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec id="s1" sec-type="intro">
<title>Introduction</title>
<p>Single-cell sequencing-based technologies have significantly changed our view on cellular architecture and heterogeneity of samples (<xref ref-type="bibr" rid="B1">1</xref>&#x2013;<xref ref-type="bibr" rid="B4">4</xref>). One particular example includes single-cell sequencing-based gene expression profiling (scRNA-seq) of individual cells (<xref ref-type="bibr" rid="B5">5</xref>, <xref ref-type="bibr" rid="B6">6</xref>), which is based on the linear amplification of RNA derived from individual cells, followed by complex bioinformatic processing steps and identification of cell types in an unbiased way (<xref ref-type="bibr" rid="B7">7</xref>&#x2013;<xref ref-type="bibr" rid="B9">9</xref>). Despite differences in technology and chemistry (benchmarked in (<xref ref-type="bibr" rid="B10">10</xref>)), single-cell sequencing experiments generally require four main steps (<xref ref-type="bibr" rid="B11">11</xref>).</p>
<p>First, tissues or organs have to be processed and digested to liberate target cells from the extracellular matrix in the tissue network. This yields a single-cell suspension where our target cells are present in varying frequencies, based on the tissue itself and its state, often dependent on the experimental conditions under investigation (Inflamed? Tumor-bearing? Virus-infected? Necrotic? Hypoxic)?. These steps have to be optimized to yield viable, intact cells without causing too much stress or hypoxic damage (<xref ref-type="bibr" rid="B12">12</xref>). While experimental procedures are now established for various cell and tissue types, no detailed workflow is available for tissue T cells, covering not only the wet-lab steps but also providing comprehensive guidance on the bioinformatic analyses for the datasets generated. In previous work, we have developed protocols for isolating T cells from a wide array of murine and human tissues such as skin, visceral adipose tissue, colon, lungs, liver, or different lymphoid tissues, and used them for downstream sequencing-based analysis (<xref ref-type="bibr" rid="B13">13</xref>&#x2013;<xref ref-type="bibr" rid="B16">16</xref>). In the methods paper presented here, we will describe protocols to isolate target cells from murine skin and secondary lymphoid tissues such as spleen and lymph nodes (LN). To promote best data quality, we pre-enrich for viable, high-quality target cells using fluorescence-activated cell sorting (FACS) before performing single-cell barcoding. This allows the removal of unwanted cells, dead cells, dying cells, and cellular debris that might otherwise compromise quality. We will provide advice on cell sorting and sample multiplexing using barcoded antibodies.</p>
<p>In the second critical step, highly pure target cells are processed (&#x201c;barcoded&#x201d;) and genetic material is amplified. Single-cell isolation and library preparation can be based on several different technologies. This begins with limiting dilution technologies, magnetic cell sorting, micromanipulation using microscope-guided capillary pipettes or laser microdissection, sorting of single cells into a 96- or 384-well plate using FACS, to microfluidic systems that combine droplets and cells, and new technologies and adaptations are developed rapidly (<xref ref-type="bibr" rid="B12">12</xref>, <xref ref-type="bibr" rid="B17">17</xref>). Importantly, all different technologies aim to capture a single cell in an isolated reaction volume to add a unique barcode specific for this cell.</p>
<p>In a third step, a sequencing library is prepared. In our case, we prepare not only one, but three libraries: a gene expression library that contains sequencing reads allowing to identify and quantify genes expressed on a cell-individual level (GEX library); a second library that contains quantitative information about cell surface protein expression and sample multiplexing (hashtag oligo) information (CSP library); and a library that contains the T-cell receptor usage information as nucleotide sequence (VDJ library). We will provide examples of all three libraries including PCR cycles, concentration, and electrophoresis-based size profiles.</p>
<p>The last step of the wet-lab procedure is the sequencing of all three libraries using high-throughput next-generation sequencing technology. At the end of the run, <italic>FastQ</italic> data are demultiplexed and copied from the sequencing instrument, and are now ready to undergo bioinformatic processing. In this methods paper, we provide an example dataset which we generated for this publication, where we applied the above-mentioned protocols to combine single-cell gene expression, TCR sequencing and cell surface protein barcoding to characterize and track CD4<sup>+</sup> T-cell clones from murine tissues, and which can be downloaded by the reader for reproducing our bioinformatics workflow. The datasets include several thousand CD4<sup>+</sup>CD25<sup>+</sup> Treg cells from murine spleen, mesenteric LN (mLN), inguinal LN (iLN) as well as CD3<sup>+</sup> immune cells from skin, for all of which GEX, CSP and VDJ libraries have been generated and sequenced.</p>
<p>Using this dataset, we will describe a step-by-step bioinformatic workflow to help repeat and reproduce the results achieved using the methods described in this paper. First, we apply <italic>FastQC</italic> and <italic>CellRangerMulti</italic> to enable a combined analysis of all individual samples and determine overall sequencing quality and identify individual cells. Here, we discuss critical quality-related parameters that <italic>CellRanger</italic> delivers, and discuss typical results obtained with CD4<sup>+</sup> T cells from tissues. In a next step, we create the count matrix from <italic>CellRangerMulti</italic> output. We describe the pre-processing of scRNA-seq data using a variety of freely available R packages to perform quality control (QC) and filtering, dimensionality reduction, removal of doublets, evaluation of batch effect correction, and generating the final filtered dataset for analysis (following best practices outlined in (<xref ref-type="bibr" rid="B8">8</xref>) and (<xref ref-type="bibr" rid="B7">7</xref>)). We will also provide guidance on clustering, marker gene detection, cell type annotation, and interactive data exploration, accompanying this manuscript with a notebook containing all code and output from the analysis of our test dataset, which we refer to in the corresponding paragraphs. All essential steps for this end-to-end workflow are summarized in <xref ref-type="fig" rid="f1"><bold>Figure&#xa0;1</bold></xref>.</p>
<fig id="f1" position="float">
<label>Figure&#xa0;1</label>
<caption>
<p>Graphical abstract. The left panel describes tissue processing and library prep: Tissues harvested from an individual mouse are enzymatically and mechanically digested (1) and material is magnetically enriched for target cells (2) to make cell sorting (3) more efficient. After obtaining a pure target population (3), cells (labelled with Biolegend TotalSeqC anti-mouse Hashtagging antibodies) and 10X beads are loaded on the 10X Chromium controller (4) followed by scRNA-seq library preparation (5). The middle panel describes sequencing (1) quality control using <italic>CellRangerMulti</italic> and <italic>FastQC</italic> (2). Using R and Bioconductor, data can be pre-processed. These steps include QC and filtering (3.1), the identification of doublets (3.2), and, if necessary, batch effect correction (3.3) to yield the final, filtered dataset (4). The right panel describes data analysis, comprising the clustering (1), marker gene detection (2) as well as TCR repertoire diversity analysis (3). Furthermore, cell type annotations (4) and trajectory analysis can be performed (5). Moreover, an interactive data exploration by using iSEE can be done (6). Elements of this figure have been created with Biorender using figures and plots generated in this manuscript.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g001.tif"/>
</fig>
</sec>
<sec id="s2">
<title>Methods &#x2013; experimental procedures</title>
<sec id="s2_1">
<title>Isolation of T cells from murine spleen, mLN and iLN</title>
<p>To isolate T cells from murine secondary lymphoid tissues such as spleen or lymph nodes, a midline excision is performed to open the skin and abdominal wall, and forceps are used to expose the peritoneal cavity. The spleen is harvested immediately and stored at 4&#xb0;C until use. To isolate mLNs, the cecum is located, the small intestine is moved to the side and the chain of mLNs are exposed. Using forceps, the tissue is harvested, placed in FACS buffer (<xref ref-type="table" rid="T1"><bold>Table&#xa0;1</bold></xref>) and stored at 4&#xb0;C. Inguinal lymph nodes are collected from both hemispheres beneath the skin, placed in FACS buffer and stored at 4&#xb0;C until use. To process the spleen, it is placed on a 100 &#xb5;M filter unit and is mechanically dissociated using a plunger or forceps. Following centrifugation (2&#xa0;min, 1000g, 4&#xb0;C), red blood cells are lysed using a commercially available ACK lysis buffer (e.g., Thermo Fisher #A1049201). The cell suspension is filtered using a 70 &#xb5;m strainer, resuspended in 500 &#xb5;l FACS buffer, and cells are counted. To process LNs, the individual nodes are placed on a 100 &#xb5;M filter unit and are mechanically dissociated using a plunger or forceps. Following centrifugation (2&#xa0;min, 1000g, 4&#xb0;C), the suspension is filtered using a 70 &#xb5;m strainer, resuspended in 500 &#xb5;l FACS buffer, and counted.</p>
<table-wrap id="T1" position="float">
<label>Table&#xa0;1</label>
<caption>
<p>Formulation for FACS buffer.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="middle" align="left">Ingredient</th>
<th valign="middle" align="left">Manufacturer</th>
<th valign="middle" align="left">Final concentration</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="middle" align="left">Phosphate-buffer saline 10X</td>
<td valign="middle" align="left">Gibco #10010023 or other</td>
<td valign="middle" align="left">1X</td>
</tr>
<tr>
<td valign="middle" align="left">FCS 100%</td>
<td valign="middle" align="left">Sigma #F7524 or other</td>
<td valign="middle" align="left">2%</td>
</tr>
<tr>
<td valign="middle" align="left">Deionized water</td>
<td valign="middle" align="left">NA</td>
<td valign="middle" align="left">Up to final volume</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Afterwards, we add Fc blocking reagent (Miltenyi Biotec #130-092-575) to prevent unspecific binding of antibodies and beads, followed by specific labeling using 1 &#xb5;g PE-conjugated anti-mouse CD4 (Clone RM4-5, Biolegend #100512) or 1 &#xb5;g PE-conjugated anti-mouse CD25 (Clone PC61, Biolegend # 102008) antibodies in 500 &#xb5;l and stain for 20&#xa0;min at 4&#xb0;C. After staining, cells are centrifuged (2&#xa0;min, 1000g, 4&#xb0;C), washed using 1000 &#xb5;l of FACS buffer, and resuspended in MACS buffer (<xref ref-type="table" rid="T2"><bold>Table&#xa0;2</bold></xref>). Next, target cells are bound by anti-PE ultrapure microbeads (Miltenyi Biotec #130-105-639) for 20&#xa0;min at 4&#xb0;C, followed again by two centrifugation (2&#xa0;min, 1000g, 4&#xb0;C) and washing steps using 1000 &#xb5;l of FACS buffer. Finally, samples are re-suspended in 500 &#xb5;l MACS buffer. A 70&#xb5;l filter unit is placed on an equilibrated MACS column (we recommend working at 4&#xb0;C to prevent cellular degradation) and the sample is loaded. The column is washed twice with 5&#xa0;ml MACS buffer.</p>
<table-wrap id="T2" position="float">
<label>Table&#xa0;2</label>
<caption>
<p>Formulation for MACS buffer.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="middle" align="left">Ingredient</th>
<th valign="middle" align="left">Manufacturer</th>
<th valign="middle" align="left">Final concentration</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="middle" align="left">Phosphate-buffer saline 10X</td>
<td valign="middle" align="left">Gibco #10010023 or other</td>
<td valign="middle" align="left">1X</td>
</tr>
<tr>
<td valign="middle" align="left">Bovine Serum Albumin 100%</td>
<td valign="middle" align="left">Sigma #A4503 or other</td>
<td valign="middle" align="left">0,5% (w/v)</td>
</tr>
<tr>
<td valign="middle" align="left">Ethylenediaminetetraacetic acid</td>
<td valign="middle" align="left">ThermoFisher #15575020</td>
<td valign="middle" align="left">1 mM</td>
</tr>
<tr>
<td valign="middle" align="left">Deionized water</td>
<td valign="middle" align="left">NA</td>
<td valign="middle" align="left">Up to final volume</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Afterwards, the sample is eluted in 500 &#xb5;L FACS buffer and stained for 30&#xa0;min at 4&#xb0;C using fluorescence-labelled antibodies as well as TotalSeqC anti-mouse Hashtagging antibodies (Biolegend #<italic>155861</italic> (C1), #<italic>155863</italic> (C2), #<italic>155865</italic> (C3), #<italic>155865</italic> (C4)). To increase TotalSeqC antibody labeling, it is recommended to wash cells 3-5 times with 500 &#xb5;L FACS buffer after staining. For sorting, cells can be resuspended in 200 &#xb5;L MACS buffer. In order to prevent aggregates during the co-staining of fluorescence-labeled antibodies and Biolegend TotalSeqC antibodies, it&#x2019;s recommended to centrifuge the antibody mix at 14,000 x g for 10&#xa0;min at 4&#xb0;C. Afterwards the supernatant should be transferred to a new tube and maintained at 4&#xb0;C. The antibody aggregates will stay at the bottom of the original tube. For sorting, an example is shown in <xref ref-type="fig" rid="f2"><bold>Figure&#xa0;2</bold></xref>. We recommend a gating strategy where CD4<sup>+</sup> or CD25<sup>+</sup> T cells are enriched to high purity using FACS, and dead cells, unwanted cell types and doublets are excluded. The target cells can be sorted into MACS buffer. A small part of the sorted population (target cells) can then be re-analyzed before downstream processing to determine post sort purity, viability, and cell recovery/sort efficiency. If the post sort QC indicates that cells are of good viability and purity (for troubleshooting see <xref ref-type="table" rid="T3"><bold>Table&#xa0;3</bold></xref>), the sample can be subjected to single-cell barcoding, as described later.</p>
<fig id="f2" position="float">
<label>Figure&#xa0;2</label>
<caption>
<p>Overview of sample preparation for scRNA-seq of CD4<sup>+</sup> T cells from murine tissues. <bold>(A)</bold> Procedural overview. Organs are removed, followed by tissue digestion and pre-enrichment for CD4<sup>+</sup> T cells. These are then sorted, followed by single-cell barcoding using 10X Chromium controller. <bold>(B, C)</bold> Flow cytometry plots illustrating the gating scheme to isolate T cells from lymphoid tissues such as spleen and mLN. <bold>(D)</bold> Post sort QC of spleen, mLN, iLN CD25<sup>+</sup> sorted into the same collection tube. <bold>(E)</bold> Flow cytometry plots illustrating the gating scheme to isolate T cells from murine skin tissue. Figure elements created with Biorender.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g002.tif"/>
</fig>
<table-wrap id="T3" position="float">
<label>Table&#xa0;3</label>
<caption>
<p>Troubleshooting and Recommendations.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="middle" align="left">Description</th>
<th valign="middle" align="left">Solution</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="middle" align="left">All cells are dead</td>
<td valign="middle" align="left">Analyze buffer ingredients, optimize erythrocyte lysis procedure</td>
</tr>
<tr>
<td valign="middle" align="left">Erythrocyte contamination</td>
<td valign="middle" align="left">Optimize ACK lysis procedure</td>
</tr>
<tr>
<td valign="middle" align="left">Low purity of CD4<sup>+</sup> or CD25<sup>+</sup> T cells</td>
<td valign="middle" align="left">Use Fc blocking reagent, work at 4&#xb0;C</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s2_2">
<title>Isolation of T cells from murine skin tissue</title>
<p>To isolate T cells from skin tissue, hair must be removed from the back of the animal with an electric shaver and depilatory cream. The cream is applied for 2 minutes, followed by vigorous washing using tap water to remove hair. It is important that excess hair is completely removed to avoid complications during downstream filtration steps. After cleaning, the skin is separated from the dorsal surface, cut into small pieces, and transferred to a GentleMACS tube (Miltenyi Biotec #130-096-334) containing 10ml of skin digestion buffer (<xref ref-type="table" rid="T4"><bold>Table&#xa0;4</bold></xref>). We recommend 10ml digestion buffer for 0.5&#xa0;g of skin tissue.</p>
<table-wrap id="T4" position="float">
<label>Table&#xa0;4</label>
<caption>
<p>Formulation for skin digestion buffer.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="middle" align="left">Ingredient</th>
<th valign="middle" align="left">Manufacturer</th>
<th valign="middle" align="left">Final concentration</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="middle" align="left">DMEM media</td>
<td valign="middle" align="left">Gibco #41965</td>
<td valign="middle" align="left">1X</td>
</tr>
<tr>
<td valign="middle" align="left">Collagenase Type II</td>
<td valign="middle" align="left">Sigma #C6885</td>
<td valign="middle" align="left">4 mg/ml</td>
</tr>
<tr>
<td valign="middle" align="left">Bovine Serum Albumin</td>
<td valign="middle" align="left">Sigma #A4503</td>
<td valign="middle" align="left">20 mg/ml</td>
</tr>
<tr>
<td valign="middle" align="left">DNAse I</td>
<td valign="middle" align="left">Roche #11284932001</td>
<td valign="middle" align="left">20 &#xb5;g/ml</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Then, the sample is digested using the GentleMACS Dissociator (program: <italic>37_C_Multi_H</italic>) or via orbital shaking in a preheated waterbath (37&#xb0;C). After 90 minutes of digestion or completion of the GentleMACS program, the single-cell suspension can be cut again, centrifuged (10&#xa0;min, 400g, 4&#xb0;C), resuspended in 5000 &#xb5;l FACS buffer and transferred to a 15&#xa0;ml tube through a 100 &#xb5;m filter unit. Then, the sample is centrifuged again (2&#xa0;min, 1000g, 4&#xb0;C), resuspended in 1000 &#xb5;l FACS buffer and filtered into a new 1.5&#xa0;ml tube using a 70 &#xb5;m filter unit. The sample can now be stained for 30&#xa0;min at 4&#xb0;C using fluorescence-labelled antibodies as well as Biolegend TotalSeqC anti-mouse Hashtagging antibodies, as described before. For sorting, cells can be resuspended in 200 &#xb5;L MACS buffer. An example of the sorting strategy of T cells from murine skin tissue is shown in <xref ref-type="fig" rid="f2"><bold>Figure&#xa0;2E</bold></xref> To increase efficiency, it is beneficial to first enrich for CD45<sup>+</sup> immune cells (yield sort) by sorting target cells into MACS buffer, followed by a second purity sorting (4-way purity sort) of target cells (<xref ref-type="table" rid="T5"><bold>Table&#xa0;5</bold></xref>).</p>
<table-wrap id="T5" position="float">
<label>Table&#xa0;5</label>
<caption>
<p>Troubleshooting and Recommendations.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="middle" align="left">Description</th>
<th valign="middle" align="left">Solution</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="middle" align="left">Clogging caused by hair</td>
<td valign="middle" align="left">Additional filter steps after skin digestion get rid of hair and avoid clogging. Repeat hair removal if patches of hair remain.</td>
</tr>
<tr>
<td valign="middle" align="left">Clogging during cell sorting</td>
<td valign="middle" align="left">For cell sorting, samples should be filtered again immediately before acquisition and cooled at 4&#xb0;C to avoid clogging.</td>
</tr>
<tr>
<td valign="middle" align="left">Poor cell recovery after sorting</td>
<td valign="middle" align="left">Use a two-step sorting protocol with a pre-sort (&#x201c;yield&#x201d;) and a high purity sort (sort strategy &#x201c;4-way-purity&#x201d;) mode.</td>
</tr>
<tr>
<td valign="middle" align="left">Low expression of CD4<sup>+</sup> on T cells</td>
<td valign="middle" align="left">Optimize processing time and amount of collagenase enzymes.</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s2_3">
<title>Single droplet barcoding of T cells for combined scRNA/TCR-seq</title>
<p>Target cells from spleen (12,500 CD3<sup>+</sup>CD4<sup>+</sup>CD25<sup>+</sup> Treg cells, TotalSeqC1), mLN (10,000 CD3<sup>+</sup>CD4<sup>+</sup>CD25<sup>+</sup> Treg cells, TotalSeqC2), iLN (7,500 CD3<sup>+</sup>CD4<sup>+</sup>CD25<sup>+</sup> Treg cells, TotalSeqC3) and skin (10,000 CD3<sup>+</sup> T cells, TotalSeqC4) have all been sorted into a single 1.5 mL Eppendorf tube containing 350 &#x3bc;L MACS buffer, and the sample collection tube was cooled to 4&#xb0;C. It is important to process the sample quickly after sorting to decrease the number of dying/dead cells in the collection tube. Therefore, shortly after sorting, cells are pelleted by centrifugation (5&#xa0;min, 300 xg, 4&#xb0;C). Supernatant is removed and the sample is supplemented with master mix and beads to a final volume of 70 &#x3bc;L, loaded on a 10X Chromium Next GEM Chip K (10X Genomics #1000287) and processed on the 10X Chromium Controller (10X Genomics #120212), followed by cDNA amplification using the Chromium Next GEM Single Cell 5&#x2019; Reagent Kit v2 (10X Genomics #1000263) and 5&#x2019; Feature Barcode Kit (10X Genomics #1000256). Afterwards V(D)J amplification was done from cDNA by using the Chromium Single Cell Mouse TCR Amplification Kit (10X Genomics #1000254) and GEX, CSP and VDJ library preparation according to the Library Construction protocol (10X Genomics #1000190). In <xref ref-type="fig" rid="f3"><bold>Figure&#xa0;3A</bold></xref>, we show the elements of each library, including the sample indexes i5 and i7, read1 and read2 with their purpose and recommended sequencing length. In <xref ref-type="fig" rid="f3"><bold>Figure&#xa0;3B</bold></xref>, cycle numbers and typical library sizes are shown. Upon completion of cDNA amplification and library preparation, the fragment length composition is usually evaluated using electrophoretic separation of the sample, for which we show examples in <xref ref-type="fig" rid="f3"><bold>Figures&#xa0;3C&#x2013;F</bold></xref>.</p>
<fig id="f3" position="float">
<label>Figure&#xa0;3</label>
<caption>
<p>Overview of recovery and typical profiles for scRNA-seq libraries. <bold>(A)</bold> Overview of GEX, VDJ and CSP library and recommended sequencing length (source: 10X Genomics). <bold>(B)</bold> Tabular overview of parameters in scRNA-seq experiments. The percentage of all events indicates the total frequency of target cells (either CD4<sup>+</sup> or CD25<sup>+</sup> T cells) in all events from the sample. <bold>(C-F)</bold> Examples for library size profiles for samples with a good library profile listed in <bold>(A)</bold> for either <bold>(C)</bold> full length cDNA, <bold>(D)</bold> GEX Library, <bold>(E)</bold> VDJ Library or <bold>(F)</bold> Cell Surface Protein (CSP) library. Electrophoretic separation was performed on a Bioanalyzer.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g003.tif"/>
</fig>
</sec>
</sec>
<sec id="s3">
<title>Methods &#x2013; sequencing and QC strategy for scRNA-seq libraries</title>
<sec id="s3_1">
<title>Next-generation sequencing of GEX, VDJ and CSP libraries</title>
<p>In <xref ref-type="fig" rid="f3"><bold>Figure&#xa0;3B</bold></xref>, we listed the total number tagged and sorted cells and the total number of cells identified after sequencing. The recovery rates were 38.0% for spleen CD25<sup>+</sup> Treg cells, 40.1% for mLN CD25<sup>+</sup> Treg cells, 41.0% for iLN CD25<sup>+</sup> Treg cells, and 33.4% for skin CD4<sup>+</sup> T cells, with a mean recovery rate of 38.13%. Peripheral tissues that undergo enzymatic digestion, such as skin, liver, lung, or colon tissue, have varying recovery rates based on cell preparation steps, pre-enrichment, duration of processing, sort efficiency and sort setup. This can sometimes lead to recovery rates below 10% and requires optimization. Usually, all samples are sequenced in &#x201c;one batch&#x201d;, and varying recovery rates can lead to &#x201c;under- or over-sequencing&#x201d; of libraries. Therefore, we recommend performing a pre-sequencing using only the gene expression (GEX) library. This reduces the cost for sequencing, allows for the identification and removal of low-quality and degraded samples, and increases the overall comparability of the datasets due to harmonized sequencing depth. Here, using a rough estimate of a projected cell number recovery (in our case, we estimate about 40% of sorted cells to be recovered later for bioinformatic analysis) helps to estimate the total number of reads required to sequence the GEX library to the desired depth. Now, for pre-sequencing, we only run 5%-10% of the estimated required reads to determine the approximate cell number for each library. These values are then used to sequence all libraries with a rather precise estimate of the required numbers of reads per library. In our lab, we routinely sequence 10X 5&#x2019; scRNA-seq libraries using a paired-end run with 26-10-10-90 sequencing strategy with a 150-cycle high-output cartridge on a NextSeq 500/550 sequencing unit. In a typical run, read 1 identifies the i5 index (cell barcode) with 10 nucleotides and reads 26 nucleotides of 10X Barcode and UMI. On the reverse strand (read 2), primer P7 initiates the i7 read (sample index) with 10 nucleotides and reads 90 nucleotides of the cDNA (<xref ref-type="fig" rid="f3"><bold>Figure&#xa0;3A</bold></xref>. The remaining 90 reads of read 2 are important for calling the gene (<italic>GEX library</italic>), the cell surface protein and/or hashtag oligo (e.g. TotalseqC), which appears at a fixed position (10th base) in read 2 (<italic>CSP library</italic>) or the VDJ information for the TCR (<italic>VDJ library</italic>). For the samples available as open access download alongside this paper, we used a 300-cycle high-output cartridge with a paired-end run and 26-10-10-149 sequencing strategy. In <xref ref-type="fig" rid="f3"><bold>Figures&#xa0;3C&#x2013;F</bold></xref> examples for library profiles from full length DNA (<bold>c</bold>), GEX (<bold>d</bold>), VDJ (<bold>e</bold>) and CSP (<bold>f</bold>) of a sample containing CD25<sup>+</sup> cells from spleen, mLN and iLN as well as CD3 skin T cells is shown. Since we used hashtag oligos (TotalseqC1-4) and pooled the different organs into one sample during sort, we only get one cDNA, GEX, VDJ and CSP library for all 4 samples.</p>
</sec>
<sec id="s3_2">
<title>Investigating sequencing quality using <italic>FastQC</italic>
</title>
<p>To investigate whether we can estimate library quality, we ran FastQC on all L001 files generated from the different libraries. A plot labeled &#x201c;per base sequence quality&#x201d; shows the distribution of quality scores at each position in the read across all reads (<xref ref-type="fig" rid="f4"><bold>Figure&#xa0;4A</bold></xref>). It can alert to whether there were any problems during sequencing. As the read 2 contains the information for the gene expression, we focus on this read in our analysis. Warnings related to &#x201c;per base sequence content&#x201d; are common for RNA-seq data and can be safely ignored in most cases. Also, warnings related to &#x201c;per sequence GC content&#x201d; has already been observed in literature (<xref ref-type="bibr" rid="B18">18</xref>) and can be ignored according to the manufacturer&#x2019;s guidelines. The &#x201c;sequence duplication level&#x201d; and &#x201c;overrepresented sequences&#x201d; error can indicate a low complexity library which could result from too many cycles of PCR amplification or less cDNA concentration before preparing the library. In this data set, we see a low contamination of a known primer sequence. If this contaminating sequence would be very high, it might be useful to get rid of it before downstream analysis. As shown in the schematic overview (<xref ref-type="fig" rid="f3"><bold>Figure&#xa0;3A</bold></xref>), the VDJ and CSP Library are very different from the GEX Library because they contain VDJ information and very few cell surface protein barcode sequences. FastQC is not tailored for analysis of such low-complexity libraries, but we included the results for reference (<xref ref-type="fig" rid="f4"><bold>Figures&#xa0;4B, C</bold></xref>).</p>
<fig id="f4" position="float">
<label>Figure&#xa0;4</label>
<caption>
<p><italic>FastQC</italic> report of the GEX Library, VDJ Library and CSP Library. Statistics of <italic>FastQC</italic> run for the GEX library <bold>(A)</bold>, VDJ library <bold>(B)</bold> and CSP library <bold>(C)</bold> on for read 1 (26 bp), read 2 (149 bp), i5 (10 bp) and i7 (10 bp). Errors and Warnings listed here as reported in <italic>FastQC</italic> documentation. Produced by <italic>FastQC</italic> (version 0.11.9).</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g004.tif"/>
</fig>
</sec>
</sec>
<sec id="s4">
<title>Methods &#x2013; use of <italic>CellRanger</italic> to identify cells and investigate quality and quantity</title>
<p>In the previous sections, we described detailed protocols to isolate CD4<sup>+</sup> T cell populations from murine tissues such as spleen, LN or skin. Next, we provided advice on cell sorting and sample multiplexing using hashtag oligos (e.g. TotalSeqC), followed by single droplet barcoding and library preparation steps using 5&#x2019; reagent kits. Sequencing of our three individual libraries (GEX, CSP and VDJ) will generate <italic>FastQ</italic> files ready for analysis using <italic>CellRanger</italic>, a software tool developed for single-cell sequencing-based datasets generated with chemistry from 10X Genomics. In the following paragraphs, we will describe the use of <italic>CellRangerMulti</italic> to extract individual samples and generate output files that allow a first glimpse on data quality and quantity.</p>
<sec id="s4_1">
<title>Use of <italic>CellRangerMulti</italic> to enable a combined analysis of all individual samples</title>
<p><italic>CellRangerMulti</italic> is a method for the combined processing scRNA samples by the use of specific multiplexing antibodies and officially supports the analysis of 3&#x2019; multiplexed data. The 3&#x2019; and 5&#x2019; assays capture different ends of the transcript in the final library, and we used the 5&#x2019; chemistry to generate GEX, CSP and VDJ libraries. Therefore, this type of analysis requires editing of the <italic>CellRangerMulti</italic> pipeline to be compatible with our datasets. Our pooled libraries contain four samples: splenic Treg cells (TotalSeqC1), mLN Treg cells (TotalSeqC2), iLN Treg cells (TotalSeqC3) and skin CD3<sup>+</sup> T cells (TotalSeqC4). In the first demultiplexing step, we use <italic>CellRangerMulti</italic> to assign cells to individual samples, a workflow described in <xref ref-type="fig" rid="f5"><bold>Figure&#xa0;5</bold></xref>. First, we need to create a library comma-separated values (CSV) file which declares the input FASTQ data for the libraries that make up a cell multiplexing experiment (<xref ref-type="boxed-text" rid="box1"><bold>Box 1</bold></xref>). Second, we need to create a cell hashtag reference. It declares the molecule structure and unique cell hashtag sequence of each hashtag (=TotalSeq) antibody present in the experiment. Each line of the CSV declares one unique cell hashtag.</p>
<fig id="f5" position="float">
<label>Figure&#xa0;5</label>
<caption>
<p>Schematic Overview of the <italic>CellRangerMulti</italic> Pipeline for combining 5&#x2019; Single Cell Gene Expression Analysis with Cell Hashtag and VDJ T Cell Analysis. The 5&#x2019; Chromium Next GEM Single Cell Immune Profiling cell hashing assay workflow starts with a demultiplexing step to assign pooled cells to individual samples (=hashtags). Afterwards, <italic>CellRangerMulti</italic> can be used to analyze individual samples and combine TCR with the GEX data. Created with Biorender.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g005.tif"/>
</fig>
<p>The <italic>CellRangerMulti</italic> pipeline first extracts and corrects the cell barcode and UMI from the CSP library using the same methods as gene expression read processing. It then matches the cell hashtag read against the list of features declared in the cell hashtag reference. This is all described in specific sections of the config CSV file which requires the column [gene expression], [libraries] and [samples]. The [gene expression] section specifies the path to the reference transcriptome and the cell hashtag reference. The [libraries] section shows the path to the GEX FASTQs (GEX library) and cell multiplexing FASTQs (CSP library). The [sample] section includes a list of all samples and the corresponding hashtag. After creating these files, we run <italic>CellRangerMulti</italic> and assign cells to samples. By doing so, we also create BAM files of the individual samples in the pool. Those files are located in the individual directories for each sample. Since <italic>CellRangerMulti</italic> requires FASTQ files as the input, we convert the BAM files to individual FASTQ files. This can be done with the <italic>bamtofastq</italic> software tool which is bundled with <italic>CellRanger</italic>. The output of <italic>bamtofastq</italic> will display two directories per sample. After using <italic>samtools</italic>, which is also a part of the <italic>CellRanger</italic> bundle, we can distinguish the gene expression FASTQ from the cell hashtag FASTQ. In a final step, the T-cell receptor library can now be combined with the gene expression data. To do so, we run the <italic>CellRangerMulti</italic> again for every individual sample. We create a new final config CSV file for every individual sample and include the [vdj] section which describes the path to a VDJ reference. Each run produces output files which can then be used for further analysis with R.</p>
<boxed-text id="box1" position="float">
<label>BOX 1</label>
<title>Terminal input to run <italic>CellRangerMulti</italic> and assign cells.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">Info: In this manuscript, commands to be entered in the terminal are prepended by the &#x201c;$&#x201d; symbol.</td>
</tr>
<tr>
<td valign="top" align="left"># run multi pipeline (combine GEX Library with Cell Surface Library)<break/>$ cellranger multi\<break/>&#x2013;id=ddmmyy_multi\<break/>&#x2013;csv=./configmulti.csv<break/>
<break/># configmulti.csv<break/>$ cat configmulti.csv<break/>
<break/>[gene-expression]<break/>reference,/<italic>path_to</italic>/refdata-gex-mm10-2020-A<break/>Cmo-set,/<italic>path_to</italic>/cmo-set.csv<break/>force-cells,<break/>check-library-compatibility,false<break/>
<break/>[libraries]<break/>fastq_id,fastqs,feature_types<break/>
<break/>[samples]<break/>sample_id,cmo_ids<break/>spleen,HTO_C0301<break/>mLN,HTO_C0302<break/>iLN, HTO_C0303<break/>skin,HTO_C0304<break/>
<break/>
<break/># cmo-set.csv<break/>
<break/>$ cat cmo-set.csv<break/>
<break/>id,name,read,pattern,sequence,feature_type<break/>C1,HTO_C0301,R2,5PNNNNNNNNNN(BC)NNNNNNNNN,ACCCACCAGTAAGAC,Antibody Capture<break/>C2,HTO_C0302,R2,5PNNNNNNNNNN(BC)NNNNNNNNN,GGTCGAGAGCATTCA,Antibody Capture<break/>C3,HTO_C0303,R2,5PNNNNNNNNNN(BC)NNNNNNNNN,CTTGCCGCATGTCAT,Antibody Capture<break/>C4,HTO_C0304,R2,5PNNNNNNNNNN(BC)NNNNNNNNN,AAAGCATTCTTCACG,Antibody Capture<break/>
<break/>
<break/>
<break/># Command to change to the directory where the CellRanger executable file lives and put it in your $PATH:<break/>
<break/>$ export PATH=/<italic>path_to</italic>/cellranger-7.0.1:$PATH<break/>$ export PATH=${PWD}:$PATH<break/>
<break/># Command to put other tools bundled with CellRanger in your path:<break/>$ source/<italic>path_to</italic>/cellranger-7.0.1/sourceme.bash<break/>
<break/># Make a new directory<break/>mkdir bamtofastq<break/>
<break/># Run bamtofastq<break/># You will need the path to the individual sample_alignments.bam. In addition, 10X recommends setting the # -&#x2013;reads-per-fastq= argument higher than the total number of reads recorded.<break/>bamtofastq &#x2013;-reads-per-fastq=2200000000/<italic>path_to</italic>/sample_alignments.bam/<italic>path_to_outputfolder</italic>/bamtofastq/<italic>name_of_new_folder</italic>
<break/># after bam to fastq, identify the FASTQ directory corresponding to GEX:<break/>cd/<italic>path_to_outputfolder</italic>/bamtofastq/<italic>name_of_new_folder<break/>
</italic>
<break/>ls &#x2013;ltsh<break/># Use samtools to identify the GEX file<break/>source/<italic>path_to</italic>/cellranger-7.0.1/sourceme.bash<break/>
<break/>samtools view -H/<italic>path_to</italic> sample_alignments.bam<break/>
<break/># Look for the @CO library info in the bottom<break/>
<break/># Run CellRangerMulti final analysis again for each sample (include VDJ Library)<break/>cellranger multi\<break/>&#x2013;id=ddmmyy_multifinal_organ1\<break/>&#x2013;csv=./configmultifinal.csv<break/>
<break/># display the content of configmultifinal.csv<break/>$ cat configmultifinal.csv<break/>
<break/>[gene-expression]<break/>reference,<italic>/path_to</italic>/refdata-gex-mm10-2020-A<break/>force-cells,5000<break/>check-library-compatibility,false<break/>
<break/>[vdj]<break/>reference,/<italic>path_to</italic>/refdata-cellranger-vdj-GRCm38-alts-ensembl-7.0.0<break/>
<break/>[libraries]<break/>fastq_id,fastqs,feature_types<break/>bamtofastq,/<italic>path_to_FASTQ</italic>/, Gene Expression<break/>VDJ_FASTQ,/<italic>path_to_FASTQ</italic>/, VDJ</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s4_2">
<title>Using metrics provided by <italic>CellRanger</italic> to evaluate quality and quantity of cells</title>
<p>In addition to creating outputs files which can be used for further analysis with R, <italic>CellRanger</italic> produces a web summary file in the output folder of the specified analysis directory. It is a good starting point for determining sample quality and quantity before starting with the analysis using R (as described in the next paragraphs in detail). Also, web summaries can be used to determine sample complexity and sequencing need (e.g. how many reads are still required per sample to have good coverage and even sequencing depth distribution between all samples).</p>
<p>Therefore, <italic>CellRanger</italic> is a useful tool for investigating important sample parameters on a first glimpse. In general, we need to distinguish between an output from <italic>CellRangerCount</italic> and <italic>CellRangerMulti</italic>. When performing single cell RNA experiments, it can be useful to first run <italic>CellRangerCount</italic>. This pipeline aligns sequencing reads from the FASTQ files to a reference transcriptome. Then, different filtering steps, barcode counting, and UMI counting allow to determine clusters and perform gene expression analysis. To discriminate <italic>CellRanger count</italic> from <italic>CellRangerMulti</italic>, outputs are shown in <xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6A</bold></xref>. The t-SNE plot derived from <italic>CellRangerCount</italic> (<xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6B</bold></xref>) gives an overview of the heterogeneity of the sample, which, in our case, contains cells from the different lymphoid and peripheral organs (spleen, mLN, iLN, skin). However, <italic>CellRangerCount</italic> cannot assign cells to the organ of origin, since multiplexing info from the CSP library is not processed. The cells in the t-SNE plot are colored by cluster and show cell-associated barcodes. The clustering analysis is based on grouping cells with similar gene expression profiles and allows a first glimpse of data complexity and quality. In our case, with CD25<sup>+</sup> or CD4<sup>+</sup> T cells from the different lymphoid and peripheral organs (spleen, mLN, iLN, skin), <italic>CellRanger</italic>C<italic>ount</italic> generates a t-SNE with many different clusters, not too surprising because it counts all cells from the different organs (<xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6B</bold></xref>). In contrast to <italic>CellRanger</italic>C<italic>ount</italic>, <italic>CellRangerMulti</italic> can break down individual samples (= organs) using the hashtag oligo information of the CSP Library. The t-SNE after running <italic>CellRangerMulti</italic> shows less heterogeneity for the Treg cell populations in spleen, mLN and iLN, as expected with a very defined cell type (<xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6C</bold></xref>). Within the lymphoid organs, the clustering is more compressed because we enriched and sorted for CD25<sup>+</sup> Treg cells for this dataset. In contrast to this, the clustering of the skin sample looks more heterogenous because it contains a larger subset of cells. If a complete lack of cluster structure appears in a usually rather heterogenous sample, this could indicate low sample quality or loss of single-cell behavior due to massive overloading or system failures.</p>
<fig id="f6" position="float">
<label>Figure&#xa0;6</label>
<caption>
<p>Interpretation of <italic>CellRangerCount</italic> and <italic>CellRangerMulti</italic> Output. Schematic overview of the experimental design <bold>(A)</bold> and <italic>CellRangerCount</italic> <bold>(B)</bold> and <italic>CellRangerMulti</italic> <bold>(C)</bold> output. Metric summaries for the <italic>CellRangerCount</italic> <bold>(D)</bold> and <italic>CellRangerMulti</italic> <bold>(E)</bold> and Rank Barcode plots <bold>(F)</bold> for all tissues, spleen and skin. Figure elements created with <uri xlink:href="https://www.BioRender.com">BioRender</uri>.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g006.tif"/>
</fig>
<p>In a table, we listed some of the web summary metrics which are shown when running <italic>CellRangerCount</italic> (<xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6D</bold></xref>) and <italic>CellRangerMulti</italic> (<xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6E</bold></xref>) on our sample dataset. <italic>CellRanger</italic> estimates the number of cells which are defined as the number of barcodes associated with at least one cell. As listed in <xref ref-type="fig" rid="f3"><bold>Figure&#xa0;3</bold></xref>, using the protocols described in this paper, we should recover around 40% of original cell input as cells that are identified using <italic>CellRanger</italic>. However, a difference between the number of cells when running <italic>CellRangerCount</italic> compared to <italic>CellRangerMulti</italic> appears, which can be explained by the fact that we generally do not achieve 100% binding of the hashtag antibodies (= TotalSeqC barcodes) to the cells. Another important parameter displayed by <italic>CellRanger</italic> is the median reads per cell, which accounts for the total number of sequenced reads divided by the number of barcodes associated with cell-containing partitions. This information is helpful for planning a re-sequencing of the samples if not enough reads have been acquired, so that the recommended minimum of 20.000 reads/cell can be achieved. Another metric, median genes per cell, defines the median number of genes detected per cell-associated barcode. It also depends on sequencing depth and the total number of cells, and a low number of genes per cell can indicate low sequencing depth, low library quality or low transcriptional diversity of the cells. Another parameter linked to sample quality is the fraction of reads mapped confidently to the reference transcriptome. In our dataset, the lowest fraction of reads mapped to the murine genome is observed for the skin sample (79.46%), which, however, still is well above the lower threshold of 30% given by the manufacturer. Another quality-related parameter is the fraction of valid barcodes matching a whitelist. A value lower than 75% may indicate sequencing issues such as low quality of read 1. Finally, <italic>CellRanger</italic> computes sequencing saturation, which is an indicator of library complexity and sequencing depth. Lower sequencing saturation indicates that much of the library complexity was not captured by sequencing and that re-sequencing the sample could potentially increase gene expression coverage.</p>
<p>The <italic>CellRanger</italic> output files also contain a barcode rank plot where all barcodes detected during sequencing are plotted in decreasing order of UMIs associated with the particular barcode (<xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6F</bold></xref>). The shown barcode rank plot originates from the <italic>CellRangerCount</italic> (all tissues) and <italic>CellRangerMulti</italic> (spleen, skin) output. <italic>CellRanger</italic> uses the number of UMIs detected in each gel bead in emulsion (GEM) to determine whether the GEM contains a cell (declared as a cell) or not (declared as background). In a typical sample, a steep drop-off can be found and indicates good separation between the cell-associated barcodes and the barcodes associated with an empty GEMs. As mentioned in manufacturer&#x2019;s guidelines, every barcode plank plot has a distinctive shape with steep drop-offs indicated by blue arrows (<xref ref-type="fig" rid="f6"><bold>Figure&#xa0;6F</bold></xref>). In a very heterogenous sample, the plot can appear bimodal, but a clear separation between the cells and background should always be present. If the separation is not good and the barcode rank plot shows a round curved shape, this may indicate low sample quality or loss of single-cell behavior due to technical failures.</p>
</sec>
</sec>
<sec id="s5">
<title>Methods &#x2013; data processing with R, Bioconductor and Seurat</title>
<p>In the previous paragraph, we discussed the use of <italic>CellRanger</italic> to produce output files which can then be used for further analysis with R. Now, we describe the pre-processing of scRNA-seq data using a variety of openly available R packages, which can be found on CRAN (<ext-link ext-link-type="uri" xlink:href="https://www.R-project.org/">https://www.R-project.org/</ext-link>) and Bioconductor (<xref ref-type="bibr" rid="B8">8</xref>). The pre-processing steps include quality control (QC) and filtering, dimensionality reduction, removal of doublets, evaluation of batch effect correction, which generates the final filtered dataset for analysis. For data pre-processing and analysis, we provide a rendered notebook file containing all code and output from the analysis of our test dataset in the supplement, which we refer to in the corresponding paragraphs (<xref ref-type="supplementary-material" rid="SM1"><bold>Supplementary Material</bold></xref> or downloadable from <ext-link ext-link-type="uri" xlink:href="https://github.com/imbeimainz/scRNAseq_scTCRseq_TissueTcells">https://github.com/imbeimainz/scRNAseq_scTCRseq_TissueTcells</ext-link>). In this manuscript, we will mainly discuss the analysis of the data using packages available on Bioconductor. However, the notebook will also provide the code for a pipeline using the Seurat package (<xref ref-type="bibr" rid="B19">19</xref>) and discuss the features of this pipeline.</p>
<sec id="s5_1">
<title>Creating the count matrix from <italic>CellRangerMulti</italic> output</title>
<p>scRNA-seq data analysis is performed on a count matrix, containing the counts (i.e. number of UMI or reads) per gene in each cell. scRNA-seq data is usually very sparse due to several factors such as dropout events, low mRNA abundance in the cells, and a combination of biological and technical variation (<xref ref-type="bibr" rid="B20">20</xref>, <xref ref-type="bibr" rid="B21">21</xref>). In our workflow, the count matrix is constructed from the feature-barcode matrix information generated by <italic>CellRangerMulti</italic>. For scRNA-seq data, <italic>CellRanger</italic> provides an unfiltered feature-barcode matrix and a filtered feature-barcode matrix. The unfiltered feature-barcode matrix contains every barcode from a fixed list of known barcodes that have at least one count. These can contain background and cell-associated barcodes. The filtered feature-barcode matrix, however, only includes detected cell-associated barcodes. In our experience, unfiltered data contain a lot of cellular debris and background noise. However, if desired by the user, there are also R packages like <italic>DropletUtils</italic> (<xref ref-type="bibr" rid="B22">22</xref>) which provide methods to process the unfiltered count matrix to remove the unwanted noise. In our workflow, we will present the approach working on the filtered data and refer users to the <italic>DropletUtils</italic> documentation on how to work with unfiltered data. We use the <italic>Read10X()</italic> function from the <italic>Seurat</italic> package (<xref ref-type="bibr" rid="B19">19</xref>) to read in the filtered feature-barcode matrix information (<xref ref-type="boxed-text" rid="box2"><bold>Box 2</bold></xref>, <xref ref-type="table" rid="T6"><bold>Table&#xa0;6</bold></xref>). This function returns a sparse matrix which stores the count information with genes as rows and samples as columns. We further process the resulting count matrix using the <italic>SingleCellExperiment()</italic> constructor from the <italic>SingleCellExperiment</italic> package (<xref ref-type="bibr" rid="B8">8</xref>). We repeat this process for all samples in the experiment. In addition to the counts, we store the tissue of origin for each sample as metadata in the respective <italic>SingleCellExperiment</italic> object. This information will be essential for some of the presented downstream analyses steps, especially for compelling and informative data visualizations. See section &#x201c;1 Create SingleCellExperiment&#x201d; in the notebook for the respective code of this analysis.</p>
<table-wrap id="T6" position="float">
<label>Table&#xa0;6</label>
<caption>
<p>Troubleshooting and Recommendations.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="middle" align="left">Description</th>
<th valign="middle" align="left">Solution</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="middle" align="left">Directory provided does not exist</td>
<td valign="middle" align="left">It seems like the directory stated does not exist or is not found. Check if the directory location is spelled correctly and directory hierarchy matches the current working location.</td>
</tr>
<tr>
<td valign="middle" align="left">filtered feature-barcode matrix folder does not contain features.tsv file</td>
<td valign="middle" align="left">In the used version of CellRanger (v. 7.1) the features.tsv files is called genes.tsv. Please use this file as features file. Please note that you have to rename the file to features.tsv as the Read10X()expects this filename.</td>
</tr>
<tr>
<td valign="middle" align="left">&#x2026; file not found</td>
<td valign="middle" align="left">The Read10X() function is rather stringent concerning filenames (at least as of v. 4.3.0) and expects the files to be named <italic>matrix.mtx, barcode.tsv</italic> and <italic>features.tsv.</italic> If the files have any other name (e.g. a sample prefix), the function will not find the files. Please rename the files following the mentioned naming convention.</td>
</tr>
</tbody>
</table>
</table-wrap>
<boxed-text id="box2" position="float">
<label>BOX 2</label>
<title>R code for creating SingleCellExperiment objects.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left"># Function to read in the data<break/># provide all the filepaths to the count data as a list<break/># as well as a list of the respective tissues<break/>&#x2003;readDataset &lt;- function(filepath_list, tissue) {<break/>&#x2003;&#x2003;sceRNA &lt;- list()<break/>&#x2003;&#x2003;# iterate over each sample of the input data<break/>&#x2003;&#x2003;for (i in 1:length(filepath_list)) {<break/>&#x2003;&#x2003;&#x2003;# read the count data<break/>&#x2003;&#x2003;&#x2003;counts &lt;- Read10X(filepath_list[[i]]) <break/>&#x2003;&#x2003;&#x2003;# generate a SingleCellExperiment object<break/>&#x2003;&#x2003;&#x2003;sce = SingleCellExperiment(assays = list(counts = counts))<break/>&#x2003;&#x2003;&#x2003;# Add the tissue type information as meta data<break/>&#x2003;&#x2003;&#x2003;sce$tissue &lt;- rep(tissue[[i]], ncol(sce))<break/>&#x2003;&#x2003;&#x2003;sceRNA &lt;- c(sceRNA, sce)<break/>&#x2003;}<break/>&#x2003;# return the list of SingleCellExperiment objects<break/>&#x2003;return(sceRNA)<break/>}<break/># input data is stored in a folder called data<break/>filepaths &lt;- c(&#x201c;./data/iLN&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#xa0;&#xa0;&#xa0;&#x201c;./data/mLN&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#xa0;&#xa0;&#xa0;&#x201c;./data/skin&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#xa0;&#xa0;&#xa0;&#x201c;./data/spleen&#x201d;)<break/>
<break/>sceRNA &lt;-<break/>&#x2003;readDataset(filepaths, tissue = c(&#x201c;iLN&#x201d;, &#x201c;mLN&#x201d;, &#x201c;skin&#x201d;, &#x201c;spleen&#x201d;))<break/># set the names of the objects in the list so that we can easily identify and<break/># access the different tissues<break/>names(sceRNA) &lt;- c(&#x201c;iLN&#x201d;, &#x201c;mLN&#x201d;, &#x201c;skin&#x201d;, &#x201c;spleen&#x201d;)<break/># Now have a look at the data<break/>sceRNA</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_2">
<title>Gene level annotation</title>
<p>In a processing step before data analysis, we perform a gene-level annotation based on the input data (<xref ref-type="boxed-text" rid="box3"><bold>Box 3</bold></xref>, <xref ref-type="table" rid="T7"><bold>Table&#xa0;7</bold></xref>). This gene-level annotation is used to facilitate the downstream applied analysis steps. During the annotation, the gene identifiers of the input data are mapped to their respective gene name using the <italic>AnnotationHub</italic> package (<xref ref-type="bibr" rid="B23">23</xref>). Gene names are usually more widely used and discernible and hence facilitate many of the downstream analysis steps, such as marker gene detection and cluster marker identification. Besides the annotation of gene names, we also determine which genes of the input data map to the mitochondrial portion of the genome as this is later used for filtering and quality control. See section &#x201c;2 Gene level annotation&#x201d; in the notebook for the respective code of this step.</p>
<table-wrap id="T7" position="float">
<label>Table&#xa0;7</label>
<caption>
<p>Troubleshooting and Recommendations.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="middle" align="left">Description</th>
<th valign="middle" align="left">Solution</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="middle" align="left">No genes map to the mitochondrial genome</td>
<td valign="middle" align="left">It could be that the pattern used to search for mitochondrial genes does not match the pattern of mitochondrial genes in the data. Please check that these two patterns are identical (usually follow the lines of &#x2018;MT&#x2019;, &#x2018;mt&#x2019;, &#x2018;Mt&#x2019; or &#x2018;chrM&#x2019;).</td>
</tr>
<tr>
<td valign="middle" align="left">No gene names found/all gene names are &#x2018;NA&#x2019;</td>
<td valign="middle" align="left">It could be that the species you are using for the annotation does not match your data. Please check that the correct species is specified. Another reason could be that the wrong id type was specified. Please check that the id type matches your gene ids.</td>
</tr>
</tbody>
</table>
</table-wrap>
<boxed-text id="box3" position="float">
<label>BOX 3</label>
<title>R code for gene level annotation.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">sce &lt;- sceRNA$iLN<break/>
<break/># set up the annotation hub<break/>ah &lt;- AnnotationHub()<break/># extract the indentifiers and names for mouse data<break/>query(ah, c(&#x201c;musculus&#x201d;, &#x201c;Ensembl&#x201d;, &#x201c;EnsDb&#x201d;))<break/>ens.mm.v102 &lt;- ah[[&#x201c;AH89211&#x201d;]]<break/>genes(ens.mm.v102)[, 2]<break/>
<break/># search for the mitochondrial genes<break/>is.mito &lt;- grepl(&#x201c;^mt-&#x201d;, rownames(sce))<break/>
<break/>&#x2003;chr.loc &lt;- mapIds(<break/>&#x2003;ens.mm.v102,<break/>&#x2003;keys = rownames(sce),<break/>&#x2003;keytype = &#x201c;GENENAME&#x201d;,<break/>&#x2003;column = &#x201c;SEQNAME&#x201d;<break/>)<break/>is.mito &lt;- which(chr.loc == &#x201c;MT&#x201d;)<break/>is.mito</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_3">
<title>Extracting T cells from the data using linked TCR information</title>
<p>Before we apply quality control procedures to our data, we would like to filter our dataset for T cells with productive TCR chain information. For this, we have to use the information of the T-cell receptor (TCR) stored in the VDJ library. Only cells with TCR information will be kept in our data. In order to filter our data set for T cells, we add the information on the TCR chains and the clonotype of each cell to our <italic>SingleCellExperiment</italic> objects (<xref ref-type="boxed-text" rid="box4"><bold>Box 4</bold></xref>). In our specific workflow, we also must transform the clonotypes as we have processed each sample individually using <italic>CellRanger</italic>. In order to work with shared clonotypes between tissues, we first apply a transformation step to assign identical TCR chains the same clonotype id (<xref ref-type="boxed-text" rid="box5"><bold>Box 5</bold></xref>). Afterwards, we save the harmonized TCR chain and clonotype information as meta data in our <italic>SingleCellExperiment</italic> objects. We also provide a list of the transformed TCR chain and clonotype information with the data of this manuscript for follow-up. If the information of the TCR is not available, but an analysis of solely T cells is desired, users can follow this presented workflow up until the cell type annotation step. After this step, the data can be filtered for cells which were annotated as T cells and the workflow can be repeated from the beginning. For more information, please see section &#x201c;3 Extracting T cells using T chain receptor information&#x201d; in the notebook.</p>
<boxed-text id="box4" position="float">
<label>BOX 4</label>
<title>R code for extraction of T Cells using TCRs.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">addTCRMetaData &lt;- function(sce, tcr_filepath, clonotypes_filepath) {<break/>&#x2003;# Read in the information about the TCRs<break/>&#x2003;tcr &lt;- read.csv(tcr_filepath)<break/>&#x2003;clonotypes &lt;- read.csv(clonotypes_filepath)<break/>
<break/>&#x2003;# Remove duplicated barcodes as the information is identical.<break/>&#x2003;tcr &lt;- tcr[!duplicated(tcr$barcode)],<break/>
<break/>&#x2003;# Subset to only barcode and raw clonotype column as we only use those.<break/>&#x2003;tcr &lt;- tcr[, c(&#x201c;barcode&#x201d;, &#x201c;raw_clonotype_id&#x201d;)]<break/>&#x2003;# Rename column to match to the clonotypes file<break/>&#x2003;names(tcr)[names(tcr) == &#x201c;raw_clonotype_id&#x201d;] &lt;- &#x201c;clonotype_id&#x201d;<break/>
<break/>&#x2003;# Extract the TCR chain information from the clonotypes file through matching<break/>&#x2003;# of the clonotypes.<break/>&#x2003;tcr &lt;- merge(tcr, clonotypes[, c(&#x201c;clonotype_id&#x201d;, &#x201c;cdr3s_aa&#x201d;)])<break/>
<break/>&#x2003;# Reorder columns, set barcodes as rownames (to match the scRNA data)<break/>&#x2003;# and remove the barcode column as it is no longer necessary.<break/>&#x2003;tcr &lt;- tcr[, c(2, 1, 3)]<break/>&#x2003;rownames(tcr) &lt;- tcr[, 1]<break/>&#x2003;tcr[, 1] &lt;- NULL<break/>
<break/>&#x2003;# Add the TCR chain and clonotype information as metadata to the data<break/>&#x2003;clonotype &lt;-<break/>&#x2003;tcr$clonotype_id[match(colnames(sce), rownames(tcr))]<break/>&#x2003;sce$clonotype &lt;- clonotype<break/>&#x2003;cdr3s_aa &lt;- tcr$cdr3s_aa[match(colnames(sce), rownames(tcr))]<break/>&#x2003;sce$cdr3s_aa &lt;- cdr3s_aa<break/>
<break/>&#x2003;# filter out those cells without a clonotype because they are not of interest<break/>&#x2003;# for us<break/>&#x2003;sce &lt;- sce[,!is.na(sce$clonotype)]<break/>&#x2003;return(sce)<break/>}<break/>
<break/># Add the information of the TCR chains and the clonotypes to our data<break/>sceRNA$iLN &lt;- addTCRMetaData(<break/>&#x2003;sce = sceRNA$iLN,<break/>&#x2003;tcr_filepath = &#x201c;./data/iLN/filtered_contig_annotations.csv&#x201d;,<break/>&#x2003;clonotypes_filepath = &#x201c;./data/iLN/clonotypes.csv&#x201d;<break/>)<break/>sceRNA$iLN<break/>
<break/>sceRNA$mLN &lt;- addTCRMetaData(<break/>&#x2003;sce = sceRNA$mLN,<break/>&#x2003;tcr_filepath = &#x201c;./data/mLN/filtered_contig_annotations.csv&#x201d;,<break/>&#x2003;clonotypes_filepath = &#x201c;./data/mLN/clonotypes.csv&#x201d;<break/>)<break/>sceRNA$mLN<break/>
<break/>sceRNA$skin &lt;- addTCRMetaData(<break/>&#x2003;sce = sceRNA$skin,<break/>&#x2003;tcr_filepath = &#x201c;./data/skin/filtered_contig_annotations.csv&#x201d;,<break/>&#x2003;clonotypes_filepath = &#x201c;./data/skin/clonotypes.csv&#x201d;<break/>)<break/>sceRNA$skin<break/>
<break/>sceRNA$spleen &lt;- addTCRMetaData(<break/>&#x2003;sce = sceRNA$spleen,<break/>&#x2003;tcr_filepath = &#x201c;./data/spleen/filtered_contig_annotations.csv&#x201d;,<break/>&#x2003;clonotypes_filepath = &#x201c;./data/spleen/clonotypes.csv&#x201d;<break/>)<break/>sceRNA$spleen</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
<boxed-text id="box5" position="float">
<label>BOX 5</label>
<title>R code for harmonization of clonotypes.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left"># set up clonotype data frame<break/>df_clonotypes &lt;- data.frame(<break/>&#x2003;clonotype = sceRNA$iLN$clonotype,<break/>&#x2003;clonotype_n = as.numeric(gsub(&#x201c;clonotype&#x201d;, &#x201c;&#x201c;, sceRNA$iLN$clonotype)),<break/>&#x2003;cdr3s_aa = sceRNA$iLN$cdr3s_aa<break/>)<break/>df_clonotypes &lt;- df_clonotypes[order(df_clonotypes$clonotype_n)],<break/>filter &lt;-!duplicated(df_clonotypes$clonotype)<break/>df_clonotypes &lt;- df_clonotypes[filter],<break/>
<break/># function to transform the clonotypes<break/>addClonotypesToDataFrame &lt;- function(clonotypes_df, sce) {<break/>&#x2003;n_last_clonotype &lt;- max(clonotypes_df$clonotype_n)<break/>&#x2003;for (i in 1:ncol(sce)) {<break/>&#x2003;&#x2003;chain &lt;- sce$cdr3s_aa[[i]]<break/>&#x2003;&#x2003;# if there is no clonotype with the same chain, the clonotype is new<break/>&#x2003;&#x2003;# and should be added to the data frame<break/>&#x2003;&#x2003;if (!any(which(clonotypes_df$cdr3s_aa == chain))) {<break/>&#x2003;&#x2003;&#x2003;n_last_clonotype &lt;- n_last_clonotype + 1<break/>&#x2003;&#x2003;&#x2003;clonotypes_df &lt;- rbind(clonotypes_df,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;c(<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;paste(&#x201c;clonotype&#x201d;, n_last_clonotype, sep = &#x201c;&#x201c;),<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;as.numeric(n_last_clonotype),<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;chain<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;))<break/>&#x2003;&#x2003;}<break/>&#x2003;}<break/>&#x2003;# transform the clonotype number back to a numeric<break/>&#x2003;clonotypes_df$clonotype_n &lt;-<break/>&#x2003;&#x2003;as.numeric(clonotypes_df$clonotype_n)<break/>&#x2003;return(clonotypes_df)<break/>}<break/>
<break/>
<break/>df_clonotypes &lt;-<break/>&#x2003;addClonotypesToDataFrame(df_clonotypes, sceRNA$mLN)<break/>df_clonotypes &lt;-<break/>&#x2003;addClonotypesToDataFrame(df_clonotypes, sceRNA$skin)<break/>df_clonotypes &lt;-<break/>&#x2003;addClonotypesToDataFrame(df_clonotypes, sceRNA$spleen)<break/># function to change clonotypes for all samples<break/>
<break/>changeClonotypes &lt;- function(sce, clonotypes_df) {<break/>&#x2003;for (i in 1:ncol(sce)) {<break/>&#x2003;&#x2003;chain &lt;- sce$cdr3s_aa[[i]]<break/>&#x2003;&#x2003;new_clonotype &lt;-<break/>&#x2003;&#x2003;&#x2003;clonotypes_df[which(clonotypes_df$cdr3s_aa == chain)[1]],<break/>&#x2003;&#x2003;sce$clonotype[[i]] &lt;- new_clonotype$clonotype<break/>&#x2003;}<break/>&#x2003;return(sce)<break/>}<break/>
<break/>
<break/>sceRNA$mLN &lt;- changeClonotypes(sceRNA$mLN, df_clonotypes)<break/>sceRNA$skin &lt;- changeClonotypes(sceRNA$skin, df_clonotypes)<break/>sceRNA$spleen &lt;- changeClonotypes(sceRNA$spleen, df_clonotypes)</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_4">
<title>Per sample quality control and filtering of low-quality cells</title>
<p>A well-defined filtering strategy to select for high-quality cells is highly recommended before analysis. Different quality parameters and metrics can be used to filter out cells of low quality (<xref ref-type="bibr" rid="B24">24</xref>). In this workflow, we mainly use a combination of three quality parameters: the library size, the number of features and the percentage of mitochondrial DNA. All of these can be used to determine the quality of the cells. The library size is the sum of all counts in one cell, which should be sufficiently high for each cell. A small/low library size indicates possible cell death of the respective cell. However, an unusually large library size could also indicate doublets (i.e., multiple cells sequenced in one droplet). The number of detected features (in this case, genes) in each individual cell should as well be sufficiently high to ensure adequate sequencing of the cells. The last quality parameter, the percentage of mitochondrial DNA captures the percentage of reads in a cell that map to the mitochondrial genome. An unusually large number of reads assigned to mitochondrial genes in a cell indicates cell death and hence low-quality cells. For the quality control, it is advisable to operate on a per-sample level instead of applying the quality control metrics for all samples combined. The individual samples might have different levels of quality due to being sequenced or processed individually or different biological prerequisites such as tissue specific properties. Hence, only one run of quality control metrics combined on all samples could falsely indicate cells of low quality because of the above-mentioned characteristics. Furthermore, also samples that were generated in different batches should be handled separately. The sequencing properties of the individual batches can greatly differ and hence as well influence the resulting quality metrics (<xref ref-type="bibr" rid="B25">25</xref>). In our workflow, we use the <italic>addPerCellQC()</italic> function of the <italic>scater</italic> package (<xref ref-type="bibr" rid="B24">24</xref>), which follows a data-driven approach for determining adequate threshold values (<xref ref-type="boxed-text" rid="box6"><bold>Box 6</bold></xref>). This function first determines the median across all cells for the above-mentioned quality control parameters. Following, for each cell the median absolute deviation (MAD) is calculated. If a quality control parameter of a cell deviates more than 3 MAD from the median in an undesired direction, the cell is considered an outlier. All cells which are considered outliers in at least one of the quality parameters are marked as low-quality cells.</p>
<p>After identification of low-quality cells, these cells can either be removed from the data or just marked as such. The removal ensures that these cells do not interfere downstream analyses and interpretation. However, it could also be the case that interesting subpopulations of cells are marked as low-quality cells because they exhibit one of the quality control parameters. One of such examples would be hepatocytes. These cells are highly metabolically active and hence will have a high number of mitochondrial genes. Hence, it is important to check for accidental removal of high-quality cells by plotting the different quality metrics against each other and evaluating how well the different quality metrics correlate for each sample. In <xref ref-type="fig" rid="f7"><bold>Figure&#xa0;7</bold></xref>, the different quality metrics of our samples are displayed. <xref ref-type="fig" rid="f7"><bold>Figure&#xa0;7A</bold></xref> shows the different quality control metrics of each sample, first the library size, then the number of detected genes and lastly the number of mitochondrial genes in the data. In <xref ref-type="fig" rid="f7"><bold>Figure&#xa0;7B</bold></xref>, we plotted for the skin sample the library size against the percentage of reads mapping to mitochondrial genes, while <xref ref-type="fig" rid="f7"><bold>Figure&#xa0;7C</bold></xref> plots the number of genes detected against the library size. Such a multivariate approach by considering different metrics simultaneously, can lead to better decision on which cells to retain for further steps and which cells to remove. However, as the workflow presented in this paper is only of explorative nature, we will not exclude cells of low quality here. For more information, please see section &#x201c;4 Per sample Quality Control and filtering of low-quality cells&#x201d; in the notebook.</p>
<fig id="f7" position="float">
<label>Figure&#xa0;7</label>
<caption>
<p>Summary of quality control metrics. <bold>(A)</bold> Plots of the library size, number of detected genes and mitochondrial content for each of the samples. <bold>(B)</bold> Scatter plots of the library size and mitochondrial content and <bold>(C)</bold> library size and number of detected genes. Each dot in the plot represents a cell, blue cells are of high quality, orange cells are of low quality and should be filtered out.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g007.tif"/>
</fig>
<boxed-text id="box6" position="float">
<label>BOX 6</label>
<title>R code for quality control and filtering (identical for all samples, showcase iLN).</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">iLN &lt;- sceRNA$iLN<break/>
<break/>rowData(iLN)$gene_name &lt;- rownames(iLN)<break/>rowData(iLN)$location &lt;- chr.loc<break/>iLN &lt;- addPerFeatureQC(iLN)<break/>
<break/>rowData(iLN)<break/>
<break/>iLN &lt;- addPerCellQC(iLN, subsets = list(Mito = is.mito))<break/>qcstats &lt;- perCellQCMetrics(iLN, subsets = list(Mito = is.mito))<break/>filtered &lt;-<break/>quickPerCellQC(qcstats, percent_subsets = &#x201c;subsets_Mito_percent&#x201d;)<break/>filtered<break/>colSums(as.data.frame(filtered))<break/>
<break/>table(filtered$low_n_features, filtered$high_subsets_Mito_percent)<break/>
<break/># Flag the low quality cells as discard<break/>iLN$discard &lt;- filtered$discard<break/>
<break/># Plot the percent of mitochondrial RNA for each cell, color the cells by<break/># whether they should be discarded or not<break/>plotColData(iLN, y = &#x201c;subsets_Mito_percent&#x201d;, colour_by = &#x201c;discard&#x201d;)<break/>
<break/># Plot the library size<break/>plotColData(iLN, y = &#x201c;sum&#x201d;, colour_by = &#x201c;discard&#x201d;)<break/>
<break/># Plot the number of detected genes<break/>plotColData(iLN, y = &#x201c;detected&#x201d;, colour_by = &#x201c;discard&#x201d;)<break/>
<break/># Plot mitochondrial RNA percentage against library size<break/>plotColData(iLN,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;x = &#x201c;sum&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;y = &#x201c;subsets_Mito_percent&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;colour_by = &#x201c;discard&#x201d;) +<break/>&#x2003;labs(x = &#x201c;Sum of all counts (library size)&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;y = &#x201c;Percent mitochondrial genes&#x201d;)<break/>
<break/># Plot library size against number of detected genes<break/>plotColData(iLN,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;x = &#x201c;detected&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;y = &#x201c;sum&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;colour_by = &#x201c;discard&#x201d;) +<break/>&#x2003;labs(x = &#x201c;Number of detected genes&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;y = &#x201c;Sum of all counts (library size)&#x201d;)<break/>
<break/># Assign the data back to our object<break/>sceRNA$iLN &lt;- iLN<break/># As this report is only for exploratory analyses we do not filter out any cells<break/># Otherwise you could do<break/># sceRNA$iLN &lt;- iLN[,!discard]</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_5">
<title>Quality metrics and their correlation with TCR calling</title>
<p>In our analysis, we were also interested in whether the quality control metrics differed between cells with TCR and cells without TCR. Especially the mitochondrial content could be of interest. Hence, we compared the cells with TCR with those without (<xref ref-type="table" rid="T8"><bold>Table&#xa0;8</bold></xref>). These data illustrate that around 70% or more cells of the samples have TCRs. One exception being the cells of the skin, where only around 30% of cells have associated TCRs. We can also see that the percentage of cells with a high mitochondrial content (i.e low quality cells) is nearly doubled in the cells without TCR compared to the cells with TCR. This shows that filtering of cells with associated TCR also seems to work as a way of quality control and filtering of low-quality cells. Since the VDJ library is generated from cDNA, results here also depend on the quality of the cDNA library.</p>
<table-wrap id="T8" position="float">
<label>Table&#xa0;8</label>
<caption>
<p>Different summary statistics on the input data such as number of cells per sample, number of cells with and without TCR and percentage of cells with high mitochondrial content in cells with and without TCR.</p>
</caption>
<table frame="hsides">
<thead>
<tr>
<th valign="bottom" align="center">Organ</th>
<th valign="bottom" align="center">Identified cells</th>
<th valign="bottom" align="center">Cells with<break/>associated TCR</th>
<th valign="bottom" align="center">% cells with high mitochondrial content</th>
<th valign="bottom" align="center">Cells without TCR</th>
<th valign="bottom" align="center">% cells with high <break/>mitochondrial content</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="bottom" align="center">spleen</td>
<td valign="bottom" align="center">4,756</td>
<td valign="bottom" align="center">3,412</td>
<td valign="bottom" align="center">3.66</td>
<td valign="bottom" align="center">1,344</td>
<td valign="bottom" align="center">6.18</td>
</tr>
<tr>
<td valign="bottom" align="center">mLN</td>
<td valign="bottom" align="center">4,010</td>
<td valign="bottom" align="center">3,208</td>
<td valign="bottom" align="center">3.11</td>
<td valign="bottom" align="center">802</td>
<td valign="bottom" align="center">5.11</td>
</tr>
<tr>
<td valign="bottom" align="center">iLN</td>
<td valign="bottom" align="center">3,075</td>
<td valign="bottom" align="center">2,509</td>
<td valign="bottom" align="center">3.5</td>
<td valign="bottom" align="center">566</td>
<td valign="bottom" align="center">6.71</td>
</tr>
<tr>
<td valign="bottom" align="center">skin</td>
<td valign="bottom" align="center">3,339</td>
<td valign="bottom" align="center">989</td>
<td valign="bottom" align="center">7.89</td>
<td valign="bottom" align="center">2,350</td>
<td valign="bottom" align="center">16.47</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s5_6">
<title>Doublet detection</title>
<p>In a single cell experiment, doublets are artificial observations in which two cells are sequenced as one cell. Those are especially common in droplet-based scRNA-seq protocols and usually arise from errors in cell sorting or capturing (<xref ref-type="bibr" rid="B26">26</xref>, <xref ref-type="bibr" rid="B27">27</xref>). Doublets usually do not represent meaningful biological states and can influence the analysis of the data. For example, a mixture of two cells which were sequenced as one could be characterized as a transitionary state between two cell types or an intermediate population. The general approach for doublet detection in scRNA-seq data is the use of expression profiles of the cells. Based on their expression profile, doublets are computationally inferred from the data. In our workflow, we use the <italic>scDblFinder()</italic> function from the corresponding package (<xref ref-type="bibr" rid="B28">28</xref>) (<xref ref-type="boxed-text" rid="box7"><bold>Box 7</bold></xref>). This function simulates expression profiles of possible doublets by randomly combining two cells of the data together before assigning each cell a doublet score based on its likelihood to be a double. Further details on the method and computation can be found in the <italic>scDblFinder</italic> documentation. Once doublets have been identified in the data, users can decide to either flag these cells or remove them completely from the data. In this context, it can be helpful to overlay the doublet classification over downstream computed clustering results to evaluate if the considered doublets are forming a distinguished cluster or display any relevant pattern. During the exploration of the data, we recommend to simply flag doublet cells but advocate for removal of the cells once the processed dataset is created. In <xref ref-type="fig" rid="f9"><bold>Figure&#xa0;9C</bold></xref>, we can see that the identified doublets in our data to not follow a specific pattern. Overall, the number of detected doublets was also very low in our samples, less than 5% of all cells (see <xref ref-type="fig" rid="f9"><bold>Figure&#xa0;9B</bold></xref>). For the doublet detection step, we refer readers to the provided notebook section &#x201c;5 Doublet detection in the individual samples&#x201d;.</p>
<boxed-text id="box7" position="float">
<label>BOX 7</label>
<title>R code for doublet detection (identical for all samples, showcase iLN).</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">iLN &lt;- sceRNA$iLN<break/># Doublet detection<break/>iLN &lt;- scDblFinder(iLN)<break/># Print a statistics table<break/>table(iLN$scDblFinder.class)<break/># Assign the object back to save the information<break/>sceRNA$iLN &lt;- iLN<break/># Or you can assign the object back without the cells marked as doublets<break/># sceRNA$iLN &lt;- iLN[, iLN$scDblFinder.class == &#x201c;singlet&#x201d;] </td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_7">
<title>Per-sample normalization</title>
<p>In scRNA-seq data, often differences in the sequencing coverage between libraries arise (<xref ref-type="bibr" rid="B29">29</xref>). The cause for these variations is typically technical variation in cDNA capture or PCR amplification efficiency. Since this variability does not depict true biological signal in the data, it can distort the interpretation of expression profiles. In order to prevent the influence of the technical variation on data analysis, the data is normalized (<xref ref-type="bibr" rid="B30">30</xref>, <xref ref-type="bibr" rid="B31">31</xref>).</p>
<p>Usually, normalization is applied to the different batches of the data at hand. The data presented in this paper does not consist of different batches but only of different tissues. However, treating the different tissues as individual batches and normalization across tissues at this point would be detrimental to downstream analysis steps. Hence, we decided to postpone the across tissue normalization to a later point of the workflow. Nevertheless, there are intra-sample normalization methods which should be applied at this point in the analysis. One of these normalizations is a log-scaling of the expression values, as implemented in the <italic>logNormCounts</italic> function of the <italic>scran</italic> package (<xref ref-type="bibr" rid="B32">32</xref>) (<xref ref-type="boxed-text" rid="box8"><bold>Box 8</bold></xref>). This is beneficial for downstream analysis steps such as dimensionality reduction and clustering, as the expression values become more comparable without having too extreme values. For the normalization of the counts see section &#x201c;6 Per-Sample Normalization&#x201d;.</p>
<boxed-text id="box8" position="float">
<label>BOX 8</label>
<title>R code per-sample Normalization.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">sceRNA &lt;- lapply(sceRNA, logNormCounts) </td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_8">
<title>Feature selection</title>
<p>In an exploratory scRNA-seq analysis, characterization of heterogeneity across individual cells is often one of the major goals. In order to quantify the differences in gene expression between cells, a subset of genes is selected such that this set contains useful information about the biological variation, while removing random noise and technical differences. This process of feature selection majorly impacts the performance of downstream analyses and methods. A commonly used approach of feature selection is the selection of the most variable genes across the cells (<xref ref-type="bibr" rid="B32">32</xref>). The approach is based on the assumption that the biological variation of the data will manifest as an increased variation in the affected genes, hence overshadowing technical noise and irrelevant biological variation (<xref ref-type="bibr" rid="B8">8</xref>). In our workflow, we use the <italic>modelGeneVar()</italic> function of the <italic>scran</italic> package (<xref ref-type="bibr" rid="B32">32</xref>) for the computation of the variation in the genes (<xref ref-type="boxed-text" rid="box9"><bold>Box 9</bold></xref>). We then use the <italic>getTopHVGs()</italic> function of the same package to extract the top 10% of highly variable genes (HVG) for each sample. These HVGs are then used as features for downstream steps. For the feature selection for each sample, see section &#x201c;7 Feature Selection&#x201d;.</p>
<boxed-text id="box9" position="float">
<label>BOX 9</label>
<title>R code feature selection.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">all.dec &lt;- lapply(sceRNA, modelGeneVar)<break/>all.hvgs &lt;- lapply(all.dec, getTopHVGs, prop = 0.1) </td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_9">
<title>Data integration and merging of samples</title>
<p>So far, we worked on each of our tissue samples individually as the presented steps yield more meaningful results if applied in a sample-specific manner. However, methods such as dimensionality reduction, clustering, marker gene detection and cell type annotation should be applied on the data set as a whole. This is why we will merge the individual <italic>SingleCellExperiment</italic> objects into one single object. For this, there are generally two approaches available: merging the samples without batch correction and merging after applying batch correction (<xref ref-type="bibr" rid="B33">33</xref>, <xref ref-type="bibr" rid="B34">34</xref>). Usually, scRNA-seq data sets do not only contain different samples and tissues but also different batches. As previously discussed in this manuscript, there are technical differences between samples of different batches which can influence the results. We would like to filter out these technical differences to focus on biological variation between samples. In our workflow, we will present both approaches, batch-corrected and -uncorrected. In the uncorrected approach, we first apply the across sample normalization using the <italic>multiBatchNorm()</italic> function of the <italic>batchelor</italic> package (<xref ref-type="bibr" rid="B33">33</xref>). Afterwards, the metadata of the individual samples is synchronized before merging the objects into one <italic>SingleCellExperiment</italic> object (<xref ref-type="boxed-text" rid="box10"><bold>Box 10</bold></xref>). In the batch-corrected approach, we use the <italic>RunHarmony</italic> function of the <italic>harmony</italic> package (<ext-link ext-link-type="uri" xlink:href="https://CRAN.R-project.org/package=harmony">https://CRAN.R-project.org/package=harmony</ext-link>), after transforming our <italic>SingleCellExperiment</italic> object to a <italic>Seurat</italic> object (<xref ref-type="boxed-text" rid="box11"><bold>Box 11</bold></xref>). Here, the data is already merged at read-in and processed as a whole, following the usual Seurat workflow (<xref ref-type="bibr" rid="B19">19</xref>). When inspecting the data further after merging, we realized that the batch correction was too stringent on our data and overcorrected for reasonable and important biological characteristics of the skin sample (<xref ref-type="fig" rid="f8"><bold>Figures&#xa0;8A, B</bold></xref>). Hence, we will use the uncorrected, merged <italic>SingleCellExperiment</italic>. The code for uncorrected as well as batch-corrected merging of the data is shown in section &#x201c;8 Data integration and merging of samples&#x201d;. To further showcase the effect of batch correction, we tried to integrate our data with a publicly available dataset presented in (<xref ref-type="bibr" rid="B15">15</xref>). From this dataset, we used the skin, spleen and LN sample to match the data presented in this paper. After downloading and reading the data as presented earlier in this paper, we tried to integrate and harmonize the two datasets using the <italic>harmony</italic> package. <xref ref-type="fig" rid="f8"><bold>Figures&#xa0;8C, D</bold></xref> show the results of the integrated dataset. The code for these steps can be found in the notebook in section &#x201c;8.3 Integration with publicly available data&#x201d;.</p>
<boxed-text id="box10" position="float">
<label>BOX 10</label>
<title>R code uncorrected integration.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left"># normalize counts across the samples<break/>rescaled &lt;- multiBatchNorm(sceRNA)<break/>
<break/># extract the individual samples<break/>iLN &lt;- rescaled$iLN<break/>mLN &lt;- rescaled$mLN<break/>skin &lt;- rescaled$skin<break/>spleen &lt;- rescaled$spleen<break/>
<break/># combine the selected features<break/>combined.dec &lt;- combineVar(all.dec)<break/>chosen.hvgs &lt;- combined.dec$bio &gt; 0<break/>sum(chosen.hvgs)<break/>
<break/># Synchronizing the metadata for cbind()ing.<break/>rowData(iLN) &lt;-<break/>&#x2003;rowData(iLN)[, c(&#x201c;gene_name&#x201d;, &#x201c;location&#x201d;)]<break/>rowData(mLN) &lt;-<break/>&#x2003;rowData(mLN)[, c(&#x201c;gene_name&#x201d;, &#x201c;location&#x201d;)]<break/>rowData(skin) &lt;-<break/>&#x2003;rowData(skin)[, c(&#x201c;gene_name&#x201d;, &#x201c;location&#x201d;)]<break/>rowData(spleen) &lt;-<break/>&#x2003;rowData(spleen)[, c(&#x201c;gene_name&#x201d;, &#x201c;location&#x201d;)]<break/>
<break/># merge individual objects into one final object<break/>sce_merged &lt;- cbind(<break/>&#x2003;iLN,<break/>&#x2003;mLN,<break/>&#x2003;skin,<break/>&#x2003;spleen<break/>)</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
<boxed-text id="box11" position="float">
<label>BOX 11</label>
<title>R code batch correction using harmony.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left"># Read in the data as seurat object as shown in &#x201c;1 Create SingleCellExperiment&#x201d;<break/>seurat &lt;- NormalizeData(seurat)<break/>seurat &lt;- FindVariableFeatures(seurat)<break/>seurat &lt;- ScaleData(seurat)<break/>seurat &lt;- RunPCA(seurat)<break/>DimPlot(seurat, reduction = &#x201c;pca&#x201d;)<break/>
<break/>seurat &lt;- RunHarmony(seurat, group.by.vars = &#x201c;tissue&#x201d;, plot_convergence = FALSE)<break/>
<break/>seurat &lt;- RunUMAP(seurat,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;reduction = &#x2018;harmony&#x2019;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;dims = 1:20)<break/>seurat &lt;- FindNeighbors(seurat,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;reduction = &#x201c;harmony&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;dims = 1:20)<break/>seurat &lt;- FindClusters(seurat, resolution = 0.5)<break/>
<break/>
<break/>DimPlot(seurat, reduction = &#x201c;umap&#x201d;)<break/>
<break/>DimPlot(seurat, reduction = &#x201c;umap&#x201d;, group.by = &#x201c;tissue&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;cols = c(&#x201c;springgreen4&#x201d;, &#x201c;darkmagenta&#x201d;, &#x201c;tomato4&#x201d;, &#x201c;darkblue&#x201d;))</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
<fig id="f8" position="float">
<label>Figure&#xa0;8</label>
<caption>
<p>Harmonization of the data. <bold>(A)</bold> UMAP representation of the data before and after batch-correction using <italic>harmony</italic> colored by the tissue of the sample. <bold>(B)</bold> UMAP representation of the data before and after batch-correction using <italic>harmony</italic> colored by the clustering results. <bold>(C)</bold> UMAP representation of the integrated dataset with the publicly available data before and after batch-correction using <italic>harmony</italic> colored by the tissue of the sample. <bold>(D)</bold> UMAP representation of the integrated dataset with the publicly available data before and after batch-correction using <italic>harmony</italic> colored by the clustering results.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g008.tif"/>
</fig>
</sec>
<sec id="s5_10">
<title>Dimensionality reduction using principal component analysis</title>
<p>In scRNA-seq analyses dimensionality reduction is used to achieve different objectives in the workflow. First, it greatly reduces the runtime of the following steps as calculations only need to be computed for a small number of dimensions compared to the large number of genes in the input data. Secondly, the procedure can reduce noise in the data by using average of genes rather than individual gene expression values. Lastly, it can also improve plotting of the data as 2/3-dimensional plots are usually easier to visualize and interpret as higher dimensional visualizations. A common approach for dimensionality reduction in scRNA-seq is Principal Component Analysis (PCA) (<xref ref-type="boxed-text" rid="box12"><bold>Box 12</bold></xref>). As the first couple of principal components (PC) capture the largest amount of variance in the data, it can be assumed that these PC represent a considerable amount of biological variation of the data at hand. This way, the biological signal can be concentrated in a smaller number of PCs which can help with interpretation and visualization of the high-dimensional scRNA-seq data. In our analysis we use the <italic>runPCA()</italic> function from the <italic>BiocSingular</italic> package (<xref ref-type="bibr" rid="B8">8</xref>), <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.18129/B9.bioc.BiocSingular">https://doi.org/10.18129/B9.bioc.BiocSingular</ext-link>). The function calculates the principal components for the given data. In the shown code, we calculate the PCs based on the HVGs we determined previously, ensuring a reduced computation time while at the same time reducing the high-dimensional noise. A critical choice in the context of PCA is the choice of the number of top PCs used for downstream analyses. A helpful visualization to decide on this number is shown in <xref ref-type="fig" rid="f9"><bold>Figure&#xa0;9A</bold></xref>. The figure plots the PCs against the percentage of variance each PC explains/captures. We see that there is a notable drop in the amount of variance explained by the PCs after the 25<sup>th</sup> PC. Hence, we decided to use the first 25 PCs for downstream analyses as these capture most of the variance of our data at hand. For the PCA analysis see section &#x201c;9 Dimensionality reduction using Principal Component Analysis&#x201d;. Once dimensionality reduction is applied, we can also calculate a t-SNE or UMAP representation of our data (<xref ref-type="bibr" rid="B35">35</xref>, <xref ref-type="bibr" rid="B36">36</xref>). Both visualization techniques are suitable for high-dimensional datasets such as scRNA-seq data. The t-stochastic neighborhood embedding (t-SNE) aims to find a low-dimensionality representation of the data that preserves the distances between points from the high-dimensionality space. Uniform manifold approximation and projection (UMAP, (<xref ref-type="bibr" rid="B36">36</xref>)) is another non-linear visualization technique for high-dimensionality data, similar to t-SNE. It should be mentioned that both methods are non-deterministic, meaning that they yield slightly different results each time the function is run on the data. We can prevent this by using the R function <italic>set.seed()</italic> using the same seed each time. In <xref ref-type="fig" rid="f9"><bold>Figures&#xa0;9C, D</bold></xref> and <xref ref-type="fig" rid="f10"><bold>Figures&#xa0;10A&#x2013;C</bold></xref> we show the UMAP representation of our data colored by different properties of the data. We also calculated the t-SNE representations of our data colored by the same properties, the results are shown in the notebook accompanying this manuscript. For the plotting of the UMAP and t-SNE see <xref ref-type="boxed-text" rid="box13"><bold>Box 13</bold></xref>.</p>
<fig id="f9" position="float">
<label>Figure&#xa0;9</label>
<caption>
<p>Dimensionality reduction and clustering results. <bold>(A)</bold> Scree plot of the variance explained by each of the calculated principal components (PC). <bold>(B)</bold> Summary table of detected doublets in each of the tissues. <bold>(C)</bold> UMAP representation of the data colored by doublet status of each cell. <bold>(D)</bold> UMAP representation of the data colored by the different tissue types in the input data.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g009.tif"/>
</fig>
<fig id="f10" position="float">
<label>Figure&#xa0;10</label>
<caption>
<p>Clustering results and marker gene detection. <bold>(A)</bold> UMAP colored by the clusters found in the data. <bold>(B)</bold> Summary table of cluster composition. <bold>(C)</bold> UMAP representation of the data colored by the expression of different marker genes. <bold>(D)</bold> Violin plots showing the expression of different marker genes in the individual clusters.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g010.tif"/>
</fig>
<boxed-text id="box12" position="float">
<label>BOX 12</label>
<title>R code PCA.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">set.seed(42)<break/>sce_merged &lt;- runPCA(sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;subset_row = chosen.hvgs,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;BSPARAM = BiocSingular::RandomParam())<break/>
<break/># Plot scree plot of the variance explained by each PC<break/>percent.var &lt;- attr(reducedDim(sce_merged), &#x201c;percentVar&#x201d;)<break/>plot(percent.var,<break/>&#x2003;&#x2003;&#x2003;log = &#x201c;y&#x201d;,<break/>&#x2003;&#x2003;&#x2003;xlab = &#x201c;PC&#x201d;,<break/>&#x2003;&#x2003;&#x2003;ylab = &#x201c;Variance explained (%)&#x201d;)<break/>
<break/># calculate UMAP and tSNE representation of the data<break/>set.seed(42)<break/>sce_merged &lt;- runTSNE(sce_merged, dimred = &#x201c;PCA&#x201d;)<break/>
<break/>set.seed(42)<break/>sce_merged &lt;- runUMAP(sce_merged, dimred = &#x201c;PCA&#x201d;)</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_11">
<title>Clustering</title>
<p>Clustering is adopted for scRNA-seq data to summarize the high-dimensional, complex data by dividing the cells into individual groups based on gene expression profiles. This greatly eases interpretation and exploration of the data, as the cells are then represented as discrete groups rather than the complex, high-dimensional space that is the origin of the data. In its nature, clustering is an explorative step of the analysis, possibly run in different iterations. In our workflow, we use the <italic>buildSNNGraph()</italic> function of the <italic>scran</italic> package (<xref ref-type="bibr" rid="B32">32</xref>) followed by the <italic>cluster_walktrap()</italic> function of the <italic>igraph</italic> package (<xref ref-type="boxed-text" rid="box13"><bold>Box 13</bold></xref>). This function implements a graph-based clustering approach. Other approaches are for example Louvain clustering (<xref ref-type="bibr" rid="B37">37</xref>), vector quantization like k-means or hierarchical clustering (<xref ref-type="bibr" rid="B8">8</xref>). Once clusters have been calculated, they can be visualized as UMAP or t-SNE. In <xref ref-type="fig" rid="f10"><bold>Figure&#xa0;10A</bold></xref>, we color the UMAP by the detected clusters. Together with <xref ref-type="fig" rid="f9"><bold>Figure&#xa0;9B</bold></xref>, this shows that the skin cells form individual clusters which are clearly separated from the rest of the data. The remaining tissue types intermingle in their clusters with the separation being driven by factors other than tissue type. <xref ref-type="fig" rid="f10"><bold>Figure&#xa0;10B</bold></xref> also highlights in a table that the skin forms exclusive clusters with only incidental, individual cells being part of tissue-mixed clusters. For more details on clustering, see section &#x201c;10 Clustering&#x201d; in the notebook.</p>
<boxed-text id="box13" position="float">
<label>BOX 13</label>
<title>R code clustering.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left"># Calculate the clusters<break/>snn.gr &lt;- buildSNNGraph(sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;k = 25,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;use.dimred = &#x201c;PCA&#x201d;)<break/>clusters &lt;- igraph::cluster_walktrap(snn.gr)$membership<break/>
<break/># See which tissue can be found in which cluster<break/>tab &lt;- table(Cluster = clusters, Batch = sce_merged$tissue)<break/>tab<break/>
<break/># Set the cluster as colLabels of the SingleCellExperiment<break/>colLabels(sce_merged) &lt;- factor(clusters)<break/>plotTSNE(sce_merged, colour_by = &#x201c;label&#x201d;)<break/>plotUMAP(sce_merged, colour_by = &#x201c;label&#x201d;)<break/>
<break/># color tSNE by tissue<break/>tsne &lt;- plotTSNE(sce_merged, colour_by = &#x201c;tissue&#x201d;)<break/># set custom colors, because with the original chosen colors of the method,<break/># the individual tissues are hard to distinguish.<break/>tsne &lt;- tsne + scale_fill_manual(<break/>&#x2003;values = c(<break/>&#x2003;&#x2003;skin = &#x201c;tomato4&#x201d;,<break/>&#x2003;&#x2003;spleen = &#x201c;darkblue&#x201d;,<break/>&#x2003;&#x2003;iLN = &#x201c;springgreen4&#x201d;,<break/>&#x2003;&#x2003;mLN = &#x201c;darkmagenta&#x201d;<break/>&#x2003;),<break/>&#x2003;aesthetics = &#x201c;colour&#x201d;<break/>)<break/># plot the tSNE<break/>tsne<break/>
<break/># color UMAP by tissue<break/>umap &lt;- plotUMAP(sce_merged, colour_by = &#x201c;tissue&#x201d;)<break/># set custom colors, because with the original chosen colors of the method,<break/># the individual tissues are hard to distinguish.<break/>umap &lt;- umap + scale_fill_manual(<break/>&#x2003;values = c(<break/>&#x2003;&#x2003;skin = &#x201c;tomato4&#x201d;,<break/>&#x2003;&#x2003;spleen = &#x201c;darkblue&#x201d;,<break/>&#x2003;&#x2003;iLN = &#x201c;springgreen4&#x201d;,<break/>&#x2003;&#x2003;mLN = &#x201c;darkmagenta&#x201d;<break/>&#x2003;),<break/>&#x2003;aesthetics = &#x201c;colour&#x201d;<break/>)<break/># plot the UMAP<break/>Umap<break/>
<break/># plot tSNE and UMAP colored by doublet identification of cells<break/>plotTSNE(sce_merged, colour_by = &#x201c;scDblFinder.class&#x201d;)<break/>plotUMAP(sce_merged, colour_by = &#x201c;scDblFinder.class&#x201d;)</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_12">
<title>Marker gene detection</title>
<p>After clustering the data in the previous workflow step, the interpretation of the data can be further facilitated by characterizing marker genes (<xref ref-type="bibr" rid="B38">38</xref>). Marker genes are genes that drive the separation between the individual clusters, and the identification of such genes helps identifying possible functions and biological meaning of the individual clusters. The general strategy to determine marker genes of individual clusters is a pairwise comparison of all the clusters to calculate scores which quantify the differences in gene expression. In our analysis we use the <italic>scoreMarkers()</italic> function from the <italic>scran</italic> package (<xref ref-type="bibr" rid="B32">32</xref>) for this analysis step (<xref ref-type="boxed-text" rid="box14"><bold>Box 14</bold></xref>). The function compares each of the clusters in pairs. Pairwise comparisons provide the advantage of providing more information about the markers which is beneficial to the interpretation. Also, in contrast to the approach of comparing one cluster against the average of all remaining cells, pairwise comparisons are more robust against population composition and uneven subpopulation sizes. The <italic>scoreMarkers()</italic> function calculates different effect size summaries to quantify the difference in gene expression between the clusters. The one we use in our workflow, visualized in <xref ref-type="fig" rid="f10"><bold>Figure&#xa0;10D</bold></xref>, is the log fold-change, where we use the genes with the highest log fold-change between clusters as our marker genes for each cluster. There are also other metrics available in the function. For users interested in those, we refer to the documentation of the <italic>scoreMarkers()</italic> function. For the marker gene detection, see section &#x201c;11 Marker gene det</p>
<boxed-text id="box14" position="float">
<label>BOX 14</label>
<title>R code marker gene detection.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left"># score the marker genes between the individual pairs of clusters<break/>markerGenes &lt;- scoreMarkers(sce_merged, colLabels(sce_merged))<break/>
<break/># extract marker genes for cluster 1, 2 and 9<break/>markerGenes_cluster1 &lt;- as.data.frame(markerGenes[[1]])<break/>markerGenes_cluster2 &lt;- as.data.frame(markerGenes[[2]])<break/>markerGenes_cluster9 &lt;- as.data.frame(markerGenes[[9]])<break/>
<break/># generate a data table of the top 20 marker for each of the selected clusters<break/>DT::datatable(head(markerGenes_cluster1[order(markerGenes_cluster1$mean.logFC.detected, decreasing = TRUE)], n = 20))<break/>DT::datatable(head(markerGenes_cluster2[order(markerGenes_cluster2$mean.logFC.detected, decreasing = TRUE)], n = 20))<break/>DT::datatable(head(markerGenes_cluster9[order(markerGenes_cluster9$mean.logFC.detected, decreasing = TRUE)], n = 20))<break/>
<break/># plot the expression of the top 6 marker genes for each cluster in every of<break/># the clusters<break/>plotExpression(<break/>&#x2003;sce_merged,<break/>&#x2003;features = head(rownames(markerGenes_cluster1)),<break/>&#x2003;x = &#x201c;label&#x201d;,<break/>&#x2003;colour_by = &#x201c;label&#x201d;<break/>)<break/>plotExpression(<break/>&#x2003;sce_merged,<break/>&#x2003;features = head(rownames(markerGenes_cluster2)),<break/>&#x2003;x = &#x201c;label&#x201d;,<break/>&#x2003;colour_by = &#x201c;label&#x201d;<break/>)<break/>plotExpression(<break/>&#x2003;sce_merged,<break/>&#x2003;features = head(rownames(markerGenes_cluster9)),<break/>&#x2003;x = &#x201c;label&#x201d;,<break/>&#x2003;colour_by = &#x201c;label&#x201d;<break/>)</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_13">
<title>TCR repertoire diversity</title>
<p>TCR V(D)J sequencing coupled with single-cell RNA sequencing enables profiling of paired TCR&#x3b1; and TCR&#x3b2; chains at single-cell resolution with coupled global gene expression in the same cell (<xref ref-type="bibr" rid="B39">39</xref>, <xref ref-type="bibr" rid="B40">40</xref>). This analysis makes it possible to characterize T-cell clonal expansion in steady state and in disease, as well as tracking shared T-cell clonotypes between different tissues. In our analysis, we wanted to use this information to evaluate if there are shared TCR chains between different tissues as well as different clusters. We also wanted to evaluate for each tissue and cluster which chains were only found once compared to chains found multiple times.</p>
<p>In <xref ref-type="fig" rid="f11"><bold>Figure&#xa0;11</bold></xref>, we displayed several different statistics of the TCR chains in our data. <xref ref-type="fig" rid="f11"><bold>Figure&#xa0;11A</bold></xref> shows a summary table of the occurrences of different combinations of TCR chains in the different tissues. We can see that most cells in our data have at least one TCR&#x3b2; chain, followed by cells with at least one TCR&#x3b1; chain and cells with one TCR&#x3b1; and one TCR&#x3b2;. <xref ref-type="fig" rid="f11"><bold>Figure&#xa0;11B</bold></xref> visualizes the clonality of the TCR chains in the individual tissues. Here, we can see that most chains of the lymphoid organs only occur once, while some chains can be found multiple times. The highest TCR diversity can be found in the skin. <xref ref-type="fig" rid="f11"><bold>Figure&#xa0;11C</bold></xref> shows a similar summary table as part <xref ref-type="fig" rid="f11"><bold>Figure&#xa0;11A</bold></xref>, this time separated into the individual clusters calculated for our data set. Here, we can observe similar patterns as for the distribution of TCRs in the individual tissues. Lastly, <xref ref-type="fig" rid="f11"><bold>Figure&#xa0;11D</bold></xref> shows pie charts of the clonality of the TCR in the individual clusters, in which we grouped all the TCR which occurred only once in the clusters. These are shown in green, while the remaining proportion of each pie chart is composed of TCR which have multiple occurrences in a cluster. Here, we can see that nearly each cluster has TCR chains which can be found more than once except for cluster 7. In a second step, we also wanted to analyze if there are TCR chains which were shared by cells of different tissues (<xref ref-type="boxed-text" rid="box15"><bold>Box 15</bold></xref>). In <xref ref-type="fig" rid="f12"><bold>Figure&#xa0;12A</bold></xref>, we plotted the UMAP representation of our data colored by whether TCR chains are shared by cells of different tissue origin. We can see that there are a lot of TCR chains shared between different tissues. In <xref ref-type="fig" rid="f12"><bold>Figures&#xa0;12B, C</bold></xref>, we colored the UMAP by the occurrence of TCR chains found in cells of either cluster 9 or cluster 1 (<xref ref-type="boxed-text" rid="box16"><bold>Box 16</bold></xref>). In <xref ref-type="fig" rid="f12"><bold>Figure&#xa0;12B</bold></xref>, we can see that there are a lot of TCR chains shared between cluster 9 and 1 which are both composed of exclusively skin cells. However, there are also TCR shared with cells in cluster 5 and 2. <xref ref-type="fig" rid="f12"><bold>Figure&#xa0;12C</bold></xref> shows that TCR chains of cluster 1 are also shared with cells in cluster 2, 5 and 8. <xref ref-type="fig" rid="f12"><bold>Figure&#xa0;12D</bold></xref> shows the shared clonotypes of Cluster 1 and 9 between the other clusters. For the marker gene detection, see section &#x201c;12 TCR repertoire diversity&#x201d; in the notebook.</p>
<fig id="f11" position="float">
<label>Figure&#xa0;11</label>
<caption>
<p>TCR diversity in tissue CD4+ T Cells of an individual animal. <bold>(A)</bold> Table of number of cells with different combinations of TCR chains in the individual tissues. <bold>(B)</bold> Visualization of the TCR diversity in the individual tissues. <bold>(C)</bold> Table of number of cells with different combinations of TCR chains in the individual clusters. <bold>(D)</bold> Pie charts visualizing the clonality of TCR in the clusters. TCR chains found only once per cluster were grouped and colored in green, while the remaining portion of the pie chart visualizes TCR chains with multiple occurrences.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g011.tif"/>
</fig>
<fig id="f12" position="float">
<label>Figure&#xa0;12</label>
<caption>
<p>UMAP plotted by shared clonotypes. <bold>(A)</bold> UMAP representation of the data plotted by whether a clonotype is shared between cells of different tissues. The overlaying numbers represent the clusters of the cells shown in <xref ref-type="fig" rid="f9"><bold>Figure&#xa0;9A</bold></xref>. <bold>(B)</bold> UMAP representation of the data colored by TCR chains shared with cells in cluster 9. <bold>(C)</bold> UMAP representation of the data colored by TCR chains shared with cells in cluster 1. <bold>(D)</bold> Barplot of the number of shared clonotypes of cluster 1 (upper) and 9 (lower) with the other remaining clusters. .</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g012.tif"/>
</fig>
<boxed-text id="box15" position="float">
<label>BOX 15</label>
<title>R code TCR repertoire analysis.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">chains_frequency &lt;- table(sce_merged$cdr3s_aa)<break/>chains_duplicated &lt;- chains_frequency &gt; 1<break/>
<break/>is_duplicated_chains &lt;- sapply(sce_merged$cdr3s_aa, function(x) chains_duplicated[[x]])<break/>
<break/>which_chain &lt;- sapply(sce_merged$cdr3s_aa, function(x) if(chains_duplicated[[x]]){<break/>&#x2003;x<break/>}else{NA})<break/>
<break/>sce_merged$duplicated_chains &lt;- is_duplicated_chains<break/>sce_merged$which_duplicated_chain &lt;- which_chain<break/>
<break/>clonotype_frequency &lt;- table(sce_merged$clonotype)<break/>clonotype_duplicated &lt;- clonotype_frequency &gt; 1<break/>
<break/>is_duplicated_clonotype &lt;- sapply(sce_merged$clonotype, function(x) clonotype_duplicated[[x]])<break/>
<break/>which_clonotype &lt;- sapply(sce_merged$clonotype, function(x) if(clonotype_duplicated[[x]]){<break/>&#x2003;x<break/>}else{NA})<break/>
<break/>sce_merged$duplicated_clonotype &lt;- is_duplicated_clonotype<break/>sce_merged$which_duplicated_clonotype &lt;- which_clonotype<break/>plotUMAP(sce_merged, color_by = &#x201c;duplicated_clonotype&#x201d;, order_by = &#x201c;duplicated_clonotype&#x201d;)</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
<boxed-text id="box16" position="float">
<label>BOX 16</label>
<title>R code Clonotypes shared between clusters (identical for both, showcase cluster 1).</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">clonotype_cluster1 &lt;- sce_merged[, colLabels(sce_merged) == &#x201c;1&#x201d;]$clonotype<break/>clono_cluster1_other_clusters &lt;- sce_merged$clonotype %in% clonotype_cluster1<break/>sce_merged$clonotype_cluster1_shared &lt;- clono_cluster1_other_clusters<break/>
<break/># overlay shared clonotypes on the UMAP<break/>plotUMAP(sce_merged, color_by = &#x201c;clonotype_cluster1_shared&#x201d;, order_by = &#x201c;clonotype_cluster1_shared&#x201d;)<break/>
<break/># plot shared clonotypes as barplot<break/>data &lt;- as.data.frame(table(sce_merged$clonotype_cluster1_shared, colLabels(sce_merged)))<break/>data &lt;- data[data$Var1 == TRUE],<break/>data &lt;- data[!data$Var2 == 1, c(2:3)]<break/>colnames(data) &lt;- c(&#x201c;Cluster&#x201d;, &#x201c;Frequency&#x201d;)<break/>
<break/>ggplot(data, aes(x = Cluster, y = Frequency, fill = Cluster, label = Frequency)) +<break/>&#x2003;geom_bar(stat = &#x201c;identity&#x201d;) +<break/>&#x2003;geom_text(size = 5, position = position_stack(vjust = 0.5)) +<break/>&#x2003;theme_bw()</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_14">
<title>Cell type annotation</title>
<p>Cell type annotation is arguably one of the most critical yet challenging step of a scRNA-seq analysis (<xref ref-type="bibr" rid="B41">41</xref>&#x2013;<xref ref-type="bibr" rid="B43">43</xref>), as the concept of a cell type itself and the distinction of different cell types is a highly discussed topic (<xref ref-type="bibr" rid="B44">44</xref>, <xref ref-type="bibr" rid="B45">45</xref>) Transcriptomic profiles of single cells still make it possible to assign cell types to the individual cells of a scRNA-seq data set (<xref ref-type="bibr" rid="B46">46</xref>). Usually, this is done using an appropriate reference data set with each cell being assigned a cell type based on the most similar cell in the reference data. In our workflow, we will present the methods of <italic>SingleR</italic> for cell type annotation (<xref ref-type="bibr" rid="B47">47</xref>) (<xref ref-type="boxed-text" rid="box17"><bold>Box 17</bold></xref>). Technically, any published and carefully labeled bulk or single-cell RNA-seq data set can be used as reference data set. However, the quality of the resulting assigned cell types heavily depends on the compatibility of the data at hand and the reference data. Also, the reference data should ideally contain a variety of cells which comprises all the cell types expected in the scRNA-seq data at hand. A large variety of suitable reference data sets can be found in the R package <italic>celldex</italic> (<xref ref-type="bibr" rid="B47">47</xref>). In our workflow, we use an unpublished, in-house reference data set consisting of different T-cell subpopulations for cell type annotation and the visualizations shown in <xref ref-type="fig" rid="f13"><bold>Figure&#xa0;13</bold></xref>. However, we also present in the HTML report how to use reference data sets from the <italic>celldex</italic> package (<xref ref-type="boxed-text" rid="box17"><bold>Box 17</bold></xref>). After a suitable reference data set has been selected, the cell types can simply be annotated by calling the <italic>SingleR()</italic> function with the input data and the reference data as shown in our workflow. The results can be plotted in a heatmap as scores of the different labels to cells. An example can be seen in <xref ref-type="fig" rid="f13"><bold>Figure&#xa0;13C</bold></xref>. Ideally, each cell should have one label with a high score compared to all other labels. <xref ref-type="fig" rid="f13"><bold>Figure&#xa0;13D</bold></xref> we plot the composition of the individual clusters with the available cell types. We see that most clusters mainly consist of one to two cell types, with all clusters including Tregs. In <xref ref-type="fig" rid="f13"><bold>Figure&#xa0;13</bold></xref> we plot the same results as an overlay over the UMAP representation of our data. Here as well we can see a nice distribution and clustering of the individual cell types, with all clusters having Treg cells. As mentioned above, another approach to cell type annotation is the use of marker genes (<xref ref-type="boxed-text" rid="box18"><bold>Box 18</bold></xref>). In our workflow, we also did cell type annotation based on known marker genes for specific T cell subpopulations. In <xref ref-type="fig" rid="f10"><bold>Figure&#xa0;10C</bold></xref> some of the markers are showcased and we can see the expression of individual selected marker genes in the UMAP representation of the data. <xref ref-type="fig" rid="f10"><bold>Figure&#xa0;10C</bold></xref> shows violin expression plots of the marker genes in the individual samples. Combined with automated reference-based methods, this can support the interpretation and identification of cell types of the data at hand. For the cell type annotation see also section &#x201c;12 Cell type annotation using reference data and custom markers&#x201d; in the notebook.</p>
<fig id="f13" position="float">
<label>Figure&#xa0;13</label>
<caption>
<p>Cell type annotation results. <bold>(A)</bold> UMAP colored by assigned cell types for each cell. <bold>(B)</bold> Trajectory analysis of the data plotted on the UMAP <bold>(C)</bold> Heatmap of cell type distribution across clusters. <bold>(D)</bold> Heatmap of matching similarity of each cell to the different cell types in the reference.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g013.tif"/>
</fig>
<boxed-text id="box17" position="float">
<label>BOX 17</label>
<title>R code cell type annotation using a reference data set.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">ref_annot_immgen &lt;- ImmGenData()<break/># Calculate cell type annotations<break/>celltype_immgen_main &lt;- SingleR(test = sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;ref = ref_annot_immgen,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;labels = ref_annot_immgen$label.main,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;BPPARAM = BiocParallel::MulticoreParam(6))<break/>celltype_immgen_fine &lt;- SingleR(test = sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;ref = ref_annot_immgen,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;labels = ref_annot_immgen$label.fine,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;BPPARAM = BiocParallel::MulticoreParam(6))<break/>
<break/># summarize cell type annotation results<break/>table(celltype_immgen_main$labels)<break/>table(celltype_immgen_fine$labels)<break/>
<break/># save results as meta data in the SingleCellExperiment object<break/>sce_merged$celltype_immgen_main &lt;- celltype_immgen_main$labels<break/>sce_merged$celltype_immgen_fine &lt;- celltype_immgen_fine$labels<break/>
<break/># plot UMAP and tSNE representation colored by the assigned cell types from the<break/># main labels<break/>plotTSNE(sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;colour_by = &#x201c;celltype_immgen_main&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;text_by = &#x201c;celltype_immgen_main&#x201d;)<break/>plotUMAP(sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;colour_by = &#x201c;celltype_immgen_main&#x201d;,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;text_by = &#x201c;celltype_immgen_main&#x201d;)<break/>
<break/># plot UMAP and tSNE representation colored by the assigned cell types from the<break/># fine labels<break/>plotTSNE(sce_merged,<break/>colour_by = &#x201c;celltype_immgen_fine&#x201d;,<break/>text_by = &#x201c;celltype_immgen_fine&#x201d;)<break/>plotUMAP(sce_merged,<break/>colour_by = &#x201c;celltype_immgen_fine&#x201d;,<break/>text_by = &#x201c;celltype_immgen_fine&#x201d;)<break/>
<break/># plot a heatmap of the degree of matching of the individual cells to the<break/># available cell type labels in the reference data<break/>plotScoreHeatmap(celltype_immgen_main)<break/>
<break/># plot a heatmap of cluster to cell types, showing which cell type can found in<break/># the individual clusters<break/>tab &lt;- table(Assigned = celltype_immgen_main$pruned.labels,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;Cluster = colLabels(sce_merged))<break/># Adding a pseudo-count of 10 to avoid strong color jumps with just 1 cell.<break/>pheatmap(log2(tab + 10),<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;color = colorRampPalette(c(&#x201c;white&#x201d;, &#x201c;darkblue&#x201d;))(101))</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
<boxed-text id="box18" position="float">
<label>BOX 18</label>
<title>R code cell type annotation using custom markers.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left"># set up a list of known marker genes for certain cell types, e.g. Treg cells<break/>treg &lt;- c(&#x201c;Foxp3&#x201d;, &#x201c;Il2&#x201d;)<break/># p Treg cells<break/>p_treg &lt;- c(&#x201c;Rorc&#x201d;, &#x201c;Gata3&#x201d;)<break/># t Treg cellst_treg &lt;- c(&#x201c;Ikzf2&#x201d;)<break/># Tissue Treg<break/>tissue_treg &lt;- c(&#x201c;Batf&#x201d;, &#x201c;Klrg1&#x201d;, &#x201c;Areg&#x201d;, &#x201c;Ccr8&#x201d;, &#x201c;Il10&#x201d;)<break/># Th1 cells<break/>th1 &lt;- c(&#x201c;Tbx21&#x201d;, &#x201c;Ifng&#x201d;)<break/># Naive T-cells<break/>naive &lt;- c(&#x201c;Ccr7&#x201d;, &#x201c;Sell&#x201d;, &#x201c;Irf4&#x201d;)<break/>
<break/># repeat these two steps for all markers of interest<break/>plotExpression(sce_merged, features = &#x201c;Foxp3&#x201d;,<break/>&#x2003;&#x2003;x = &#x201c;label&#x201d;, colour_by = &#x201c;label&#x201d;)<break/>plotUMAP(sce_merged, color_by = &#x201c;Foxp3&#x201d;, order_by = &#x201c;Foxp3&#x201d;)</td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
<sec id="s5_15">
<title>Trajectory analysis</title>
<p>A large variety of biological processes can be represented as a continuum of biological changes in the cellular state. This is especially true of cell type differentiation which can for example be observed in different T-cell subpopulations. In our high dimensional scRNA-seq data, we want to characterize this process of differentiation by finding a trajectory. Associated with a trajectory is the pseudotime, which is the position of each cell along the trajectory and could for example represent the state of differentiation of a cell along a continuous process. Pseudotime helps us answer questions about the global population structure of our data. In our workflow, we use a cluster-based approach for identifying the trajectory in the data (<xref ref-type="boxed-text" rid="box19"><bold>Box 19</bold></xref>). The <italic>TSCAN</italic> (<xref ref-type="bibr" rid="B48">48</xref>) algorithm implemented in the corresponding package first computes cluster centroids of the determined clusters before forming a minimum spanning tree (MST). <xref ref-type="fig" rid="f12"><bold>Figure&#xa0;12B</bold></xref> shows the results of our trajectory analysis. The pseudotime ranges from dark to light colors, meaning cells with a dark blue color have an early pseudotime than yellow-colored cells. In the case of the presented data, a trajectory analysis might not yield too many additional insights on the data because of the overall composition of the data. However, in projects and datasets where continuous processes are under investigation, a trajectory analysis might yield additional insight of the data. For the trajectory analysis, see section &#x201c;13 Trajectory Analysis&#x201d; in the notebook.</p>
<boxed-text id="box19" position="float">
<label>BOX 19</label>
<title>R code trajectory analysis.</title>
<table-wrap position="anchor">
<table>
<tbody>
<tr>
<td valign="top" align="left">by.cluster &lt;- aggregateAcrossCells(sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;ids = colLabels(sce_merged))<break/>centroids &lt;- reducedDim(by.cluster, &#x201c;PCA&#x201d;)<break/>
<break/># Set clusters = NULL as we have already aggregated above.<break/>mst &lt;- createClusterMST(centroids, clusters = NULL)<break/>mst<break/>line.data &lt;- reportEdges(by.cluster,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;mst = mst,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;clusters = NULL,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;use.dimred = &#x201c;UMAP&#x201d;)<break/>
<break/>plotUMAP(sce_merged, colour_by = &#x201c;label&#x201d;) +<break/>&#x2003;&#x2003;&#x2003;geom_line(data = line.data,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;mapping = aes(x = dim1,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;y = dim2,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;group = edge))<break/>
<break/>map.tscan &lt;- mapCellsToEdges(sce_merged,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;mst = mst,<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;use.dimred = &#x201c;PCA&#x201d;)<break/>tscan.pseudo &lt;- orderCells(map.tscan, mst)<break/>head(tscan.pseudo)<break/>
<break/>common.pseudo &lt;- averagePseudotime(tscan.pseudo)<break/>plotUMAP(sce_merged, colour_by = I(common.pseudo),<break/>&#x2003;&#x2003;&#x2003;&#x2003;&#x2003;text_by = &#x201c;label&#x201d;, text_colour = &#x201c;red&#x201d;) +<break/>&#x2003;&#x2003;geom_line(data = line.data, mapping = aes(x = dim1, y = dim2, group = edge)) </td>
</tr>
</tbody>
</table>
</table-wrap>
</boxed-text>
</sec>
</sec>
<sec id="s6">
<title>Methods &#x2013; interactive data exploration using <italic>iSEE</italic>
</title>
<p>For most data analysis workflows, one of the most crucial and time-consuming steps is the data exploration, usually accompanied by a lot of different data visualizations (<xref ref-type="bibr" rid="B49">49</xref>). This is also the case for scRNA-seq where the data usually is not only complex, but also large in size. Reiterating data exploration and visualizations steps can be beneficial to the data analysis and can help to compact and facilitate data interpretation. An excellent tool for interactive and iterative data exploration and visualization for scRNA-seq data is <italic>iSEE</italic> (<xref ref-type="bibr" rid="B50">50</xref>). <italic>iSEE</italic> provides a flexible framework which is compatible with a lot of different data types and can be dynamically adapted to the respective data set at hand. Each instance of <italic>iSEE</italic> can be customized to the individual data set by selecting the most suitable visualization and exploration techniques in form of different panels provided by <italic>iSEE</italic> (<xref ref-type="fig" rid="f14"><bold>Figures&#xa0;14</bold></xref><bold>&#x2013;</bold>
<xref ref-type="fig" rid="f16"><bold>16</bold></xref>). As an input to <italic>iSEE</italic>, users have to provide a <italic>SummarizedExperiment</italic> object (<italic>SingleCellExperiment</italic> being a derivative class, with features tailored to single cell assays). This format is commonly returned by most packages in the <italic>Bioconductor</italic> ecosystem. In our workflow, the data is also already saved as a <italic>SingleCellExperiment</italic> object from the beginning, so the data presented here can easily and directly be explored with <italic>iSEE</italic>. In our workflow, we will present different panels of <italic>iSEE</italic> to demonstrate the possibilities of the application. For this, we present a customized panel layout that can be achieved using the code shown in &#x201c;14 Interactive data exploration using iSEE&#x201d;. The first two panels we add to our <italic>iSEE</italic> instance are quality control-related and plot the library size as well as a t-SNE of the log-normalized library size (<xref ref-type="fig" rid="f14"><bold>Figure&#xa0;14</bold></xref>). The plots help to identify clusters of low-quality cells and can also be used to detect quality control or normalization errors.</p>
<fig id="f14" position="float">
<label>Figure&#xa0;14</label>
<caption>
<p>Quality control panels of our iSEE instance. The column data plot 1 on the left plots the library size of each cell in decreasing order. The reduced dimension plot 1 on the right shows the t-SNE presentation of our data colored by the log-normalized library size of each cell. Dark cells have a small library size, while yellow cells have a large library size.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g014.tif"/>
</fig>
<p>Next, we add panels to visualize the marker genes of individual clusters (<xref ref-type="fig" rid="f15"><bold>Figure&#xa0;15</bold></xref>). The panels consist of a summarization table, an expression plot of individual marker genes in the clusters as well as an UMAP of the expression of selected marker genes. All three panels are interactive and connected, so that users can evaluate different marker genes. Lastly, we present summaries on the counts of individual genes in the panels shown in <xref ref-type="fig" rid="f16"><bold>Figure&#xa0;16</bold></xref>. The panels summarize the expression of the genes in the data as a table as well as an expression heatmap and can help explore different genes of interest in the data. As shown here, <italic>iSEE</italic> provides several different summary statistics and visualizations for the data. Besides the showcased panels here, there is a variety of other different panels available. This can greatly benefit the data analysis by being an interactive and reproducible way for data exploration and visualization.</p>
<fig id="f15" position="float">
<label>Figure&#xa0;15</label>
<caption>
<p>Marker gene panels of our iSEE instance. The row data Table&#xa0;1 contains a table of the different marker genes of the individual clusters. The feature assay plot 1 shows a violin plot of the expression of the selected marker gene of the row data Table&#xa0;1. Lastly, the reduced dimensions plot 2 shows the UMAP representation of our data colored by the expression of the selected marker in the row data Table&#xa0;1.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g015.tif"/>
</fig>
<fig id="f16" position="float">
<label>Figure&#xa0;16</label>
<caption>
<p>Gene summary panels of our iSEE instance. The Row data plot visualizes the mean-variances trend of the genes in our data. The Row data table is an interactive table displaying statistics on the genes selected in Row data plot (yellow square). The Complex heatmap shows a heatmap of the expression of the selected genes (yellow square) in the individual cells of the data.</p>
</caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fimmu-14-1241283-g016.tif"/>
</fig>
</sec>
<sec id="s7" sec-type="data-availability">
<title>Data availability statement</title>
<p>Publicly available datasets analyzed in this manuscript can be found at the Gene Expression Omnibus (GEO) database, with accession code GSE240041. We included previously published datasets, also available at GEO under the accession code GSE130879. The code generated throughout this manuscript is available at the GitHub repository <uri xlink:href="https://github.com/imbeimainz/scRNAseq_scTCRseq_TissueTcells">https://github.com/imbeimainz/scRNAseq_scTCRseq_TissueTcells</uri>. The rendered HTML notebooks accompanying the analyses presented can be found on Zenodo (<uri xlink:href="https://zenodo.org/record/8338200">https://zenodo.org/record/8338200</uri>).</p>
</sec>
<sec id="s8" sec-type="ethics-statement">
<title>Ethics statement</title>
<p>Murine organs and tissues were harvested according to the regulations of the German Animal Welfare Act (&#xa7;4 Tierschutzgesetz).</p>
</sec>
<sec id="s9" sec-type="author-contributions">
<title>Author contributions</title>
<p>Conceptualization: MD and FM; Methodology: ASN, SSH, FM, and MD; Software: ASN, SSH, KLB, MV, MD, and FM; Investigation and Resources: ASN, SSH, KLB, MD, and FM; Writing &#x2013; Original Draft: ASN, SSH, MD, and FM; Writing &#x2013; Review and Editing: ASN, SSH, MD, and FM; Visualization: ASN and SSH; Supervision: MD and FM; Project Administration: MD and FM; Funding Acquisition: MD and FM. All authors contributed to the article and approved the submitted version.</p>
</sec>
</body>
<back>
<sec id="s10" sec-type="funding-information">
<title>Funding</title>
<p>This work was supported by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) Projektnummer 318346496 &#x2013; SFB1292/2 TP19N (to FM and MD) and Projektnummer 490846870 &#x2013;TRR355/1 TPA01 and TPZ02 (to MD).</p>
</sec>
<ack>
<title>Acknowledgments</title>
<p>We thank the FZI flow cytometry core facility, the FZI NGS facility, and the University Medical Center Mainz animal facility for technical support. This work has also been supported by the computing infrastructure provided by the Core Facility Bioinformatics at the University Medical Center Mainz.</p>
</ack>
<sec id="s11" sec-type="COI-statement">
<title>Conflict of interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec id="s12" sec-type="disclaimer">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<sec id="s13" sec-type="supplementary-material">
<title>Supplementary material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://github.com/imbeimainz/scRNAseq_scTCRseq_TissueTcells">https://github.com/imbeimainz/scRNAseq_scTCRseq_TissueTcells</ext-link>.</p>
<supplementary-material xlink:href="DataSheet_1.pdf" id="SM1" mimetype="application/pdf"/>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<label>1</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Shalek</surname> <given-names>AK</given-names>
</name>
<name>
<surname>Satija</surname> <given-names>R</given-names>
</name>
<name>
<surname>Adiconis</surname> <given-names>X</given-names>
</name>
<name>
<surname>Gertner</surname> <given-names>RS</given-names>
</name>
<name>
<surname>Gaublomme</surname> <given-names>JT</given-names>
</name>
<name>
<surname>Raychowdhury</surname> <given-names>R</given-names>
</name>
<etal/>
</person-group>. <article-title>Single-cell transcriptomics reveals bimodality in expression and splicing in immune cells</article-title>. <source>Nature</source> (<year>2013</year>) <volume>498</volume>:<page-range>236&#x2013;40</page-range>. doi: <pub-id pub-id-type="doi">10.1038/nature12172</pub-id>
</citation>
</ref>
<ref id="B2">
<label>2</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Satija</surname> <given-names>R</given-names>
</name>
<name>
<surname>Shalek</surname> <given-names>AK</given-names>
</name>
</person-group>. <article-title>Heterogeneity in immune responses: from populations to single cells</article-title>. <source>Trends Immunol</source> (<year>2014</year>) <volume>35</volume>:<page-range>219&#x2013;29</page-range>. doi: <pub-id pub-id-type="doi">10.1016/j.it.2014.03.004</pub-id>
</citation>
</ref>
<ref id="B3">
<label>3</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Papalexi</surname> <given-names>E</given-names>
</name>
<name>
<surname>Satija</surname> <given-names>R</given-names>
</name>
</person-group>. <article-title>Single-cell RNA sequencing to explore immune cell heterogeneity</article-title>. <source>Nat Rev Immunol</source> (<year>2018</year>) <volume>18</volume>:<fpage>35</fpage>&#x2013;<lpage>45</lpage>. doi: <pub-id pub-id-type="doi">10.1038/nri.2017.76</pub-id>
</citation>
</ref>
<ref id="B4">
<label>4</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Efremova</surname> <given-names>M</given-names>
</name>
<name>
<surname>Vento-Tormo</surname> <given-names>R</given-names>
</name>
<name>
<surname>Park</surname> <given-names>JE</given-names>
</name>
<name>
<surname>Teichmann</surname> <given-names>SA</given-names>
</name>
<name>
<surname>James</surname> <given-names>KR</given-names>
</name>
</person-group>. <article-title>Immunology in the era of single-cell technologies</article-title>. <source>Annu Rev Immunol</source> (<year>2020</year>) <volume>38</volume>:<page-range>727&#x2013;57</page-range>. doi: <pub-id pub-id-type="doi">10.1146/annurev-immunol-090419-020340</pub-id>
</citation>
</ref>
<ref id="B5">
<label>5</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Nieto</surname> <given-names>P</given-names>
</name>
<name>
<surname>Elosua-Bayes</surname> <given-names>M</given-names>
</name>
<name>
<surname>Trincado</surname> <given-names>JL</given-names>
</name>
<name>
<surname>Marchese</surname> <given-names>D</given-names>
</name>
<name>
<surname>Massoni-Badosa</surname> <given-names>R</given-names>
</name>
<name>
<surname>Salvany</surname> <given-names>M</given-names>
</name>
<etal/>
</person-group>. <article-title>A single-cell tumor immune atlas for precision oncology</article-title>. <source>Genome Res</source> (<year>2021</year>) <volume>31</volume>:<page-range>1913&#x2013;26</page-range>. doi: <pub-id pub-id-type="doi">10.1101/gr.273300.120</pub-id>
</citation>
</ref>
<ref id="B6">
<label>6</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rodriguez-Ubreva</surname> <given-names>J</given-names>
</name>
<name>
<surname>Arutyunyan</surname> <given-names>A</given-names>
</name>
<name>
<surname>Bonder</surname> <given-names>MJ</given-names>
</name>
<name>
<surname>Del Pino-Molina</surname> <given-names>L</given-names>
</name>
<name>
<surname>Clark</surname> <given-names>SJ</given-names>
</name>
<name>
<surname>de la Calle-Fabregat</surname> <given-names>C</given-names>
</name>
<etal/>
</person-group>. <article-title>Single-cell Atlas of common variable immunodeficiency shows germinal center-associated epigenetic dysregulation in B-cell responses</article-title>. <source>Nat Commun</source> (<year>2022</year>) <volume>13</volume>:<fpage>1779</fpage>. doi: <pub-id pub-id-type="doi">10.1038/s41467-022-29450-x</pub-id>
</citation>
</ref>
<ref id="B7">
<label>7</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Luecken</surname> <given-names>MD</given-names>
</name>
<name>
<surname>Theis</surname> <given-names>FJ</given-names>
</name>
</person-group>. <article-title>Current best practices in single-cell RNA-seq analysis: a tutorial</article-title>. <source>Mol Syst Biol</source> (<year>2019</year>) <volume>15</volume>:<elocation-id>e8746</elocation-id>. doi: <pub-id pub-id-type="doi">10.15252/msb.20188746</pub-id>
</citation>
</ref>
<ref id="B8">
<label>8</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Amezquita</surname> <given-names>RA</given-names>
</name>
<name>
<surname>Lun</surname> <given-names>ATL</given-names>
</name>
<name>
<surname>Becht</surname> <given-names>E</given-names>
</name>
<name>
<surname>Carey</surname> <given-names>VJ</given-names>
</name>
<name>
<surname>Carpp</surname> <given-names>LN</given-names>
</name>
<name>
<surname>Geistlinger</surname> <given-names>L</given-names>
</name>
<etal/>
</person-group>. <article-title>Orchestrating single-cell analysis with Bioconductor</article-title>. <source>Nat Methods</source> (<year>2020</year>) <volume>17</volume>:<page-range>137&#x2013;45</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41592-019-0654-x</pub-id>
</citation>
</ref>
<ref id="B9">
<label>9</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Virshup</surname> <given-names>I</given-names>
</name>
<name>
<surname>Bredikhin</surname> <given-names>D</given-names>
</name>
<name>
<surname>Heumos</surname> <given-names>L</given-names>
</name>
<name>
<surname>Palla</surname> <given-names>G</given-names>
</name>
<name>
<surname>Sturm</surname> <given-names>G</given-names>
</name>
<name>
<surname>Gayoso</surname> <given-names>A</given-names>
</name>
<etal/>
</person-group>. <article-title>The scverse project provides a computational ecosystem for single-cell omics data analysis</article-title>. <source>Nat Biotechnol</source> (<year>2023</year>) <volume>41</volume>:<page-range>604&#x2013;6</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41587-023-01733-8</pub-id>
</citation>
</ref>
<ref id="B10">
<label>10</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mereu</surname> <given-names>E</given-names>
</name>
<name>
<surname>Lafzi</surname> <given-names>A</given-names>
</name>
<name>
<surname>Moutinho</surname> <given-names>C</given-names>
</name>
<name>
<surname>Ziegenhain</surname> <given-names>C</given-names>
</name>
<name>
<surname>Mccarthy</surname> <given-names>DJ</given-names>
</name>
<name>
<surname>Alvarez-Varela</surname> <given-names>A</given-names>
</name>
<etal/>
</person-group>. <article-title>Benchmarking single-cell RNA-sequencing protocols for cell atlas projects</article-title>. <source>Nat Biotechnol</source> (<year>2020</year>) <volume>38</volume>:<page-range>747&#x2013;55</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41587-020-0469-4</pub-id>
</citation>
</ref>
<ref id="B11">
<label>11</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Lafzi</surname> <given-names>A</given-names>
</name>
<name>
<surname>Moutinho</surname> <given-names>C</given-names>
</name>
<name>
<surname>Picelli</surname> <given-names>S</given-names>
</name>
<name>
<surname>Heyn</surname> <given-names>H</given-names>
</name>
</person-group>. <article-title>Tutorial: guidelines for the experimental design of single-cell RNA sequencing studies</article-title>. <source>Nat Protoc</source> (<year>2018</year>) <volume>13</volume>:<page-range>2742&#x2013;57</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41596-018-0073-y</pub-id>
</citation>
</ref>
<ref id="B12">
<label>12</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Jovic</surname> <given-names>D</given-names>
</name>
<name>
<surname>Liang</surname> <given-names>X</given-names>
</name>
<name>
<surname>Zeng</surname> <given-names>H</given-names>
</name>
<name>
<surname>Lin</surname> <given-names>L</given-names>
</name>
<name>
<surname>Xu</surname> <given-names>F</given-names>
</name>
<name>
<surname>Luo</surname> <given-names>Y</given-names>
</name>
</person-group>. <article-title>Single-cell RNA sequencing technologies and applications: A brief overview</article-title>. <source>Clin Transl Med</source> (<year>2022</year>) <volume>12</volume>:<elocation-id>e694</elocation-id>. doi: <pub-id pub-id-type="doi">10.1002/ctm2.694</pub-id>
</citation>
</ref>
<ref id="B13">
<label>13</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Delacher</surname> <given-names>M</given-names>
</name>
<name>
<surname>Imbusch</surname> <given-names>CD</given-names>
</name>
<name>
<surname>Weichenhan</surname> <given-names>D</given-names>
</name>
<name>
<surname>Breiling</surname> <given-names>A</given-names>
</name>
<name>
<surname>Hotz-Wagenblatt</surname> <given-names>A</given-names>
</name>
<name>
<surname>Trager</surname> <given-names>U</given-names>
</name>
<etal/>
</person-group>. <article-title>Genome-wide DNA-methylation landscape defines specialization of regulatory T cells in tissues</article-title>. <source>Nat Immunol</source> (<year>2017</year>) <volume>18</volume>:<page-range>1160&#x2013;72</page-range>. doi: <pub-id pub-id-type="doi">10.1038/ni.3799</pub-id>
</citation>
</ref>
<ref id="B14">
<label>14</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Delacher</surname> <given-names>M</given-names>
</name>
<name>
<surname>Schmidl</surname> <given-names>C</given-names>
</name>
<name>
<surname>Herzig</surname> <given-names>Y</given-names>
</name>
<name>
<surname>Breloer</surname> <given-names>M</given-names>
</name>
<name>
<surname>Hartmann</surname> <given-names>W</given-names>
</name>
<name>
<surname>Brunk</surname> <given-names>F</given-names>
</name>
<etal/>
</person-group>. <article-title>Rbpj expression in regulatory T cells is critical for restraining T(H)2 responses</article-title>. <source>Nat Commun</source> (<year>2019</year>) <volume>10</volume>:<fpage>1621</fpage>. doi: <pub-id pub-id-type="doi">10.1038/s41467-019-09276-w</pub-id>
</citation>
</ref>
<ref id="B15">
<label>15</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Delacher</surname> <given-names>M</given-names>
</name>
<name>
<surname>Imbusch</surname> <given-names>CD</given-names>
</name>
<name>
<surname>Hotz-Wagenblatt</surname> <given-names>A</given-names>
</name>
<name>
<surname>Mallm</surname> <given-names>JP</given-names>
</name>
<name>
<surname>Bauer</surname> <given-names>K</given-names>
</name>
<name>
<surname>Simon</surname> <given-names>M</given-names>
</name>
<etal/>
</person-group>. <article-title>Precursors for nonlymphoid-tissue treg cells reside in secondary lymphoid organs and are programmed by the transcription factor BATF</article-title>. <source>Immunity</source> (<year>2020</year>) <volume>52</volume>:<fpage>295</fpage>&#x2013;<lpage>312 e11</lpage>. doi: <pub-id pub-id-type="doi">10.1016/j.immuni.2019.12.002</pub-id>
</citation>
</ref>
<ref id="B16">
<label>16</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Delacher</surname> <given-names>M</given-names>
</name>
<name>
<surname>Simon</surname> <given-names>M</given-names>
</name>
<name>
<surname>Sanderink</surname> <given-names>L</given-names>
</name>
<name>
<surname>Hotz-Wagenblatt</surname> <given-names>A</given-names>
</name>
<name>
<surname>Wuttke</surname> <given-names>M</given-names>
</name>
<name>
<surname>Schambeck</surname> <given-names>K</given-names>
</name>
<etal/>
</person-group>. <article-title>Single-cell chromatin accessibility landscape identifies tissue repair program in human regulatory T cells</article-title>. <source>Immunity</source> (<year>2021</year>) <volume>54</volume>:<fpage>702</fpage>&#x2013;<lpage>720 e17</lpage>. doi: <pub-id pub-id-type="doi">10.1016/j.immuni.2021.03.007</pub-id>
</citation>
</ref>
<ref id="B17">
<label>17</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hwang</surname> <given-names>B</given-names>
</name>
<name>
<surname>Lee</surname> <given-names>JH</given-names>
</name>
<name>
<surname>Bang</surname> <given-names>D</given-names>
</name>
</person-group>. <article-title>Single-cell RNA sequencing technologies and bioinformatics pipelines</article-title>. <source>Exp Mol Med</source> (<year>2018</year>) <volume>50</volume>:<fpage>1</fpage>&#x2013;<lpage>14</lpage>. doi: <pub-id pub-id-type="doi">10.1038/s12276-018-0071-8</pub-id>
</citation>
</ref>
<ref id="B18">
<label>18</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Romiguier</surname> <given-names>J</given-names>
</name>
<name>
<surname>Ranwez</surname> <given-names>V</given-names>
</name>
<name>
<surname>Douzery</surname> <given-names>EJ</given-names>
</name>
<name>
<surname>Galtier</surname> <given-names>N</given-names>
</name>
</person-group>. <article-title>Contrasting GC-content dynamics across 33 mamMalian genomes: relationship with life-history traits and chromosome sizes</article-title>. <source>Genome Res</source> (<year>2010</year>) <volume>20</volume>:<page-range>1001&#x2013;9</page-range>. doi: <pub-id pub-id-type="doi">10.1101/gr.104372.109</pub-id>
</citation>
</ref>
<ref id="B19">
<label>19</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hao</surname> <given-names>Y</given-names>
</name>
<name>
<surname>Hao</surname> <given-names>S</given-names>
</name>
<name>
<surname>Andersen-Nissen</surname> <given-names>E</given-names>
</name>
<name>
<surname>Mauck</surname> <given-names>WM</given-names>
</name>
<name>
<surname>Zheng</surname> <given-names>S</given-names>
</name>
<name>
<surname>Butler</surname> <given-names>A</given-names>
</name>
<etal/>
</person-group>. <article-title>Integrated analysis of multimodal single-cell data</article-title>. <source>Cell</source> (<year>2021</year>) <volume>184</volume>:<fpage>3573</fpage>&#x2013;<lpage>3587 e29</lpage>. doi: <pub-id pub-id-type="doi">10.1016/j.cell.2021.04.048</pub-id>
</citation>
</ref>
<ref id="B20">
<label>20</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kolodziejczyk</surname> <given-names>AA</given-names>
</name>
<name>
<surname>Kim</surname> <given-names>JK</given-names>
</name>
<name>
<surname>Svensson</surname> <given-names>V</given-names>
</name>
<name>
<surname>Marioni</surname> <given-names>JC</given-names>
</name>
<name>
<surname>Teichmann</surname> <given-names>SA</given-names>
</name>
</person-group>. <article-title>The technology and biology of single-cell RNA sequencing</article-title>. <source>Mol Cell</source> (<year>2015</year>) <volume>58</volume>:<page-range>610&#x2013;20</page-range>. doi: <pub-id pub-id-type="doi">10.1016/j.molcel.2015.04.005</pub-id>
</citation>
</ref>
<ref id="B21">
<label>21</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Svensson</surname> <given-names>V</given-names>
</name>
</person-group>. <article-title>Droplet scRNA-seq is not zero-inflated</article-title>. <source>Nat Biotechnol</source> (<year>2020</year>) <volume>38</volume>:<page-range>147&#x2013;50</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41587-019-0379-5</pub-id>
</citation>
</ref>
<ref id="B22">
<label>22</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Lun</surname> <given-names>ATL</given-names>
</name>
<name>
<surname>Riesenfeld</surname> <given-names>S</given-names>
</name>
<name>
<surname>Andrews</surname> <given-names>T</given-names>
</name>
<name>
<surname>Dao</surname> <given-names>TP</given-names>
</name>
<name>
<surname>Gomes</surname> <given-names>T</given-names>
</name>
<name>
<surname>Marioni</surname> <given-names>JC</given-names>
</name>
</person-group>. <article-title>Participants In The 1st Human Cell Atlas EmptyDrops: distinguishing cells from empty droplets in droplet-based single-cell RNA sequencing data</article-title>. <source>Genome Biol</source> (<year>2019</year>) <volume>20</volume>:<fpage>63</fpage>. doi: <pub-id pub-id-type="doi">10.1186/s13059-019-1662-y</pub-id>
</citation>
</ref>
<ref id="B23">
<label>23</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Huber</surname> <given-names>W</given-names>
</name>
<name>
<surname>Carey</surname> <given-names>VJ</given-names>
</name>
<name>
<surname>Gentleman</surname> <given-names>R</given-names>
</name>
<name>
<surname>Anders</surname> <given-names>S</given-names>
</name>
<name>
<surname>Carlson</surname> <given-names>M</given-names>
</name>
<name>
<surname>Carvalho</surname> <given-names>BS</given-names>
</name>
<etal/>
</person-group>. <article-title>Orchestrating high-throughput genomic analysis with Bioconductor</article-title>. <source>Nat Methods</source> (<year>2015</year>) <volume>12</volume>:<page-range>115&#x2013;21</page-range>. doi: <pub-id pub-id-type="doi">10.1038/nmeth.3252</pub-id>
</citation>
</ref>
<ref id="B24">
<label>24</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mccarthy</surname> <given-names>DJ</given-names>
</name>
<name>
<surname>Campbell</surname> <given-names>KR</given-names>
</name>
<name>
<surname>Lun</surname> <given-names>AT</given-names>
</name>
<name>
<surname>Wills</surname> <given-names>QF</given-names>
</name>
</person-group>. <article-title>Scater: pre-processing, quality control, norMalization and visualization of single-cell RNA-seq data in R</article-title>. <source>Bioinformatics</source> (<year>2017</year>) <volume>33</volume>:<page-range>1179&#x2013;86</page-range>. doi: <pub-id pub-id-type="doi">10.1093/bioinformatics/btw777</pub-id>
</citation>
</ref>
<ref id="B25">
<label>25</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hippen</surname> <given-names>AA</given-names>
</name>
<name>
<surname>Falco</surname> <given-names>MM</given-names>
</name>
<name>
<surname>Weber</surname> <given-names>LM</given-names>
</name>
<name>
<surname>Erkan</surname> <given-names>EP</given-names>
</name>
<name>
<surname>Zhang</surname> <given-names>K</given-names>
</name>
<name>
<surname>Doherty</surname> <given-names>JA</given-names>
</name>
<etal/>
</person-group>. <article-title>miQC: An adaptive probabilistic framework for quality control of single-cell RNA-sequencing data</article-title>. <source>PloS Comput Biol</source> (<year>2021</year>) <volume>17</volume>:<elocation-id>e1009290</elocation-id>. doi: <pub-id pub-id-type="doi">10.1371/journal.pcbi.1009290</pub-id>
</citation>
</ref>
<ref id="B26">
<label>26</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mcginnis</surname> <given-names>CS</given-names>
</name>
<name>
<surname>Murrow</surname> <given-names>LM</given-names>
</name>
<name>
<surname>Gartner</surname> <given-names>ZJ</given-names>
</name>
</person-group>. <article-title>DoubletFinder: doublet detection in single-cell RNA sequencing data using artificial nearest neighbors</article-title>. <source>Cell Syst</source> (<year>2019</year>) <volume>8</volume>:<fpage>329</fpage>&#x2013;<lpage>337 e4</lpage>. doi: <pub-id pub-id-type="doi">10.1016/j.cels.2019.03.003</pub-id>
</citation>
</ref>
<ref id="B27">
<label>27</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xi</surname> <given-names>NM</given-names>
</name>
<name>
<surname>Li</surname> <given-names>JJ</given-names>
</name>
</person-group>. <article-title>Benchmarking computational doublet-detection methods for single-cell RNA sequencing data</article-title>. <source>Cell Syst</source> (<year>2021</year>) <volume>12</volume>:<fpage>176</fpage>&#x2013;<lpage>194 e6</lpage>. doi: <pub-id pub-id-type="doi">10.1016/j.cels.2020.11.008</pub-id>
</citation>
</ref>
<ref id="B28">
<label>28</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Germain</surname> <given-names>PL</given-names>
</name>
<name>
<surname>Lun</surname> <given-names>A</given-names>
</name>
<name>
<surname>Garcia Meixide</surname> <given-names>C</given-names>
</name>
<name>
<surname>Macnair</surname> <given-names>W</given-names>
</name>
<name>
<surname>Robinson</surname> <given-names>MD</given-names>
</name>
</person-group>. <article-title>Doublet identification in single-cell sequencing data using scDblFinder</article-title>. <source>F1000Res</source> (<year>2021</year>) <volume>10</volume>:<fpage>979</fpage>. doi: <pub-id pub-id-type="doi">10.12688/f1000research.73600.1</pub-id>
</citation>
</ref>
<ref id="B29">
<label>29</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Stegle</surname> <given-names>O</given-names>
</name>
<name>
<surname>Teichmann</surname> <given-names>SA</given-names>
</name>
<name>
<surname>Marioni</surname> <given-names>JC</given-names>
</name>
</person-group>. <article-title>Computational and analytical challenges in single-cell transcriptomics</article-title>. <source>Nat Rev Genet</source> (<year>2015</year>) <volume>16</volume>:<page-range>133&#x2013;45</page-range>. doi: <pub-id pub-id-type="doi">10.1038/nrg3833</pub-id>
</citation>
</ref>
<ref id="B30">
<label>30</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vallejos</surname> <given-names>CA</given-names>
</name>
<name>
<surname>Risso</surname> <given-names>D</given-names>
</name>
<name>
<surname>Scialdone</surname> <given-names>A</given-names>
</name>
<name>
<surname>Dudoit</surname> <given-names>S</given-names>
</name>
<name>
<surname>Marioni</surname> <given-names>JC</given-names>
</name>
</person-group>. <article-title>NorMalizing single-cell RNA sequencing data: challenges and opportunities</article-title>. <source>Nat Methods</source> (<year>2017</year>) <volume>14</volume>:<page-range>565&#x2013;71</page-range>. doi: <pub-id pub-id-type="doi">10.1038/nmeth.4292</pub-id>
</citation>
</ref>
<ref id="B31">
<label>31</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hafemeister</surname> <given-names>C</given-names>
</name>
<name>
<surname>Satija</surname> <given-names>R</given-names>
</name>
</person-group>. <article-title>NorMalization and variance stabilization of single-cell RNA-seq data using regularized negative binomial regression</article-title>. <source>Genome Biol</source> (<year>2019</year>) <volume>20</volume>:<fpage>296</fpage>. doi: <pub-id pub-id-type="doi">10.1186/s13059-019-1874-1</pub-id>
</citation>
</ref>
<ref id="B32">
<label>32</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Lun</surname> <given-names>AT</given-names>
</name>
<name>
<surname>Mccarthy</surname> <given-names>DJ</given-names>
</name>
<name>
<surname>Marioni</surname> <given-names>JC</given-names>
</name>
</person-group>. <article-title>A step-by-step workflow for low-level analysis of single-cell RNA-seq data with Bioconductor</article-title>. <source>F1000Res</source> (<year>2016</year>) <volume>5</volume>:<fpage>2122</fpage>. doi: <pub-id pub-id-type="doi">10.12688/f1000research.9501.2</pub-id>
</citation>
</ref>
<ref id="B33">
<label>33</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Haghverdi</surname> <given-names>L</given-names>
</name>
<name>
<surname>Lun</surname> <given-names>ATL</given-names>
</name>
<name>
<surname>Morgan</surname> <given-names>MD</given-names>
</name>
<name>
<surname>Marioni</surname> <given-names>JC</given-names>
</name>
</person-group>. <article-title>Batch effects in single-cell RNA-sequencing data are corrected by matching mutual nearest neighbors</article-title>. <source>Nat Biotechnol</source> (<year>2018</year>) <volume>36</volume>:<page-range>421&#x2013;7</page-range>. doi: <pub-id pub-id-type="doi">10.1038/nbt.4091</pub-id>
</citation>
</ref>
<ref id="B34">
<label>34</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Korsunsky</surname> <given-names>I</given-names>
</name>
<name>
<surname>Millard</surname> <given-names>N</given-names>
</name>
<name>
<surname>Fan</surname> <given-names>J</given-names>
</name>
<name>
<surname>Slowikowski</surname> <given-names>K</given-names>
</name>
<name>
<surname>Zhang</surname> <given-names>F</given-names>
</name>
<name>
<surname>Wei</surname> <given-names>K</given-names>
</name>
<etal/>
</person-group>. <article-title>Fast, sensitive and accurate integration of single-cell data with Harmony</article-title>. <source>Nat Methods</source> (<year>2019</year>) <volume>16</volume>:<page-range>1289&#x2013;96</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41592-019-0619-0</pub-id>
</citation>
</ref>
<ref id="B35">
<label>35</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Van Der Maaten</surname> <given-names>L</given-names>
</name>
<name>
<surname>Hinton</surname> <given-names>G</given-names>
</name>
</person-group>. <article-title>Visualizing Data using t-SNE</article-title>. <source>J Mach Learn Res</source> (<year>2008</year>) <volume>9</volume>:<page-range>2579&#x2013;605</page-range>.</citation>
</ref>
<ref id="B36">
<label>36</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Becht</surname> <given-names>E</given-names>
</name>
<name>
<surname>Mcinnes</surname> <given-names>L</given-names>
</name>
<name>
<surname>Healy</surname> <given-names>J</given-names>
</name>
<name>
<surname>Dutertre</surname> <given-names>CA</given-names>
</name>
<name>
<surname>Kwok</surname> <given-names>IWH</given-names>
</name>
<name>
<surname>Ng</surname> <given-names>LG</given-names>
</name>
<etal/>
</person-group>. <article-title>Dimensionality reduction for visualizing single-cell data using UMAP</article-title>. <source>Nat Biotechnol</source> (<year>2018</year>) <volume>37</volume>:<fpage>38</fpage>&#x2013;<lpage>44</lpage>. doi: <pub-id pub-id-type="doi">10.1038/nbt.4314</pub-id>
</citation>
</ref>
<ref id="B37">
<label>37</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Blondel</surname> <given-names>VD</given-names>
</name>
<name>
<surname>Guillaume</surname> <given-names>JL</given-names>
</name>
<name>
<surname>Lambiotte</surname> <given-names>R</given-names>
</name>
<name>
<surname>Lefebvre</surname> <given-names>E</given-names>
</name>
</person-group>. <article-title>Fast unfolding of communities in large networks</article-title>. <source>J Stat Mechanics-Theory Experiment</source> (<year>2008</year>) <volume>2008</volume>:<fpage>P10008</fpage>. doi: <pub-id pub-id-type="doi">10.1088/1742-5468/2008/10/P10008</pub-id>
</citation>
</ref>
<ref id="B38">
<label>38</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pullin</surname> <given-names>JM</given-names>
</name>
<name>
<surname>Mccarthy</surname> <given-names>DJ</given-names>
</name>
</person-group>. <article-title>A comparison of marker gene selection methods for single-cell RNA sequencing data</article-title>. <source>bioRxiv</source> (<year>2022</year>) <volume>2022</volume>. doi: <pub-id pub-id-type="doi">10.1101/2022.05.09.490241</pub-id>
</citation>
</ref>
<ref id="B39">
<label>39</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>De Simone</surname> <given-names>M</given-names>
</name>
<name>
<surname>Rossetti</surname> <given-names>G</given-names>
</name>
<name>
<surname>Pagani</surname> <given-names>M</given-names>
</name>
</person-group>. <article-title>Single cell T cell receptor sequencing: techniques and future challenges</article-title>. <source>Front Immunol</source> (<year>2018</year>) <volume>9</volume>:<elocation-id>1638</elocation-id>. doi: <pub-id pub-id-type="doi">10.3389/fimmu.2018.01638</pub-id>
</citation>
</ref>
<ref id="B40">
<label>40</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cordes</surname> <given-names>M</given-names>
</name>
<name>
<surname>Pike-Overzet</surname> <given-names>K</given-names>
</name>
<name>
<surname>Van Den Akker</surname> <given-names>EB</given-names>
</name>
<name>
<surname>Staal</surname> <given-names>FJT</given-names>
</name>
<name>
<surname>Cante-Barrett</surname> <given-names>K</given-names>
</name>
</person-group>. <article-title>Multi-omic analyses in immune cell development with lessons learned from T cell development</article-title>. <source>Front Cell Dev Biol</source> (<year>2023</year>) <volume>11</volume>:<elocation-id>1163529</elocation-id>. doi: <pub-id pub-id-type="doi">10.3389/fcell.2023.1163529</pub-id>
</citation>
</ref>
<ref id="B41">
<label>41</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Abdelaal</surname> <given-names>T</given-names>
</name>
<name>
<surname>Michielsen</surname> <given-names>L</given-names>
</name>
<name>
<surname>Cats</surname> <given-names>D</given-names>
</name>
<name>
<surname>Hoogduin</surname> <given-names>D</given-names>
</name>
<name>
<surname>Mei</surname> <given-names>H</given-names>
</name>
<name>
<surname>Reinders</surname> <given-names>MJT</given-names>
</name>
<etal/>
</person-group>. <article-title>A comparison of automatic cell identification methods for single-cell RNA sequencing data</article-title>. <source>Genome Biol</source> (<year>2019</year>) <volume>20</volume>:<fpage>194</fpage>. doi: <pub-id pub-id-type="doi">10.1186/s13059-019-1795-z</pub-id>
</citation>
</ref>
<ref id="B42">
<label>42</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xia</surname> <given-names>B</given-names>
</name>
<name>
<surname>Yanai</surname> <given-names>I</given-names>
</name>
</person-group>. <article-title>A periodic table of cell types</article-title>. <source>Development</source> (<year>2019</year>) <volume>12</volume>:<fpage>dev169854</fpage>. doi: <pub-id pub-id-type="doi">10.1242/dev.169854</pub-id>
</citation>
</ref>
<ref id="B43">
<label>43</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Huang</surname> <given-names>Q</given-names>
</name>
<name>
<surname>Liu</surname> <given-names>Y</given-names>
</name>
<name>
<surname>Du</surname> <given-names>Y</given-names>
</name>
<name>
<surname>Garmire</surname> <given-names>LX</given-names>
</name>
</person-group>. <article-title>Evaluation of cell type annotation R packages on single-cell RNA-seq data</article-title>. <source>Genomics Proteomics Bioinf</source> (<year>2021</year>) <volume>19</volume>:<page-range>267&#x2013;81</page-range>. doi: <pub-id pub-id-type="doi">10.1016/j.gpb.2020.07.004</pub-id>
</citation>
</ref>
<ref id="B44">
<label>44</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Osumi-Sutherland</surname> <given-names>D</given-names>
</name>
<name>
<surname>Xu</surname> <given-names>C</given-names>
</name>
<name>
<surname>Keays</surname> <given-names>M</given-names>
</name>
<name>
<surname>Levine</surname> <given-names>AP</given-names>
</name>
<name>
<surname>Kharchenko</surname> <given-names>PV</given-names>
</name>
<name>
<surname>Regev</surname> <given-names>A</given-names>
</name>
<etal/>
</person-group>. <article-title>Cell type ontologies of the Human Cell Atlas</article-title>. <source>Nat Cell Biol</source> (<year>2021</year>) <volume>23</volume>:<page-range>1129&#x2013;35</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41556-021-00787-7</pub-id>
</citation>
</ref>
<ref id="B45">
<label>45</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zeng</surname> <given-names>H</given-names>
</name>
</person-group>. <article-title>What is a cell type and how to define it</article-title>? <source>Cell</source> (<year>2022</year>) <volume>185</volume>:<page-range>2739&#x2013;55</page-range>. doi: <pub-id pub-id-type="doi">10.1016/j.cell.2022.06.031</pub-id>
</citation>
</ref>
<ref id="B46">
<label>46</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Clarke</surname> <given-names>ZA</given-names>
</name>
<name>
<surname>Andrews</surname> <given-names>TS</given-names>
</name>
<name>
<surname>Atif</surname> <given-names>J</given-names>
</name>
<name>
<surname>Pouyabahar</surname> <given-names>D</given-names>
</name>
<name>
<surname>Innes</surname> <given-names>BT</given-names>
</name>
<name>
<surname>Macparland</surname> <given-names>SA</given-names>
</name>
<etal/>
</person-group>. <article-title>Tutorial: guidelines for annotating single-cell transcriptomic maps using automated and manual methods</article-title>. <source>Nat Protoc</source> (<year>2021</year>) <volume>16</volume>:<page-range>2749&#x2013;64</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41596-021-00534-0</pub-id>
</citation>
</ref>
<ref id="B47">
<label>47</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Aran</surname> <given-names>D</given-names>
</name>
<name>
<surname>Looney</surname> <given-names>AP</given-names>
</name>
<name>
<surname>Liu</surname> <given-names>L</given-names>
</name>
<name>
<surname>Wu</surname> <given-names>E</given-names>
</name>
<name>
<surname>Fong</surname> <given-names>V</given-names>
</name>
<name>
<surname>Hsu</surname> <given-names>A</given-names>
</name>
<etal/>
</person-group>. <article-title>Reference-based analysis of lung single-cell sequencing reveals a transitional profibrotic macrophage</article-title>. <source>Nat Immunol</source> (<year>2019</year>) <volume>20</volume>:<page-range>163&#x2013;72</page-range>. doi: <pub-id pub-id-type="doi">10.1038/s41590-018-0276-y</pub-id>
</citation>
</ref>
<ref id="B48">
<label>48</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ji</surname> <given-names>Z</given-names>
</name>
<name>
<surname>Ji</surname> <given-names>H</given-names>
</name>
</person-group>. <article-title>TSCAN: Pseudo-time reconstruction and evaluation in single-cell RNA-seq analysis</article-title>. <source>Nucleic Acids Res</source> (<year>2016</year>) <volume>44</volume>:<elocation-id>e117</elocation-id>. doi: <pub-id pub-id-type="doi">10.1093/nar/gkw430</pub-id>
</citation>
</ref>
<ref id="B49">
<label>49</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Akhmedov</surname> <given-names>M</given-names>
</name>
<name>
<surname>Martinelli</surname> <given-names>A</given-names>
</name>
<name>
<surname>Geiger</surname> <given-names>R</given-names>
</name>
<name>
<surname>Kwee</surname> <given-names>I</given-names>
</name>
</person-group>. <article-title>Omics Playground: a comprehensive self-service platform for visualization, analytics and exploration of Big Omics Data</article-title>. <source>NAR Genom Bioinform</source> (<year>2020</year>) <volume>2</volume>:<fpage>lqz019</fpage>. doi: <pub-id pub-id-type="doi">10.1093/nargab/lqz019</pub-id>
</citation>
</ref>
<ref id="B50">
<label>50</label>
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rue-Albrecht</surname> <given-names>K</given-names>
</name>
<name>
<surname>Marini</surname> <given-names>F</given-names>
</name>
<name>
<surname>Soneson</surname> <given-names>C</given-names>
</name>
<name>
<surname>Lun</surname> <given-names>ATL</given-names>
</name>
</person-group>. <article-title>iSEE: interactive summarizedExperiment explorer</article-title>. <source>F1000Res</source> (<year>2018</year>) <volume>7</volume>:<fpage>741</fpage>. doi: <pub-id pub-id-type="doi">10.12688/f1000research.14966.1</pub-id>
</citation>
</ref>
</ref-list>
</back>
</article>
