Skip to main content
Cell Genomics logoLink to Cell Genomics
. 2026 Jun 10;6(7):101275. doi: 10.1016/j.xgen.2026.101275

CellBouncer, a unified toolkit for single-cell demultiplexing and ambient RNA analysis, reveals hominid mitochondrial incompatibilities

Nathan K Schaefer 1,2,3,5,6,∗, Bryan J Pavlovic 1,2,3,5, Matthew T Schmitz 4, Alex A Pollen 1,2,3,∗∗
PMCID: PMC13347948  PMID: 42269616

Summary

Pooled processing, in which cells from multiple sources are cultured or captured together, is increasingly popular for droplet-based single-cell sequencing studies. This design allows efficient scaling of experiments, isolation of cell-intrinsic differences, and mitigation of batch effects. We present CellBouncer, a computational toolkit for demultiplexing and analyzing single-cell sequencing data from pooled experiments. We demonstrate that CellBouncer can separate and quantify multi-species and multi-individual cell mixtures, identify unknown mitochondrial haplotypes in cells, assign treatments from lipid-conjugated barcodes or CRISPR single-guide RNAs, and infer pool composition, outperforming existing methods. We introduce methods to quantify ambient RNA contamination per cell, infer individual donors’ contributions to the ambient RNA pool, and determine a consensus doublet rate harmonized across data types. Applying these tools to tetraploid composite cells, we identify a competitive advantage of human over chimpanzee mitochondria across ten cell fusion lines and provide evidence for inter-mitochondrial incompatibility and mito-nuclear incompatibility between species.

Keywords: bioinformatics, single-cell, pooled, genomics, demultiplexing, ambient, doublet, perturbation, tetraploid

Graphical abstract

graphic file with name ga1.jpg

Highlights

  • •

    Demultiplexing toolkit for pooled processing of samples in single-cell experiments

  • •

    Assigns cells to species, genotype, condition, and perturbation

  • •

    Improved ambient RNA profiling using genotype data as ground truth

  • •

    Pooled tetraploid hominid cell lines reveal inter-species mitochondrial competition


Schaefer et al. introduce a new bioinformatic toolkit for pooled single-cell sequencing experiments, which increases throughput and mitigates batch effects and biases. This includes a method for ambient RNA profiling using genotype matching. Applying these tools, they uncover competition between primate mitochondria within fused inter-species tetraploid stem cells.

Introduction

Pooled processing of tissue or cells from many donors reduces batch effects from dissociation and cell capture while increasing biological replication and experimental throughput.1,2,3 Combining pooled processing with single-cell genomics increases the scale of experiments and provides new resolution for large-scale studies of disease consequences.2,4 Similarly, the “village-in-a-dish” approach, in which many cell lines are cultured together, can capture effects of natural genetic variation while avoiding difficulties inherent in scaling arrayed culture experiments.5,6,7,8,9 Pooled culture experiments can also be used to isolate cell-extrinsic from cell-intrinsic phenotypic variation,10 discover variation in stimulus-dependent responses,11and measure the consequences of epistatic interaction among groups of small-effect mutations.12

While bringing together single-cell genomics and population genetics,13 pooled experiments pose new computational challenges. Bioinformatic tools are required to assign cells to individual of origin and perform quality control. Some demultiplexing tools exist, which can label cells by donor or cell line of origin using pre-existing genotype data14,15,16 or without genotype data15,17,18,19 and assign cells to treatment groups using lipid-conjugated barcodes.20,21,22,23,24,25,26 These methods can also identify droplets containing heterotypic cell doublets, upstream of methods that use gene-expression signatures to identify doublets. Additionally, methods exist to quantify and remove the effects of ambient RNA contamination27,28,29 by inferring a gene-expression signature in ambient RNA using information in empty droplets and/or heterogeneity across transcriptomic clusters.

There are several limitations to these existing tools, however. First, the common practice of aligning mixed-species data to composite reference genomes30 is memory intensive, scales poorly with species number, and lacks statistical underpinning. Methods for inferring the individual of origin for each cell, especially without genotype data, lack a technique to independently verify results. Methods that infer individual of origin using genotype data can be slow to run, and assignments are sensitive to ambient RNA.30,31 Many methods that assign custom labels to cells using lipid-conjugated barcode sequencing24 or assign CRISPR perturbations using single-guide RNA (sgRNA) capture sequencing32 rely on fitting simple mixture models to barcode counts and therefore require low background noise and high sequencing depth. Methods that identify cell doublets can only report specific doublet types rather than a consensus doublet rate. Finally, methods that detect ambient RNA contamination from gene-expression data cannot identify the donors or cell lines driving contamination and can struggle to remove contamination in the dominant cell type, which can result in misinterpretation of cell types and differential expression.33

We present CellBouncer, a computational toolkit that rectifies these shortcomings, improves speed and accuracy over existing tools, and provides novel functionality (Figure 1). For an improved user experience, CellBouncer programs have minimal dependencies and function as integrated programs rather than software pipelines. CellBouncer sets a new benchmark in accuracy, matching or exceeding existing tools where available, while delivering substantial performance gains—especially in handling large variant sets, genotype-free assignments, and high ambient RNA. Additionally, CellBouncer introduces new functionalities, including the ability to determine genotypic composition of ambient RNA, making it possible to identify and correct for its effects in ways that were previously not feasible. Using polymorphisms as a ground truth for ambient RNA contamination, we further explore the nature of ambient RNA sources at the transcript and cell-compartment level. Finally, we apply a combination of CellBouncer tools to study mitochondrial competition in inter- and intra-species tetraploid cell fusions we generated from human, chimpanzee, and bonobo induced pluripotent stem cells (iPSCs), highlighting a possible mitochondrial-nuclear hybrid incompatibility separating the Homo and Pan lineages and clues to underlying mechanisms.

Figure 1.

Figure 1

Overview of CellBouncer, a unified toolkit for demultiplexing and ambient RNA profiling of single-cell sequencing data

Blue rectangles are input data, and gray rectangles are output data and results. White rectangles with bold text are CellBouncer programs. The ambient RNA inference tool quant_contam and the doublet rate inference tool doublet_dragon use output from other CellBouncer tools as input.

Results

Species demultiplexing

Aside from “barnyard” experiments where cells from two species are mixed with the goal of calibrating measurements, single-cell sequencing experiments that pool together cells from multiple species are rare, despite their utility for comparative studies.34,35,36 Currently, no dedicated tools exist for separating cells by species of origin: standard practice is to use a composite reference genome and assign cells to the species to which most reads align, after applying a cutoff.37 This technique lacks statistical rigor, can become prohibitively memory intensive, and cannot systematically identify inter-species doublets.

CellBouncer’s species demultiplexing algorithm, demux_species, counts unique molecular identifier (UMI)-collapsed short subsequences (k-mers) unique to each species’ transcriptome in reads from each cell, fitting a multinomial mixture model to assign each cell to its likeliest species (or doublet type) of origin and report the log-likelihood ratio of the likeliest to second likeliest assignment (henceforth “assignment LLR”) (Figure 2A and STAR Methods). In doing so, it avoids the need for reference genome alignment or arbitrary cutoffs and identifies inter-species doublet barcodes. Demux_species also estimates which droplet barcodes are cell positive, allowing an early estimate of the species proportions of true cells, and separates reads by species for downstream applications (STAR Methods).

Figure 2.

Figure 2

Rapid alignment-free species demultiplexing by species-unique k-mers

(A) Schematic of demux_species algorithm.

(B) Species-specific k-mer counts in cell barcodes from labeled dataset (rows), hierarchically clustered and labeled with species assignment (colored bars on left). Left plot: using 15-mers; right plot: using 20-mers.

(C) Comparison of CellBouncer-filtered species assignments for 5,423 cell barcodes (y axis) to true species identity (x axis) in labeled dataset with k = 20 million and 10 million sampled k-mers per species. Colors show Jaccard index (measure of mutual overlap, with 1.0 indicating complete agreement). See also Table S1.

(D) RAM usage versus time counting k-mers and producing unique transcriptomic k-mer lists for CellBouncer versus building an STAR index over a composite human/mouse genome.

(E) RAM usage versus time for a series of CellBouncer runs on the unlabeled dataset, compared to mapping the same data to a composite reference genome using starSolo.7 CellBouncer runs include time spent counting k-mers and assigning cells to species, but not demultiplexing reads.

(F) Proportion of cells from each species in an unlabeled dataset. Expected: expected counts before collecting data, assuming an even proportion of human and mouse, 5,000 recovered cells, and a doublet rate of 0.04 (obtained from the 10× Genomics website). 10×: species assignments released by 10× Genomics, using read counts on a composite reference and a cutoff proportion. BAM: CellBouncer-filtered assignments from demux_species, using as input read counts on the composite reference genome. k-mers: CellBouncer-filtered assignments from demux_species, using species-specific transcriptomic 20-mer counts, with 20 million k-mers sampled per species.

(G) Cell barcodes from pooled dataset (5,598 cell barcodes) clustered by sgRNA counts grouped by target species (human, cynomolgus macaque, or both) and normalized to sum to 1 (x axis). Colored bars (y axis) show species assignment from demux_species run on RNA-seq data from the same experiment.

We evaluated demux_species using three datasets: sequence data from three nonhuman species processed separately,38 which provides a ground truth and for which we created simulated doublets (henceforth “labeled” dataset), data from an even mixture of 5,000 human and mouse cells39 for which the expected pool composition is known but the identities of individual cells were unknown (henceforth “unlabeled” dataset), and data from an experiment in which human and cynomolgus macaque cells were pooled together after being treated with species-diagnostic CRISPR sgRNAs (henceforth “pooled” dataset).40 On the labeled data, insufficiently long k-mers resulted in poor accuracy (Figure 2B and Table S1), but 20-mers were a sufficient length that achieved 100% accuracy labeling cell barcodes in the publication’s filtered barcode list and 99.86% accuracy labeling droplets that CellBouncer inferred to contain real cells (Table S1 and Figure 2C). Moreover, clustering and visualizing k-mer counts can help evaluate success in the absence of ground-truth data (Figure 2B). Sampling as few as 10 million k-mers per species improved speed and still gave accurate results and identified all true cell-containing droplets (Table S1); we therefore continued with a more conservative choice of 20 million k-mers per species.

Longer k-mers can improve accuracy at the cost of increased memory usage and execution time. We therefore sought to choose an optimal k by tracking CellBouncer’s memory usage on the unlabeled dataset for a range of k values above the minimum threshold learned from the labeled dataset, with 20 million k-mers sampled for each. We also assessed the time and memory required by STARsolo41 to align the same dataset to a composite reference genome (Figures 2D and 2E). Consistent with the underlying data structure (STAR Methods), CellBouncer’s memory requirements are mostly consistent within 32-base increments, suggesting an optimal choice of k = 32 (Figure 2E); we explore implications of species divergence time and differences in annotation quality on choice of k in STAR Methods. With k = 32, CellBouncer outperformed STARsolo for both reference construction (CellBouncer: peak memory usage 1.28 GB, execution time 7.62 min; STARsolo: peak memory usage 178 GB, execution time 3.49 h; Figure 2D) and data processing (CellBouncer: 14% of the execution time and 13% of the memory required by STARsolo; Figure 2E). We also found that CellBouncer’s inferred species proportions agreed with expectations (Figure 2F; two-tailed chi-squared test, p = 0.22) as did the doublet rate inferred from species assignments (inferred: 4.6%, expected 4.0%).

The pooled dataset allowed us to test demux_species on data in which cells were processed together, possibly introducing technical noise not present in the labeled dataset. Using species-diagnostic sgRNA counts in place of species-specific k-mer counts and discarding cells with fewer than ten sgRNAs (STAR Methods and Figure S1), we assigned ground-truth species identities with demux_species. We then ran demux_species using transcriptomic k-mers and our chosen parameters (k = 32, with 20 million sampled k-mers) and observed high agreement between inferred and ground-truth labels (Figure 2G; 96.7% precision and 95.7% recall), suggesting that technical noise present in pooled experiments does not pose a problem for our method. Together, CellBouncer’s species demultiplexing program presents improvements in speed, memory usage, and functionality over the current standard.

Demultiplexing using SNPs

When cells from multiple individuals are pooled together, methods exist to assign cells to individual of origin using naturally occurring sequence polymorphisms, either with14,15,16 or without15,17,18,19 prior knowledge of genotypes. These methods eliminate the need to label cells manually (e.g., using cell-hashing oligos20) and enable pooling at earlier stages of processing. Existing genotype-based demultiplexing tools are beset by long run times and reduced accuracy in the face of ambient RNA,31 while genotype-free methods often require prior knowledge of the number of individuals in the pool and lack methods for validating results.

We have developed two tools to address these shortcomings: demux_vcf, a fast genotype-based individual demultiplexing program (Figure 3A), and demux_mt, a program that can simultaneously infer the number of individuals in a pool and assign cells to individual of origin by clustering mitochondrial haplotypes (Figure 3B). These tools are complementary: demux_mt can be used with a variant caller to identify individuals and their nuclear genome variants, which can then be used to more robustly assign cells to individuals using demux_vcf (STAR Methods). Their results can also be compared for quality control.

Figure 3.

Figure 3

Rapid genotype-based and genotype-free mitochondrial demultiplexing tools in CellBouncer

(A) Schematic of demux_vcf, which demultiplexes cells using pre-existing genotype data. SNPs are grouped by allelic state in every pair of candidate individuals. “AC” in table headings means alternate allele count (0, homozygous for the reference allele; 1, heterozygous; 2, homozygous for the alternate allele).

(B) Schematic of demux_mt, which demultiplexes cells without genotype data by clustering mitochondrial haplotypes.

(C) Accuracy measured by F score and execution time (bottom row) of genotype-based demultiplexing tools on a test dataset of 40,000 NSCLC cells from seven donors42 downsampled in various ways. All x-axis values are in thousands; reads per cell is an expectation based on 50,000 targeted reads per cell in the complete dataset. See also Table S2.

(D) Hierarchical clustering of inferred mitochondrial haplotypes on full dataset shown in (B) (rows are cells, columns are SNPs, blue = major allele, and yellow = minor allele). Colored bars on the left indicate demux_mt cluster assignment.

(E) Consensus cell identities from genotype and cell-hashing-based assignments (x axis) versus identities assigned by demux_mt (y axis). Doublets are two IDs separated by “+.”

(F) Comparison of genotype-free demultiplexing tools. Two downsampled (2,000 cells and 5,000 cells) and the full (all cells) datasets are shown. CellBouncer, MT-to-VCF pipeline; CellBouncer_refined, MT-to-VCF pipeline with genotype refinement. Top row: F score, with consensus IDs as truth. Bottom row: output number of SNPs segregating among IDs. CellBouncer outperformed all other methods on the 5,000-cell and full datasets, and identified the most variants, except souporcell on the full dataset. See also Table S3. For more detailed comparisons, see Figures S2–S7.

(G) Ground-truth IDs from separately processed donors versus mitochondrial identities using a scATAC-seq dataset,43 with 3,294 identified cells.

(H) Hierarchical clustering of mitochondrial haplotypes shown in (G).

Mitochondrial cluster labels shown in (G) and (H) are the same.

Demux_vcf groups SNPs by their allelic state in each pair of individuals, counts reference and alternate alleles in each cell across these groups, and identifies cells by comparing the likelihood of each pair of candidate identities, incorporating an optional prior probability of cell doublets (Figure 3A). The rationale behind this strategy is that different sets of SNPs are informative for distinguishing between different individuals; using all available SNPs for every comparison risks allowing genotyping error at fixed sites to influence decisions when there is deep population structure in the reference panel (STAR Methods). To account for ambient RNA, demux_vcf also models the rates at which reads erroneously mismatch expected genotypes, which are re-inferred from the data after making first-pass identifications (Figure 3A).

Demux_mt is unique among programs that identify cells without prior knowledge of genotypes in that it identifies SNP sites and infers the number of pooled individuals while assigning cells to individuals of origin. In pooled culture studies, the latter property may be a useful way to account for sample dropouts and cell-line contamination that is frequent in cell culture.44,45,46 By limiting its scope to mitochondrial SNPs, demux_mt also avoids the need to consider heterozygosity and the challenges it poses for genotype clustering. Demux_mt employs a heuristic algorithm that iteratively grows candidate mitochondrial haplotypes by a single SNP, stopping when it has discovered all individuals in the pool (Figure 3B); its core assumption is that the counts of cells with each mitochondrial haplotype follow a single Poisson distribution (STAR Methods).

To benchmark CellBouncer, we obtained 10× Genomics single-cell RNA sequencing (RNA-seq) data from non-small cell lung cancer dissociated tumor cells from seven donors, with 40,000 targeted cells and with donors of origin labeled using 10× Genomics CellPlex membrane-attached oligos42 (10× NSCLC dataset). We called variants specific to each donor and assessed the execution time and accuracy (F score) of demux_vcf, along with three alternative programs (demuxlet,14,42 demuxalot,16 and Vireo15). We then downsampled the data to test the effect of the size of the genotype reference panel, the number of cells, and the sequencing depth on each program. Because of noise inherent in the CellPlex data, we used as ground truth the most commonly assigned identity per cell from all three programs plus CellPlex, choosing the CellPlex identity in case of ties (STAR Methods). CellBouncer, demuxalot, and demuxlet converged to similar accuracy as SNP panel size and sequencing depth increased toward levels typical in experiments, and CellBouncer achieved the highest accuracy when there were few cells (Figure 3C and Table S2). Additionally, CellBouncer’s demux_vcf also runs faster than the alternatives (Figure 3C).

We then ran demux_mt on the full dataset, recovering the seven expected individuals. Visual comparison of demux_mt identities to hierarchically clustered mitochondrial haplotypes shows high concordance (Figure 3D). We also compared mitochondrial haplotype assignments to the ground-truth identities, matching identities by choosing reciprocal maximum Jaccard indices (STAR Methods). This resulted in 88.7% precision and 72.0% recall for mitochondrial labels (Figure 3E). The lower recall reflects the presence of unlabeled cells, due to the fact that high-quality droplets tend to contain a low fraction of mitochondrial reads.47 To address this, we devised a pipeline to label reads by mitochondrial haplotype, find nuclear SNPs segregating between mitochondrially identified individuals, and use demux_vcf to assign cells to individuals using these variants. This approach, referred to as the MT-to-VCF pipeline, improved both precision (to 92.5%) and recall (to 92.3%) on the same data (Figures 3F and S2; Table S3). For further improvement, we created a tool, refine_vcf, that alters genotype calls to maximize the likelihood of the read counts given cell-individual assignments (STAR Methods). Incorporating this tool modestly increased precision (to 93.9%) and recall (to 93.7%) (Figures 3F and S3; Table S3).

We compared the MT-to-VCF pipeline, with and without genotype refinement, to other existing genotype-free identification methods: freemuxlet,19 souporcell,17 scSplit,18 and Vireo15 (in genotype clustering mode). Two of these methods, scSplit and freemuxlet, failed to run on the full dataset (STAR Methods). To make the data tractable for these tools, we randomly sampled cells to create two smaller datasets. CellBouncer with genotype refinement largely outperformed the other methods and identified the most genomic variants (Figure 3F and Table S3). The other programs made two common errors avoided by CellBouncer: misidentifying one true individual as multiple clusters (freemuxlet, scSplit, and souporcell; Figures S4–S6 and Table S3) and mislabeling doublet identities (scSplit and Vireo; Figures S5 and S7; Table S3).

To assess whether demux_mt could identify mitochondrial haplotypes from single-nucleus data, in which few mitochondrial reads are expected, we downloaded single-nucleus assay for transposase-accessible chromatin using sequencing (ATAC-seq) data from blood cells from three donors that were processed separately,43 providing ground-truth identities. We recovered all three haplotypes, and they corresponded to donors of origin with 97.0% precision and 88.7% recall (Figure 3G), the latter of which would improve using the MT-to-VCF pipeline. Mitochondrial SNP coverage in the ATAC-seq data appeared more uniform than in RNA-seq (Figure 3H versus Figure 3D), showing that this type of data is well suited for our method. Overall, CellBouncer provides methods for demultiplexing individuals using genetic variation, either with or without genotype data, that meet or exceed the capabilities of existing tools while increasing the processing speed.

Modeling ambient RNA contamination

Droplet-based single-cell RNA-seq studies are prone to ambient RNA contamination introduced by the processing required to generate single-cell or nucleus suspensions, which can affect cell demultiplexing31 and experimental results33 if not properly modeled. In addition, disproportionate contribution of some individuals to ambient RNA can mask biological differences when multiple experimental conditions are pooled. However, existing methods rely on empty droplets27,29 and/or expression heterogeneity,27,28 making them susceptible to errors in cell calling and cell-type identification and limiting their use in studies of a single cell type. Additionally, no method exists to account for the relative contribution of distinct individuals to ambient RNA, which a prior study has shown can differ from the relative proportions of cells from different individuals.48 We present a CellBouncer program, quant_contam, that builds on prior methods for ambient RNA profiling using rates of genotype matching,48 using the ground truth contained in external genotype data to infer ambient RNA contamination.

CellBouncer’s quant_contam program uses read counts and cell identifications from demux_vcf, modeling each cell’s allelic counts as a weighted mixture of those expected from the cell’s true identity and those expected from ambient RNA. Further, ambient RNA is modeled as a weighted mixture of RNA from all individuals in the pool in a maximum-likelihood-based approach followed by bootstrapping that is similar in spirit to latent Dirichlet allocation. Using this inferred ambient RNA profile, it estimates cell-specific contamination rates and then re-assigns cells to individuals of origin, given knowledge of ambient RNA. Quant_contam can then optionally adjust single-cell gene-expression count data to remove the effect of ambient transcripts (Figure 4A).

Figure 4.

Figure 4

Ambient RNA profiling and bulk proportion inference using sequence variation

(A) Schematic of quant_contam, a program that uses output of demux_vcf to model ambient RNA as a mixture of individuals, infer ambient RNA per cell, and optionally infer the gene-expression profile of ambient RNA and remove ambient-origin gene counts from a single cell expression matrix.

(B) Schematic of bulkprops, a program that models a set of reads as a mixture of genotyped individuals without considering cell barcodes. Bulkprops only considers SNPs with no missing genotypes and infers the percentage of reads originating from each individual via maximum likelihood.

(C) Accuracy (measured by F score) of CellBouncer, with and without ambient RNA modeling, compared to alternative programs, in identifying the true identity of cells in which a set amount of synthetic ambient RNA (x axis) originating from a single individual was introduced to every cell in the dataset. Data consist of 40,000 NSCLC cells from seven donors.42 Error bars show minimum and maximum values across 7 replicates (one per ambient RNA source individual).

(D) After introducing a set amount of synthetic ambient RNA (x axis) originating from a single individual (colored points) to every cell in a subsample of the NSCLC dataset, the CellBouncer-inferred mean percentage of ambient RNA per cell is shown (y axis). The dotted line is y = x.

(E) Columns denote donors of origin for synthetic ambient RNA introduced to every cell in the dataset, in increasing proportions (x axis). Colors represent CellBouncer-inferred donor identities. Top row: inferred overall pool proportions from bulkprops. Second row: inferred cell identities. Third row: inferred ambient RNA profile. Fourth row: inferred ambient RNA profile if true cell identities are used (instead of CellBouncer-inferred identities that were less accurate due to contamination). For significance testing of differences between bulkprops-inferred proportions for each synthetic ambient RNA dataset and baseline proportions, see Table S4.

(F) Inferred mean contamination rate per cell using CellBouncer (with and without the doublet rate set to zero) versus DecontX on a SMARTseq2 dataset, in which there is no true ambient RNA contamination. SoupX and cellbender, which require data from empty droplets that do not exist in this type of data, were not run.

(G) Pearson correlation coefficients between the gene-expression profile (top/left half) and per-cell contamination rates (bottom/right half) inferred by each pair of ambient RNA inference tools.

(H) Spearman correlation coefficients between gene-expression profiles inferred by ambient RNA inference tools (rows) and mean relative concentration index (RCI) reported by lncAtlas49 for transcripts of genes in different cell compartments.

(I) CellBouncer-inferred gene-expression profile of ambient RNA (x axis) versus the log likelihood of allele counts across individual genes, given the genome-wide maximum-likelihood proportions of each donor, converted into percentiles (y axis). Points are colored by the total number of spliced reads from each gene.

We developed another program, bulkprops, which models total allele counts at each SNP as the sum of a weighted mixture of individual genotypes and outputs pool proportions; this is applicable to both bulk and single-cell data and can be applied to Census-seq experiments50 (Figure 4B). Through bootstrapping, both bulkprops and quant_contam can fit Dirichlet concentration parameters to pool proportions (STAR Methods), which allows for significance testing when comparing two sets of proportions. The combination of tools enables cross-checking of single-cell ambient RNA results with the overall pool proportions.

To test quant_contam and bulkprops, we created datasets with simulated ambient RNA of known quantity and origin. We chose 1,000 random cells from the 10× Genomics NSCLC dataset42 and used each of the seven donors as a source of artificial contamination, replacing 5%, 10%, 15%, 20%, or 25% of each cell’s sequence data with reads sampled from the contaminant donor. We note that this is a likely more challenging test for cell identification than real ambient RNA, as contamination stemming from a single donor risks pushing programs to identify cells as doublet combinations of the true genotype and the contaminant individual.

We ran demux_vcf and quant_contam on each of these 35 datasets to identify individuals, profile ambient RNA, and refine cell-individual assignments by incorporating ambient RNA profiles. Although the accuracy of cell-individual assignments decreased as contamination increased, CellBouncer’s quant_contam-refined cell-individual assignments were significantly more accurate than those from other programs for high-contamination data (Figure 4C). CellBouncer quant_contam’s mean inferred contamination rates also agreed with introduced contamination rates (Figure 4D). Although cell identifications stayed mostly constant, ambient RNA profiles and bulk proportions changed in line with expectation (Figure 4E), with significant (p < 0.05, two-tailed, from Beta-distribution cumulative distribution function [CDF], Benjamini-Hochberg corrected) differences in the proportion of the contaminant individual observed in moderate-to-high contamination datasets (Table S4 and STAR Methods).

As a negative control, we obtained single-cell RNA-seq data from multiple donors processed separately,43 prepared using SMART-seq2, a plate-based technology that does not produce ambient RNA.51 After calling variants and running demux_vcf, quant_contam inferred a mean contamination rate of 0.48%. For comparison, we ran the ambient RNA inference tool DecontX,28 which does not require the empty droplet information specific to droplet-based technology. This tool inferred 14% mean ambient RNA (Figure 4F), suggesting that CellBouncer may be less susceptible to false-positive contamination inference, due to its use of genotype data as an external ground truth.

To measure consistency between ambient RNA inference tools, we ran quant_contam, cellbender,29 DecontX, and soupX27 on the 10× Genomics NSCLC dataset, computing Pearson’s r2 between each pair of program’s per-cell contamination rate inferences and between each pair of programs’ ambient RNA gene-expression profiles. Gene-expression profiles were more consistent across programs than were per-cell ambient RNA estimates, with the highest r2 (0.980) between cellbender and SoupX, which both model ambient gene expression using empty droplets. Surprisingly, these programs’ per-cell contamination estimates were negatively correlated (r2 = −0.590). Conversely, the highest agreement between per-cell contamination rates was between CellBouncer and DecontX (r2 = 0.206), suggesting that ambient RNA inferences using genotypes at least partly agree with those made using expression patterns (Figure 4G). Ultimately, the lack of concordance between existing methods argues in favor of CellBouncer’s use of external ground-truth data.

Ambient RNA has been found largely to consist of highly expressed cytoplasmic transcripts,33,48 and we tested each program’s inferences for consistency with this observation. We correlated each gene’s inferred prevalence in ambient RNA according to each program with its relative concentration index (RCI) values from lncAtlas,49 which measure transcript enrichment in subcellular locations; this comparison quantifies the extent to which ambient transcripts are associated with different cell compartments. Consistent with expectation, all programs’ ambient expression profiles correlated strongly with cytoplasmic versus nuclear RCIs, weakly with insoluble fraction versus other cytoplasm, and strongly negatively with nuclear compartments. CellBouncer and DecontX showed this pattern most starkly (Figure 4H), also showing the highest correlations with another feature associated with cytoplasmic transcripts, spliced transcript counts (Spearman’s rho: cellbender, ρ = 0.865; CellBouncer, ρ = 0.886; DecontX, ρ = 0.887; SoupX, ρ = 0.862; Figure 4I). Further, we found significant agreement between ambient expression profiles and a published list of genes enriched for ambient RNA in brain tissue33 (STAR Methods), suggesting that genic sources of ambient transcripts are cell-type independent.

Finally, we tested our model’s assumption that the allelic makeup of ambient RNA can differ from the bulk pool composition. To this end, we computed the log likelihood of allele counts for each gene, given the genome-wide consensus proportions of individuals in the pool (STAR Methods). A low log likelihood for a gene indicates that its mixture of genotypes differs from the genome-wide norm, suggesting either allele-biased expression or ambient RNA. Supporting ambient RNA as the cause of this mismatching, we found these low-log-likelihood genes are more likely to be spliced (Figure 4I), consistent with cytoplasmic contamination. Each program’s vector of genes contributing to ambient RNA correlated significantly negatively with gene log likelihoods, indicating that the origins of ambient transcripts are likely biased toward particular donors; CellBouncer and DecontX show this pattern most (Spearman’s rho: cellbender, ρ = −0.264; CellBouncer, ρ = −0.281; DecontX, ρ = −0.282; SoupX, ρ = −0.273) (Figure 4I).

Collectively, ambient RNA detection using genetic variation as a ground truth improves individual demultiplexing, recovers the contribution of distinct individuals to the ambient RNA pool, and further informs the nature and subcellular origin of ambient transcripts.

Processing custom tags

Several technologies exist to associate custom barcode sequences with cells; they involve sequencing molecules that link custom tags to cell barcodes and computationally assigning user-defined labels to cells. These technologies can also detect heterotypic doublets and even distinguish cell-containing from empty droplets.20,52 Clustered regularly interspaced short palindromic repeat (CRISPR) sgRNA capture32 produces similar data, except that cells may receive multiple sgRNAs, especially in high-multiplicity-of-infection (MOI) screens, and the presence of two labels in a cell can therefore not be used to identify cell doublets. We will refer to custom barcode-derived cell labels of all types, together with captured sgRNA sequences, as “tags.”

Existing methods for assigning cells to tag-based identities can err when data are sparse,53 and others do not sufficiently account for contamination from ambient tags when making assignments. To address these issues, we introduce demux_tags, which models tag-based identities as multinomial distributions over each tag’s counts, informed by total tag depth per cell. Demux_tags learns mean “foreground” and “background” tag counts by fitting a two-component mixture model to each tag independently. It then simulates cells with each possible identity by sampling random foreground or background tag counts corresponding to the identities and fits multinomial linear models to predict the expected fraction of each tag type in a cell with a given identity, conditional on the total “foreground” tag count in the cell. This allows demux_tags to build a multinomial model for each possible identity for every cell and then choose the likeliest model (Figure 5A). Demux_tags makes several simplifications to speed up the processing of sgRNA count data, in which there are more identities to consider (STAR Methods).

Figure 5.

Figure 5

Tools for assigning custom label-based identities (or guide RNAs) to cells and for inferring a consensus doublet rate and pool proportions from one or more CellBouncer programs

(A) Schematic of demux_tags.

(B) Using data from a published CRISPR screen that targeted two sgRNAs per cell,32 box headings show the number of expected sgRNAs per cell after downsampling the data to a range of tag read counts, the x axis shows the assigned number of sgRNAs per cell using the source publication’s sgRNA assignment strategy, the y axis shows the number using demux_tags, and the color denotes the number of cells receiving the indicated number of sgRNAs from both strategies. We excluded counts of cells that received five or more sgRNAs, which correspond to the 99.9th percentile of all cells.

(C) Using a set of 40,000 NSCLC cells from seven donors,42 the downsampled number of 10× Genomics CellPlex reads per cell (x axis) versus F score (harmonic mean of precision and recall) of CellPlex-based identities inferred by programs (y axis) is shown. For true cell identities, we used the consensus of all VCF-based tools examined in this study, using 10×-provided CellPlex identities to break ties. Values shown are means of three trials; error bars when visible show minimum and maximum values. Missing BFF points indicate failed runs. See also Table S5.

(D) Similar to (C), but in each trial, the indicated fraction of counts of the tag representing each cell’s true identity were removed in order to reduce the signal-to-noise ratio. See also Table S6.

(E) Schematic of doublet_dragon. The program determines which input cell labels correspond to the same groups of labels (e.g., species, treatments, or individuals) and infers a consensus set of label proportions per label group, along with a global doublet rate that includes homotypic doublets. S1 individuals and S2 individuals refer to individuals belonging to species 1 and species 2, after species demultiplexing.

(F) Pool proportions, doublet rate, and log likelihood of cell identity counts inferred by doublet_dragon after running three CellBouncer programs on different aspects of the 10× NSCLC dataset.42 Maximum-likelihood pool proportions from bulkprops are also shown for comparison.

(G) Heterotypic doublet rates inferred by different tag assignment programs, along with the maximum-likelihood consensus heterotypic doublet rate (dotted line), from running doublet_dragon on output from all VCF-based demultiplexing tools examined in this study. Data shown are all downsampled datasets (three per x-axis value) from (C) and (D).

We tested the effect of low sequencing depth on demux_tags’s sgRNA assignments by downsampling published sgRNA capture data32 to various expected guide counts per cell. For each downsampled set of sgRNA counts, we compared the number of sgRNAs assigned to each cell by demux_tags, and by the original mixture model strategy (STAR Methods), to the study’s target of two sgRNAs per cell. Demux_tags assigned two sgRNAs per cell more often than the mixture model on the full dataset and at all levels of downsampling (Figure 5B), with a mode of two assigned sgRNAs per cell even with only 50 mean sgRNA counts per cell (5% of the data).

We then tested demux_tags against alternative programs for assigning cell labels from custom barcode tags, with different levels of sequencing depth. We obtained 10× CellPlex reads from the 10× NSCLC dataset,42 which were used to label cells’ donors of origin. We then counted CellPlex tags using demux_tags and repeated this process on three random samples each of 0.1%, 0.25%, 0.5%, 1%, 5%, 10%, and 50% of the reads. Next, we used demux_tags, BFF,21 deMULTIplex2,22 demuxmix,23 GMMdemux,24 hashedDrops,26 hashSolo,25 and HTOdemux20 to assign identities to cells from each set of counts, measuring accuracy (F score) using ground-truth labels derived from the majority vote (with no ties) of all tested genotype-demultiplexing programs run on the same cells. Some tools, such as GMMdemux and HTOdemux, overidentified doublets as the number of tags per cell passed an optimum, but most programs performed well with 100 or more tag counts per cell (Figure 5C). CellBouncer, deMULTIplex2, hashedDrops, and hashSolo performed best; CellBouncer scored highest on the sparsest data (F score 3.57% higher than the next best) and was within 0.44% of the top scorer on all other datasets (Figure 5C and Table S5).

To model experiments with “leaky” labeling leading to high background tag counts, we used the same data to simulate lower signal-to-noise ratio by removing 10%, 25%, 50%, 75%, or 90% of counts belonging to tags representing each cell’s true identity. CellBouncer performed best on the noisiest dataset (4.4% higher than the next alternative) and comparably to the top method (within 1.8% of the highest F score) for other datasets (Figure 5D and Table S6).

Inferring the consensus doublet rate

To aid in quality control, we developed a tool, doublet_dragon, that uses sets of cell identities from other CellBouncer programs to estimate consensus pool proportions and a global doublet rate that encompasses homotypic as well as heterotypic doublets. Doublet_dragon can take a single or multiple sets of inferred identities for the same cells, which can overlap in meaning (e.g., genotype and mitochondrial identification of donors) or not (e.g., donor identities and treatment conditions). doublet_dragon models the number of cells with each identity as a sample from a binomial distribution, with the probability of an identity determined by its prevalence in the pool and a global doublet rate (STAR Methods and Figure 5E). After inferring these parameters by maximum likelihood, it computes the log likelihood of each set of cell identities under the consensus model. This can be used to compare the relative confidence of each set of identities.

We used doublet_dragon to estimate the doublet rate in the NSCLC dataset, using the genotype-based IDs from demux_vcf, demuxlet, Vireo, and demuxalot, at 18.8%, close to the expected rate of 16% given 40,000 recovered cells. We then compared doublet_dragon inferences from CellBouncer’s genotype-, mitochondria-, and tag-based identities for these cells, using 18.8% as the expected doublet rate and bulkprops inferences as expected pool proportions. Genotype-based identities appear most accurate, followed by tag-based, then mitochondrial identities (Figure 5F). This reflects the amount of data used for each set of identifications: read counts at hundreds of thousands of SNPs, tens of thousands of tag counts, or read counts at a handful of mitochondrial sites. Finally, we computed a heterotypic doublet rate from each tag-assignment program’s output on each set of tag counts we produced; estimates from demux_tags were more consistent and closer to expectation than those from other programs (STAR Methods and Figure 5G).

Together, demux_tags improves sgRNA and other tag-based assignments, particularly in cases of low read counts or low signal-to-noise ratios from leaky barcodes, while doublet_dragon can use all available demultiplexing data to assess their relative quality and infer a global doublet rate to aid in quality control and inform downstream analyses.

Investigating mitochondrial inheritance and gene regulation in inter-species composite cells

We next applied CellBouncer to address an open biological question about nuclear-mitochondrial interactions among hominids. Hominid cell fusions bring two species’ genomes into a shared regulatory environment,54,55,56,57 allowing the study of cis versus trans gene-regulatory divergence and nuclear-mitochondrial interactions. Previous studies have hinted at human-biased mitochondrial inheritance relative to chimpanzees, but these findings were limited by a small number of contributor pairs and did not explore the extent of this bias, the effects at the single-cell level, or causal mechanisms.54 To systematically investigate this phenomenon, we generated 24 polyclonal intra- and inter-species tetraploid composite iPSC lines58 from five humans, six chimpanzees, and one bonobo (STAR Methods and Table S7). We then collected single-cell RNA-seq data to explore whether mitochondria from one or both contributor cell lines persist in composite cells (Figure 6A).

Figure 6.

Figure 6

Investigation of mitochondrial inheritance and gene regulation in inter-species composite cell lines

(A) Construction of composite cell lines and possible mitochondrial inheritance outcomes.

(B) For each pair of contributor cell lines (x and y axes) that were fused to form composite cell lines, the fraction of composite cells containing mitochondria from the contributor line on the y axis is shown. A fraction of 1.0 for both iPSC lines indicates that cells all received mitochondria from both contributor lines.

(C) Data from (B), but showing individual cells’ fractions of mitochondrial reads stemming from contributor lines. See also Figure S9.

(D) For protein-coding mitochondrial genes, log2 fold changes due to mitochondrial copy number and expression level (and excluding post-processing) are shown. Distributions encompass all mitochondrial genes and all comparisons of the given mitochondrial/genomic identity shown against all others. Only cell classes for which there were at least 10 cells with at least 100 informative allelic mitochondrial reads are shown (Chimp + Bonobo with Chimp MT is excluded). For differences in nuclear gene expression in cells with two species’ versus cells with one species’ mitochondria, see Figures S10–S13.

(E) Mitochondrial post-processing differences, measured as correlation between adjacent pairs of protein-coding genes on the heavy strand. Each point shows Pearson’s r between gene pairs in cells of the identity given in the legend (y axis) against single-species cells, where single-species cells on the left plot are composites of two human cell lines, and single-species cells on the right plot are composites of two chimpanzee cell lines.

(F) Log2 human versus chimpanzee fold change in expression of all mitochondrial genes by strand, decomposed into mitochondrial and nuclear changes (where MT refers both to proximal and distal mutations on the mitochondrial genome). P values are from 2-sided Kolmorogov-Smirnov tests comparing heavy and light strand distributions.

(G) Log2 human versus chimpanzee fold change in post-processing, measured as Pearson’s r between adjacent pairs of heavy-strand protein-coding genes, decomposed into mitochondrial and nuclear changes (left) and showing the net change (right).

(H) GnomAD59 minor allele frequency (MAF) of a back-mutation at a fixed, human-derived allele at a candidate cleavage site. Distributions show MAFs of other mitochondrial mutations with the functional (VEP) and pathogenic (ClinVar) annotations shown.

Addressing this biological question in single cells presented particularly challenging demultiplexing problems of identifying the combination of individuals of origin for each cell, confirming results with tags, profiling ambient RNA, and determining the combination and fraction of mitochondrial haplotypes in each cell. After collecting single-cell RNA-seq data, we assigned cell-line identities using demux_tags on MULTI-seq labeling data52 and demux_vcf with genomic variant data generated from high-coverage whole-genome shotgun sequencing. Treating MULTI-seq labels as a ground truth for cell-line identity, we found that demux_vcf more accurately identified composite cell lines of origin than alternatives (Table S8) and that quant_contam produced the best ambient RNA inferences (Figure S8).

We then identified mitochondrial haplotypes present in each cell (STAR Methods; Figures 6B and 6C), resulting in 7,524 cells assigned mitochondrial haplotypes. We found that inter-species composite cells tend to retain mitochondria from only one species, with chimpanzee/bonobo cells biased toward bonobo mitochondria (388 of 473 cells), and human/chimpanzee cells biased toward human mitochondria (3,634 of 4,346 cells). There were many exceptions, however: 2.5% of human/chimpanzee cells had only chimpanzee mitochondria, and 13.9% had mitochondria from both species; 8.0% of chimpanzee/bonobo cells had only chimpanzee mitochondria, and 9.9% had mitochondria from both species. Of the ten human/chimpanzee composite cell lines, only one retained both species’ mitochondria in most of its cells (Figures 6B and 6C), suggesting a contributor-specific influence on this outcome. These findings were robust to false-discovery rates observed for within-species cell fusions (STAR Methods).

We also observed species differences in mitochondrial inheritance for within-species composites: compared to human/human lines, chimpanzee/chimpanzee lines more frequently retained the mitochondria from both contributors, albeit in unequal ratios (Figures 6B and 6C), and this observation was robust to species-specific differences in mitochondrial diversity (Figure S9). Studies of mitochondrial heteroplasmy in mice and humans have shown that cells can selectively promote certain mitochondrial haplotypes over others in a tissue- and age-dependent manner60,61; If the efficiency or dynamics of this process differ across species, particularly in stem cells, it could help explain the interspecies patterns observed in our data.

The presence of cells with all combinations of mitochondrial inheritance patterns allowed us to examine the influence of hominid nuclear-mitochondrial interactions on gene expression. Mitochondrial genes are expressed as polycistronic transcripts, which are later cleaved and selectively degraded by post-processing machinery; it is therefore possible to isolate the effects of the combined influence of copy number and expression level from the effects of post-processing differences.62 We computed overall differential expression (DE) across groups, reflecting aggregate differences in copy number, expression level, and post-processing. We then computed DE normalized to total mitochondrial gene expression rather than genome-wide expression, reflecting post-processing effects, and the differences between these two DE measures, reflecting DE due to copy number and expression level (STAR Methods). Strikingly, cells with mitochondria from two species show decreased copy number and/or expression level across all mitochondrial genes when compared with all other types of cells (Figure 6D), suggesting gene-regulatory crosstalk between allospecific mitochondria.

Canonical mitochondrial mRNA post processing involves cleavage at junctions where tRNA genes separate protein-coding sequences, with cuts occurring at the 5′ and 3′ ends of the tRNA genes.63 We therefore sought to measure mitochondrial post-processing efficiency in different composite classes (species combinations) by calculating the correlation in expression between adjacent pairs of protein-coding genes on the mitochondrial heavy strand. We observed increased correlation at each junction in cells with mitochondria from two species relative to all other types of cells (Figure 6E), indicating lower levels of cleavage and degradation in composite cells of this class.

Comparing human/chimpanzee cells with both species’ mitochondria to those with only one, a significant proportion of DE genes are involved in apoptosis and cell-cycle arrest (Table S9), and similar enrichments are seen when comparing chimpanzee/bonobo composite cells with both species’ mitochondria to those with only bonobo mitochondria (Tables S10 and S11). Additionally, these gene sets significantly overlap (Figure S10) and are enriched for protein-protein interactions (Figure S11), further suggesting incompatibility between allospecific mitochondria in the same cell. Recent work by others has also demonstrated preference for human mitochondria across a range of interspecies cell fusions,64 and another prior study found that human cells cannot take up chimpanzee mitochondria and survive, even when human mitochondria are functionally impaired; full ablation of human mitochondria is required for survival.65 This suggests the involvement of nuclear mechanisms. We found several candidate genes by testing the effects of contributor lines on gene expression in human/chimpanzee cells. H23555, the human contributor to the fusion with the highest survival of both species’ mitochondria, was associated with downregulation of several genes involved in p53 signaling (Figure S11), which had higher-than-normal connectivity in the interaction network (Figure S12): CDKN1A, GDF15, PHLDA3, and ZMAT3. This provides an exciting first glimpse at candidate mechanisms underlying this process.

We next used our data to disentangle regulatory divergence between human and chimpanzee mitochondrial genes stemming from mutations in mitochondrial DNA (henceforth “local mutations”) from those found in the nuclear genome (henceforth “nuclear mutations”; STAR Methods). We reasoned that nuclear mutations can only contribute to divergence in mitochondria gene expression by acting in trans, while local mutations in mitochondria could act in cis or in trans. We first found local downregulation of all genes on the light strand in humans relative to chimpanzees (Figure 6F), resulting in significantly altered MT-ND6 expression. Prior work has found species differences in light strand promoter usage, including a chimpanzee-specific transcription start site at an AT-rich locus in the MT-TE gene,66 which could explain this difference.

Considering mitochondrial RNA post-processing efficiency, we observed large-effect, compensatory nuclear and mitochondrial species differences working in opposition at the MT-ND3/MT-ND4L locus, resulting in little net change in expression correlation (Figure 6G). These transcripts are partly cleaved by an unknown noncanonical mechanism that targets position chrM:10479,67 which is immediately adjacent to a fixed, Homo-specific derived T-C mutation. Population sequencing data59 suggest that a C-T back-substitution at this site (rs1603222851), which results in a synonymous change in MT-ND4L, persists at a frequency lower than typical synonymous mitochondrial mutations and is more characteristic of coding and disease-associated variants (Figure 6H). Additionally, RNA secondary structure modeling around this site suggests that the derived allele increases the probability of base pairing in a hairpin loop structure (Figure S13), potentially making the position less accessible to nucleases. Although beyond the scope of this study, this mutation may act together with a human-specific upregulation of nuclease activity to comprise a hybrid incompatibility between the Homo and Pan lineages. Similar compensatory mutations involving nuclear regulation of mitochondrial genes have been found in multiple models for early species divergence68,69,70 and may make up the bulk of Dobzhansky-Muller hybrid incompatibilities found in nature.71 Further experiments using composite cell lines may uncover more examples of such otherwise invisible regulatory changes.

The CellBouncer suite enabled this analysis by assigning cells to their composite lines of origin, identifying mitochondrial haplotypes, and quantifying ambient RNA, allowing us to profile many different composite cells. This represents an advance over both single-cell sequencing studies of individual cell lines and bulk sequencing studies that cannot detect cell-specific differences in mitochondrial haplotype.

Discussion

We introduce CellBouncer, a versatile toolkit for the processing of pooled single-cell genomics data. It supports flexible cell demultiplexing by species of origin and individual of origin, with or without genotype data or prior knowledge of the number of pooled individuals while modeling the extent and composition of ambient RNA to refine demultiplexing assignments and correct gene-expression values. Its functionality extends to analyzing bulk sequencing data as a mixture of genotyped individuals, assigning treatments or sgRNAs to cells based on cell hashing or CRISPR guide capture data, and inferring a global doublet rate including homotypic doublets. We showed that CellBouncer outperforms existing methods where they apply while introducing new capabilities beyond their scope. It improves computational performance (species- and genotype-based individual demultiplexing), accuracy (noisy cell-hashing data, low-depth CRISPR guide capture data, genotype-free individual demultiplexing, and genotype-based demultiplexing with high ambient RNA) and adds novel functionality (ambient RNA profiling and doublet rate inference).

CellBouncer expands the possibilities for single-cell study design, increasing throughput while reducing biases and batch effects. It enables species-mixing experiments that were previously impractical due to the computational burden imposed by composite reference genomes for more than two or three species. By leveraging mitochondrial clustering, it provides a powerful alternative for demultiplexing individuals when genotype data are unavailable as well as an independent validation method for other cell-identification approaches. CellBouncer’s demux_vcf program scales efficiently to large datasets and SNP panels while accounting for population structure, even allowing for pooling of intra- and inter-species composite cell lines. The quant_contam module enhances pooled study integrity by profiling the origins of ambient RNA, flagging problematic donors or cell lines. Demux_tags enables accurate tag-based identity and CRISPR sgRNA assignments from noisy data, expanding the usable portion of datasets that might otherwise be discarded. Finally, doublet_dragon will enable users to calibrate cell-loading density and improve doublet detection, guiding removal of heterotypic and homotypic doublets, with possible implications for compressed sensing studies.72

Given the risks of demultiplexing31 errors and biological misinterpretation31,33 due to ambient RNA contamination, CellBouncer’s genotype-based demultiplexing program and its accompanying ambient RNA inference tool offer a valuable advance over existing methods. Whereas existing methods require heterogeneity in gene expression or empty droplets to infer contamination, our method compares data to the external ground truth contained in genotype data, making it suitable for pooled cell data regardless of cell-type diversity or empty droplets. Additionally, as current ambient RNA detection methods show limited agreement, the external ground truth of genotype data enables precise modeling and correction of ambient RNA contamination, improving both accuracy and interpretability.

Using CellBouncer tools in combination to process data from a mixture of intra- and inter-species composite iPSCs, we found that inter-species composite cells tend to favor one species’ mitochondria over the other, with human/chimpanzee cells preferring human mitochondria and chimpanzee/bonobo cells preferring bonobo mitochondria. However, a subset of cells deviated from this pattern, allowing us to explore the impact of each species’ mitochondrial and nuclear genomes on global gene expression. Cells retaining mitochondria from both species show signs of cell-cycle arrest and apoptotic signaling, globally decreased mitochondrial gene expression and/or copy number, and impaired mitochondrial mRNA post processing relative to cells with a single species’ mitochondria. These findings suggest that cross-species mitochondrial interactions disrupt normal gene-expression regulation, triggering a nuclear apoptotic response. Our findings here agree with and extend results from a prior study, which discovered that human cells cannot take up great ape mitochondria unless human mitochondria are first eliminated.65

We also found evidence for opposing mitochondrial and trans-nuclear mutations altering the post-processing of two neighboring mitochondrial genes. While more work remains to be done to elucidate this mechanism, the changes we found at these loci may be an early glance at an example of nuclear-mitochondrial hybrid incompatibility loci separating humans from our closest extant relatives.

Limitations of the study

Although we tested our demultiplexing and quality control tools in a variety of settings, real-world data may pose additional challenges not captured by our benchmarking models. Cell barcodes with a high fraction of mitochondrial reads, for example, are most identifiable by mitochondrial haplotype clustering but is also likely to be discarded by downstream quality control steps, as a high fraction of mitochondrial reads is often a sign of cellular stress and/or degradation. Because of this, some datasets may be less amenable to mitochondrial haplotype clustering than others. Additionally, our tool for ambient RNA profiling considers only the genotypic origins of ambient RNA and not its gene-expression profile. Although this introduces a new source of ground-truth information neglected by existing tools, a future version that considers both genotypic origins and expression profile when modeling ambient RNA could provide further improvement. Additionally, ambient RNA profiling may suffer in accuracy on multiple-species datasets that are demultiplexed by species, aligned to species-specific reference genomes, and subsequently demultiplexed by (conspecific) individual genotypes, as information about cross-species ambient RNA contamination will not be available to the ambient RNA inference tool. One potential solution to this problem would be to process the entire dataset on a common reference genome, using a set of variants called across all species and individuals in the study.

Our analysis of data from composite cell lines provides evidence of gene-expression dysregulation and apoptotic signaling in cells containing mitochondria from two species, but future datasets will provide a clearer picture. In particular, most of our data from chimpanzee/bonobo fusions come from a single combination of contributor lines, and analysis of additional chimpanzee/bonobo composite cell lines will be required to determine whether the composite cells’ preference for bonobo over chimpanzee mitochondria is a universal trend. Considering autotetraploid contributor lines, many more fusions will be required to determine whether there are any within-species biases toward survival of particular mitochondrial haplotypes over others, which could hint at mechanisms. Further characterization of the human line H23555 and chimpanzee line C3624 could also provide clues as to why cells derived from fusion of these two lines were uniquely able to survive with mitochondria from both species, despite evidence of apoptotic signaling. Finally, as data generated for this study were obtained only from iPSCs, it remains to be seen how and whether the mitochondrial complement of composite cells affects their differentiation potential.

Resource availability

Lead contact

Further information and requests for resources and reagents should be directed to and will be fulfilled by the lead contact, Nathan K. Schaefer (nkschaef@gmail.com).

Materials availability

Diploid human and chimpanzee iPSC lines were generously provided and are available from Yoav Gilad’s laboratory. Plasmids for iPSC selection have been deposited with Addgene (Addgene: #249287 and Addgene: #249288).

Data and code availability

Acknowledgments

The authors thank Reed McMullen and Jenelle Wallace for feedback on the software and manuscript, Richard E. Green and Yoav Gilad for providing cell lines, the Danny Conrad and Zev Gartner lab for providing MULTI-seq Lipid-Modified Oligos, and Helena Pinheiro for illustrations in Figure 1. Sequencing was performed at the UCSF CAT, supported by UCSF PBBR, RRP IMIA, and NIH 1S10OD028511-01 grants. This work was supported by the following funding sources: the Weill Neurohub Fellowship to N.K.S.; and National Institutes of Health 1R01MH134981, R01AG087859, and DP2MH122400, National Science Foundation #2134955, the Schmidt Futures Foundation, the Pershing Square Foundation, and the W.M. Keck Foundation to A.A.P. This project was funded in part by the Emory National Primate Research Center, grant no. ORIP/OD P51OD011132. A.A.P. is a New York Stem Cell Foundation Robertson Investigator.

Author contributions

N.K.S., B.J.P., and A.A.P. conceived the project and experimental design; N.K.S. designed the algorithms and performed all analyses; B.J.P. designed the cell fusions and performed all experiments; M.T.S. created single-cell RNA-seq libraries; and A.A.P. supervised the study and secured the funding. All authors discussed the results and contributed to the final manuscript.

Declaration of interests

The authors declare no competing interests.

STAR★Methods

Key resources table

REAGENT or RESOURCE SOURCE IDENTIFIER
Chemicals, peptides, and recombinant proteins

Corning DMEM/F12 With L-Glutamine and 15 mM HEPES ThermoFisher Cat# MT10092CM
MEM alpha, nucleosides, GlutaMAX Supplement (α-MEM) ThermoFisher Cat# 32571-036
Corning Fetal Bovine Serum (FBS) ThermoFisher Cat# 35015CV
MEM Non-Essential Amino Acids Solution (100×) ThermoFisher Cat# 11140050
Glutamax I Supplement ThermoFisher Cat# 15140122
DPBS, no calcium, no magnesium ThermoFisher Cat# 14190250
Accutase ThermoFisher Cat# AT104-500
Primocin Invivogen Cat# ant-pm-2
Puromycin ThermoFisher Cat# A1113803
Zeocin ThermoFisher Cat# J67140-8EQ
Insulin Gendepot Cat# I4600-010
Holo-Transferrin Invitria Cat# 777TRF029
Recombinant human TGFβ1 Peprotech Cat# 100-21C
Recombinant human NRG1 Peprotech Cat# 100-03
FGF2-G3 (RPPC), Northwestern University Derived from Addgene: #135521
Bovine Serum Albumin (BSA) Gendepot Cat# A0100-100
Vitronectin (VTN-N) Recombinant Human Protein ThermoFisher Cat# A14700
Corning Growth Factor Reduced Matrigel ThermoFisher Cat# CB40234B
L-ascorbic acid 2-phosphate trisodium salt Fujifilm Cat# 011-2847
Heparin Sigma Cat# H3393
Sodium Selenite Sigma Cat# S5261
Poly(Vinyl Alcohol), 87–90% hydrolyzed Sigma Cat# P8136
Adenosine Sigma Cat# A4036
Guanosine Sigma Cat# G6264
Cytidine Sigma Cat# C4654
Uridine Sigma Cat# U3003
Thymidine Sigma Cat# T1895
Sodium butyrate Selleck Chemicals Cat# S1999
Hydrocortisone Sigma Aldrich Cat# H0888
Dorsomorphin Selleck Chemicals Cat# S7306
Thiazovivin MedChemExpress Cat# HY-13257
IWR1-Endo AxonMedchem Cat# 2510
Emricassan (CEPT component) MedKoo Cat# 510230
Trans-ISRIB (CEPT component) MedChemExpress Cat# HY-12495
Chroman-1 (CEPT component) MedChemExpress Cat# HY-15392
Spermine (CEPT component) Sigma Aldrich Cat# S4264
Putrescine dihydrochloride (CEPT component) Sigma Aldrich Cat# P5780
Spermidine (CEPT component) Sigma Aldrich Cat# S0266
Roche PEG 1500 Sigma Aldrich Cat# 10783641001
Corning DMSO ThermoFisher Cat# 25-950-CQC

Critical commercial assays

Chromium Next GEM Single Cell 3ʹ Kit v3.1 10× Genomics Cat#1000268

Deposited data

Composite iPSC single-cell RNA-seq reads This study BioProject: PRJNA1358605
Whole genome sequencing data from cell lines This study BioProject: PRJNA1358606
Single-cell gene-expression matrices from composite iPSCs This study GEO: GSE329917
Human/chimpanzee/bonobo ancestor genome and annotation This study, with data from Mao73 https://doi.org/10.6084/m9.figshare.30571958.v1
Rattus norvegicus scRNA-seq reads Kamath et al.38 BioSample: SAMN19715216
Tupaia belangeri scRNA-seq reads Kamath et al.38 BioSample: SAMN19715217
Macaca mulatta scRNA-seq reads Kamath et al.38 BioSample: SAMN19715221
Rattus norvegicus reference transcriptome Ensembl74 release 112 mRatBN7.2
Tupaia belangeri reference transcriptome Ensembl74 release 112 tupBel1
Macaca mulatta reference transcriptome Ensembl74 release 112 Mmul_10
5K 1:1 Mixture of Human HEK293T and Mouse NIH3T3Cells 10× Genomics39 https://www.10xgenomics.com/datasets/5k-hgmm-3p-nextgem
Homo sapiens reference genome assembly Genome Reference Consortium hg38 (GRCh38)
Mus musculus reference genome assembly Genome Reference Consortium mm10 (GRCm38)
Homo sapiens genome annotation GENCODE75 Human release 36 (comprehensive, regions: CHR)
Mus musculus genome annotation GENCODE75 Mouse release 27 (comprehensive, regions: CHR)
sgRNA capture data from human/cynomolgus macaque pool Edenhofer et al.40 GEO: GSM7720754
scRNA-seq data from human/cynomolgus macaque pool Edenhofer et al.40 SRA: SRR25715412
Homo sapiens reference transcriptome Ensembl74 release 113 GRCh38
Macaca fascicularis reference transcriptome Ensembl74 release 113 Macaca_fascicularis_6.0
40k Mixture of NSCLC DTCs from 7 donors 10× Genomics42 https://www.10xgenomics.com/datasets/40-k-mixture-of-nsclc-dt-cs-from-7-donors-3-ht-v-3-1-3-1-high-6-1-0
Single cell RNA-seq of human fetal liver and bone marrow cells Ranzoni et al.43 ArrayExpress: E-MTAB-9067
Single cell ATAC-seq of human fetal liver and bone marrow cells Ranzoni et al.43 ArrayExpress: E-MTAB-9068
Homo sapiens CellRanger reference version 2024-A 10× Genomics https://www.10xgenomics.com/support/software/cell-ranger/downloads
lncAtlas Mas-Ponte et al.49 https://lncatlas.crg.eu/
List of genes enriched in ambient RNA Caglayan et al.33 https://doi.org/10.1016/j.neuron.2022.09.010
sgRNA capture data from experiment 6 (targeted two guides per cell) Replogle et al.32 GEO: GSM4367984
GnomAD mitochondrial variant data Karczewski et al.59 https://gnomad.broadinstitute.org/region/M-1-16569

Experimental models: Cell lines

Human iPSC line 20961 (male) Gilad lab; Gallego Romero et al.76,77 RRID: CVCL_HA53
Human iPSC line 23555 (male) Gilad lab; Gallego Romero et al.76,77 N/A
Human iPSC line 28126 (male) Gilad lab; Gallego Romero et al.76,77 N/A
Human iPSC line 21792 (female) Gilad lab; Gallego Romero et al.76,77 N/A
Human iPSC line 29089 (female) Gilad lab; Gallego Romero et al.76,77 N/A
Chimpanzee iPSC line 3624 (male) Gilad lab; Gallego Romero et al.76,77 N/A
Chimpanzee iPSC line 6007B (male) Gilad lab; Gallego Romero et al.76,77 N/A
Chimpanzee iPSC line 8861 (male) Gilad lab; Gallego Romero et al.76,77 RRID: CVCL_1G34
Chimpanzee iPSC line 3651 (female) Gilad lab; Gallego Romero et al.76,77 RRID: CVCL_1G32
Chimpanzee iPSC line 40280 (female) Gilad lab; Gallego Romero et al.76,77 RRID: CVCL_1G36
Chimpanzee iPSC line 40670 (male) This Paper N/A
Bonobo iPSC line CongoA4B (male) This Paper N/A
γ-irradiated CF-1 derived mouse embryonic fibroblasts (MEF) Gift from Gilad Lab, UChicago N/A

Oligonucleotides

MULTI-seq Lipid-Modified Oligos Gift from Gartner Lab, UCSF. available from Sigma Aldrich Cat# LMO001

Recombinant DNA

Episomal vector: pCXLE-hOCT3/4-shp53-F Okita et al.78,79 Addgene: #27078
Episomal vector: pCXLE-hSK Schmitt et al.78,79 Addgene: #74947
Episomal vector: pCXLE-hUL Schmitt et al.78,79 Addgene: #74944
PiggyBac expression vector Fischer et al.80 Addgene: #133379
pET-28a(+)-FGF2-G3 Kuo et al.81 Addgene: #135521
ChPtW_mNEON_Puro (mNEON-Puro) This paper Addgene: #249287
ChZtW_H2B-mCherry2_ZEO (mCherry-Zeo) This paper Addgene: #249288

Software and algorithms

CellBouncer v0.1.0 This study https://doi.org/10.5281/zenodo.17565779
Code for analyses This study https://doi.org/10.5281/zenodo.17565804
litterbox This study https://doi.org/10.5281/zenodo.17565814
numty-dumpty This study https://doi.org/10.5281/zenodo.17565820
ancestral_mito This study https://doi.org/10.5281/zenodo.17565806
upset_enrich This study https://doi.org/10.5281/zenodo.17565826
FASTK Myers82 https://github.com/thegenemyers/FASTK
gffread v0.12.7 Pertea and Pertea83 https://github.com/gpertea/gffread
Nextflow v24.04.4 Tommaso et al.84 https://www.nextflow.io/docs/latest/
STAR (v2.7.a and v2.7.10b) Dobin et al.41 https://github.com/alexdobin/STAR
memory_profiler Pedregosa and Gervais https://github.com/pythonprofilers/memory_profiler
minimap2 v2.24-r1122 Li85 https://github.com/lh3/minimap2
samtools v1.13 Danecek et al.86 https://github.com/samtools/samtools
bcftools v1.13 Danecek et al.86 https://github.com/samtools/bcftools
CellRanger v8.0.1 10× Genomics https://www.10xgenomics.com/support/software/cell-ranger/latest
BEDTools v2.30.0 Quinlan and Hall87 https://bedtools.readthedocs.io/en/latest/
FreeBayes v1.3.6 Garrison and Marth88 https://github.com/freebayes/freebayes
demuxalot v0.4.1 Rogozhnikov et al.16 https://github.com/arogozhnikov/demuxalot
demuxlet (popscle) Kang et al.14 https://github.com/statgen/popscle
cellsnp-lite v1.2.3 Huang, McCarthy, and Stegle15 https://github.com/single-cell-genetics/vireo
vireo v0.5.8 Huang, McCarthy, and Stegle15 https://github.com/single-cell-genetics/vireo
freemuxlet (popscle) Hartoularos et al.19 https://github.com/statgen/popscle
scSplit Falconer et al.18 https://github.com/jon-xu/scSplit
souporcell Heaton et al.17 https://github.com/wheaton5/souporcell
cellbender v0.3.2 Fleming et al.29 https://github.com/broadinstitute/CellBender
DecontX Yang et al.28 https://doi.org/10.18129/B9.bioc.decontX
SoupX Young and Behjati27 https://github.com/constantAmateur/SoupX
velocyto v0.17.17 La Manno et al.89 https://velocyto2.org/
seqkit v2.8.2 Shen et al.90 https://github.com/shenwei356/seqkit
BFF (cellhashR v1.0.0) Boggy et al.21 https://github.com/BimberLab/cellhashR
deMULTIplex2 v1.0.1 Zhu et al.22 https://github.com/Gartner-Lab/deMULTIplex2
demuxmix v1.4.0 Klein23 https://github.com/huklein/demuxmix
GMM-demux Xin et al.24 https://github.com/CHPGenetics/GMM-Demux
hashedDrops (DropletUtils v1.22.0) Lun et al.26 https://doi.org/10.18129/B9.bioc.DropletUtils
hashSolo (solo version 0.1) Bernstein et al.25 https://github.com/calico/solo
HTOdemux (Seurat v4.3.0.1) Stoeckius et al.20 https://github.com/satijalab/seurat
scanpy v1.11.3 Wolf et al.91 https://scanpy.readthedocs.io/en/stable/
pomegranate v0.15.0 Schreiber92 https://github.com/jmschrei/pomegranate
DESeq2 Love et al.93 https://doi.org/10.18129/B9.bioc.DESeq2
GOfuncR v1.22.0 Grote https://doi.org/10.18129/B9.bioc.GOfuncR
STRING database and analysis tools Szklarczyk et al.94 https://string-db.org/
RNAfold v2.7.0 Lorenz et al.95 https://github.com/ViennaRNA/ViennaRNA
RNAfold web server Lorenz et al.95 http://rna.tbi.univie.ac.at/cgi-bin/RNAWebSuite/RNAfold.cgi

Experimental model and study participant details

Generation and growth of iPSC lines

Human and chimpanzee iPSC lines previously described76,77 were used for all cell fusion experiments. This included male human lines 20961, 23555, and 28126, female human lines 21792 and 29089, male chimpanzee lines 3624, 6007B, and 8861, and female chimpanzee lines 3651 and 40280. We also generated an additional (male) Bonobo (Congo) and (male) chimpanzee (40670) iPSC line as described previously.76 Briefly, fibroblasts were grown at 5% CO2/atmospheric O2 in α-MEM supplemented with 10% FBS, NEAA, GlutaMAX, 64 mg/L L-ascorbic acid 2-phosphate trisodium salt and Primocin until 70–80% confluence and released by trypsinization for transfection. 1.5 × 106 cells were transfected with 1.25 μg per episomal vector containing the following genes: OCT3/4, SHp53, SOX2, KLF4, LIN28, and L-MYC (Addgene plasmids 74947, 27078, and 74944).78,79 Transfected cells were seeded at 15,000/cm2 on tissue culture plates precoated with 1 μg/cm2 vitronectin. Cells were grown in Essential 6 media (made in-house as previously described96 without TGFβ1, supplemented with 0.5 mM sodium butyrate and 100 nM hydrocortisone (Sigma Aldrich). Hydrocortisone was used between days 1–12, or until cell density exceeded >70% confluence. Colonies began to form at days 18–22 and were picked between days 24–30 onto dishes coated with γ-irradiated CF-1 derived mouse embryonic fibroblasts (MEF) and subsequently grown in 50/50% ratio of iDEAL/E8 feeder-free medium,97 iPSC lines were expanded 4–8 passages on feeders before being transitioned to feeder-free conditions. Higher rates of spontaneous differentiation were routinely observed when growing Bonobo iPSC clones on MEF, to reduce rates of spontaneous differentiation, 50 nM Dorsomorphin was added to the medium while expanding on MEF as recommended previously,98 Feeder-free iPSC lines were expanded on Growth Factor Reduced Matrigel using EDTA-based cell release solution96 and grown in a custom iPSC media made in-house (v3.1 medium): 65 ng/mL FGF2-G3, 2 ng/mL TGFβ1, 0.5 ng/mL NRG1, 20 μg/mL insulin, 20 μg/mL holo-transferrin, 20 ng/mL sodium selenite, 200 μg/mL ascorbic acid 2-phosphate, 2.5 mg/mL bovine serum albumin (BSA), 30 ng/mL heparin, nucleoside supplement (15 μM adenosine, 15 μM guanosine, 15 μM cytidine, 15 μM uridine, and 6 μM thymidine) in Dulbecco’s Modified Eagle’s Medium (DMEM)/Ham’s F-12. During routine passaging on both feeders and feeder-free conditions, media was supplemented with 2 μM thiazovivin (MedChemExpress, HY-13257) to boost survival.

Generation of fusion reporter lines

To facilitate rapid selection and visualization of tetraploid cell fusions, we generated reporter lines coexpressing a fluorescent protein and drug selectable marker. Piggybac transposon constructs expressing a whole cell localized mNeonGreen and puromycin resistance cassette (mNEON-Puro), or a nuclear localized mCherry2 and Zeocin resistance cassette (mCherry-Zeo) were generated using Gibson mediated cloning of gBlock fragments (IDT) containing the optimized cDNA sequences into a piggybac expression vector derived from addgene plasmid# 133379.80 For each reporter line, 1 million cells were electroporated with 5 μg of the piggyback expression plasmid using a Lonza 4D nucleofector device, and program DN100. To facilitate insertion of the piggybac cassettes, an expression vector for the piggybac transposase was coelectroporated, at a ratio of insert: transpose of 5:1. Following electroporation, cells were recovered in V3.1 media containing CEPT99 for 24 h. Electroporated cell lines were selected using 0.25–2 μg/mL puromycin or 1–5 μg/mL Zeocin, the concentration of each drug used for selection was started at the lowest amount specified and gradually increased (by 0.25–0.5 μg/mL increments for puromycin and 1–2 μg/mL increments for Zeocin) until reaching the upper limit of the drug used.

Generation of tetraploid cell fusion lines

Tetraploid cell fusions were generated using an on plate DMSO-PEG1500-mediated cell fusion approach.100 Briefly, 100,000 cells from two different reporter lines (mNEON-Puro or mCherry-Zeo) were mixed and plated into one well of a 24-well glass bottom plate (Cellvis) and allowed to recover overnight in V3.1 iPSC media supplemented with CEPT.99 Cells were washed once with DPBS followed by addition of 300 μL 45% PEG 1500 (Roche#10783641001)/10% DMSO (25-950-CQC), After a 2 min incubation, cells were washed twice with DPBS (500 μL per wash) and once with iPSC media before final media replacement. Selection of tetraploid cell fusions was performed starting 48 h post-fusion by using a drug step up pulsing approach starting with 0.25 μg/mL puromycin (1 μg/mL) and 0.75 μg/mL Zeocin, selection pressure was increased as the cells grew by doubling the concentrations of the respective drugs until the maximum concentration of 1 μg/mL Puromycin/3 μg/mL Zeocin was reached. This approach resulted in well-formed double-positive colonies with close to 100% success across a broad range of fusions. Selection pressure was maintained for 2–3 passages and removed on the final passage for cell banking.

Method details

10× single-cell RNA-seq library construction

Tetraploid iPSC lines were grown in V3.1 media until 80–100% confluent and subsequently dissociated with Accutase. To provide orthogonal labeling for cell line of origin, samples were labeled using MULTI-seq barcodes as described previously.52 500,000 cells were resuspended in PBS and transferred to 96 well plates containing DNA barcodes (200 nM) and lipid modified oligo (LMO) anchors (200 nM) for 5 min on ice, then transferred to plates containing the LMO co-anchor (200 nM) for an additional 5 min on ice. Excess LMO/barcodes was removed by two washes using PBS +50 mg/mL, followed by a wash using PBS +25 mg/mL BSA. Labeled samples were resuspended in PBS +10 mg/mL BSA, pooled together in sets of 8–12 samples, and adjusted to 4 million cells/mL before sample loading. Single-cell RNA sequencing was collected by loading approximately 20,000 cells per lane and captured using the 10× Genomics Chromium X controller with version 3.1 RNA capture kits. Library preparation was performed according to manufacturer’s instructions and sequenced on Illumina HiSeq and NovaSeq X platforms. Composite cell lines included in each library are listed in Table S7.

Benchmarking species demultiplexing

Labeled dataset

We downloaded single-cell RNA-seq data from three species (Macaca mulatta, Rattus norvegicus, and Tupaia belangeri) produced as part of a prior study38 and processed separately, so that the true species identity of each cell was known. We obtained the data from NCBI GEO (ID GSE178265) and used reads from sample IDs SAMN19715216 (R. norvegicus), SAMN19715217 (T. belangeri), and SAMN19715221 (M. mulatta). To build reference lists of unique k-mers, we obtained reference transcriptomes from each species from Ensembl release 112: Rattus_norvegicus.mRatBN7.2.cds.all.fa, Tupaia_belangeri.TREESHREW.cds.all.fa, and Macaca_mulatta.Mmul_10.cds.all.fa.

For each k-mer size we tested, we prepared reference k-mer lists using the CellBouncer program utils/get_unique_kmers.py. This program identifies transcripts with homologues in all species’ transcriptomes, enumerates unique k-mers using FastK82 (with option -t1), and runs the CellBouncer program get_unique_kmers to identify k-mers unique to each transcriptome, filtering out low complexity k-mers by discarding any with DUST score82,101 greater than 2. For k = 20, we also tested the effects of sampling 1 million, 5 million, 10 million, and 20 million unique k-mers per species. We then ran demux_species using CellBouncer’s demux_species Nextflow84 pipeline (pipelines/demux_species.nf), splitting pairs of transcriptomic read files into 100 chunks each (parameter num_chunks: 100) and skipping read demultiplexing (parameter demux_reads: false). Next, we summed all counts per cell across data from each SRA run ID corresponding to the same SRA sample ID.

Because the data came from multiple separate 10× Genomics runs, rather than a single pooled experiment, we randomly chose cells from which to create artificial inter-species doublets. For this, we downloaded the lists of cell barcodes that passed the authors’ quality control filtering (from GEO) and randomly sampled two sets of 100 cells from each species to represent doublets. Each set of 100 cells served as half of an artificial doublet. For each artificial doublet, we then scaled species-specific k-mer counts from both component cells to the same sequencing depth. To accomplish this, taking A to denote the first species, B to denote the second species, cA to denote the total species-specific k-mer counts in the cell from species A and cB to denote the total species-specific k-mer counts in the cell from species B, we computed a scaling factor for all counts from species A: sA=cAcA+cB and for species B: sB=cBcA+cB. We set each species-specific k-mer count in the artificial doublet ki=kiAsA+kiBsB where kiA is the k-mer count indexed by i in the cell from species A and kiB is the k-mer count indexed by i from species B.

To avoid barcode collisions when merging data from each species, we randomly generated a set of 4.5 million unique 16-base barcode sequences and replaced each original barcode sequence with a random one, guaranteed to be unique across the dataset. For each value of k, we then compiled species-specific k-mer counts from all species into a single file and ran demux_species without read demultiplexing (-d option enabled). We compared the output cell barcode-species assignments to the true identity of each cell, treating each original barcode + species combination as a unique key. For each value of k, we computed the recall of our species assignments (the total true assignments divided by the total number of cell barcodes) as well as the precision (the total true assignments divided by the number of cell barcodes assigned to a species). We also considered the precision and recall of assignments for cell barcodes within the filtered set that passed the authors’ QC, as well as the precision and recall of assignments for cell barcodes that demux_species identified as non-empty droplets.

Unlabeled dataset

To benchmark computational performance and assess our method’s ability to identify true inter-species doublets, we also downloaded a public dataset of a mixture of approximately 2,500 human and 2,500 mouse cells from 10× Genomics, which includes cell-species assignments made from counting reads that aligned to each species’ reference genome.39 We obtained the reference human genome version hg38 and mouse version mm10 from UCSC,102 and the human annotation (version 36, GTF format), and the mouse annotation (version 27, GTF format) from GENCODE.75,102 We then extracted transcriptomes in FASTA format using gffread83 with arguments -g [genome FASTA] –gtf [annotation GTF] -w [output transcriptome FASTA]. For each desired k-mer length, we ran CellBouncer’s reference k-mer counting tool utils/demux_species_ref.py to build reference k-mer lists, using a range of k values (22, 32, 42, and 52) above the minimum accurate value learned in the last experiment (20) to profile memory usage and execution time. For each k, we sampled 20 million unique k-mers per species. We then ran demux_species with k = 20 and read demultiplexing disabled (-d option) after splitting reads into 50 files, counting k-mers using demux_species in batch mode (providing unique IDs via the –batch_num argument), and joining counts using CellBouncer’s combine_species_counts program.

Pooled dataset

To measure species demultiplexing accuracy using a set of pooled cells from multiple species, we downloaded single-cell RNA-seq data and guide RNA counts (sgRNA capture data) from a previous study.40 This study performed CRISPR interference (CRISPRi) screening in human and cynomolgus macaque iPSCs, using sgRNAs targeted to species-specific promoter sequences, as well as sgRNAs targeted to sequences that are identical in both species. We first grouped sgRNAs by their target species (human-specific guides, macaque-specific guides, or guides targeting sequence present in both genomes) and summed guide counts per category for each cell barcode. To determine a reasonable guide count cutoff that could eliminate noise, we calculated the number of cell barcodes whose maximum sgRNA count fell into each category (human-specific, macaque-specific, or present in both) at a range of total sgRNA count cutoffs; we determined from this that requiring more than 10 sgRNA counts per cell eliminated noise from low-sgRNA count barcodes (Figure S1).

After removing cell barcodes that fell below this threshold, we treated counts of guides in each category as species-specific k-mer counts and ran demux_species on this data. We treated these species assignments as ground truth, allowing cells identified as having guides matching both species’ genomes to count as either species. Next, we obtained human transcript sequences (Homo_sapiens.GRCh38.cdna.all.fa) and Macaca fascicularis transcript sequences (Macaca_fascicularis.Macaca_fascicularis_6.0.cdna.all.fa) from Ensembl74 and ran utils/demux_species_ref.py to prepare reference k-mer lists with options -k 32 -N 20000000. Finally, we assessed precision and recall by comparing the k-mer based species assignments with the sgRNA-based assignments, treating sgRNA assignments “Both” and “Both+Human” as matching “Human”, treating sgRNA assignments “Both” and “Both+Macaque” as matching “Macaque,” and treating sgRNA assignments “Both”, “Both+Human”, “Both+Macaque”, and “Human+Macaque” as matching “Human+Macaque.”

Memory profiling

We investigated CellBouncer’s memory usage with multiple values of k, as well as STAR41 v2.7.10b’s memory usage when aligning to a composite reference genome, using the memory_profiler utility (https://github.com/pythonprofilers/memory_profiler). To profile memory usage and execution time while building unique k-mer lists, we wrote a script that runs FastK82 to count mouse transcriptomic k-mers, runs FastK again to count human transcriptomic k-mers, and then runs CellBouncer’s get_unique_kmers program to produce unique k-mer lists; we then ran mprof on this script. To profile memory usage and execution time while building an STAR reference, we ran mprof on STAR with –runmode genomeGenerate. To profile memory usage when running demux_vcf, we ran the program on one million forward/reverse read pairs, using each different value of k (22, 32, 42, and 52), and sampling 20 million k-mers per species. To profile memory usage when aligning with STAR, we ran mprof on the command STAR with –clipAdapterType CellRanger4 –outSAMType BAM SortedByCoordinate –soloType CB_UMI_Simple –soloCBstart 1 –soloCBlen 16 –soloUMIstart 17 –soloUMIlen 10 –outFilterScoreMin 30 –soloCBmatchWLtype 1MM –soloUMIfiltering MultiGeneUMI_CR –soloUMIdedup 1MM_CR –soloCellFilter EmptyDrops_CR –soloBarcodeReadLength 0 –soloFeatures GeneFull_Ex50pAS –soloMultiMappers EM. All memory profiling was done on an Ubuntu system with an AMD EPYC 9684X 96-Core Processor and 1.1TB total RAM. To align data from memory_profiler, we selected lines beginning with “MEM” and subtracted from all timestamps (in Unix epoch format) the minimum timestamp corresponding to that run, then converted to minutes by dividing by 60. We also converted memory values from megabytes to gigabytes by dividing by 1024.

Benchmarking genotype-based demultiplexing

We downloaded a dataset of 10× Genomics single-cell RNA-seq data from non small-cell lung cancer dissociated tumor cells from seven donors, with 40,000 targeted cells sequenced to a targeted depth of 50,000 reads per cell, and with donors labeled using 10× Genomics CellPlex labels, aligned and demultiplexed using CellRanger.42 Because this dataset did not include genotype data, we called autosomal and X chromosome variants using FreeBayes88 with default parameters, using as input a copy of each donor-separated BAM file in the dataset, with read groups added to mark the correct donor (via the “SM” field). We then filtered the resulting variants to biallelic SNPs minimum variant quality of 100 and fewer than 50% missing genotypes per SNP (using bcftools86 view -v snps -m 2 -M 2 -i “QUAL >100 & F_MISSING <0.5”).63 This left us with 511,405 variants for demultiplexing.

We created each downsampled SNP set by randomly sorting variants (Linux sort -R) and taking the number desired from the top of the list (Linux head). We downsampled reads to 10%, 25%, 50%, and 75% of the original number present using the -s option to samtools view.63 To downsample cells, we randomly sampled barcode lists (using Linux sort -R and Linux head), converted these to CellBouncer-format cell-individual assignments files (using awk to add a placeholder sample name, a column identifying all cells as singlets, and a column indicating a Bayes factor of 100), and then used the bam_split_bcs CellBouncer utility program to create new BAM files limited to the selected barcodes.

We then ran each program on each BAM file, with default arguments. For demuxlet, we specified that genotypes should be read from the “GT” field in the VCF (--field GT). For Vireo, we specified that cell barcodes are “CB” tags in the BAM (--cellTAG CB argument to cellsnp-lite) and that genotypes should be read from the “GT” field (-t GT argument to Vireo). For demuxalot, we wrote a Python program to run the routine, as specified in the Github instructions, with default parameters, except joblib_n_jobs = 1 to count_snps(), so that execution time for all programs was measured on a single core. We modified output of all programs to be in the same format as CellBouncer “.assignments” files for ease of assessing accuracy. We measured all execution times using the “real” time measured by the Linux time command. All programs were run on their own core on an Ubuntu system with an AMD EPYC 7343 16-Core Processor and 500 GB total RAM. Execution times included allele counting/single cell genotyping as well as cell-individual assignment and IO for all programs.

After running all programs, we compiled all output assignments for all cells, including the 10× Genomics CellPlex assignments (for doublets, we took the two highest-count oligos to be indicative of the doublet combination, since the CellRanger multi pipeline did not report specific doublet identities). We took the majority-vote identity for each cell to be the ground truth, and we broke all ties by choosing the 10× CellPlex assignment. Given these true identities, we computed the precision of each set of assignments as the number of assignments that matched consensus assignments divided by the number of assignments, and the recall as the number of assignments that matched consensus assignments divided by the total number of cells with consensus assignments (cells not assigned an identity by a program penalize precision but not recall). We then computed the F-score as 2 × (precision × recall)/(precision + recall).

Benchmarking mitochondrial demultiplexing

For mitochondrial demultiplexing on the full 10× Genomics NSCLC 40k dataset,42 we ran demux_mt with default parameters on a BAM file containing all data merged together. We used the same ground truth set composed of majority-vote VCF-based assignments described earlier. For all comparisons of mitochondrial to genotype-based assignments, which have different labels, we used the CellBouncer script plot/compare_assignments.R, which matches labels between sets by computing the Jaccard index between mitochondrial and genotype-based labels and choosing as a match any pair of labels for which each is the reciprocal highest Jaccard index-producing label in the other category. The script also notifies the user when the highest-Jaccard match in one set is not the reciprocal highest-Jaccard match in the other, which indicates that one or more inferred individuals likely do not correspond to true individuals. It also reports precision, recall, and the F score if either set of labels is used as ground truth. We define precision as the number of matching labels divided by the total number of test labels, and recall as the number of matching labels divided by the total number of true labels.

We downsampled the number of cells in this dataset as described previously, with one exception. Since demux_mt relies on the presence of low-quality droplets containing mitochondrial reads for clustering, we wished not only to sample the desired number of high-quality cell barcodes, but also a corresponding number of low-quality droplets. On the full dataset, we counted 32,669 high-quality barcodes and 903,635 barcodes with mitochondrial data that were not included in the filtered set. Assuming a linear relationship between filtered and low-quality droplets with mitochondrial reads, we decided to sample approximately 25 low-quality mitochondrial barcodes for every 1 sampled high-quality barcode in both sets. This led to our inclusion of mitochondrial data from 49,890 randomly chosen low-quality barcodes in the 2,000 cell set and 114,934 randomly chosen low-quality barcodes in the 5,000 cell set (we sampled random cells from barcode lists using Linux sort -R and Linux head, subsampled chosen cells from BAMs using CellBouncer’s utils/split_bam_bcs program, and merged BAMs with high-quality barcodes with mitochondrial-only BAMs containing low-quality barcodes using samtools63 merge).

We ran demux_mt on each BAM file with default parameters, then used the CellBouncer program utils/bam_indiv_rg to add read group tags using the singlet identifications in the resulting assignment file, and then ran FreeBayes88 with default parameters. We also ran FreeBayes on the full BAMs with no sample tags in read groups, to find variant sites for use by the other programs being tested. For all variant sets produced from the full dataset, we filtered to include only biallelic variants of minimum quality 100, with fewer than 50% missing genotypes per site: bcftools86 view -m 2 -M 2 -v snps -I “QUAL >100 & F_MISSING <0.5”. For all variant sets produced from downsampled data (both the 2,000 cell and 5,000 cell set), we lowered our stringency due to data sparsity and required minimum variant quality 50 and fewer than 75% of genotypes missing per site: bcftools view -m 2 -M 2 -v snps -i “QUAL >50 & F_MISSING <0.75”.

For the CellBouncer MT-to-VCF pipeline, we ran demux_vcf using the filtered variant set FreeBayes created from the BAM file with mitochondrial haplotype-derived sample tags. We also ran the CellBouncer program utils/refine_vcf (described in quantification and statistical analysis) on this variant set, with the cell-individual assignments just created and with variant site filtering disabled (--p_thresh 0), to produce a refined set of genotypes that maximize the likelihood of the reads together with the cell-individual assignments. We then ran demux_vcf again with this new genotype set to produce “CellBouncer_refined” cell-individual assignments.

We then ran freemuxlet,19 scSplit,18 souporcell,17 and Vireo15 on each dataset, with default parameters and 7 expected individuals for each program, using the filtered variant sets from FreeBayes (with no sample tags) as loci to genotype and cluster for all programs except souporcell, which selects variant sites as part of its pipeline. Two programs we tested, freemuxlet and scSplit, did not successfully run on the full dataset. This was due to excess memory usage (freemuxlet killed in the dsc-pileup stage, running alone on a system with 500 GB of RAM), and execution time (scSplit ran for over 71 h without completion).

We converted each program’s output to a CellBouncer-format assignments file, to evaluate results against consensus truth assignments using plot/compare_assignments.R. We used the F score computed by this script and took note of when the highest-Jaccard match to an identity was not reciprocal.

Because variants where genotypes are identical across all sites are useless for distinguishing between individuals, counts of output variants from each program (or those that remained after filtering FreeBayes output, in the case of CellBouncer’s MT-to-VCF pipeline) only included sites where more than one genotype exists among all inferred individuals.

To test whether demux_mt could recover mitochondrial haplotypes from scATAC-seq data, we downloaded ATAC-seq reads from a study of hematopoiesis that sorted and sequenced cells from three donors, processed separately43 (ArrayExpress: E-MTAB-9068). Because these data came from a plate-based method, we generated a random 16 bp cell barcode sequence to correspond to each cell we downloaded, ensuring that each barcode was unique across the dataset. We then inserted these barcodes in the format of SAM tags into FASTQ sequence comments (in the format CB:Z:[barcode sequence]). We aligned reads to the hg38 reference genome with minimap285 in short read mode, outputting SAM and inserting sequence comments as SAM tags (minimap2 -y -a -x sr), and then compressed to BAM, sorted, and indexed using samtools.86 We merged BAMs for all cells from each donor (using samtools merge), extracted mitochondrial sequences from each donor (using samtools view -bh chrM), and merged and indexed mitochondrial mappings from all three donors. We then ran demux_mt on this merged BAM file with the doublet rate set to zero (-D 0), recovering three haplotypes. Finally, we created a CellBouncer-format assignments file to denote the known true identity of each cell (using the downloaded metadata) and compared the true assignments to mitochondrial clusters using the CellBouncer script plot/compare_assignments.R.

Pitfalls of mitochondrial haplotype clustering

Although demux_mt works in many cases, we note that factors such as cellular stress and tissue degradation can greatly influence the number of mitochondrial reads, which will affect the ability of demux_mt to recover mitochondrial haplotypes. Further, some genomes, such as those of nonhuman primates, contain many nuclear mitochondrial insertions (NUMTs),103 which are likely to reduce the number of true mitochondrial reads aligned to the mitochondrial genome; finding and masking these sequences might be necessary, as has been done previously for other studies.104 Additional pitfalls include using tissue or cell lines derived from closely related laboratory animals that might share a recent mitochondrial ancestor, or cell populations that exist at very different proportions in the pool (demux_mt assumes counts of all haplotypes follow a single Poisson distribution).

We attempted to cluster a 15-donor RNA-seq dataset43 produced using the plate-based method SMARTseq2 but were unsuccessful, probably because demux_mt relies on the many mitochondrial reads scattered across the empty and low-quality droplets present in droplet-based datasets. Since high-quality droplets often contain few mitochondrial reads, clustering can rely on information from “empty” droplets. Excluding low-quality droplets from droplet-based sequencing data therefore also risks failed clustering.

Additionally, single-nucleus datasets should generally have lower mitochondrial read coverage than those produced from whole cells, although in our hands, single nucleus ATAC is often suitable for clustering due to the high accessibility of the mitochondrial genome in ATAC-seq assays (Figure 3H). We do not expect single nucleus RNA-seq to be suitable for mitochondrial clustering, owing to uneven coverage of the mitochondrial genome combined with the mitochondrial depletion expected in single nucleus data, and we expect some datasets, especially those produced from cells under severe stress or from degraded postmortem tissue samples, to be similarly unsuitable.

In all cases, hierarchically clustering mitochondrial haplotypes and comparing the results with identifications from demux_mt should provide a helpful quality control check. cells that receive the same mitochondrial identity but do not appear adjacent in hierarchical clustering were likely identified with very little information, and clustering results should therefore be considered unreliable.

Ambient RNA inference and removal

Synthetic ambient RNA dataset

For our main test of our ambient RNA inference and bulk proportion profiling tools, we created a dataset contaminated with synthetic ambient RNA from a known source and in a known amount. For this, we first randomly sampled 1000 cells from the 10× Genomics NSCLC dataset42 to use as a baseline dataset. We then counted the number of reads per cell in this dataset and created a dataset of candidate contaminant reads by eliminating the 1000 sampled cells from the larger dataset. We then calculated the number of contaminant reads required to replace the desired amount of each cell’s RNA: if n is the total read count in a cell and p is the desired fraction of ambient RNA contamination, we sampled np1−p contaminant reads, skipping those missing cell barcodes, duplicate reads, unmapped reads, and secondary alignments. Each contaminant read’s cell barcode was adjusted to match the desired target for contamination.

We repeated this process 35 times, introducing 5%, 10%, 15%, 20%, or 25% contamination into each cell, originating from one of the seven donors per file, to create 35 new datasets. On each dataset, we ran CellBouncer’s demux_vcf, along with demuxlet, demuxalot, and vireo with default parameters. We then ran CellBouncer’s quant_contam on each with -D 0.1, to allow it to make doublet identities less likely when they make up too much of the dataset. F-scores of all resulting cell-individual assignments, including refined assignments from quant_contam, were computed by comparing the results to the consensus true identities used earlier (the majority vote ID of each cell from running demux_vcf, demuxalot, demuxlet, and vireo on the full dataset and including the 10× CellPlex-derived labels, using the CellPlex IDs to break ties).

To assess how negatively affected the inferred ambient RNA profile was by cell mis-identifications in the high-ambient RNA datasets, we also ran quant_contam again on each dataset, using the cell-individual assignments from demux_vcf run on the baseline dataset in place of the individual assignments from demux_vcf run on the contaminated dataset. Since these cell-individual assignments were more likely to be correct, we expected the inferred ambient RNA profile to be more accurate, and the degree of difference to help illuminate the extent to which quant_contam’s accuracy suffers in the face of high ambient RNA data.

We also ran bulkprops on each of these datasets, using the same SNP set used to run the SNP-based demultiplexing tools. Each bulkprops run used -e 0.001 to ensure a consistent error rate in the model across runs.

SMART-seq2 dataset

We downloaded gene-expression data from a published study that performed SMART-seq2 RNA-seq on human fetal liver and bone marrow blood cells.43 To make the data amenable to processing using 10× Genomics’ CellRanger pipeline, we selected a random 16-base barcode from the CellRanger barcode whitelist for every cell in the dataset. We then split apart read pairs, using every real read as the reverse read in a pair, and generating for each a synthetic forward read consisting of the selected cell barcode sequence followed by 34 random bases (with “?” quality characters for each) to achieve 50 bp forward reads containing completely random UMIs. We aligned these data to the CellRanger-provided GRCh38 reference version 2024-A using CellRanger version 8.0.1.

To obtain a high-quality set of variants, we used STAR41 v2.7.2a (with –outSamType BAM sortedByCoordinate) to align all downloaded read pairs to the CellRanger-provided GRCh38 reference version 2020-A, added read groups to tag individuals of origin using the bam_dummy_rg program from https://github.com/nkschaefer/bio_misc, and called variants on the autosomes and X chromosome using FreeBayes41,88 with default parameters. We then used bcftools86 to filter the resulting variant file to biallelic SNPs with minimum total read depth of 100 using the command bcftools view -m 2 -M 2 -v snps -I ‘INFO/DP ≥ 100’ and, to further improve variant accuracy, we ran CellBouncer’s refine_vcf tool on the resulting file, with –p_thresh 0.01 and using the true identity of each cell as the cell-individual assignments.

Using this variant call set, we ran demux_vcf and quant_contam twice, once with default parameters and once with -D 0 for both programs, to reflect that doublets are not possible with this technology. We then ran DecontX28 on the raw_feature_bc_matrix with default parameters.

Full NSCLC dataset

We ran each contamination inference tool on the full NSCLC dataset. To run cellbender,29 we first subset the raw gene-expression matrix to include only gene-expression data, using the CellBouncer tool subs_mex_featuretype.py. We then ran cellbender remove-background with the arguments –expected-cells 3300 –model full –epochs 150. We extracted per-cell contamination rates from the/droplet_latents/background_fraction field in the H5 output, and the ambient gene-expression profile from the/global_latents/ambient_expression field. To run DecontX,28 we used the filtered_feature_bc_matrix data, extracted per-cell contamination estimates from the contamination field in the result object, and extracted the ambient RNA expression profile with the R command rowSums(metadata(sce)$estimates$all_cells$eta), where sce is the result object, and then normalized all elements of this vector by dividing them by the vector’s sum. For SoupX,27 we used the clusters inferred by DecontX for the sake of consistency, extracted the ambient expression profile from the soupProfile field in the result object, and measured each cell’s contamination rate as 1 – colSums(afterMatrix)/colSums(beforeMatrix), where beforeMatrix was the filtered_feature_bc_matrix data and afterMatrix was the output of adjustCounts. To run CellBouncer, we used default parameters for demux_vcf and quant_contam, but provided DecontX-inferred clusters to quant_contam for the sake of consistency. We then compared each pair of ambient gene-expression profiles, and every pair of per-cell ambient RNA fractions, using the cor function in R.

Subcellular compartment origin of ambient RNA

We downloaded data from lncAtlas,49 which is a database of results from bulk RNA-seq experiments in which the relative concentrations of different genes in different subcellular locations were measured. lncAtlas reports results as relative concentration indices (RCIs), which are defined as the log2 RPKM of a given gene in one cellular fraction minus the log2 RPKM in another. The database includes measurements of relative concentrations of transcripts in the cytoplasm versus nucleus in multiple cell lines, as well as additional subcellular localization data in K562 cells. After downloading, we calculated the mean RCI per gene and intersected all RCI data with ambient gene-expression vectors from all programs by excluding any gene with an HGNC symbol appearing more than once in our dataset (the 10× Genomics NSCLC data) and matching lncAtlas with ambient expression vectors using Ensembl gene IDs. We then computed the Spearman correlation between each ambient expression vector and lncAtlas RCIs using the R function cor with method = ‘spearman’ and use = ‘pairwise.complete.obs’.

Quantifying splicing

We counted spliced and unspliced transcripts in the 10× NSCLC dataset using velocyto89 run with default parameters and extracted the spliced and unspliced counts from the output.loom file (using R’s colSums function on the/layers/spliced and/layers/unspliced matrices in the hdf5 and taking gene names from/row_attrs/Gene), intersecting these counts with all inferred ambient expression profiles for all genes with HGNC names appearing only once in the dataset.

Per-gene genotype mixture likelihoods

We obtained mean log likelihood values per gene under the consensus, dataset-wide donor mixture proportions, by running bulkprops “in reverse” as described in quantification and statistical analysis. This was achieved by providing consensus bulk proportions via the –props argument and enabling the -g flag. To make these values easier to visualize, we rank-normalized them using the ecdf function in R.

Custom tag and CRISPR guide capture data

Downsampling Perturb-seq sgRNA counts

We downloaded sgRNA capture data from Replogle et al.32 and extracted counts for experiment number 6, in which the authors targeted two guides per cell, in MEX format. We then split the MEX data into a separate matrix per library using the CellBouncer program utils/split_mex_libs.py. For the full-coverage dataset (average 999 guides per cell), we ran CellBouncer demux_tags on each library, with the –sgRNA option enabled. We also assigned guides for each library using the mixture model-based strategy proposed by the study authors: fitting a two-way mixture model to log-transformed counts of each sgRNA, with a lower Poisson component representing background and an upper Gaussian component representing foreground, via code adapted from https://github.com/josephreplogle/guide_calling. After assigning guides using each method to each library separately, we combined the output.table files using the CellBouncer program utils/combine_sgrna_tables.py after appending unique library identifiers to cell barcodes. We then merged together the two tables in R and computed the number of cell barcodes that received each combination of guides assigned by the two methods, using the table command in R. We then repeated this process after downsampling counts to each desired level. To achieve this, we chose a sampling probability (1%, 5%, 10%, 25%, or 50%, yielding an expected 10, 50, 100, 250, or 500 counts per cell respectively) and adjusted each count in the MEX file by choosing whether or not to keep each read given the sampling probability. For example, with a sampling probability of 50% and a count of 10, we would draw 10 random uniformly distributed numbers between 0 and 1 using python’s random.random() function, and set the downsampled count to the number of these samples for which the random number was below the sampling probability (0.5 in this case).

Benchmarking using 10× Genomics CellPlex data

We downloaded CellPlex reads from the 10× Genomics NSCLC dataset42 and counted tags in the reads using demux_tags. We then randomly downsampled reads three times per desired sequencing depth using seqkit sample,90 with a seed of 100, 200, and 300 for the three samples and sampling probability (-p argument) set to 0.001, 0.0025, 0.005, 0.01, 0.05, 0.1, and 0.5 to produce all required samples. We ran demux_tags to count tags in each downsampled dataset as well, and we ran each program being tested (demux_tags, BFF,21 deMULTIplex2,22 demuxmix,23 GMMdemux,24 hashedDrops,26 hashSolo,25 and HTOdemux20) on these tag count tables produced by demux_tags. Because not all of these programs provide information about specific doublet types when cells are assigned doublet identities, we treated all doublet types assigned by all programs as a single “multiplet” identity, and we removed all cells assigned a “negative” or undetermined identity. We then compiled a ground truth for each cell by taking the majority vote identity assigned to each cell by demux_vcf, demuxlet,14 Vireo,15 and demuxalot16 using genotype data, again converting specific doublet identities to a single “multiplet” identity and discarding cells for which the majority-vote identity was a tie. For each program’s identifications on each dataset, we computed precision as the number of matching identifications divided by the number of inferred identities, recall as the number of matching identifications divided by the number of true identities (excluding cells whose identities were not inferred), and the F score as 2×precision×recallprecision+recall.

To simulate datasets with decreased signal-to-noise ratio, we loaded the full-count dataset and, using the consensus ground truth identities, transformed each foreground/true tag count to remove 10%, 25%, 50%, 75%, or 90% of the desired fraction of counts, leaving all background counts unaltered. We then repeated the same process as above, running each program on the transformed counts and assessing accuracy using the ground truth labels for each cell. We note that, while the three replicates of each downsampled dataset allowed stochasticity in each program’s method as well as in the downsampling process to alter results, the three replicates of each low signal-to-noise dataset used identical datasets (there was no randomness used in producing these datasets), meaning that the differences in program output here were entirely due to stochasticity in non-determinism in the programs.

Benchmarking doublet rate inference

To obtain an estimate of the true doublet rate in the NSCLC dataset,42 we ran doublet_dragon on the genotype-based identities assigned by demux_vcf, demuxlet,14 demuxalot,16 and Vireo15 together, inferring a consensus global doublet rate of 0.187848. We then computed an expected heterotypic doublet rate by subtracting the expected fraction of homotypic doublets, ∑i=1ndpi2 using the same variable names as in the last section. This gave us an expected heterotypic doublet rate of 0.1572569.

To compare the output of demux_tags, demux_vcf, and demux_mt run on this dataset, we ran doublet_dragon on the output of each program separately, comparing the pool proportions to those from running bulkprops on the full dataset with default parameters, and to the consensus global doublet rate inferred above.

We also computed the heterotypic doublet rate from running each HTO assignment program on each downsampled and low signal-to-noise ratio dataset we created for benchmarking demux_tags. To this end, we divided all cells receiving doublet or multiplet identities by the total number of cells assigned any identity. We then compared these numbers to the consensus heterotypic doublet rate inferred using genotype data above. Since none of our alterations changed the underlying doublet rate, any variation in heterotypic doublet rate inferred by each program is due to technical noise. To get an expected “true” heterotypic doublet rate, we then subtracted the expected rate of each type of homotypic doublet from the consensus doublet rate inferred using doublet_dragon on genotype-based identities from the full dataset.

Read alignment and quality control

To avoid bias that would be introduced by aligning data to any one species’ reference genome, we obtained a genome representative of the most recent common ancestor of humans, chimpanzees, and bonobos, imputed as a byproduct of a whole-genome progressive Cactus alignment105 of multiple great ape genomes73,106 and annotated using the Comparative Annotation Toolkit,107 produced as part of a recent study.73 We also produced an ancestral mitochondrial genome by aligning the human (hg38), chimpanzee (panTro6106), bonobo (panPan373), and gorilla (gorGor6106) mitochondrial sequences using MUSCLE108 after shifting the circular mitochondrial genome breakpoints to align with the human reference’s linear coordinates. At each position, we chose the human base if it matched either bonobo or chimpanzee, or the gorilla base otherwise, ignoring positions where the chosen base was a gap. We then annotated this genome using liftOff,109 with the GENCODE75 v36 human mitochondrial annotation as source. The procedure used here is now available as a Nextflow pipeline at https://github.com/nkschaefer/ancestral_mito. Finally, we used a custom pipeline (https://github.com/nkschaefer/litterbox) to remove types of transcripts known to be problematic for comparative analysis, such as readthrough transcripts, and to rename genes to the current HGNC recommendations.

Additionally, to avoid losing mitochondrial reads to alignments with nuclear mitochondrial insertion (NUMT) sequences, we masked NUMTs according to a procedure outlined previously104 and incorporated into a pipeline: https://github.com/nkschaefer/numty-dumpty. The procedure entails simulating mitochondrial reads, aligning to a version of the nuclear genome lacking the mitochondrial sequence, calling peaks with MACS2,110 and converting sequence within the peaks to “N” using bedtools maskfasta.87

We aligned data using 10× Genomics CellRanger v8.0.0 with default parameters. After alignment, we used Scanpy91 for visualization and quality control before pseudobulk and differential expression analyses. From visual inspection, we chose to discard cells with more than 20% mitochondrial reads from pseudobulk for differential gene-expression analysis.

Sample demultiplexing and QC

We obtained variants for all contributor cell lines produced from deep whole genome sequencing data as part of a prior study34 We then ran demux_vcf on each library, along with demuxalot,16 demuxlet,14 and Vireo15 with default parameters. Although the other programs ran quickly, the large number (∼12M) of SNPs, owing to inclusion of many sites fixed between species, prevented demuxlet from running to completion within the allotted time of 12 days. In this dataset, each program reported allotetraploid composite cells as doublets; we were therefore unable to detect true doublets of composite cells using genotype-based demultiplexing. We provided an allowed list of “doublet” identities to demux_vcf using the -I argument, which resulted in higher accuracy by preventing the program from choosing identities that were not included in the experiment.

We then used demux_tags to count MULTIseq tags in reads and assign identities (composite cell lines of origin) to each cell. We note that relatively shallow sequencing of these tags, as well as at least some evidence for MULTIseq tag bleeding into neighboring wells, likely lowered the accuracy of MULTIseq-inferred identities, but the MULTIseq data still provided a helpful way to identify and discard doublets that would otherwise be invisible to genotype-based demultiplexing.

We assessed the accuracy of genotype-based identities using MULTIseq tags as ground truth after discarding all cells identified as doublets from the MULTIseq data.

We noticed an issue with our data for library B that resulted in low agreement between the MULTIseq label for fusion line 27 and its expected genotype, resulting in relatively poor genotype-MULTIseq agreement on this library (Table S8). Because of this, we discarded any cells for which the genotype-based assignment (from demux_vcf) disagreed with the MULTIseq-based assignment (from demux_mt) from all downstream analyses. Using MULTI-seq labels as ground truth, we found that demux_vcf was more accurate in identifying composite cell lines of origin than other tools, with demuxalot second best but considerably worse on one library, Vireo the least accurate, and demuxlet unable to run on the large SNP set we used (Table S8).

Next, we inferred ambient RNA contamination using quant_contam on the demux_vcf output on each library, after discarding cells from the “.assignments” file that were inferred to be doublets from MULTIseq data. We also ran SoupX,27 DecontX,28 and cellbender29 on each library, and extracted cell-specific ambient RNA fractions from the output of each as described earlier. SoupX failed to run successfully on one of our libraries (A1), and so results from that program were not considered for that library.

Counting mitochondrial haplotype-specific reads

In datasets such as ours, in which very divergent mitochondrial haplotypes can exist, one run of demux_mt risks recovering one consensus haplotype per group (in our case, species), rather than finding all haplotypes in the dataset. For this reason, we created a CellBouncer program called mt_subcluster.py, which takes as input the results from one run of demux_mt, as well as the IDs of clusters to sub-cluster. It then re-runs demux_mt on each chosen cluster, limiting analysis to cell barcodes assigned to that cluster in the previous run. After all runs are complete, it then merges all resulting variants together, creates a consensus haplotype for each cell, and identifies each cell as belonging to one of the final haplotypes. One run of mt_subcluster.py was enough to recover most mitochondrial haplotypes in our technical replicates of the same library (A1 and A2) (Figures S14 and S15), but recovering all human haplotypes took two additional rounds of subclustering in the other library (B) (Figure S16). This is likely due to uneven representation of the haplotypes; demux_mt assumes counts of cells belonging to all haplotypes follow a single Poisson distribution, and this assumption can be violated when haplotypes exist at very uneven proportions.

To obtain a more complete set of mitochondrial haplotypes, we called variants on our WGS data using FreeBayes88 on the mitochondrial genome with ploidy set to 1. We then converted these data from VCF format into the format used by demux_mt.

We then added an option to demux_mt to allow counting of allele-specific reads in tetraploids (and cells identified as doublets of two identities). This option takes a set of mitochondrial haplotypes and cell-individual assignments (e.g., from demux_vcf) and outputs, at each site segregating between the two mitochondrial haplotypes for each doublet/tetraploid cell, the number of reads carrying the allele from each individual. For all of our human/human and chimpanzee/chimpanzee composite cells, we used this feature to calculate allele specific reads at SNPs, then intersected these counts with mitochondrial gene coordinates (in BED format) using BEDTools87 intersect, and summed allele-specific counts across genes in R.

To avoid noise arising from low-frequency sites, we chose to use only fixed species-specific mitochondrial variants for our inter-species comparisons. To this end, we selected (using bcftools86 view) only variants fixed between human and chimpanzee cell lines and produced demux_mt-format mitochondrial haplotype files at these sites, with one haplotype for humans and one for chimpanzees, with the “0” allele at each site representing human and the “1” allele at each site representing chimpanzee. We repeated this to create another haplotype file for sites fixed between chimpanzees and bonobos. We then counted allele-specific mitochondrial gene expression using the same procedure as above, but to help us calibrate our methods, we computed human/chimpanzee mitochondrial allele specific counts in human/human and chimpanzee/chimpanzee composite cells, as well as in human/chimpanzee composite cells.

For details on the statistical method for assigning mitochondrial haplotypes to cells, see “quantification and statistical analysis” section.

Mitochondrial haplotype divergence

We measured the divergence between each pair of within-species mitochondrial haplotypes by loading the aforementioned mitochondrial haplotypes we constructed, which consist of biallelic SNPs, with the two alleles at each arbitrarily encoded as “0” and “1”, and computing Euclidean distances using the dist function in R.

Differential expression analyses

After assigning each cell to one or more mitochondrial haplotype, we assigned every cell to a pseudo-bulk bin based on its library of origin, the species of origin of both of its contributor cell lines, and the species of origin of its mitochondria. After discarding all cells with more than 20% mitochondrial reads, as described earlier, we summed expression of all genes within each pseudobulk bin and performed differential expression analysis with DESeq293 twice: once including all genes in the annotation and a second time including only mitochondrial genes. Both runs included library and the full species identity (species of origin of the nuclear and mitochondrial genome(s)) as covariates. Because the size factors computed in the first analysis normalized expression genome-wide, while those in the second analysis normalized expression to mitochondrial totals, the second analysis should reflect only differences in mitochondrial post-processing, while the first reflects differences in mitochondrial copy number, expression, and post-processing. We then assumed these different drivers of expression differences to be multiplicative and approximated differences due only to copy number and expression level by subtracting log2 fold change values from the second analysis from the first. When reporting significant DE values, we used p = 0.01 as a cutoff.

We assessed overlap of every set of DE genes by creating an UpSet plot,111 which shows the number of DE genes in common among different contrasts. To test for enrichment of overlap, we created a Python package, upset_enrich (https://github.com/nkschaefer/upset_enrich), which computes hypergeometric test p-values for observing overlap between two sets greater than or equal to that observed. The package takes a p-value threshold (which we set to 0.01) and colors bars representing intersections between groups of gene sets to denote whether every pairwise comparison in the group yielded a significant p-value.

Correlation of neighboring genes

Considering only each pair of adjacent protein-coding genes on the mitochondrial heavy strand, we loaded single-cell gene-expression matrices in R (using the readMM command in the Matrix package) and grouped cells based on the species of origin of their nuclear genomes as well as their mitochondria. In each group, we then computed the Pearson correlation coefficient between the expression of genes in each pair using the corr function in R.

Gene Ontology enrichment

We performed Gene Ontology enrichment analyses using the R package GOfuncR version 1.22.0, built on the FUNC112 package, with the included human gene ontology data. Enrichments were calculated using the go_enrich function with test = ‘hyper,’ and all genes with adjusted p < 0.01 included in gene sets.

Mitochondrial versus nuclear changes

Both for comparing DE of genes on the mitochondrial light versus heavy strand, and for comparing the correlation of expression of neighboring gene pairs in human versus chimpanzee, we sought to use all data we collected to disentangle regulatory changes stemming from differences in mitochondria from regulatory changes stemming from differences in nuclear genomes. To this end, we reasoned that measurements from human/human cells come from interactions between human nuclear genes and human mitochondria, while those from chimpanzee/chimpanzee cells reflect interactions between chimpanzee nuclear genes and chimpanzee mitochondria; comparisons between human/human and chimpanzee/chimpanzee cells therefore reflect both mitochondrial and nuclear differences.

Since human/chimpanzee cells contain both species’ nuclear genomes, measurements from these cells with a single species’ mitochondria reflect the influence of both nuclear genomes on a single species’ mitochondria. Therefore, comparing human/chimpanzee cells with human mitochondria to human/chimpanzee cells with chimpanzee mitochondria is a way to isolate mitochondrial differences: differences reflect the influence of a common nuclear background on the two different mitochondria.

To isolate nuclear differences, we could compare human/chimpanzee cells with a single species’ mitochondria to same-species composite cells with matching mitochondria. For example, human/chimpanzee cells with human mitochondria reflect human and chimpanzee nuclear factors with human mitochondria, so comparing these to human/human cells should isolate the influence of chimpanzee nuclear factors. If we abbreviate human as H and chimpanzee as C with normal script used to denote mitochondrial species and subscript used to denote nuclear genome species, and working in log space, then:

chimpanzeenuclearfactors=HHC−HHH
humannuclearfactors=CHC−CCC

We can then compare human to chimpanzee nuclear factors as

(CHC−CCC)−(HHC−HHH)=CHC−HHC+HHH−CCC

Since we already defined nuclear + mitochondrial differences as HHH − CCC and mitochondrial differences as HHC − CHC, this is consistent with the expectation that nuclear + mitochondrial = CHC − HHC+HHH − CCC+HHC − CHC = HHH − CCC.

We chose to omit data collected from human/chimpanzee cells with both species’ mitochondria from this analysis, due to our observation of cross-species mitochondrial interactions inhibiting normal gene expression.

Allele frequency of human-specific mutation

We identified a fixed, human-specific derived allele on the mitochondrial genome at the position adjacent to a proposed MT-ND3/MT-ND4L cleavage site, using mitochondrial genomes aligned as described earlier when building the reference genome. In this case, however, we also included the Neanderthal reference mitochondrion.113 We used the gorilla allele to infer the ancestral state.

Using the GnomAD population sequencing database,59 we found a back-mutation at the site from the derived T allele to the ancestral C allele (rs1603222851). To compare the frequency of this mutation to the frequencies of other types of mutations, we downloaded all mitochondrial variants from GnomAD and removed all with homoplasmic allele frequency == 0. We then converted all Variant Effect Predictor (VEP)114 annotations into the broad categories used by VEP: high (start lost, stop lost, frameshift), moderate (inframe deletion, missense), low (incomplete terminal codon, start retained, stop retained, synonymous, coding sequence), and modifier (non coding transcript exon). Because of the small size of the mitochondrion resulting in relatively few high-impact mutations, we chose to compare mutations with either moderate or high predicted impact to those with low predicted impact.

We then similarly grouped annotations from ClinVar115 into two broad categories: pathogenic (encompassing affects, likely pathogenic, pathogenic/likely pathogenic, pathogenic, likely pathogenic; drug response, and pathogenic; drug response) and benign (association not found, benign/likely benign, benign, likely benign). We then compared the homoplasmic allele frequencies of mutations across both sets of categories.

RNA folding analysis

Using the RNAfold web server,95 we looked for local 2-dimensional predicted RNA structures in the reference human mitochondrial sequence around the human-specific derived mitochondrial allele (chrM:10479) adjacent to the MT-ND3/MT-ND4L cleavage site. We identified a predicted hairpin at bases chrM:10459–10492 (Figure S13). We then used the standalone version of RNAfold in the viennaRNA package (with the -p option) to produce postscript files for ancestral and modern human (derived) alleles at the hairpin locus. We retrieved base-pairing probabilities from these postscript files by selecting lines ending with “ubox,” and taking the maximum probability (square of third column) for lines in which either the first or second base index (column 1 or 2) was the position of the human-derived mutation of interest (index 20).

Quantification and statistical analysis

Choosing k in species demultiplexing

Our species demultiplexing algorithm relies on a choice of k-mer, or subsequence, length. This value must be lower than the length of reads, and our data structure allows for any choice up to k = 32 with minimal computational cost. Larger k values may result in greater power to distinguish species identities, however. Here, we explore how choice of k can be influenced by annotation quality and evolutionary distance between species.

Making the simplifying assumption that a transcriptome is a single linear sequence and ignoring clustering of mutations, every single nucleotide difference between two species can be expected to produce k species-discriminatory k-mers. If two species diverged T years ago, species 1 has generation time g1 years, species 2 has generation time g2 years, and both species have the same per-generation mutation rate μ, then we expect μT(1g1+1g2) species differences per site. If we further expect a reduction in nucleotide diversity r due to purifying selection on coding sequence, then we can expect to see rμTk(1g1+1g2) mean species differences per sequence of length k. In the limit of high species divergence (when rμT(1g1+1g2)≥1k), every transcriptomic k-mer is expected to become species informative.

In a single cell experiment, there are n mean reads per cell, each with read length l. A given read contains l − k + 1 k-mers, and a cell therefore has n(l − k + 1) k-mers. The number of expected species-informative k-mers per cell is therefore rμT(1g1+1g2)nk(l−k+1). Fixing all parameters not set by the program user, r, μ, T, g1, g2, n, and l, we let z=rμT(1g1+1g2)n and see that the expected informative k-mers per cell is x = zk(l − k + 1) = zk(l + 1) − k2. To maximize the non-fixed part of this equation, we take dxdk=(l+1)−2k and solve 2k = l + 1, revealing that the maximum number of expected species-informative k-mers exists when k=⌊l+12⌋. Assuming that 100-base reads were collected, we can examine the fold-change increase in expected k-mer count per cell resulting from choosing the count-optimal value of k = 50, relative to the performance-optimal value of k = 32: 50z(51)32z(69)=1.154.

Choosing some reasonable parameters, we next explore the impact of T on the total k-mer count per cell. If we conservatively assume that the reduction in nucleotide diversity r=13 (assuming no introns, no UTRs, and complete sequence conservation at first and second codon positions), that the number of reads collected per cell is 50,000, and that μ(1g1+1g2)=2.32×10−9 , by doubling the mean of 58 reported per-year mammalian mutation rates,116 then the expected species-informative k-mers per cell with k = 32 is 0.0854T, and with k = 50 is 0.0986T. With these estimates, we would expect to see 50,000 informative k-mers per cell separating two species that diverged only 585 kya with k = 32, or 507 kya with k = 50. We would expect to sample as many as 10,000 informative k-mers for species that diverged 101 kya with k = 32, or 117 kya with k = 50. Additionally, we note that we found that downsampling the species-specific k-mer lists to include as few as 10–20 million k-mers did not hurt the accuracy of our method. In humans, there are 1.75 × 109 transcriptomic bases in the 2024 CellRanger reference annotation; using the above parameters, we would obtain 10 million informative k-mers between humans and a relative 230 ky diverged, or 20 million k-mers between humans and a relative 460 ky diverged, suggesting that discrimination should be possible even with very recent divergence times. From this, we conclude that k = 32 should be sufficient to distinguish cells from even closely related species.

Differences in annotation quality, which can result in transcripts incorrectly appearing to be species-specific due to their exclusion from one or more gene annotations, pose a greater problem for our method; we therefore have devised a strategy to mitigate this problem when building reference k-mer lists (see description of species demultiplexing algorithm). If the problem persists, it will result in k-mers incorrectly appearing to be species-specific at rate ϵ. In the case of two species, the rate ϵ is related to the probability that a transcript is missing from one or the other annotation and is therefore independent of the choice of k. The probability that a k-mer is species informative, rμTk(1g1+1g2), does depend on k, however. In the worst case, all erroneously-included k-mers would suggest the same species identity A; thus, when ϵ approaches rμTk(1g1+1g2), we would risk sampling comparable numbers of true species B-informative k-mers and erroneous species A-informative k-mers in cells from species B, thus misidentifying those cells as doublets from species A and B. It is therefore crucial that rμTk(1g1+1g2)≫ϵ; given the same parameters as above, rμ(1g1+1g2)=7.73×10−10, so users should ensure that k≫ϵ7.73×10−10T . From this perspective, doubling k (e.g., from 32 to 64) can help significantly.

To illustrate this in a real pair of closely related species, we consider an experiment pooling chimpanzee and bonobo cells, assuming a divergence time of 2 mya and equal mutation rates of 5.8 × 10−10 per year in both species116: if r is 13, then ϵ must be less than 0.0247 if k = 32, or less than 0.049 if k = 64.

In practice, using annotations produced using the same pipeline, along with CellBouncer’s algorithm for finding homologous transcript sets, should mitigate the inclusion of erroneous k-mers in species-specific lists. Additionally, hierarchically clustering and visualizing results from demux_species is a reliable way to test whether a given run was successful. We recommend choosing k = 32, and if hierarchical clustering reveals a problem, to run again with k = 64. If the problem persists, we recommend manual inspection of gene annotations to find transcripts that may have been erroneously excluded from one or the other species; subsetting annotations to transcripts present in all should help improve species demultiplexing.

CellBouncer algorithms

Species demultiplexing

CellBouncer’s demux_species requires as a starting point lists of k-mers unique to each species’ transcriptomes. To accomplish this, it builds k-mer lists specific to a chosen value of k and set of species to be pooled. Our pipeline requires k-mer counts from FastK,82 which are stored in a custom file format in sorted order. CellBouncer’s program get_unique_kmers takes sorted k-mer counts from FastK and outputs lists of k-mers present in one but not other species’ transcriptomes, removing low-complexity k-mers with DUST score101 greater than 2. It can also optionally sample a set number of k-mers from each species, which are chosen in descending order of frequency, randomly choosing those with tied frequencies.

Differences in annotation quality can cause problems when compiling species-specific k-mer lists: if there is a transcript with homologues in multiple species, but which is missing from one or more reference transcriptomes, k-mers belonging to that transcript can erroneously appear to be diagnostic of the species whose reference transcriptomes include the transcript. Because of this, we introduced a wrapper program, utils/demux_species_ref.py, which simplifies the process of building species-specific k-mer lists for users and introduces a homology filtering step to ensure that only transcripts present in all transcriptomes are used for species-specific k-mer counting.

Homology filtering first consists of aligning each pair of reference transcriptomes twice, with both transcriptomes serving as query and reference, using minimap285 with parameters –for-only –mask-level 0.5 -k15 -w5 -p0.5 -N10 -x asm20. Next, a similarity score is computed for each aligned transcript pair, consisting of the number of matching bases divided by the length of the shorter of the two aligned transcripts, summed over both alignment directions. The mean alignment-level similarity score serves as a global similarity score between species’ transcriptomes, and these scores are then used to cluster species transcriptomes using UPGMA (choosing maximum similarity, rather than minimum distance, at each step). Whenever we join two species’ transcriptomes in this process, we determine homologous transcript pairs by choosing aligned pairs of transcripts in decreasing order of alignment score until all transcripts from one species have been exhausted. We then recompute alignment scores between each merged transcript pair and all transcripts in other species’ transcriptomes by averaging; e.g., if transcript A and B have been merged into transcript group X, then Score(X,C)=12Score(A,C)+12Score(B,C) as long as pairwise alignments between (A,C), (C,A), (B,C), and (C,B) exist. As clustering continues, nodes further up the tree collect transcript sets with more than two members. When clustering is complete, the root node’s transcript sets are taken to be homologous groups that exist in all species’ transcriptomes and are written to disk. Any transcript belonging to a species’ transcriptome but not a root-level homologous transcript set is then discarded before compiling species-specific k-mer lists.

To hold k-mers in memory, we developed a data structure that represents k-mers as 64-bit unsigned integer keys, using the binary encoding scheme A = 00, C = 10, G = 01, T = 11. These are in turn stored in a hash table. This means that any length of k-mer up to 32 bases can fit in one integer and will result in a similar overall memory usage (and execution time). If a k-mer length greater than 32 is chosen, a second 64-bit unsigned integer must be stored per k-mer, with a second layer of hash tables, resulting in a leap in memory usage and execution time. In our tests, k = 32 was more than sufficient to obtain high accuracy.

Because k-mer sets are expensive to store in memory, CellBouncer includes the option to make one pass through the reads per species, in order to decrease memory usage at the cost of higher execution time. In our benchmarking tests, this was unnecessary, but may become necessary if many species are included and memory is limited.

We chose to perform exact cell barcode matching during the k-mer counting step, because fuzzy matching introduces higher memory usage and slows down execution time. In the interest of keeping all relevant data, however, one mismatch is allowed per cell barcode when demultiplexing reads. CellBouncer also corrects any mismatched bases in cell barcodes when writing out demultiplexed reads, in order to speed up downstream processing. When counting k-mers, we also discard counts from reads with duplicate UMIs, but we require UMI matches to be exact in order to collapse them.

Once counts are compiled, demux_species fits a multinomial mixture model to infer the species of origin of each cell, using the expectation maximization (EM) algorithm. Each species identity is represented by a multinomial distribution over the vector of k-mer counts from each species, and each possible combination of two species (doublet identity) is represented by a distribution whose parameters are the average of the parameters of the two “parent” species’ distributions. To ensure that each doublet distribution continues to model the desired doublet type, we introduce a tweak to the EM algorithm: after each maximization step, each doublet distribution’s parameters are set to the mean of the parameters of its two parent distributions.

After assigning cell barcodes to species of origin, we use a two-component mixture model to infer which barcode sequences are likely to represent empty droplets, and which droplets were likely to have contained cells. For this, we assume that cell-containing droplets will have more transcriptomic reads, and therefore more species-specific k-mer counts as well as more confident species assignments. To reflect this, we use compound distributions whose likelihoods are the product of a Poisson distribution over total species-specific k-mer count per cell and a Gamma distribution over the log likelihood ratio of assignment (assignment LLR) in the same cell. We take cell barcodes whose likelihood under the high-count, high-LLR model is greater than under the low-count, low-LLR model to be putative cell-containing barcodes.

Once cells are assigned to the likeliest species of origin, demux_species makes a final pass through all provided reads to write each to a separate file according to its species of origin, facilitating downstream processing. The assignments used in this step include the full set of droplet barcodes, not just the smaller filtered set of putative cell-containing barcodes found in the last step, providing the user flexibility to incorporate later filtering steps taken after reference genome alignment to remove cells with few or poor-quality transcriptomic reads. Users can provide multiple types of reads for the same library, provided that barcodes are shared, or that a mapping from each RNA-seq barcode to other data type’s barcodes exist. Because genes are under more selective constraint than other genomic regions, the space of potential transcriptomic k-mers is much smaller than that of the genomic k-mers that would be required to demultiplex using ATAC-seq or other genomic reads. Because of this, we rely solely on transcriptomic reads for k-mer counting and species assignment.

Genotype-based demultiplexing

When a reference panel contains individuals from deeply divergent groups, such as different subspecies or species, not all SNPs are equally useful in discriminating between possible cell identities. This is because many SNPs in the panel will be fixed differences between groups. If there are many such fixed SNPs, then slight differences between individuals in missingness and genotype error at these SNPs can significantly influence the overall rate at which a cell matches the expected alleles from its individual of origin. When this happens, the wrong individual from the correct group can be chosen over the correct individual.

To remedy this situation, we chose a strategy in which a different set of SNPs is used to compare each pair of candidate cell identities. In the case described above, this choice allows all fixed between-group differences to inform comparisons between individuals belonging to different groups, but not comparisons between members of the same group. Our approach assumes individuals to be diploid and considers only biallelic SNPs. For each pair of individuals in the reference panel, we track all SNPs where the two individuals have different genotypes, and we then count reference and alternate alleles observed in each cell at each type of SNP. In other words, if (x,y) denotes SNPs at which individual 1 has x alternate alleles and individual 2 has y alternate alleles, we compile 6 counts of reference and alternate alleles in each cell in order to choose between these individuals, corresponding to SNPs of type (0,1), (0,2), (1,0), (1,2), (2,0), and (2,1). Furthermore, instead of adding 1 for each reference or alternate allele observed in a read, we add the probability of each read being correctly mapped: 1−10−MAPQ10. We also skip all reads marked as duplicate, unmapped, or non-primary alignments.

Once all alleles of interest have been counted in all cells, we use each (reference, alternate) allele count pair in each SNP type to compare the likelihood of the cell deriving from the first versus the second individual. To this end, we choose an initial rate at which we expect reference alleles to be misread as alternate alleles, εR, and a rate at which we expect alternate alleles to be misread as reference alleles, εA. Then, the expected alternate allele matching rate p at sites where a cell’s individual of origin is homozygous for the reference allele is εR, at heterozygous sites is 0.5 × (1 − εA + εR), and at sites homozygous for the alternate allele is 1 − εA. Each pair of (reference, alternate) allele counts can then be assigned an expected alternate allele matching probability given that the cell comes from individual 1, p1, and another given that the cell comes from individual 2, p2. For each category of SNPs, then, the reference and alternate allele counts in a cell can be used to produce a binomial log likelihood ratio of the cell deriving from individual 1 versus individual 2. For example, if a cell has r reference alleles and a alternate alleles observed at SNPs of type (0,1), then the log likelihood ratio of individual 1 versus individual 2 identity is lBinom(r + a, a, εR) − lBinom(r + a, a, 0.5 × (1 − εA + εR)), where lBinom(n, k, p) is the log binomial likelihood of k successes in n trials with probability p.

This framework allows us to compare directly every pair of possible single-individual identities, but it does not include cell doublets, where two cells enter the same droplet and are assigned the same barcode sequence. Doublets pose a challenge: although this method tracks all types of SNPs necessary to compare the likelihood of a doublet identity to both of its component singlet identities, it does not allow us straightforwardly to compare a doublet identity to any other possible identities. To illustrate this problem, we know that a doublet of individual 1 and 2 has an expected alternate allele fraction of 0.5 × (1 − εA + εR) at SNPs of type (2,0) in individuals 1 and 2, since half of the reads should originate from individual 1 and half from individual 2, and we can average the expected alternate allele fractions from both individuals at SNPs of this type. We do not, however, know the expected alternate allele fraction in doublets of this type at sites of type (2,0) in individuals 1 and 3. This is because we have not computed the expected alternate allele fraction in individual 2 across all sites where individual 1 is homozygous for the alternate allele.

To solve this problem, we first compute the log likelihood ratio of each doublet identity versus each of its component singlet identities, using the same sets of SNPs used to compare the two singlet identities. As mentioned above, the expected alternate allele fraction in the doublet is the average of the expected alternate allele fraction in each of the two component identities, or more generally, f − f × εA + (1 − f) × εR, where f is the fraction of chromosomes possessing the alternative allele. This gives the following expected alternative allele fractions: 0.25 − 0.25εA + 0.75εR for (0,1) or (1,0) SNPs, 0.5 × (1 − εA + εR) for (0,2) or (2,0) SNPs, and 0.75 − 0.75εA + 0.25εR for (1,2) or (2,1) SNPs. We then take advantage of the fact that all computed values are ratios. Suppose that LL(x) denotes the log likelihood that a cell comes from individual x, and S1 denotes a singlet containing a cell from individual 1, S2 denotes a singlet containing a cell from individual 2, and D12 denotes a doublet containing a cell from individual 1 and a cell from individual 2. We have already computed LL(D12) − LL(S1) and LL(D12) − LL(S2) as described above. Suppose we also are considering a third individual and have already computed LL(S1) − LL(S3) and LL(S2) − LL(S3). We can then compare the likelihood of the doublet D12 to the singlet S3: LL(D12) − LL(S3)=(LL(D12) − LL(S1)) + (LL(S1) − LL(S3)) = (LL(D12) − LL(S2)) − (LL(S2) − LL(S3)). We compute each such log likelihood ratio both ways and take the mean of the two (giving the log of the geometric mean likelihood ratio).

We use the same logic to compare each pair of doublet identities. In cases where the two doublet identities share a member, there is one way to compute the log likelihood ratio, by subtracting the log likelihood ratio of each doublet versus the shared member singlet: LL(D12) − LL(D13) = (LL(D12) − LL(S1)) − (LL(D13) − LL(S1)). When the two doublets do not share a member, there are four ways to compute the log likelihood ratio, taking advantage of the log likelihood ratios already computed between doublets that share a member:

LL(D12)−LL(D34)=
(LL(D12)−LL(D13))+(LL(D13)−LL(D34))=
(LL(D12)−LL(D23))+(LL(D23)−LL(D34))=
(LL(D12)−LL(D14))+(LL(D14)−LL(D34))=
(LL(D12)−LL(D24))+(LL(D24)−LL(D34))=

We compute these log likelihoods each way and take the mean of all four estimates.

All log likelihood ratio computations described above leave us with a table of comparisons between each pair of candidate identities, which still needs to be transformed into a single most likely identity. To accomplish this, we find the comparison giving the largest-magnitude log likelihood ratio in the table and eliminate the identity deemed less likely by this comparison (if there are multiple log likelihood ratios of equal magnitude, we eliminate all of their less-likely identities). We then repeat this process until there are only two possible identities left; the likelier of the two identities is taken as the true identity, and the final remaining log likelihood ratio, which describes the degree of preference for the likeliest over the second likeliest identity, is reported as a measure of assignment confidence.

In practice, the table of all pairwise log likelihood ratio comparisons can become very large when there are many individuals in the reference panel, due to the existence of nk possible doublet combinations when there are n individuals. To remedy this, after we compute all log likelihood ratios for singlet/singlet comparisons, we eliminate from consideration all but the ten likeliest individuals. This limits the number of potential doublet identities under consideration to 45 and greatly improves performance when there are many individuals in the genotype reference panel.

At this point, assignments can still be inaccurate if the initial values of εR and εA were inaccurate. This might be the case if many genotype calls were incorrect, or if there is a high amount of ambient RNA contamination. To account for this, we first assign each cell an identity using the initial values of εR and εA and then re-infer these parameters from the data, conditional on the first-round assignments. We accomplish this by maximizing the un-normalized posterior log probability density of each cell’s reference and alternate allele counts under the binomial distribution, using the initial εR and εA values as means of normally distributed priors, with standard deviation values that can be supplied by the user (and decreased to minimize the influence of the data on the posterior estimates). We compute posterior estimates using the L-BFGS algorithm for numeric optimization, with prior estimates as initial guesses. We also constrain both variables to the domain (0,1) by applying the logistic transformation to both, and then maximizing the probability density of the back-transformed variables.

With the maximum a posteriori estimates of εR and εA, we re-visit each cell and compute a final assignment and log likelihood ratio; these are all written to disk together with some summary statistics and the allele count data, which can then be used to profile ambient RNA by CellBouncer’s quant_contam program.

Genotype refinement

The CellBouncer MT-to-VCF pipeline involves finding variants that segregate among individuals using cell-individual assignments that may be unreliable, e.g., when two mitochondrial haplotypes differ by a single segregating site, identifications can hinge on a small number of reads overlapping that site. Additionally, when labeling reads in the BAM by individual of origin prior to variant calling, we only make use of singlet identifications, although doublets can comprise a significant proportion of the data when loading density is high. This can result in some noise in the variant calls that are used to re-identify cells. To address this, we developed a program, utils/refine_vcf, that updates a set of genotypes to maximize the likelihood of the read data and cell-individual assignments. The resulting genotype calls can then be used for another round of assignment using demux_vcf (or any alternative program), which can improve accuracy.

Whereas demux_vcf sums reads per cell across all SNPs of a given allelic state, utils/refine_vcf sums reads across all cells per identity for a given SNP, summing each read’s probability of being correctly mapped (1−10−MAPQ10) rather than counting each read as 1. Then, for each SNP, it re-infers genotypes by maximum likelihood, using a binomial model and the L-BFGS algorithm.

When re-genotyping an SNP, we infer genotypes for any individuals where the genotype was non-missing in the input SNP set, or where at least 1 total read count was observed either from cells assigned to singlets of the individual, or from cells assigned to at least two different doublet combinations involving the individual. Because L-BFGS is a continuous optimization algorithm, we infer maximum likelihood alternate allele frequencies rather than discrete genotypes. The initial guess for each alternate allele frequency is the genotype in the input file (if non-missing) or the number of alternate alleles divided by alternate plus reference alleles across all identities where the individual is present (both singlets and doublets). We constrain each allele frequency to lie in the range (0,1) by applying the logistic transformation and computing the log likelihood using the back-transformed (expit) values.

We then compute the likelihood of each pair of reference and alternate alleles as lBinom(r + a, a, p), where lBinom(n, k, p) is the log binomial likelihood of k successes in n trials with probability p, r is the reference allele count, and a is the alternate allele count. If a cell is a singlet, then p is the alternate allele frequency in its individual of origin, and if it is a doublet, p is the mean of the alternate allele frequencies in the two component individuals. After inferring the maximum likelihood allele frequency in each donor, we convert these to discrete genotypes by rounding to the nearest 0.5 and assigning 0 to homozygous reference, 0.5 to heterozygous, and 1 to homozygous alternate. Only sites for which we infer more than one genotype across all individuals are included in output, and variant quality values in the output data are preserved from the input file.

Because some variant sites reflect sequencing and alignment errors rather than true sequence polymorphism, we also added an optional filtering step to remove sites where the allele count data does not agree well with the maximum likelihood genotypes. After re-inferring all genotypes, we count the total number of expected reference and alternate alleles at the site. To this end, denoting the expected total alternate allele count as A and the expected total reference allele count as R, we visit each individual with a non-missing genotype and add (r + a) × g to A and (r + a) × (1 − g) to R, where r is the reference allele count for that individual, a is the alternate allele count for that individual, and g is the fraction of the individual’s chromosomes expected to have the alternate allele (g = 0 for homozygous reference, g = 0.5 for heterozygous, and g = 1 for homozygous alternate). We then compute the expected alternate allele fraction at the site p, using a pseudocount of 1 to prevent p = 0 or p = 1: p = (A + 1)/(R + A + 2). We then compute the two-tailed binomial p-value of the observed total number of reference alleles at the site, given the total observed reference plus alternate alleles (counting reference and alternate alleles only for individuals with non-missing genotypes) and p. Sites with this p-value below a user-supplied threshold are removed from the set of variants.

Mitochondrial haplotype clustering

The first step of mitochondrial demultiplexing is to locate candidate variant sites on the mitochondrial genome. These will inevitably include some examples of sequencing error or mis-aligned reads in addition to true variant sites. Our method identifies mitochondrial sites where at least two alleles appear in the pileup, takes the two most common alleles at each such site, and sorts these in decreasing order of minor allele frequency (MAF), so that the sites most likely to be true SNPs appear first.

At this step, we then apply an optional minimum coverage threshold. The threshold is determined by creating a histogram of the number of sites that would pass every possible candidate minimum coverage threshold, and then finding a relatively low threshold that would exclude many low-coverage sites by finding the “knee” point of this histogram. We took the knee to be the point of maximum curvature, where curvature is defined by k=|y″(x)|(1+(y′(x))2)32. We calculate derivatives using the slopes of line segments between points, assigning the derivative at each point to the mean of the slope of the two adjacent line segments, and then smooth values by averaging each with the value before and after it. We apply the same smoothing to the curvature values. We also require that the chosen filter does not exclude more than 25% of the data.

Next, we readthrough the BAM and store the major and minor allele count at each candidate SNP seen in reads for every cell barcode, skipping non-primary alignments. Importantly, we include all cell barcodes, even if a list of filtered cell barcodes corresponding to true cells is available. This is because high-quality cell barcodes tend to have few mitochondrial reads, and the mitochondrial reads from droplets uninformative for RNA-seq analyses can still be informative for mitochondrial clustering. Next, we assign each cell barcode the major allele, minor allele, or missing data at each candidate SNP as follows: first, compute

A=lBinom(M+m,m,0.001)
B=lBinom(M+m,m,0.999)
C=lBinom(M+m,m,0.5)

where M is the major allele count in the cell, m is the minor allele count in a cell, and lBinom(n, k, p) is the log binomial likelihood of k successes in n trials with probability p. The cell is assigned the major allele at the site if A > B & A > C, the minor allele if B > A & B > C, and missing data otherwise (or if M = m = 0). We also track the sums of B and C per site, for all cells not assigned the major allele. After all cells are processed, if for any site ∑C ≥ ∑B, then we take this to mean that the overall evidence that the site is erroneous and does not behave like a biallelic SNP outweighs the evidence that it does, and the site is eliminated.

The variable coverage in RNA-seq data also leads to high numbers of SNPs with missing data in individual cells. To confront this issue, we made use of the fact that true mitochondrial clades are often defined by multiple mutations that arose on the same branch of the phylogeny. This manifests in our model as multiple minor alleles that are shared by approximately identical groups of cells (but missing in some cells). We reasoned that if we could share information across these linked sites, effectively collapsing multiple co-varying SNPs into groups, we could share information across cells and overcome some of the challenge posed by missing sites. To accomplish this, when we are comparing two sites and A denotes the set of cells with the minor allele at the first site (with higher MAF) and B denotes the set of cells with the minor allele at the second site (with lower MAF), we compute the following:

ll1=lBinom(|A|,|B|,0.001)
ll2=lBinom(|A|,|B|,0.5)
ll3=lBinom(|A|,|B|,0.999)

Then, if ll1 > ll2 & ll1 > ll3, then the sites have such different MAFs that the second site looks more like an error to the first site than a potential equivalent SNP, and we choose not to collapse the two. Otherwise, we go on to compute

a1=lBinom(|A|,|A∩B|,0.999)
a2=llBinom(|A|,|A∩B|,0.5)
a3=llBinom(|A|,|A∩B|,0.001)
b1=llBinom(|B|,|A∩B|,0.999)
b2=llBinom(|B|,|A∩B|,0.5)
b3=llBinom(|B|,|A∩B|,0.001)

If a1 > a2 & a1 > a3 and b1 > b2 & b1 > b3, then we take that as evidence that the number of cells common to both groups is approximately equal to both groups separately, and we collapse the SNPs into a single group. This is done repeatedly until there are no more SNPs to collapse, allowing groups to contain arbitrarily large numbers of SNPs.

Next, we compile two sets for each SNP group: cell barcodes with the major allele and cell barcodes with the minor allele. If any SNP group has zero cell barcodes in one of these two sets, it is eliminated. For those remaining, the size of the set of cell barcodes with the minor allele for the SNP group serves as the minor allele frequency of the SNP group; we sort SNP groups in decreasing order of this set size.

We then iteratively construct haplotypes by including SNP groups in decreasing order of MAF, and inferring the number of true haplotypes at each step, as follows.

  • SET num_true_haps = −1

  • SET haplotypes = ∅

  • FOR group in SNP_groups:

  •   SET maj = cells with major allele at SNP group

  •   SET min = cells with minor allele at SNP group

  •   SET haplotypes_new = ∅

  •   IF first SNP group:

  •   haplotypes_new = [maj, min]

  •   ELSE:

  •   FOR haplotype in haplotypes:

  •   ADD (haplotype ∩ maj) to haplotypes_new

  •   ADD (haplotype ∩ min) to haplotypes_new

  •   ENDIF

  •   SET haplotypes = haplotypes_new

  •   SET num_true_haps_new = CALL compute_num_haps(haplotypes)

  •   IF num_true_haps_new < num_true_haps:

  •   BREAK

  •   ELSE:

  •   SET num_true_haps = num_true_haps_new

  •   ENDIF

  • ENDFOR

The program tracks groups of cell barcodes belonging to every potential mitochondrial haplotype, given the current set of SNPs. Haplotypes are only removed from consideration when their membership drops to zero. Since this will result in many of the potential haplotypes under consideration being inauthentic, and having counts of cells that reflect noise rather than true haplotype membership, the compute_num_haps routine is used to determine which cell counts reflect true mitochondrial haplotypes and which reflect noise.

  • ROUTINE compute_num_haps(haplotypes):

  •  SET sizes = numbers of cells belonging to each haplotype

  •  SORT sizes largest to smallest

  •  SET llmax = 0

  •  SET ntrue_max = -1

  •  FOR num_true from 1 to number of haplotypes:

  •  SET mean_true = mean of num_true largest sizes

  •  SET mean_false = mean of other sizes

  •  SET llsum = 0

  •  FOR size in sizes:

  •  IF size is among num_true largest sizes:

  •  ADD Poisson log likelihood(size, mean_true) to llsum

  •  ELSE:

  •  ADD Poisson log likelihood(size, mean_false) to llsum

  •  ENDIF

  •  ENDFOR

  •  IF ntrue_max is -1 OR llsum > llmax:

  •  SET llmax = llsum

  •  SET ntrue_max = num_true

  •  ELSE IF ntrue_max is not -1 AND llsum < llmax:

  •  BREAK

  •  ENDIF

  •  ENDFOR

  •  RETURN ntrue_max

  • END ROUTINE

After running this algorithm, we are left with a set of candidate mitochondrial haplotypes. We define a method similar to that used by demux_vcf for assigning a cell to a mitochondrial haplotype: for each pair of haplotypes, we find all sites that differ between the two haplotypes. For each such site, we take the major allele count M and minor allele count m in the cell and perform a likelihood ratio test:

LLR=lBinom(M+m,m,p1)−lBinom(M+m,m,p2)

Where lBinom(n, k, p) is the log binomial PDF of k success in n trials with probability p, p1 is the expected minor allele fraction in the first haplotype, and p2 is the expected minor allele fraction in the second haplotype (0.001 if a haplotype has the major allele and 0.999 if it has the minor, or 0.5 if considering a doublet with both the major and minor allele). We then sum the LLR for each such comparison and enter it into a two-way log likelihood ratio table between each candidate set of identities. Our program optionally takes a prior probability of doublet identities, which is incorporated into LLRs between singlet and doublet identities. We iteratively remove the least likely identity from the table until only one comparison remains; this comparison tells us the true identity and the assignment LLR, or confidence in the assignment of that identity.

After obtaining the set of candidate mitochondrial haplotypes that maximizes the number of inferred haplotypes and assigning all cells to their likeliest haplotype, there remains an issue to solve. There is a risk of having added too many SNPs: if an erroneous SNP is added, it can scramble existing mitochondrial haplotypes, shrinking the membership of each and resulting in the compute_num_haps routine inferring a higher number of clusters (the routine assumes that all true clusters will have counts coming from the same distribution; if true cluster sizes shrink to the point where they are similar to the sizes of erroneous clusters, true and erroneous clusters will be counted together as true).

To account for this, we first sum all assignment LLRs, to have a measure of the overall confidence of all cell-haplotype assignments across the dataset. We then walk backwards through all added SNP groups, lowest to highest MAF, and for each, exclude the SNP group from all haplotypes, re-assign all cells to the modified haplotypes, and compute the new total summed assignment LLR. We repeat this process while the summed assignment LLR increases; we count as final the set of SNPs and haplotypes that maximizes summed assignment LLR.

Our rationale here is that many erroneous sites will not segregate at the same frequencies as true mitochondrial SNPs (0% or 100% within every cell). Additionally, the inclusion of erroneous sites will “break up” true mitochondrial haplotypes into multiple erroneous haplotypes; each haplotype will only be distinguishable from the other using these erroneous SNPs. This will decrease assignment LLRs: the difference in log likelihood of a cell belonging to one of the other erroneous haplotype will depend only on data from the erroneous site, for which there will be few reads.

Ambient RNA inference

CellBouncer’s ambient RNA profiling tool, quant_contam, considers rates at which cells mismatch expected allele frequencies and is thus sensitive to the accuracy of the cell-individual assignments from demux_vcf.

The model used by quant_contam assumes that any individual cell’s reference and alternate allele counts at a given type of SNP are a weighted sum of draws from two binomial distributions: one representing ambient RNA and one representing the cell’s true identity. If R is the observed reference allele count and A is the observed alternate allele count, then

P(R,A)∼Binomial(R+A,A,(1−c)fe+cfc)

Where Binomial(n, k, p) is the binomial distribution with k successes in n trials with success probability p. In this parameterization, c is the fraction of the cell’s transcripts originating from ambient RNA, fe is the expected rate of alternate allele matching at SNPs of a given type in endogenous RNA, conditional on the cell’s identity, and fc is the rate of alternate allele matching at SNPs of the same type in ambient RNA. Both fc and fe are adjusted to reflect sequencing error rates, which are user-adjustable parameters set to 0.001 by default.

To adjust the alternate allele matching frequencies to account for sequencing error, we use the formulae

fe=fe0−fe0εA+(1−fe0)εR
fc=fc0−fc0εA+(1−fc0)εR

Where εR is the rate at which reference alleles are misread as alternate alleles and εA is the rate at which alternate alleles are misread as reference alleles (both of these error rates are also inferred by demux_vcf as part of the process of assigning cells to individual identities).

The value fe0 is the expected alternate allele frequency at SNPs of a given type, given a cell’s identity, before adjusting for sequencing error. In other words, if a cell comes from donor_1 and R and A are measured at SNPs where donor_1 is heterozygous, then fe0 = 0.5. Conversely, if the cell is a doublet of donor_1 and donor_2 and R and A are measured at SNPs where donor_1 is homozygous for the alternate allele and donor_2 is heterozygous, then fe0 = 0.25. For cells assigned singlet identities, we consider three types of SNPs: those for which the donor is homozygous for the reference allele, homozygous for the alternate allele, or heterozygous. For doublet cell barcodes, we consider all combinations of SNP types in the two component individuals (i.e., 9 types of SNPs based on combinations of three possible allelic states per component individual). Henceforth, we will refer to the types of SNPs relevant to ambient RNA inference when considering a particular cell barcode as the cell barcode’s set of “relevant SNP types.”

The value fc0 is the expected alternate allele frequency in ambient RNA, which is itself a function of each individual’s contribution to the ambient RNA pool. To compute this value, we first visit the genotype data to learn the expected alternate allele frequency in each individual conditional on the allelic state of an SNP in every other individual. This gives us what can be conceptualized as a matrix of conditional alternate allele frequencies M, with indices i, j, and k. Indices i and j together denote types of SNPs (i indexes an individual and j is a number between 0, 1, and 2 that describes a genotype by denoting the number of alternate alleles in individual i) and k denotes the individual for which Mi,j,k gives the expected alternate allele frequency at SNPs with the allelic state given by i and j. Each Mi,j,k is computed directly from the VCF, skipping sites where either individual is missing a called genotype. When i = k, entries denote expected matching allele frequencies based on the genotype j; e.g., Mi,1,i = 0.5 since j = 1 denotes heterozygous SNPs (one alternate allele). These values are computed by demux_vcf and written to a file with the extension “.condf.”

We also define a vector P, with one entry for each individual in the dataset. Each entry Pk gives the proportion of ambient RNA originating from individual k, with the constraints that.

0 < Pk < 1 for every individual and (if there are n individuals in the dataset) ∑k=1nPk=1 (P can be thought of a multinomial distribution over the proportions of individuals in the ambient RNA pool).

With these values, we can compute each value of fc0. For SNPs that have j alternate alleles in individual i:

fc0=∑k=1nPkMi,j,k

When considering cells with doublet identities, we need to group SNPs by their allelic state in two individuals instead of one. In these cases, for SNPs that have j alternate alleles in individual i and y alternate alleles in individual x:

fc0=∑k∉(i,x)(12Pk(Mi,j,k+Mx,y,k))+PiMi,j,i+PxMx,y,x

The strategy used by quant_contam is to start with an initial guess of the global contamination rate and infer from it the likeliest mixture of contaminant individuals that could have produced the observed allele matching patterns given the global contamination rate. It then does one round of refinement: it reinfers the global contamination rate conditional on the individual mixture proportions (and resulting alternate allele frequencies in ambient RNA at every type of SNP), then reinfers the mixture proportions conditional on the updated global percent ambient RNA estimate. It then infers the maximum likelihood percent ambient RNA per cell twice, using the first round results as an Empirical Bayes prior. Finally, cell identities are reinferred using the global contamination rate and ambient RNA profile, and this whole process is iterated until the overall log likelihood converges.

At the end of this process, users can provide a gene-expression matrix and cell cluster assignments (or the program can use individual identities as clusters), and quant_contam models the expression of every gene in every cell as a mixture of a multinomial distribution representing cluster-specific endogenous gene expression, and another representing gene expression in ambient RNA, with the proportion coming from ambient RNA equal to that cell’s already-inferred percent ambient RNA. Finally, quant_contam subtracts counts expected to come from ambient RNA from the gene-expression matrix.

As a first step, CellBouncer must compute an initial guess for the global contamination rate. To this end, we first compute the weighted mean reference and alternate allele count at every type of SNP, given every identity. In other words, for every cell identity in a dataset, we compute the mean alternate allele fraction at every type of SNP across all cells for which the SNP type is relevant. When computing means, each cell is weighted by the confidence of its identity (the assignment log likelihood ratio from demux_vcf), divided by the sum of the confidence of all cells assigned to that identity. We then compare each mean observed alternate allele fraction fobs to its expected value given the cell identity for the SNP type fexp (for example, for SNPs homozygous in individual 1, fexp = 0.5 – 0.5εA + 0.5εR). Considering our model, fobs corresponds to AR+A and fexp corresponds to fe, and we wish to estimate c without knowledge of fc. At this stage, for each SNP type, we choose a fc to get a lower bound on c: if fobs > fexp, then c is minimized when fc = 1, and if fobs < fexp, then c is minimized when fc = 0. Using this idea, we compute c using each weighted mean alternate allele frequency at each SNP type as follows:

If fobs > fexp, then c=fobs−fexp1−fexp, and otherwise c=fobs−fexp−fexp.

After computing a minimum c this way for each cell, we then compute a weighted mean minimum c value for each identity in the dataset. We consider these values to reflect both the true, global contamination rate c and the makeup of ambient RNA: the mean c for an identity depends both on the contamination rate and the proportion of contamination made up of RNA from other identities. In other words, if ck is the weighted mean minimum c estimate for cells assigned identity k, Pk is the proportion of ambient RNA originating from identity k, and c is the true global ambient RNA contamination rate, then for each k, ck = c(1 − Pk). By combining these estimates across individuals, we can estimate c and each Pk:

ck=c(1−Pk)
∑k=1nck=c(∑k=1n(1−Pk))=c(n−∑k=1nPk)

Since ∑k=1nPk=1 by definition, we can calculate c=(∑k=1nck)/(n−1). We can then calculate each Pk as Pk = 1 − ck/c. These estimates serve as initial guesses for the optimization problems detailed below.

We then infer the individual mixture proportions P by maximum likelihood, using the initial guesses for each, and the initial guess for c. To accomplish this, we consider every cell’s reference and alternate allele count at all relevant SNPs. To handle the constraints on the entries in P, we store a vector of logistic-transformed variables: Pk′=logPk1−Pk and operate on the back-transformed variables divided by the sum of all back-transformed variables: Pk″=(11+e−P′k)∑k(11+e−P′k). This transformation ensures that every value remains between 0 and 1 and that the sum of all values equals 1. We obtain a maximum likelihood solution using the L-BFGS algorithm117 for numeric optimization.

The last time we infer the P vector, we bootstrap all observed read count values (100 times by default) and infer P in each bootstrap trial, fitting a Dirichlet distribution to all inferred P vectors by maximum likelihood. The maximum likelihood Dirichlet concentration parameters are written to disk as the final column in the “.contam_prof” file, which allows us to compute significance when comparing these mixture proportions to any other set of proportions (from cell identities, bulkprop output, or another ambient RNA profile).

Next, we compute from the maximum likelihood P entries the value of fc at every type of SNP, then infer a better estimate of the global contamination rate c using these values, using Brent’s method for numeric optimization with first derivative information118 with c logistic-transformed to constrain it to the range (0,1). We then repeat the last step and re-infer P using the improved estimate of c.

Next, we infer cell-specific estimates of c using the fc values derived from the maximum-likelihood entries in P, using Brent’s method for optimization with first derivative information. After doing this once, we compute the mean and the variance of all cell-specific c estimates, fit a beta distribution using the method of moments, and use this as an Empirical Bayes prior in a second round of cell-specific maximum a posteriori c inferences, to avoid producing outlier c values in cells with low read counts.

With inferred ambient RNA parameters in hand, we then attempt to re-identify cells whose maximum likelihood identity changes with knowledge of the ambient RNA profile. This is achieved using the global c estimate and the same procedure and allele counts as in demux_vcf, but adjusting expected alternate allele matching rates using fc for each SNP type and the global c. After re-identifying a cell, we also infer a new maximum a posteriori c for that cell, using its new identity and the same beta prior distribution as before. If the likelihood of the cell’s new identity and contamination rate exceeds that of its old identity and contamination rate, the cell’s identity and contamination rate are updated.

Because extensive contamination can significantly bias cell-individual assignments in a way that can alter the global doublet rate (e.g., high contamination mostly originating from a single individual might make many cell barcodes falsely appear to be doublets of their true identity and the contaminant individual), we have also built in a way for users to specify an expected fraction of doublets, which is factored into the re-identification process. If the user provides an expected doublet fraction, we first compute the total proportion of cell identities belonging to each individual (singlet identities count twice, and doublet identities count as one of each identity). We name this vector R, where Ri is the fraction of all cell identities belonging to individual i. We also compute the count of each cell identity in the dataset and the total number of cells t. If the user-provided expected doublet rate is d, then the expected fraction of cells that should be identified as singlets containing cells from individual i is (1−d)Ri+dRi2, reflecting both true singlets of individual i and doublets containing two cells from that individual. Likewise, doublets containing one cell from individual i and one from individual j should occur at a rate of 2dRiRj. This model is the same used by doublet_dragon when inferring d. Denoting the expected rate at which a given identity should occur in the dataset as p, we can compute a prior likelihood of an identity as Binomial(t, n, p) where n is the number of cells with that identity. These prior likelihoods are then incorporated into the log likelihood ratio comparisons computed by demux_vcf, where they influence the relative likelihood of choosing one over another identity.

Once cell identities are re-inferred, we compute the log likelihood of the entire dataset under the model and inferred parameters. We then iterate all steps described thus far, using the newly re-inferred cell identities and the latest global estimate of c in place of the initial guess for c, until the log likelihood converges. At this point, quant_contam writes the P vector to disk with the extension “.contam_prof,” as well as each estimate of c and its Laplace approximation standard error.

If the user also supplies a gene-expression matrix, quant_contam can use its inferred per-cell contamination rates and P vector to compute an ambient RNA gene-expression profile and remove the effect of the ambient gene counts from the matrix. For this procedure, we model every cell’s gene expression as originating from a mixture of two multinomial distributions, similar to DecontX28: an endogenous cluster-specific gene-expression distribution and another representing ambient RNA. In our case, each cell’s c inferred from the allele count data tells us the weight of the ambient distribution versus the endogenous distribution in each cell. We accept external cell-cluster assignments, or in their absence, we assume gene expression to be consistent within each individual and treat cell-individual assignments as clusters.

We initialize the ambient expression profile to a weighted average of gene expression in all individuals, with each individual contributing to the ambient profile proportional to its weight in ambient RNA in the P vector. We then initialize the endogenous expression profile in each cluster (or individual identity) to the mean across all cells belonging to the cluster or identity. We then jointly infer the fraction of ambient expression originating from each gene, and the fraction of expression in each cluster/identity originating from each gene, by maximizing the multinomial log likelihoods of all distributions, constraining all parameters so that each distribution sums to one as described earlier (in reference to inferring the P vector).

After inferring the parameters of the ambient and endogenous gene-expression profiles, we write each to disk as a file with the extension “.gex_profile.”

The final step performed by quant_contam is to remove gene counts expected to have come from ambient RNA from the single-cell expression matrix. The sparseness of single-cell expression matrices pose a problem for this task: since many genes inferred to be present in ambient RNA will have zero counts in individual cells, simply multiplying a cell’s total count by the ambient gene-expression vector and subtracting these values from the cell’s counts will either result in negative values, or if counts are constrained to be positive, will not remove enough counts to account for the contamination rate inferred through allele mismatching. To get around this, we use the following algorithm to decontaminate each cell’s gene counts in the expression matrix.

  • SET candidate_remove = ∅

  • SET counts_to_remove = cell count total ∗ cell contamination fraction

  • FOR (gene, count) in nonzero gene counts:

  •  SET num_remove = ambient gene prop ∗ counts_to_remove

  •  SET count_after_removal = count – num_remove

  •  ADD (count_after_removal, gene) to candidate_remove

  • ENDFOR

  • SET stop = FALSE

  • WHILE not stop:

  •  SORT candidate_remove BY count_after_removal lowest to highest

  •  WHILE first count in candidate_remove <= 0:

  •  SET (first_count, first_gene) = candidate_remove[0]

  •  SET counts_to_remove = counts_to_remove – count of first_gene

  •  DELETE candidate_remove[0]

  •  ENDWHILE

  •  FOR (count_after_removal, gene) in candidate_remove:

  •  SET num_remove = ambient gene prop ∗ counts_to_remove

  •  SET count_after_removal = gene count – num_remove

  •  ENDFOR

  •  IF all counts in candidate_remove are positive:

  •  SET stop = TRUE

  •  ENDIF

  • SET output_expression_matrix = ∅

  • FOR (count_after_removal, gene) in candidate_remove:

  •  ADD (gene, count_after_removal) to output_expression_matrix

We also provide an option, similar to that in SoupX,27 to round output counts to integers randomly in a way that results in the appropriate number of read counts being removed. In other words, for each count, we take the fractional part of the count above the nearest whole number, and we round up with a probability equal to this number, or down otherwise. This is necessary to achieve the correct number of eliminated reads, e.g., if there are many counts of 10.5, simple rounding will change all of these counts to 11, resulting in too many reads in the aggregate, whereas this strategy will randomly round half of these numbers to 10 and half to 11.

Bulk proportions

Our bulk proportion inference tool uses only genotype data for SNPs at which there are no missing individuals. It traverses the input BAM file and counts observed reference (R) and alternate alleles (A) observed in every cell at these SNPs and uses the following model:

P(R,A)∼Binomial(R+A,A,∑i=1npifi)

Where Binomial(n,k,p) denotes the log binomial probability density function for k successes in n trials with success probability p. In this parameterization, i indexes individuals, n is the total number of individuals in the dataset, and each pi is an unknown variable that describes the fraction of the reads that originated from individual i. Like the P vector in our ambient RNA inference tool, each pi is constrained through variable transformation to lie in the range (0,1) and we require that ∑i=1npi=1. Each fi is the expected alternate allele frequency at the SNP in individual i (which is knowable from the genotype data). Unlike demux_vcf and quant_contam, in which we introduce two sequencing error rates, we model only one error rate here, ε, which is the rate at which any allele is misread as any other. This leads to the following values for fi depending on the individual’s genotype:

  • Homozygous for the reference allele: ε

  • Heterozygous: 0.5

  • Homozygous for the alternate allele: 1 − ε

Users may provide their own value for ε, or it can be estimated from the data. In the latter case, since our model assumes that all SNPs are biallelic, we track the number of reads that harbor alleles at SNPs that do not match either the reference or alternate allele, x, and the total number of reads covering SNPs in the panel, t. We treat these non-reference and non-alternate alleles as all being the result of sequencing error and set ε = x/t. In practice, we find that ε estimated this way is generally on the order of 0.001, which is expected if it mostly describes sequencing error.

Once all allele counts have been compiled, we obtain maximum likelihood estimates for all pi values using the L-BFGS algorithm. By default, we set initial guesses for all pi to 1n, but we provide the option to re-infer maximum likelihood parameters randomly a number of times, using random initial guesses, and to report the highest-likelihood of all these maximum likelihood solutions. This can help avoid reporting local rather than global maximum likelihood solutions.

We also provide the option to bootstrap results by resampling SNPs with replacement and fitting a Dirichlet distribution to the set of all bootstrapped maximum likelihood mixture proportions. This allows us to describe the variance of the maximum likelihood estimates, which in turn allows for the computation of statistical significance of differences between multiple sets of mixture proportions. We achieve this using the same strategy as described in the section about inferring the P vector when modeling ambient RNA, and Dirichlet concentration parameters, if inferred, are reported as the final column in the output “.bulkprops” file.

Bulk proportion comparison

If users wish to compare two sets of individual proportions, we provide an R program called compare_props.R that can find statistically significant differences between two sets of proportions, as long as one has been bootstrapped to infer Dirichlet concentration parameters and can serve as a reference. We allow users to provide cell identifications as a test proportion set, from which mixture proportions are automatically calculated. For each individual in the dataset, we measure the probability of the null hypothesis that the individual’s proportion in the “test” (non-reference) set of proportions was generated by the distribution of proportions given by the reference set. To achieve this, we treat the Dirichlet distribution as a set of marginal beta distributions.

If the Dirichlet concentration parameter for individual i in the reference proportions is αi and there are n total individuals, then each individual proportion in the test set pi∼Beta(αi,∑j=1n(αj)−αi). We compute the two-tailed p-value of each pi using this distribution and then report FDR-corrected p-values for each individual proportion.

We also added an option to run bulkprops “in reverse;” given maximum likelihood mixture proportions from running bulkprops on a full dataset, the same program can compute the log likelihood of each input SNP under the consensus mixture proportions using the same model. We also add the option to summarize these log likelihoods by gene, mapping reads to genes using the GX and GN tags inserted by aligners like STAR41 and reporting mean log likelihood per gene. This can be used as a strategy to pinpoint genes that appear to have donors of origin different from the pool at large, e.g., the transcripts that make up ambient RNA. Care must be taken, however, not to overinterpret low log likelihood values reported for genes containing very few informative SNPs.

Custom tag and sgRNA assignment

Our method counts tags in reads for both sgRNA capture data and HTO data using the Edlib pairwise alignment C++ library,119 allowing a user-tunable number of mismatches set to 1 by default. For speed, each alignment is set up as a single global alignment between the sequence of interest in a read and a reference of all target sequences concatenated together, padded with runs of N between each sequence. The best match is computed from the position of the best alignment between these sequences. If the input data are sgRNA capture data, demux_tags also allows for variability in the position of the capture sequence in the reverse read by searching the entire read for capture sequences until 100 matches are found. After the 100th match, the most common position in the read at which matches were found is taken to be the position of all future sgRNA capture sequences in reads.

After counting tags in reads, our method fits a two-way mixture model consisting of a negative binomial distribution for the lower/background component and an exponential distribution for the upper component to the un-transformed counts of every tag. We chose an exponential distribution for the upper component of the mixture model based on the observation that means and standard deviations of foreground counts tended to be roughly equal; the high variance of the exponential distribution also reflects counts of foreground tags are sums of two random variables: the true “foreground” count of that tag and the background count of the tag originating from ambient tags.

At this step, we eliminate tags for which both fit distributions appear to represent background or ambient counts. To this end, we first calculate the “separation” between the two distributions for each tag as the cumulative distribution function (CDF) of the negative binomial distribution for the background tags evaluated at the mean of the foreground distribution. This number should be close to 1 for cleanly separated distributions. We then fit a two-component Beta mixture model to all separation values. We compute a similar “separation” metric here: if the CDF of the lower-mean Beta distribution evaluated at the mean of the higher-mean distribution is below 0.01, and the CDF of the higher-mean Beta distribution evaluated at the mean of the lower-mean distribution is above 0.99, then we infer that the distribution separation values are bimodal. This means that tags with low separation values (more likely under the low-mean than the high-mean distribution) likely have no true foreground counts; these tags are then removed. As a final filtering step, we fit a negative binomial distribution to the mean of all background-count distributions that survived filtering, and another negative binomial distribution to the mean of all foreground-count distributions that survived filtering. For any remaining tag, if the mean of its foreground distribution is more likely under the mean background distribution than the mean foreground distribution, then that tag is eliminated as well.

Once the mixture models are fit and filtered, we perform a filtering step for cells, if filtering is enabled or if analyzing sgRNA data. Any cell for which all tag counts are more likely under the background than foreground distribution is considered to be tag-negative and removed from analysis.

After this, we attempt to identify each cell. First, we compute the expected fraction of ambient RNA composed of each tag as fi=μi∑j=1n(μj), where μi is the background negative binomial distribution mean for tag i and n is the total number of tags. When identifying a cell, we then compute the fraction of its reads coming from each tag as pi=xi∑j=1nxj where xi is the count of tag i in the cell. Rather than consider all possible identities for every cell, which would be computationally intractable for high-MOI sgRNA capture data where one cell can be assigned many possible combinations of guides, we sort each tag by decreasing pi-fi, prioritizing tags by their degree of enrichment over the background distribution. We then consider the identity of the single most enriched tag, followed by a doublet of the most enriched tag along with the second most enriched tag, and continuing to consider a combination of the three, four, and more most enriched tags in the case of sgRNA data. Because we have sorted identities by decreasing enrichment over background, if we encounter a model with lower likelihood than the previous model considered, we stop looking and accept the model with the highest likelihood encountered thus far. If filtering is enabled or if analyzing sgRNA data, we also include a model representing only background counts; cells for which this is the likeliest model are considered tag-negative.

To build the models that are compared for each cell, we sought to predict expected fractions of all tags under each identity, conditional on the number of observed counts. To accomplish this, we simulate background counts for 1000 “cell” samples by randomly sampling one count from each background distribution for each simulated cell. We also take 1000 samples from each foreground distribution. For any given model, we fit a multinomial linear model to the simulated counts of the form (x1, x2, …, xn) ∼Multinomial(expit(a1c + b1), expit(a2c + b2), …, expit(anc + bn)), where c is the sum of all foreground tag counts for the model, expit(x)=exex+1, each a and b are unknown slope and intercept terms in the model, and constraining so that ∑i=1nexpit(aic+bi)=1. For example, if there are four types of tags Q, R, S, and T, then for the true identity R, we treat each row of (Q, R, S, T) counts as multinomially distributed, with parameters (p1,p2,p3,p4) that can be calculated as (expit(a1R + b1), expit(a2R + b2), expit(a3R + b3), expit(a4R + b4)). If considering doublets of R and S, then the parameters are determined by (expit(a1(R + S), b1), expit(a2(R + S) + b2), expit(a3(R + S) + b3), expit(a4(R + S) + b4)).

In the case of sgRNA capture data, the number of possible tags is less restricted, so we adopt a more constrained model that is more computationally feasible. Here, we sum all off-target tag counts into a single background tag count and do not attempt to predict the individual background tag counts using the linear model. In the case of the previous example, when considering the single tag R, we would use the model (R,Q + S + T) ∼ Multinomial(expit(a1R + b1), expit(a2R + b2)), and when considering the pair of tags R and S, we would use (R, S, Q + T) ∼ Multinomial(expit(a1(R + S) + b1), expit(a2(R + S) + b2), expit(a3(R + S) + b3). After predicting the fraction of overall background counts using this model, we then determine each expected individual fraction by multiplying this number by the expected background fractions computed earlier using the means of the fit negative binomial distributions.

Using our simulated counts, we also compute an expectation of foreground counts for the identity being considered by fitting a negative binomial distribution to the simulated foreground counts across all 1000 samples. If we observe tag counts (Q, R, S, T) in a given cell, we can then compute the log likelihood of identity Q as lMultinom((Q, R, S, T), (expit(a1Q + b1), expit(a2Q + b2)))+lNegBinom(Q, μQ, ϕQ), where lMultinom is the log multinomial PDF, lNegBinom is the log negative binomial PDF with the μ, ϕ (mean and dispersion) parameterization, each a and b was inferred by regression as explained in the last step, and μQ and ϕQ came from fitting a negative binomial distribution to 1000 simulated Q counts using the method of moments. Conversely, if we are assigning guide RNAs to cells, then the log likelihood would be computed as lMultinom((Q,R,S,T),(expit(a1Q+b1),expit(a2Q+b2)×f21−f1,expit(a2Q+b2)×f31−f1,expit(a2Q+b2)×f41−f1)))+lNegBinom(Q,μQ,ϕQ), where each f is the proportion of all background distribution means coming from a given distribution; these terms are adjusted to account for f1 being excluded from background due to the first tag (Q) being foreground under this model.

As a final step to aid in quality control, we also compute the percent of each cell’s tag counts originating from ambient tags, conditional on the cell’s identity after it has been determined as described above. Here, we define “background” slightly differently: before, each tag count is considered either “background” or “foreground,” meaning that foreground counts are actually the sum of a sample from a true background distribution and a true (but un-modeled) foreground distribution. In this step, we model each count as originating from a weighted sum of two multinomial distributions: one representing foreground and one representing background. We infer the mixing parameter m that determines the proportion of counts originating from the background distribution. If a cell has observed counts (Q,R,S,T) and was determined to be a singlet of identity Q, then we model (Q, R, S, T) ∼ Multinomial(mf1 + (1 − m), mf2, mf3, mf4), where the f vector is the expected background count distribution as described earlier. If the same cell is a doublet of R and S, we would instead model (Q,R,S,T)∼Multinomial(mf1,mf2+(1−m)g2g2+g3,mf3+(1−m)g3g2+g3,mf4), where the g vector is the same as the f vector but computed using the expectations of foreground exponential distributions, where gigi+gj gives the expected fraction of foreground reads originating from tag index i in a doublet of tags of index i and j. If λi is the mean of the foreground exponential distribution for tag index i, then gi=λi−1∑j=1nλj−1. Each m, once inferred, is written to a file where these values can be inspected by the user.

Doublet rate inference

We developed the tool doublet_dragon for inferring a consensus doublet rate, which encompasses homotypic as well as heterotypic doublets, from one or more types of CellBouncer-produced cell identifications. Doublet_dragon takes as input one or more CellBouncer-format.assignments files for the same dataset; any sets of cell identities that share members are taken to describe the same groups of identities. In other words, if the user has labeled individuals of origin using MULTIseq and is also identifying individuals of origin using genotype data, then the output of demux_tags and demux_vcf should describe the same cell identities. If the cell identities are given the same names in the output files, then doublet_dragon will recognize this and infer consensus proportions of those identities using information from both files. Conversely, if the labels from demux_tags and demux_vcf have different names for cell identities, then doublet_dragon will assume they describe different things (e.g., treatments versus cell identities). In this case, information in both files will inform the global doublet rate inference, but two different sets of pool proportions will be inferred. Doublet_dragon places individual identities into groups and infers the proportions within each group separately.

For each group of identities, CellBouncer assumes that the number of cells with each possible identity follows a binomial distribution as follows: for singlets, Ci∼Binomial(N,Ci,(1−d)pi+dpi2) where Binomial(n,k,p) is the binomial density of k successes in n trials with success probability p, Ci is the number of cells with singlet identity indexed by i, N is the total number of cells in the group, d is the global doublet rate, and pi is the probability of sampling identity i in the group. Note that our model assumes that cells identified as singlets are actually a combination of true singlets and homotypic doublets, invisible to the CellBouncer program that labeled the cells. For doublets of identity i and j, the model becomes Cij ∼ Binomial(N,Cij, 2dpipj). We then simultaneously infer d along with every p using L-BFGS. Since initial guesses can influence results by resulting in a local, rather than global, likelihood optimum, we set initial guesses for d to a grid of values between 0.05 and 0.95, spaced 0.05 apart, and accept the solution with the highest log likelihood.

Once we have inferred consensus parameters, we also compute the log likelihood of the observed counts in each input file under the consensus model. To this end, we compare the vector of observed counts of each cell identity to the vector of expected proportions under the model (singlets: fi=(1−d)pi+dpi2; doublets: fij = 2dpipj) using the multinomial distribution; we report the multinomial log likelihood, which can be useful for comparing likelihoods of different sets of identities computed from the same data.

Species demultiplexing benchmark

Comparing species proportions to expectation

After inferring species identities of cells in the unlabeled 10× Genomics human/mouse dataset,39 we counted identities and compared these counts to those expected given a 1:1 human:mouse pooling ratio and 5,000 recovered cells. To calculate the observed doublet rate, we divided the inferred number of human+mouse doublets (106) by the total number of cell barcodes CellBouncer identified as cell-positive (4628) times the probability of sampling a human and mouse cell in either order (0.5 × 0.5 × 2). We also performed a chi-squared goodness-of-fit test of our observed human (2284), mouse (2238), and human+mouse doublets (106) against expected numbers, given 4628 total cells, even species proportions, and a doublet rate of 0.04, using the chisq.test() function in R.

Ambient RNA profiling benchmark

Previously published gene list

We downloaded a list of genes found by a prior study33 to be highly expressed in ambient RNA and intersected this list with each of our inferred ambient expression vectors. We performed a series of two-sided Mann-Whitney U tests to compare the ambient expression vector loading from each program for genes not in the list against genes in the list, using the wilcox.test function in R with default parameters.

Composite cell data analysis

Ambient RNA inference comparison

To obtain an independent estimate of ambient RNA contamination per library, we ran bulkprops on each using the same genotype data. We then computed bulk proportions from our inferred cell-individual assignments. Because our libraries consisted of a single cell type likely to be uniform in RNA content, we reasoned that the discrepancy between cell-individual assignments and inferred bulk proportions could be explained as arising from ambient RNA. To get a rough estimate of ambient RNA contamination, we made the simplifying assumption that ambient RNA originated only from cell lines overrepresented in the bulkprops output compared to the cell assignments. Then, if bi is the fraction of bulk RNA originating from individual i according to bulkprops, ai is the fraction of bulk RNA originating from individual i according to cell-individual assignments from demux_vcf, c is the global contamination rate, and fi is the fraction of ambient RNA composed of individual i, then for each i where bi>ai, we assume the excess RNA must originate from cells not assigned to individual i:

bi−ai=(1−ai)cfi
cfi=(bi−ai)/(1−ai)

Since by definition, ∑i=1nfi=1, and ∑i=1ncfi=c∑i=1nfi, then ∑i=1n(bi−ai1−ai)=c.

We compared the per-cell ambient RNA estimates from each program in each library to estimates produced this way. We found ambient RNA profiles to be fairly consistent across the two technical replicates (Figure S17) and that CellBouncer’s per-cell contamination rate estimates were closer to mean values we estimated from the discrepancy between inferred bulk proportions and cell line assignments than per-cell contamination rate estimates from cellbender, DecontX, and SoupX (Figure S8). Contamination rate estimates from cellbender29 were tightly correlated to the number of genes detected per cell (Figure S18), suggesting a possible pitfall of using data from empty droplets to model ambient RNA.

Assigning mitochondrial haplotypes to cells

For details on how mitochondrial haplotype-specific read counts were obtained, see “counting mitochondrial haplotype-specific reads” under “method details” above.

To assign a mitochondrial haplotype to every cell using the allele-specific counts compiled by demux_mt with the -a option, we used version 0.15.0 of the Pomegranate mixture model fitting library92 with custom code to allow fitting beta-binomial distributions. For each set of allele-specific counts, we first assigned every gene in every cell to a distribution of origin using a mixture model. For inter-species allele-specific counts, we fit a three-way beta-binomial mixture model, with parameters initialized to (0.1, 9.9) (species 1 mitochondria), (5, 5) (both species mitochondria), and (9.9, 0.1) (species 2 mitochondria). We then summed the log probabilities of each gene belonging to each distribution, across cells, and assigned cells to identities by choosing the highest-probability distribution.

Intra-species allele counts were much lower than inter-species allele counts, owing to there being far fewer segregating SNPs between each pair of haplotypes. For this reason, we first summed allele counts across all genes for each cell before fitting distributions. We then split cells into groups by species, ensured each pair of allele counts had the higher count first, and fit a two-way mixture model representing cells with two mitochondrial haplotypes (initial parameters (10 × m, 10 × (1 − m))) and those with one mitochondrial haplotype (initial parameters (9.9, 0.1)), where m was the mean fraction of (individual 1 count)/(individual 1 count + individual 2 count) across all cells. We did this after realizing that many intra-species cells showed evidence for retaining two mitochondrial haplotypes, and that the allelic ratios of haplotypes often differed significantly from 0.5. After fitting the mixture model, we assigned each intra-species cell to both mitochondrial haplotypes, or to the mitochondrial haplotype with the higher read count, according to the probability obtained through fitting the mixture model.

Once all cells were assigned to one or more mitochondrial haplotype, we sought to assess our method’s reliability by also assigning cells known to be of human/human origin to human and/or chimpanzee mitochondrial haplotypes. Given prior literature, and our observation that human mitochondria are more common than chimpanzee mitochondria in human/chimpanzee composite cells, we sought to calculate the rate at which our method would need to falsely identify cells with only human mitochondria as having either only chimpanzee mitochondria, or human and chimpanzee mitochondria, if in fact all human/chimpanzee cells contain only human mitochondria.

Denoting cells that truly contain only human mitochondria as TH, cells that truly contain only chimpanzee mitochondria as TC, cells that truly contain both mitochondria as THC, cells labeled as having only human mitochondria as LH, cells labeled as containing only chimpanzee mitochondria as LC, and cells labeled as having both types of mitochondria as LHC, we defined our false discovery rate of interest as FDR = P(LHC|TH)+P(LC|TH). Using Bayes’s theorem:

P(LHC|TH)=P(TH|LHC)P(TH)P(LHC)
P(LC|TH)=P(TH|LC)P(TH)P(LC)
FDR=P(LHC|TH)+P(LC|TH)=P(TH)(P(TH|LHC)P(LHC)+P(TH|LC)P(LC))

We calculated P(LHC|TH) and P(LC|TH) by dividing the number of human/human cells assigned both human and chimpanzee mitochondria, or only chimpanzee mitochondria, by the total number of human/human cells, and we computed P(LHC) and P(LC) by dividing the total occurrences of those labels across all cells by the total number of cells. To discover the false discovery rate of interest, we set P(TH) = 1 to represent the possibility that our observation was wrong and all human/chimpanzee cells contain only human mitochondria.

According to our data, we misidentified 2.4% of human/human cells as having human and chimpanzee mitochondria and none as having chimpanzee mitochondria. Using the method above, we calculated that a false identification rate of 26.18% would be necessary to explain all of our results, if no human/chimpanzee cells truly inherited chimpanzee mitochondria.

Published: June 10, 2026

Footnotes

Supplemental information can be found online at https://doi.org/10.1016/j.xgen.2026.101275.

Contributor Information

Nathan K. Schaefer, Email: nkschaef@gmail.com.

Alex A. Pollen, Email: alex.pollen@ucsf.edu.

Supplemental information

Document S1. Figures S1–S18 and Tables S1–S8
mmc1.pdf (4.3MB, pdf)
Table S9. Gene Ontology enrichment for response to the presence of human and chimpanzee mitochondria in the same cell, related to Figure 6

Gene Ontology enrichment results using FUNC112 for genes significantly differentially expressed (adjusted p value <0.01) in human/chimpanzee composite cells with both human and chimpanzee mitochondria, compared to human/chimpanzee composite cells with only either human or chimpanzee mitochondria. FWER, family-wise error rate. Terms with FWER <0.05 are shown.

mmc2.xlsx (5.7KB, xlsx)
Table S10. Gene Ontology enrichment for response to the presence of chimpanzee and bonobo mitochondria in the same cell, related to Figure 6

Gene Ontology enrichment results using FUNC112 for genes significantly differentially expressed (adjusted p value <0.01) in chimpanzee/bonobo composite cells with both chimpanzee and bonobo mitochondria, compared to chimpanzee/bonobo composite cells with only bonobo mitochondria. FWER, family-wise error rate. Terms with FWER <0.05 are shown.

mmc3.xlsx (11.6KB, xlsx)
Table S11. Gene Ontology enrichment for genes responsive to the presence of allospecific mitochondria in the same cell in both human/chimpanzee and chimpanzee/bonobo composite cells, related to Figure 6

Gene Ontology enrichment results using FUNC112 for genes significantly differentially expressed (adjusted p value <0.01) in human/chimpanzee composite cells with both species’ mitochondria relative to those with one species’ mitochondria, and in chimpanzee/bonobo composite cells with both chimpanzee and bonobo mitochondria relative to chimpanzee/bonobo composite cells with only bonobo mitochondria. FWER, family-wise error rate. Terms with FWER <0.05 are shown.

mmc4.xlsx (5.3KB, xlsx)
Document S2. Article plus supplemental information
mmc5.pdf (8.5MB, pdf)

References

  • 1.Wei J., Lambert T.Y., Valada A., Patel N., Walker K., Lenders J., Schmidt C.J., Iskhakova M., Alazizi A., Mair-Meijers H., et al. Single nucleus transcriptomics of ventral midbrain identifies glial activation associated with chronic opioid use disorder. Nat. Commun. 2023;14:5610. doi: 10.1038/s41467-023-41455-8. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 2.Ruzicka W.B., Mohammadi S., Fullard J.F., Davila-Velderrain J., Subburaju S., Tso D.R., Hourihan M., Jiang S., Lee H.-C., Bendl J., et al. Single-cell multi-cohort dissection of the schizophrenia transcriptome. Science. 2024;384 doi: 10.1126/science.adg5136. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 3.Lee M.K., Azizgolshani N., Shapiro J.A., Nguyen L.N., Kolling F.W., Zanazzi G.J., Frost H.R., Christensen B.C. Identifying tumor type and cell type-specific gene expression alterations in pediatric central nervous system tumors. Nat. Commun. 2024;15:3634. doi: 10.1038/s41467-024-47712-8. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 4.Szabo P.A., Levitin H.M., Miron M., Snyder M.E., Senda T., Yuan J., Cheng Y.L., Bush E.C., Dogra P., Thapa P., et al. Single-cell transcriptomics of human T cells reveals tissue and activation signatures in health and disease. Nat. Commun. 2019;10:4706. doi: 10.1038/s41467-019-12464-3. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 5.Neavin D.R., Steinmann A.M., Farbehi N., Chiu H.S., Daniszewski M.S., Arora H., Bermudez Y., Moutinho C., Chan C.-L., Bax M., et al. A village in a dish model system for population-scale hiPSC studies. Nat. Commun. 2023;14:3240. doi: 10.1038/s41467-023-38704-1. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 6.Wells M.F., Nemesh J., Ghosh S., Mitchell J.M., Salick M.R., Mello C.J., Meyer D., Pietilainen O., Piccioni F., Guss E.J., et al. Natural variation in gene expression and viral susceptibility revealed by neural progenitor cell villages. Cell Stem Cell. 2023;30:312–332.e13. doi: 10.1016/j.stem.2023.01.010. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 7.Antón-Bolaños N., Faravelli I., Faits T., Andreadis S., Kastli R., Trattaro S., Adiconis X., Wei A., Sampath Kumar A., Di Bella D.J., et al. Brain Chimeroids reveal individual susceptibility to neurotoxic triggers. Nature. 2024;631:142–149. doi: 10.1038/s41586-024-07578-8. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 8.Popp J.M., Rhodes K., Jangi R., Li M., Barr K., Tayeb K., Battle A., Gilad Y. Cell type and dynamic state govern genetic regulation of gene expression in heterogeneous differentiating cultures. Cell Genom. 2024;4 doi: 10.1016/j.xgen.2024.100701. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 9.Jerber J., Seaton D.D., Cuomo A.S.E., Kumasaka N., Haldane J., Steer J., Patel M., Pearce D., Andersson M., Bonder M.J., et al. Population-scale single-cell RNA-seq profiling across dopaminergic neuron differentiation. Nat. Genet. 2021;53:304–312. doi: 10.1038/s41588-021-00801-6. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 10.Wallace J.L., Pollen A.A. Human neuronal maturation comes of age: cellular mechanisms and species differences. Nat. Rev. Neurosci. 2024;25:7–29. doi: 10.1038/s41583-023-00760-3. [DOI] [PubMed] [Google Scholar]
  • 11.Zhang J., Ubas A.A., de Borja R., Svensson V., Thomas N., Thakar N., Lai I., Winters A., Khan U., Jones M.G., et al. Tahoe-100M: A Giga-scale single-cell perturbation atlas for context-dependent gene function and cellular modeling. bioRxiv. 2025 doi: 10.1101/2025.02.20.639398. Preprint at. [DOI] [Google Scholar]
  • 12.Fair T., Pollen A.A. Genetic architecture of human brain evolution. Curr. Opin. Neurobiol. 2023;80 doi: 10.1016/j.conb.2023.102710. [DOI] [PubMed] [Google Scholar]
  • 13.Cuomo A.S.E., Nathan A., Raychaudhuri S., MacArthur D.G., Powell J.E. Single-cell genomics meets human genetics. Nat. Rev. Genet. 2023;24:535–549. doi: 10.1038/s41576-023-00599-5. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 14.Kang H.M., Subramaniam M., Targ S., Nguyen M., Maliskova L., McCarthy E., Wan E., Wong S., Byrnes L., Lanata C.M., et al. Multiplexed droplet single-cell RNA-sequencing using natural genetic variation. Nat. Biotechnol. 2018;36:89–94. doi: 10.1038/nbt.4042. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 15.Huang Y., McCarthy D.J., Stegle O. Vireo: Bayesian demultiplexing of pooled single-cell RNA-seq data without genotype reference. Genome Biol. 2019;20:273. doi: 10.1186/s13059-019-1865-2. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 16.Rogozhnikov A., Ramkumar P., Shah K., Bedi R., Kato S., Escola G.S. Demuxalot: scaled up genetic demultiplexing for single-cell sequencing. bioRxiv. 2021 doi: 10.1101/2021.05.22.443646. Preprint at. [DOI] [Google Scholar]
  • 17.Heaton H., Talman A.M., Knights A., Imaz M., Gaffney D.J., Durbin R., Hemberg M., Lawniczak M.K.N. Souporcell: robust clustering of single-cell RNA-seq data by genotype without reference genotypes. Nat. Methods. 2020;17:615–620. doi: 10.1038/s41592-020-0820-1. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 18.Xu J., Falconer C., Nguyen Q., Crawford J., McKinnon B.D., Mortlock S., Senabouth A., Andersen S., Chiu H.S., Jiang L., et al. Genotype-free demultiplexing of pooled single-cell RNA-seq. Genome Biol. 2019;20:290. doi: 10.1186/s13059-019-1852-7. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 19.Hartoularos G.C., Si Y., Zhang F., Kathail P., Lee D.S., Ogorodnikov A., Sun Y., Song Y.S., Kang H.M., Ye C.J. Reference-free multiplexed single-cell sequencing identifies genetic modifiers of the human immune response. bioRxiv. 2023 doi: 10.1101/2023.05.29.542756. Preprint at. [DOI] [Google Scholar]
  • 20.Stoeckius M., Zheng S., Houck-Loomis B., Hao S., Yeung B.Z., Mauck W.M., Smibert P., Satija R. Cell Hashing with barcoded antibodies enables multiplexing and doublet detection for single cell genomics. Genome Biol. 2018;19:224. doi: 10.1186/s13059-018-1603-1. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 21.Boggy G.J., McElfresh G.W., Mahyari E., Ventura A.B., Hansen S.G., Picker L.J., Bimber B.N. BFF and cellhashR: analysis tools for accurate demultiplexing of cell hashing data. Bioinformatics. 2022;38:2791–2801. doi: 10.1093/bioinformatics/btac213. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 22.Zhu Q., Conrad D.N., Gartner Z.J. deMULTIplex2: robust sample demultiplexing for scRNA-seq. Genome Biol. 2024;25:37. doi: 10.1186/s13059-024-03177-y. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 23.Klein H.-U. demuxmix: demultiplexing oligonucleotide-barcoded single-cell RNA sequencing data with regression mixture models. Bioinformatics. 2023;39 doi: 10.1093/bioinformatics/btad481. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 24.Xin H., Lian Q., Jiang Y., Luo J., Wang X., Erb C., Xu Z., Zhang X., Heidrich-O’Hare E., Yan Q., et al. GMM-Demux: sample demultiplexing, multiplet detection, experiment planning, and novel cell-type verification in single cell sequencing. Genome Biol. 2020;21:188. doi: 10.1186/s13059-020-02084-2. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 25.Bernstein N.J., Fong N.L., Lam I., Roy M.A., Hendrickson D.G., Kelley D.R. Solo: Doublet Identification in Single-Cell RNA-Seq via Semi-Supervised Deep Learning. Cell Syst. 2020;11:95–101.e5. doi: 10.1016/j.cels.2020.05.010. [DOI] [PubMed] [Google Scholar]
  • 26.Lun A.T.L., Riesenfeld S., Andrews T., Dao T.P., Gomes T., participants in the 1st Human Cell Atlas Jamboree. Marioni J.C. EmptyDrops: distinguishing cells from empty droplets in droplet-based single-cell RNA sequencing data. Genome Biol. 2019;20:63. doi: 10.1186/s13059-019-1662-y. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 27.Young M.D., Behjati S. SoupX removes ambient RNA contamination from droplet-based single-cell RNA sequencing data. GigaScience. 2020;9 doi: 10.1093/gigascience/giaa151. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 28.Yang S., Corbett S.E., Koga Y., Wang Z., Johnson W.E., Yajima M., Campbell J.D. Decontamination of ambient RNA in single-cell RNA-seq with DecontX. Genome Biol. 2020;21:57. doi: 10.1186/s13059-020-1950-6. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 29.Fleming S.J., Chaffin M.D., Arduini A., Akkad A.-D., Banks E., Marioni J.C., Philippakis A.A., Ellinor P.T., Babadi M. Unsupervised removal of systematic background noise from droplet-based single-cell experiments using CellBender. Nat. Methods. 2023;20:1323–1335. doi: 10.1038/s41592-023-01943-7. [DOI] [PubMed] [Google Scholar]
  • 30.Booth G.T., Daza R.M., Srivatsan S.R., McFaline-Figueroa J.L., Gladden R.G., Mullen A.C., Furlan S.N., Shendure J., Trapnell C. High-capacity sample multiplexing for single cell chromatin accessibility profiling. BMC Genom. 2023;24:737. doi: 10.1186/s12864-023-09832-1. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 31.Li T., Alvarez M., Liu C., Abuhanna K., Sun Y., Ernst J., Plath K., Balliu B., Luo C., Zaitlen N. The impact of ambient contamination on demultiplexing methods for single-nucleus multiome experiments. eLife. 2025;14 doi: 10.7554/elife.106769.1. [DOI] [Google Scholar]
  • 32.Replogle J.M., Norman T.M., Xu A., Hussmann J.A., Chen J., Cogan J.Z., Meer E.J., Terry J.M., Riordan D.P., Srinivas N., et al. Combinatorial single-cell CRISPR screens by direct guide RNA capture and targeted sequencing. Nat. Biotechnol. 2020;38:954–961. doi: 10.1038/s41587-020-0470-y. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 33.Caglayan E., Liu Y., Konopka G. Neuronal ambient RNA contamination causes misinterpreted and masked cell types in brain single-nuclei datasets. Neuron. 2022;110:4043–4056.e5. doi: 10.1016/j.neuron.2022.09.010. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 34.Nolbrant S., Wallace J.L., Ding J.W., Zhu T., Sevetson J.L., Kajtez J., Baldacci I.A., Corrigan E.K., Hoglin K., McMullen R., et al. Interspecies Organoids Reveal Human-Specific Molecular Features of Dopaminergic Neuron Development and Vulnerability. bioRxiv. 2025 doi: 10.1101/2024.11.14.623592. Preprint at. [DOI] [Google Scholar]
  • 35.Pollen A.A., Kilik U., Lowe C.B., Camp J.G. Human-specific genetics: new tools to explore the molecular and cellular basis of human evolution. Nat. Rev. Genet. 2023;24:687–711. doi: 10.1038/s41576-022-00568-4. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 36.Housman G., Briscoe E., Gilad Y. Evolutionary insights into primate skeletal gene regulation using a comparative cell culture model. PLoS Genet. 2022;18 doi: 10.1371/journal.pgen.1010073. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 37.Mereu E., Lafzi A., Moutinho C., Ziegenhain C., McCarthy D.J., Álvarez-Varela A., Batlle E., Sagar N., Grün D., Lau J.K., et al. Benchmarking single-cell RNA-sequencing protocols for cell atlas projects. Nat. Biotechnol. 2020;38:747–755. doi: 10.1038/s41587-020-0469-4. [DOI] [PubMed] [Google Scholar]
  • 38.Kamath T., Abdulraouf A., Burris S.J., Langlieb J., Gazestani V., Nadaf N.M., Balderrama K., Vanderburg C., Macosko E.Z. Single-cell genomic profiling of human dopamine neurons identifies a population that selectively degenerates in Parkinson’s disease. Nat. Neurosci. 2022;25:588–595. doi: 10.1038/s41593-022-01061-1. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 39.10× Genomics (2024). 5k 1:1 Mixture of Human HEK293T and Mouse NIH3T3 Cells, Chromium NextGEM Single Cell 3′. https://www.10xgenomics.com/datasets/5k-hgmm-3p-nextgem.
  • 40.Edenhofer F.C., Térmeg A., Ohnuki M., Jocher J., Kliesmete Z., Briem E., Hellmann I., Enard W. Generation and characterization of inducible KRAB-dCas9 iPSCs from primates for cross-species CRISPRi. iScience. 2024;27 doi: 10.1016/j.isci.2024.110090. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 41.Dobin A., Davis C.A., Schlesinger F., Drenkow J., Zaleski C., Jha S., Batut P., Chaisson M., Gingeras T.R. STAR: ultrafast universal RNA-seq aligner. Bioinformatics. 2013;29:15–21. doi: 10.1093/bioinformatics/bts635. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 42.10X Genomics (2021). 40k Mixture of NSCLC DTCs from 7 donors, 3′ HT v3.1. https://www.10xgenomics.com/datasets/40-k-mixture-of-nsclc-dt-cs-from-7-donors-3-ht-v-3-1-3-1-high-6-1-0.
  • 43.Ranzoni A.M., Tangherloni A., Berest I., Riva S.G., Myers B., Strzelecka P.M., Xu J., Panada E., Mohorianu I., Zaugg J.B., Cvejic A. Integrative Single-Cell RNA-Seq and ATAC-Seq Analysis of Human Developmental Hematopoiesis. Cell Stem Cell. 2021;28:472–487.e7. doi: 10.1016/j.stem.2020.11.015. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 44.Huang Y., Liu Y., Zheng C., Shen C. Investigation of Cross-Contamination and Misidentification of 278 Widely Used Tumor Cell Lines. PLoS One. 2017;12 doi: 10.1371/journal.pone.0170384. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 45.Horbach S.P.J.M., Halffman W. The ghosts of HeLa: How cell line misidentification contaminates the scientific literature. PLoS One. 2017;12 doi: 10.1371/journal.pone.0186281. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 46.Lorsch J.R., Collins F.S., Lippincott-Schwartz J. Fixing problems with cell lines. Science. 2014;346:1452–1453. doi: 10.1126/science.1259110. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 47.Heumos L., Schaar A.C., Lance C., Litinetskaya A., Drost F., Zappia L., Lücken M.D., Strobl D.C., Henao J., Curion F., et al. Best practices for single-cell analysis across modalities. Nat. Rev. Genet. 2023;24:550–572. doi: 10.1038/s41576-023-00586-w. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 48.Janssen P., Kliesmete Z., Vieth B., Adiconis X., Simmons S., Marshall J., McCabe C., Heyn H., Levin J.Z., Enard W., Hellmann I. The effect of background noise and its removal on the analysis of single-cell expression data. Genome Biol. 2023;24:140. doi: 10.1186/s13059-023-02978-x. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 49.Mas-Ponte D., Carlevaro-Fita J., Palumbo E., Hermoso Pulido T., Guigo R., Johnson R. LncATLAS database for subcellular localization of long noncoding RNAs. RNA. 2017;23:1080–1087. doi: 10.1261/rna.060814.117. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 50.Mitchell J.M., Nemesh J., Ghosh S., Handsaker R.E., Mello C.J., Meyer D., Raghunathan K., de Rivera H., Tegtmeyer M., Hawes D., et al. Mapping genetic effects on cellular phenotypes with “cell villages”. bioRxiv. 2020 doi: 10.1101/2020.06.29.174383. Preprint at. [DOI] [Google Scholar]
  • 51.Picelli S., Faridani O.R., Björklund Å.K., Winberg G., Sagasser S., Sandberg R. Full-length RNA-seq from single cells using Smart-seq2. Nat. Protoc. 2014;9:171–181. doi: 10.1038/nprot.2014.006. [DOI] [PubMed] [Google Scholar]
  • 52.McGinnis C.S., Patterson D.M., Winkler J., Conrad D.N., Hein M.Y., Srivastava V., Hu J.L., Murrow L.M., Weissman J.S., Werb Z., et al. MULTI-seq: sample multiplexing for single-cell RNA sequencing using lipid-tagged indices. Nat. Methods. 2019;16:619–626. doi: 10.1038/s41592-019-0433-8. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 53.Howitt G., Feng Y., Tobar L., Vassiliadis D., Hickey P., Dawson M.A., Ranganathan S., Shanthikumar S., Neeland M., Maksimovic J., Oshlack A. Benchmarking single-cell hashtag oligo demultiplexing methods. NAR Genom. Bioinform. 2023;5:lqad086. doi: 10.1093/nargab/lqad086. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 54.Agoglia R.M., Sun D., Birey F., Yoon S.-J., Miura Y., Sabatini K., Pașca S.P., Fraser H.B. Primate cell fusion disentangles gene regulatory divergence in neurodevelopment. Nature. 2021;592:421–427. doi: 10.1038/s41586-021-03343-3. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 55.Gokhman D., Agoglia R.M., Kinnebrew M., Gordon W., Sun D., Bajpai V.K., Naqvi S., Chen C., Chan A., Chen C., et al. Human-chimpanzee fused cells reveal cis-regulatory divergence underlying skeletal evolution. Nat. Genet. 2021;53:467–476. doi: 10.1038/s41588-021-00804-3. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 56.Song J.H.T., Grant R.L., Behrens V.C., Kučka M., Roberts Kingman G.A., Soltys V., Chan Y.F., Kingsley D.M. Genetic studies of human-chimpanzee divergence using stem cell fusions. Proc. Natl. Acad. Sci. USA. 2021;118 doi: 10.1073/pnas.2117557118. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 57.Wang B., Starr A.L., Fraser H.B. Cell-type-specific cis-regulatory divergence in gene expression and chromatin accessibility revealed by human-chimpanzee hybrid cells. eLife. 2024;12 doi: 10.7554/eLife.89594. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 58.Pavlovic B.J., Fox D., Schaefer N.K., Pollen A.A. Rethinking nomenclature for interspecies cell fusions. Nat. Rev. Genet. 2022;23:315–320. doi: 10.1038/s41576-021-00447-4. [DOI] [PubMed] [Google Scholar]
  • 59.Karczewski K.J., Francioli L.C., Tiao G., Cummings B.B., Alföldi J., Wang Q., Collins R.L., Laricchia K.M., Ganna A., Birnbaum D.P., et al. The mutational constraint spectrum quantified from variation in 141,456 humans. Nature. 2020;581:434–443. doi: 10.1038/s41586-020-2308-7. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 60.Jenuth J.P., Peterson A.C., Shoubridge E.A. Tissue-specific selection for different mtDNA genotypes in heteroplasmic mice. Nat. Genet. 1997;16:93–95. doi: 10.1038/ng0597-93. [DOI] [PubMed] [Google Scholar]
  • 61.Rajasimha H.K., Chinnery P.F., Samuels D.C. Selection against pathogenic mtDNA mutations in a stem cell population leads to the loss of the 3243A-->G mutation in blood. Am. J. Hum. Genet. 2008;82:333–343. doi: 10.1016/j.ajhg.2007.10.007. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 62.Kuznetsova I., Siira S.J., Shearwood A.-M.J., Ermer J.A., Filipovska A., Rackham O. Simultaneous processing and degradation of mitochondrial RNAs revealed by circularized RNA sequencing. Nucleic Acids Res. 2017;45:5487–5500. doi: 10.1093/nar/gkx104. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 63.Sanchez M.I.G.L., Mercer T.R., Davies S.M.K., Shearwood A.-M.J., Nygård K.K.A., Richman T.R., Mattick J.S., Rackham O., Filipovska A. RNA processing in human mitochondria. Cell Cycle. 2011;10:2904–2916. doi: 10.4161/cc.10.17.17060. [DOI] [PubMed] [Google Scholar]
  • 64.Schmitz D.A., Oura S., Li L., Ding Y., Dahiya R., Ballard E., Pinzon-Arteaga C., Sakurai M., Okamura D., Yu L., et al. Unraveling mitochondrial influence on mammalian pluripotency via enforced mitophagy. Cell. 2025;188:4773–4789.e22. doi: 10.1016/j.cell.2025.05.020. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 65.Moraes C.T., Kenyon L., Hao H. Mechanisms of human mitochondrial DNA maintenance: the determining role of primary sequence and length over function. Mol. Biol. Cell. 1999;10:3345–3356. doi: 10.1091/mbc.10.10.3345. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 66.Tan B.G., Mutti C.D., Shi Y., Xie X., Zhu X., Silva-Pinheiro P., Menger K.E., Díaz-Maldonado H., Wei W., Nicholls T.J., et al. The human mitochondrial genome contains a second light strand promoter. Mol. Cell. 2022;82:3646–3660.e9. doi: 10.1016/j.molcel.2022.08.011. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 67.Carbajosa G., Ali A.T., Hodgkinson A. Identification of human mitochondrial RNA cleavage sites and candidate RNA processing factors. BMC Biol. 2022;20:168. doi: 10.1186/s12915-022-01373-5. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 68.Lee H.-Y., Chou J.-Y., Cheong L., Chang N.-H., Yang S.-Y., Leu J.-Y. Incompatibility of nuclear and mitochondrial genomes causes hybrid sterility between two yeast species. Cell. 2008;135:1065–1073. doi: 10.1016/j.cell.2008.10.047. [DOI] [PubMed] [Google Scholar]
  • 69.Meiklejohn C.D., Holmbeck M.A., Siddiq M.A., Abt D.N., Rand D.M., Montooth K.L. An Incompatibility between a mitochondrial tRNA and its nuclear-encoded tRNA synthetase compromises development and fitness in Drosophila. PLoS Genet. 2013;9 doi: 10.1371/journal.pgen.1003238. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 70.Moran B.M., Payne C.Y., Powell D.L., Iverson E.N.K., Donny A.E., Banerjee S.M., Langdon Q.K., Gunn T.R., Rodriguez-Soto R.A., Madero A., et al. A lethal mitonuclear incompatibility in complex I of natural hybrids. Nature. 2024;626:119–127. doi: 10.1038/s41586-023-06895-8. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 71.Burton R.S., Barreto F.S. A disproportionate role for mtDNA in Dobzhansky-Muller incompatibilities? Mol. Ecol. 2012;21:4942–4957. doi: 10.1111/mec.12006. [DOI] [PubMed] [Google Scholar]
  • 72.Yao D., Binan L., Bezney J., Simonton B., Freedman J., Frangieh C.J., Dey K., Geiger-Schuller K., Eraslan B., Gusev A., et al. Scalable genetic screening for regulatory circuits using compressed Perturb-seq. Nat. Biotechnol. 2024;42:1282–1295. doi: 10.1038/s41587-023-01964-9. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 73.Mao Y., Catacchio C.R., Hillier L.W., Porubsky D., Li R., Sulovari A., Fernandes J.D., Montinaro F., Gordon D.S., Storer J.M., et al. A high-quality bonobo genome refines the analysis of hominid evolution. Nature. 2021;594:77–81. doi: 10.1038/s41586-021-03519-x. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 74.Dyer S.C., Austine-Orimoloye O., Azov A.G., Barba M., Barnes I., Barrera-Enriquez V.P., Becker A., Bennett R., Beracochea M., Berry A., et al. Ensembl 2025. Nucleic Acids Res. 2025;53:D948–D957. doi: 10.1093/nar/gkae1071. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 75.Frankish A., Carbonell-Sala S., Diekhans M., Jungreis I., Loveland J.E., Mudge J.M., Sisu C., Wright J.C., Arnan C., Barnes I., et al. GENCODE: reference annotation for the human and mouse genomes in 2023. Nucleic Acids Res. 2023;51:D942–D949. doi: 10.1093/nar/gkac1071. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 76.Gallego Romero I., Pavlovic B.J., Hernando-Herraez I., Zhou X., Ward M.C., Banovich N.E., Kagan C.L., Burnett J.E., Huang C.H., Mitrano A., et al. A panel of induced pluripotent stem cells from chimpanzees: a resource for comparative functional genomics. eLife. 2015;4 doi: 10.7554/eLife.07103. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 77.Pavlovic B.J., Blake L.E., Roux J., Chavarria C., Gilad Y. A Comparative Assessment of Human and Chimpanzee iPSC-derived Cardiomyocytes with Primary Heart Tissues. Sci. Rep. 2018;8 doi: 10.1038/s41598-018-33478-9. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 78.Okita K., Matsumura Y., Sato Y., Okada A., Morizane A., Okamoto S., Hong H., Nakagawa M., Tanabe K., Tezuka K.-I., et al. A more efficient method to generate integration-free human iPS cells. Nat. Methods. 2011;8:409–412. doi: 10.1038/nmeth.1591. [DOI] [PubMed] [Google Scholar]
  • 79.Schmitt C.E., Morales B.M., Schmitz E.M.H., Hawkins J.S., Lizama C.O., Zape J.P., Hsiao E.C., Zovein A.C. Fluorescent tagged episomals for stoichiometric induced pluripotent stem cell reprogramming. Stem Cell Res. Ther. 2017;8:132. doi: 10.1186/s13287-017-0581-7. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 80.Fischer A.D., Veronese Paniagua D.A., Swaminathan S., Kashima H., Rubin D.C., Madison B.B. The oncogenic function of PLAGL2 is mediated via ASCL2 and IGF2 and a Wnt-independent mechanism in colorectal cancer. Am. J. Physiol. Gastrointest. Liver Physiol. 2023;325:G196–G211. doi: 10.1152/ajpgi.00058.2022. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 81.Kuo H.-H., Gao X., DeKeyser J.-M., Fetterman K.A., Pinheiro E.A., Weddle C.J., Fonoudi H., Orman M.V., Romero-Tejeda M., Jouni M., et al. Negligible-Cost and Weekend-Free Chemically Defined Human iPSC Culture. Stem Cell Rep. 2020;14:256–270. doi: 10.1016/j.stemcr.2019.12.007. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 82.Myers, E.W. (2020). FastK: A K-mer counter (for HQ assembly data sets). https://github.com/thegenemyers/FASTK.
  • 83.Pertea G., Pertea M. GFF Utilities: GffRead and GffCompare. F1000Research. 2020;9 doi: 10.12688/f1000research.23297.2. ISCB Comm J-304. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 84.Di Tommaso P., Chatzou M., Floden E.W., Barja P.P., Palumbo E., Notredame C. Nextflow enables reproducible computational workflows. Nat. Biotechnol. 2017;35:316–319. doi: 10.1038/nbt.3820. [DOI] [PubMed] [Google Scholar]
  • 85.Li H. Minimap2: pairwise alignment for nucleotide sequences. Bioinformatics. 2018;34:3094–3100. doi: 10.1093/bioinformatics/bty191. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 86.Danecek P., Bonfield J.K., Liddle J., Marshall J., Ohan V., Pollard M.O., Whitwham A., Keane T., McCarthy S.A., Davies R.M., Li H. Twelve years of SAMtools and BCFtools. GigaScience. 2021;10:giab008. doi: 10.1093/gigascience/giab008. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 87.Quinlan A.R., Hall I.M. BEDTools: a flexible suite of utilities for comparing genomic features. Bioinformatics. 2010;26:841–842. doi: 10.1093/bioinformatics/btq033. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 88.Garrison E., Marth G. Haplotype-based variant detection from short-read sequencing. arXiv. 2012 doi: 10.48550/ARXIV.1207.3907. Preprint at. [DOI] [Google Scholar]
  • 89.La Manno G., Soldatov R., Zeisel A., Braun E., Hochgerner H., Petukhov V., Lidschreiber K., Kastriti M.E., Lönnerberg P., Furlan A., et al. RNA velocity of single cells. Nature. 2018;560:494–498. doi: 10.1038/s41586-018-0414-6. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 90.Shen W., Le S., Li Y., Hu F. SeqKit: A Cross-Platform and Ultrafast Toolkit for FASTA/Q File Manipulation. PLoS One. 2016;11 doi: 10.1371/journal.pone.0163962. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 91.Wolf F.A., Angerer P., Theis F.J. SCANPY: large-scale single-cell gene expression data analysis. Genome Biol. 2018;19:15. doi: 10.1186/s13059-017-1382-0. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 92.Schreiber J. pomegranate: Fast and Flexible Probabilistic Modeling in Python. J. Mach. Learn. Res. 2018;18:1–6. [Google Scholar]
  • 93.Love M.I., Huber W., Anders S. Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biol. 2014;15:550. doi: 10.1186/s13059-014-0550-8. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 94.Szklarczyk D., Kirsch R., Koutrouli M., Nastou K., Mehryary F., Hachilif R., Gable A.L., Fang T., Doncheva N.T., Pyysalo S., et al. The STRING database in 2023: protein-protein association networks and functional enrichment analyses for any sequenced genome of interest. Nucleic Acids Res. 2023;51:D638–D646. doi: 10.1093/nar/gkac1000. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 95.Lorenz R., Bernhart S.H., Höner Zu Siederdissen C., Tafer H., Flamm C., Stadler P.F., Hofacker I.L. ViennaRNA Package 2.0. Algorithms Mol. Biol. 2011;6:26. doi: 10.1186/1748-7188-6-26. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 96.Chen G., Gulbranson D.R., Hou Z., Bolin J.M., Ruotti V., Probasco M.D., Smuga-Otto K., Howden S.E., Diol N.R., Propson N.E., et al. Chemically defined conditions for human iPSC derivation and culture. Nat. Methods. 2011;8:424–429. doi: 10.1038/nmeth.1593. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 97.Marinho P.A., Chailangkarn T., Muotri A.R. Systematic optimization of human pluripotent stem cells media using Design of Experiments. Sci. Rep. 2015;5:9834. doi: 10.1038/srep09834. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 98.Frank S., Zhang M., Schöler H.R., Greber B. Small molecule-assisted, line-independent maintenance of human pluripotent stem cells in defined conditions. PLoS One. 2012;7 doi: 10.1371/journal.pone.0041958. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 99.Chen Y., Tristan C.A., Chen L., Jovanovic V.M., Malley C., Chu P.-H., Ryu S., Deng T., Ormanoglu P., Tao D., et al. A versatile polypharmacology platform promotes cytoprotection and viability of human pluripotent and differentiated cells. Nat. Methods. 2021;18:528–541. doi: 10.1038/s41592-021-01126-2. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 100.Villafranca C., Makris M.R., Garrido Bauerle M.J., Jensen R.V., Eyestone W.H. Production of interspecies somatic/pluripotent heterokaryons using polyethylene glycol (PEG) and selection by imaging flow cytometry for the study of nuclear reprogramming. Cytotechnology. 2020;72:797–805. doi: 10.1007/s10616-020-00416-5. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 101.Morgulis A., Gertz E.M., Schäffer A.A., Agarwala R. A fast and symmetric DUST implementation to mask low-complexity DNA sequences. J. Comput. Biol. 2006;13:1028–1040. doi: 10.1089/cmb.2006.13.1028. [DOI] [PubMed] [Google Scholar]
  • 102.Raney B.J., Barber G.P., Benet-Pagès A., Casper J., Clawson H., Cline M.S., Diekhans M., Fischer C., Navarro Gonzalez J., Hickey G., et al. The UCSC Genome Browser database: 2024 update. Nucleic Acids Res. 2024;52:D1082–D1088. doi: 10.1093/nar/gkad987. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 103.Dayama G., Zhou W., Prado-Martinez J., Marques-Bonet T., Mills R.E. Characterization of nuclear mitochondrial insertions in the whole genomes of primates. NAR Genom. Bioinform. 2020;2 doi: 10.1093/nargab/lqaa089. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 104.Lareau C.A., Ludwig L.S., Muus C., Gohil S.H., Zhao T., Chiang Z., Pelka K., Verboon J.M., Luo W., Christian E., et al. Massively parallel single-cell mitochondrial DNA genotyping and chromatin profiling. Nat. Biotechnol. 2021;39:451–461. doi: 10.1038/s41587-020-0645-6. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 105.Armstrong J., Hickey G., Diekhans M., Fiddes I.T., Novak A.M., Deran A., Fang Q., Xie D., Feng S., Stiller J., et al. Progressive Cactus is a multiple-genome aligner for the thousand-genome era. Nature. 2020;587:246–251. doi: 10.1038/s41586-020-2871-y. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 106.Kronenberg Z.N., Fiddes I.T., Gordon D., Murali S., Cantsilieris S., Meyerson O.S., Underwood J.G., Nelson B.J., Chaisson M.J.P., Dougherty M.L., et al. High-resolution comparative analysis of great ape genomes. Science. 2018;360 doi: 10.1126/science.aar6343. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 107.Fiddes I.T., Armstrong J., Diekhans M., Nachtweide S., Kronenberg Z.N., Underwood J.G., Gordon D., Earl D., Keane T., Eichler E.E., et al. Comparative Annotation Toolkit (CAT)-simultaneous clade and personal genome annotation. Genome Res. 2018;28:1029–1038. doi: 10.1101/gr.233460.117. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 108.Edgar R.C. MUSCLE: multiple sequence alignment with high accuracy and high throughput. Nucleic Acids Res. 2004;32:1792–1797. doi: 10.1093/nar/gkh340. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 109.Shumate A., Salzberg S.L. Liftoff: accurate mapping of gene annotations. Bioinformatics. 2021;37:1639–1643. doi: 10.1093/bioinformatics/btaa1016. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 110.Zhang Y., Liu T., Meyer C.A., Eeckhoute J., Johnson D.S., Bernstein B.E., Nusbaum C., Myers R.M., Brown M., Li W., Liu X.S. Model-based analysis of ChIP-Seq (MACS) Genome Biol. 2008;9 doi: 10.1186/gb-2008-9-9-r137. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 111.Lex A., Gehlenborg N., Strobelt H., Vuillemot R., Pfister H. UpSet: Visualization of intersecting sets. IEEE Trans. Vis. Comput. Graph. 2014;20:1983–1992. doi: 10.1109/TVCG.2014.2346248. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 112.Prüfer K., Muetzel B., Do H.-H., Weiss G., Khaitovich P., Rahm E., Pääbo S., Lachmann M., Enard W. FUNC: a package for detecting significant associations between gene sets and ontological annotations. BMC Bioinf. 2007;8:41. doi: 10.1186/1471-2105-8-41. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 113.Green R.E., Malaspinas A.-S., Krause J., Briggs A.W., Johnson P.L.F., Uhler C., Meyer M., Good J.M., Maricic T., Stenzel U., et al. A complete Neandertal mitochondrial genome sequence determined by high-throughput sequencing. Cell. 2008;134:416–426. doi: 10.1016/j.cell.2008.06.021. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 114.McLaren W., Gil L., Hunt S.E., Riat H.S., Ritchie G.R.S., Thormann A., Flicek P., Cunningham F. The Ensembl Variant Effect Predictor. Genome Biol. 2016;17:122. doi: 10.1186/s13059-016-0974-4. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 115.Landrum M.J., Lee J.M., Riley G.R., Jang W., Rubinstein W.S., Church D.M., Maglott D.R. ClinVar: public archive of relationships among sequence variation and human phenotype. Nucleic Acids Res. 2014;42:D980–D985. doi: 10.1093/nar/gkt1113. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 116.Lewin L., Eyre-Walker A. Estimates of the mutation rate per year can explain why the molecular clock depends on generation time. Mol. Biol. Evol. 2025;42 doi: 10.1093/molbev/msaf069. [DOI] [PMC free article] [PubMed] [Google Scholar]
  • 117.Dong C.L., Nocedal J. On the limited memory BFGS method for large scale optimization. Math. Program. 1989;45:503–528. doi: 10.1007/BF01589116. [DOI] [Google Scholar]
  • 118.Press W.H., Teukolsky S.A., Vetterling W.T., Flannery B.P. Numerical Recipes: the Art of Scientific Computing. Cambridge University Press; 2007. One-Dimensional Search With First Derivatives; pp. 409–502. [Google Scholar]
  • 119.Šošic M., Šikic M. Edlib: a C/C ++ library for fast, exact sequence alignment using edit distance. Bioinformatics. 2017;33:1394–1395. doi: 10.1093/bioinformatics/btw753. [DOI] [PMC free article] [PubMed] [Google Scholar]

Associated Data

This section collects any data citations, data availability statements, or supplementary materials included in this article.

Supplementary Materials

Document S1. Figures S1–S18 and Tables S1–S8
mmc1.pdf (4.3MB, pdf)
Table S9. Gene Ontology enrichment for response to the presence of human and chimpanzee mitochondria in the same cell, related to Figure 6

Gene Ontology enrichment results using FUNC112 for genes significantly differentially expressed (adjusted p value <0.01) in human/chimpanzee composite cells with both human and chimpanzee mitochondria, compared to human/chimpanzee composite cells with only either human or chimpanzee mitochondria. FWER, family-wise error rate. Terms with FWER <0.05 are shown.

mmc2.xlsx (5.7KB, xlsx)
Table S10. Gene Ontology enrichment for response to the presence of chimpanzee and bonobo mitochondria in the same cell, related to Figure 6

Gene Ontology enrichment results using FUNC112 for genes significantly differentially expressed (adjusted p value <0.01) in chimpanzee/bonobo composite cells with both chimpanzee and bonobo mitochondria, compared to chimpanzee/bonobo composite cells with only bonobo mitochondria. FWER, family-wise error rate. Terms with FWER <0.05 are shown.

mmc3.xlsx (11.6KB, xlsx)
Table S11. Gene Ontology enrichment for genes responsive to the presence of allospecific mitochondria in the same cell in both human/chimpanzee and chimpanzee/bonobo composite cells, related to Figure 6

Gene Ontology enrichment results using FUNC112 for genes significantly differentially expressed (adjusted p value <0.01) in human/chimpanzee composite cells with both species’ mitochondria relative to those with one species’ mitochondria, and in chimpanzee/bonobo composite cells with both chimpanzee and bonobo mitochondria relative to chimpanzee/bonobo composite cells with only bonobo mitochondria. FWER, family-wise error rate. Terms with FWER <0.05 are shown.

mmc4.xlsx (5.3KB, xlsx)
Document S2. Article plus supplemental information
mmc5.pdf (8.5MB, pdf)

Data Availability Statement


Articles from Cell Genomics are provided here courtesy of Elsevier

RESOURCES