Cell Ranger 的替代方案:STARsolo

· Analysis Notes

Cell Ranger 的替代方案:STARsolo

TL;DR: STARsolo 是用于 10x scRNA-seq 定量分析的快速、开源替代方案,可产生与 Cell Ranger 几乎相同的结果,速度提升约 10 倍,并提供完整的参数控制。当您需要速度、灵活性,或者您的平台无法使用 Cell Ranger 时,请使用 STARsolo。


为什么选择 STARsolo?

Cell Ranger 与 STARsolo 对比

特性 Cell Ranger STARsolo
速度 基准 快 10 倍
内存 ~30-40 GB ~30-40 GB
平台 仅限 Linux Linux, macOS*, Windows (WSL)
许可证 专有 开源 (MIT)
输出格式 Cell Ranger 特定格式 兼容 Cell Ranger
自定义 有限 完整的参数控制
内含子计数 仅基因外显子 基因外显子 + Velocyto 模式

*macOS 需要变通方案(见下文)

何时选择 STARsolo

✅ 在以下情况下使用 STARsolo:

  • 无法使用 Cell Ranger(例如,在 macOS、Windows 上)
  • 需要更快的处理速度(大型队列)
  • 需要 RNA 速率分析(内含子/外显子计数)
  • 需要自定义参考基因组
  • 批量处理自动化

⚠️ 在以下情况下坚持使用 Cell Ranger:

  • 使用 10x Feature Barcoding(CITE-seq, hashtags)
  • 需要 Loupe Browser 文件
  • 需要 10x 技术支持进行故障排除

STARsolo 工作流程


安装

Linux(推荐)

# 下载 STAR(包含 STARsolo)
wget https://github.com/alexdobin/STAR/archive/2.7.11a.tar.gz
tar -xzf 2.7.11a.tar.gz
cd STAR-2.7.11a/source

# 编译
make STAR

# 添加到 PATH
export PATH=$PWD:$PATH
echo 'export PATH=/path/to/STAR-2.7.11a/source:$PATH' >> ~/.bashrc

# 验证
STAR --version

macOS(Apple Silicon)

已知问题: 最近的 STAR 版本在 Apple Silicon 上存在错误。请使用此特定的预发布版本:

# 下载可工作的版本
wget https://github.com/dobinlab/STAR_pre_releases/archive/refs/tags/2.7.11b_alpha_2024-02-09.tar.gz
tar -xzf 2.7.11b_alpha_2024-02-09.tar.gz
cd STAR_pre_releases-2.7.11b_alpha_2024-09/source

# 编译(请勿使用 STARstaticformac)
make STAR

# 增加文件描述符限制(临时文件所需)
ulimit -n 2048  # 添加到 ~/.zshrc 以持久化

# 测试
./STAR --version

资源:

conda(任何操作系统)

conda install -c bioconda star

准备参考基因组

1. 下载参考文件

关键: GTF 和 FASTA 文件的染色体命名必须匹配(CHR vs ALL vs PRI)。

# 用于基因组比对(推荐 - 可发现剪接位点)
wget ftp://ftp.ensembl.org/pub/release-110/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
wget ftp://ftp.ensembl.org/pub/release-110/gtf/homo_sapiens/Homo_sapiens.GRCh38.110.gtf.gz

gunzip *.gz
文件类型 染色体集 使用场景
primary_assembly (PRI) 仅主要染色体 基因定量(推荐)
toplevel (ALL) 包含支架/补丁 完整基因组
CHR 仅转录本 cDNA 比对(无剪接)

2. 构建 STAR 索引

STAR --runMode genomeGenerate \
  --genomeDir ./STARindex \
  --genomeFastaFiles Homo_sapiens.GRCh38.dna.primary_assembly.fa \
  --sjdbGTFfile Homo_sapiens.GRCh38.110.gtf \
  --runThreadN 16 \
  --genomeSAindexNbases 14  # 针对小基因组进行调整

时间: 人类基因组约 30-60 分钟
磁盘: 索引基因组约 30 GB


运行 STARsolo

基本 10x v3 化学方法

STAR --runThreadN 16 \
  --genomeDir ./STARindex \
  --readFilesIn R2.fastq.gz R1.fastq.gz \  # 注意:R2 在前!
  --readFilesCommand zcat \
  --soloType CB_UMI_Simple \
  --soloCBwhitelist 3M-february-2018.txt \  # 10x 条形码白名单
  --soloUMIlen 12 \
  --outSAMtype BAM SortedByCoordinate \
  --outSAMattributes NH HI nM AS CR UR CB UB GX GN sS sQ sM \
  --outFileNamePrefix output_

10x 条形码白名单: 10x-barcode-lists

用于 RNA 速率分析的 STARsolo

同时计数外显子(基因表达)和内含子(新生 RNA):

STAR --runThreadN 16 \
  --genomeDir ./STARindex \
  --readFilesIn R2.fastq.gz R1.fastq.gz \
  --readFilesCommand zcat \
  --soloType CB_UMI_Simple \
  --soloCBwhitelist 3M-february-2018.txt \
  --soloUMIlen 12 \
  --soloFeatures Gene Velocyto \  # 关键添加项
  --outSAMtype BAM SortedByCoordinate \
  --outFileNamePrefix velocyto_

输出: 同时包含 Gene/(标准)和 Velocyto/(内含子/外显子)矩阵。

多样本批量处理

#!/bin/bash

samples=(sample1 sample2 sample3)

for sample in "${samples[@]}"; do
  STAR --runThreadN 8 \
    --genomeDir ./STARindex \
    --readFilesIn ${sample}_R2.fastq.gz ${sample}_R1.fastq.gz \
    --readFilesCommand zcat \
    --soloType CB_UMI_Simple \
    --soloCBwhitelist 3M-february-2018.txt \
    --soloUMIlen 12 \
    --outSAMtype None \  # 跳过 BAM 以节省时间
    --outFileNamePrefix ${sample}_ &
done

wait
echo "All samples processed"

参数调优以实现与 Cell Ranger 等效

为了精确匹配 Cell Ranger 的输出:

STAR --runThreadN 16 \
  --genomeDir ./STARindex \
  --readFilesIn R2.fastq.gz R1.fastq.gz \
  --readFilesCommand zcat \
  --soloType CB_UMI_Simple \
  --soloCBwhitelist 3M-february-2018.txt \
  --soloUMIlen 12 \
  --soloCBstart 1 --soloCBlen 16 --soloUMIstart 17 \
  --soloCellFilter EmptyDrops_CR \  # Cell Ranger 的细胞识别算法
  --soloUMIdedup 1MM_CR \  # Cell Ranger UMI 去重
  --soloUMIfiltering MultiGeneUMI_CR \
  --soloBarcodeReadLength 0 \  # 允许条形码长度变化
  --outSAMtype BAM SortedByCoordinate \
  --outSAMattributes NH HI nM AS CR UR CB UB GX GN sS sQ sM \
  --outFileNamePrefix CR_equivalent_

关键参数解释

参数 Cell Ranger 默认值 目的
--soloCellFilter EmptyDrops_CR 是 细胞识别算法
--soloUMIdedup 1MM_CR 是 允许 UMI 有 1 个错配
--soloUMIfiltering MultiGeneUMI_CR 是 过滤多基因 UMI
--clipAdapterType CellRanger4 是 (CR4+) 接头剪切

输出文件

STARsolo 创建与 Cell Ranger 类似的文件夹结构:

output_Solo.out/
├── Gene/
│   ├── filtered/
│   │   ├── matrix.mtx.gz
│   │   ├── barcodes.tsv.gz
│   │   └── features.tsv.gz
│   ├── raw/
│   │   ├── matrix.mtx.gz
│   │   ├── barcodes.tsv.gz
│   │   └── features.tsv.gz
│   └── Summary.csv
└── Velocyto/  (如果使用了 --soloFeatures Velocyto)
    ├── filtered/
    └── raw/

兼容: Seurat, Scanpy, Cell Ranger 分析流程。

加载到 Seurat

library(Seurat)

# 加载 STARsolo 输出(与 Cell Ranger 相同)
counts <- Read10X("output_Solo.out/Gene/filtered/")
pbmc <- CreateSeuratObject(counts, project = "PBMC")

# 标准 Seurat 工作流程
pbmc <- NormalizeData(pbmc)
pbmc <- FindVariableFeatures(pbmc)
# ... 按常规继续

加载到 Scanpy

import scanpy as sc

# 读取 STARsolo 输出
adata = sc.read_10x_mtx("output_Solo.out/Gene/filtered/")

# 标准预处理
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.normalize_total(adata, target_sum=1e4)

故障排除

"samOutBufferSizeMax too small"

原因: 基因组复杂或读段过多
修复:

--limitOutSAMoneReadBytes 1000000  # 增加缓冲区大小

"Too many open files"

原因: 系统文件描述符限制
修复:

ulimit -n 4096  # 增加限制 (macOS/Linux)

GTF/FASTA 染色体不匹配

症状: 很少或没有读段比对成功
修复: 确保 GTF 和 FASTA 使用相同的命名:

# 检查 GTF 染色体
zcat Homo_sapiens.GRCh38.110.gtf.gz | cut -f1 | sort -u | head

# 检查 FASTA 染色体
grep "^>" Homo_sapiens.GRCh38.dna.primary_assembly.fa | head

# 两者都应显示 "1", "2", ... 或 "chr1", "chr2", ...

细胞回收率低

原因: 错误的化学方法或条形码白名单
修复:

  • 10x v2: 使用 737K-august-2016.txt
  • 10x v3: 使用 3M-february-2018.txt
  • 使用 fastqc 检查 R1 是否以条形码开头

对比:速度基准测试

数据集 Cell Ranger STARsolo 加速比
5K PBMC 30 分钟 3 分钟 10x
10K 肿瘤 90 分钟 9 分钟 10x
50K 多组学 6 小时 35 分钟 10x

硬件: 16 核,64GB RAM,NVMe SSD


进阶:自定义化学方法

对于非 10x 方案(例如,inDrop, Drop-seq):

STAR --soloType CB_UMI_Simple \
  --soloCBstart 1 --soloCBlen 8 \  # 条形码位置
  --soloUMIstart 9 --soloUMIlen 6 \  # UMI 位置
  --soloCBwhitelist custom_barcodes.txt  # 自定义列表

资源


另请参阅:

STARsolo