Skip to content

ScalePlex Outputs

Overview

ScalePlex analysis generates additional output files and directories beyond the standard ScaleRNA outputs. This guide describes all ScalePlex-specific outputs, their formats, and how to use them for downstream analysis.

Output Directory Structure

ScaleRna.out/
├── samples/
│   ├── <sample>.allCells.csv                    # Updated with ScalePlex columns for assignment or failure of assignment
│   └── <sample>.filtered.matrix                 # RNA expression matrix
├── scaleplex/
│   ├── demux/                                   # Barcode validation information
│   ├── <sample>.ScalePlex.raw.matrix/           # All barcodes; bkg and cells
│   ├── <sample>.ScalePlex.filtered.matrix/      # Only cell barcodes
│   └── <sample>.ScalePlex.cellMetrics.parquet       # Per-cell metadata
└── reports/
    ├── library_<libIndex2>_ScalePlex.report.html # ScalePlex library QC
    └── <sample>.report.html                      # Updated with ScalePlex tab

Key Output Files

Updated Sample Metrics (samples/<sample>.allCells.csv)

New Columns Added:

  • passing_scaleplex: Whether cell passed ScalePlex quality filters
  • assigned_scaleplex: Final assignment to original fixation plate well

Example:

cell_id,counts,genes,assigned_scaleplex,passing_scaleplex
QSR-P+74+95+60+1D,1250,450,1A,ScalePlex1;ScalePlex32
QSR-P+03+50+87+2E,980,320,2B,ScalePlex29;ScalePlex3
QSR-P+03+83+34+2E,750,280,Max Fail,None

ScalePlex-Specific Metrics (samples/<sample>.ScalePlex.allCells.csv)

Key Metrics:

Column Description Example
reads The number of reads associated with that cell in the ScalePlex library 1250
noScalePlex The ratio of reads of the barcode in question that did not have a ScalePlex oligo sequence detected 0.05
umis The number of ScalePlex oligo UMIs detected 45
scaleplex Unique ScalePlex oligos detected 3
max UMIs from top oligo 25
second UMIs from second oligo 15
third UMIs from third oligo 5
purity Proportion from top oligo 0.56
topTwo Proportion from top two oligos 0.89
minorFrac Ratio of second to max 0.60
Saturation Ratio of UMI detected over Usable Reads 0.85
topTwo_scaleplex Top two oligo identifiers "ScalePlex1;ScalePlex32"
assigned_scaleplex Final assignment "1A"
sample Sample identifier "PBMC-1"

Quality Indicators:

  • High Top Two: >0.8 suggests good assignment confidence
  • Good Saturation: >0.7 indicates efficient UMI detection

ScalePlex Directory Contents

Demultiplexing Information (scaleplex/demux/)

Contents:

  • Barcode validation statistics
  • Read-level quality metrics
  • Oligo detection rates
  • Error correction logs

Use Cases:

  • Troubleshooting demultiplexing issues
  • Quality assessment of ScalePlex library
  • Performance optimization

Raw Expression Matrix (scaleplex/<sample>.ScalePlex.raw.matrix/)

Format:

  • barcodes.tsv.gz: All detected cell barcodes
  • features.tsv.gz: ScalePlex oligo identifiers
  • matrix.mtx.gz: UMI counts per oligo per cell

Content:

  • All Detected Barcodes: Including non-cell barcodes
  • Oligo-Specific Counts: UMI counts for each ScalePlex oligo
  • Unfiltered Data: Raw counts before cell calling

Usage:

import scanpy as sc
adata = sc.read_mtx("scaleplex/<sample>.ScalePlex.raw.matrix/")

Filtered Expression Matrix (scaleplex/<sample>.ScalePlex.filtered.matrix/)

Format:

  • barcodes.tsv.gz: Only RNA-called cells
  • features.tsv.gz: ScalePlex oligo identifiers
  • matrix.mtx.gz: UMI counts per oligo per cell

Content:

  • RNA-Called Cells Only: Cells that passed RNA cell calling
  • Assignment-Ready Data: Clean data for cell assignment
  • Quality Filtered: Removes low-quality barcodes

Usage:

library(Seurat)
data <- Read10X("scaleplex/<sample>.ScalePlex.filtered.matrix/")

Cell Metrics (scaleplex/<sample>.ScalePlex.cellMetrics.csv)

Content:

  • Per-cell ScalePlex library metadata
  • Quality metrics and statistics
  • Barcode validation results

Note: Does not include assignment results (used for reporting pipeline only)

Report Files

ScalePlex Library Report (reports/library_<libIndex2>_ScalePlex.report.html)

With ScalePlex, libraries are at the level of Index PCR reactions (or final distribution plates), such that for each Index PCR reaction used for your analysis will have both an RNA library report as well as a ScalePlex library report. These capture the read attribution per sample within the library, barcode validation pass rates, and ScalePlex oligo detection pass rates per read of the library.

Content:

  • Read Attribution: Per-sample read distribution
  • Barcode Validation: Pass rates and error statistics
  • Oligo Detection: Detection rates per oligo
  • Quality Metrics: Overall library performance

Key Metrics:

  • Oligo Detection Rate: Percentage of reads with valid oligos
  • Barcode Error Rate: Sequencing error rates
  • Sample Distribution: Read distribution across samples

Expanded Sample Report (reports/<sample>.report.html)

ScalePlex Tab:

ScalePlex Metrics Table:

  • Reads Per Cell: Average ScalePlex reads per cell
  • Counts Per Cell: Average ScalePlex UMIs per cell
  • Saturation: UMI detection efficiency
  • Reads in Cells: Percentage of reads in called cells
  • Assignment Success Rate: Percentage of cells with valid assignment

Tip

ScalePlex assignment is only performed for passing cells from the RNA part of the workflow.

Visualizations:

Assignment Distribution:

  • Bar chart of cells assigned to each ScalePlex well
  • Shows distribution across original samples

Saturation Analysis:

  • Scatter plot of saturation vs reads per cell
  • Identifies quality trends

Top ScalePlex Fraction:

  • Histogram of top two oligo proportions
  • This ratio is important because in ideal scenarios, we are enriching for two ScalePlex oligos per cell, that in combination uniquely mark the fixation well of origin.
  • Peak near 1.0 indicates good enrichment, where the vast majority of ScalePlex oligo counts are coming from two oligos
  • If the distribution shifts left, then using the "fc" method may improve your assignment.

Fixation Plate Map:

  • Plate layout with cell counts per well
  • Visual representation of assignment results

Assignment Error Analysis:

  • Breakdown of assignment failure modes
  • Troubleshooting guidance

Summary Statistics (reports/csv/<sample>.scaleplex_stats.csv)

Content:

  • Per-well RNA metrics
  • Cell counts by assignment
  • Quality statistics
  • Performance summaries

Assignment Failure Modes

Max Fail

  • Cause: Top oligos didn't pass background test
  • Solution: Check oligo quality and concentration

Indeterminate

  • Cause: No oligos passed background comparison
  • Solution: Verify fixation protocol

Enrich Fail

  • Background Method: Failed enrichment threshold set with scalePlexPercentFromTopTwo
  • Fold Change Method: Insufficient fold change, using scalePlexFCThreshold
  • Solution: Adjust quality parameters

Unexpected

  • Cause: Invalid oligo combinations, i.e. not a valid row/column combination or outside the scalePlexBarcodes supplied in the samples barcodes table.
  • Examples: Same column oligos, outside specified range
  • Solution: Check plate layout and oligo design

Downstream Analysis

Loading ScalePlex Data

R/Seurat:

# Load cell assignments
cell_metadata <- read.csv("samples/<sample>.allCells.csv")

# Create Seurat object with ScalePlex data
seurat_obj <- CreateSeuratObject(counts = rna_data)
seurat_obj <- AddMetaData(seurat_obj, cell_metadata)

# Subset by original sample
sample1_cells <- subset(seurat_obj, assigned_scaleplex == "1A")

Python/Scanpy:

import pandas as pd
import scanpy as sc

# Load assignments
assignments = pd.read_csv("samples/<sample>.allCells.csv")

# Load expression data
adata = sc.read_h5ad("samples/<sample>_anndata.h5ad")

# Add ScalePlex metadata
adata.obs['assigned_scaleplex'] = assignments['assigned_scaleplex']

Sample-Specific Analysis

Group by Original Sample:

# Group cells by original sample
sample_groups <- split(seurat_obj, seurat_obj$assigned_scaleplex)

# Analyze each original sample
for(sample_name in names(sample_groups)) {
    sample_obj <- sample_groups[[sample_name]]
    # Perform analysis on original sample
}

Quality Filtering:

# Filter for successfully assigned cells
assigned_cells <- subset(seurat_obj, 
                        assigned_scaleplex != "Max Fail" & 
                        assigned_scaleplex != "Indeterminate" &
                        assigned_scaleplex != "Enrich Fail" &
                        assigned_scaleplex != "Unexpected")

Need Help?

For more information, please contact support@scale.bio or visit our support website.