End-to-end single-cell ATAC-seq processing and analysis. Covers ecosystem selection (Signac, ArchR, SnapATAC2), per-cell QC thresholds (looser than bulk because of per-cell sparsity), doublet detection (AMULET, ArchR, scDblFinder), TF-IDF + LSI dimensionality reduction (skipping the depth-correlated first component), per-cluster pseudobulk peak calling, and 10X Multiome RNA+ATAC integration via WNN. Includes per-tool failure modes and reconciliation between ecosystems.
# Signac ecosystem
BiocManager::install(c('GenomicRanges', 'EnsDb.Hsapiens.v86', 'BSgenome.Hsapiens.UCSC.hg38'))
install.packages(c('Signac', 'Seurat'))
# ArchR ecosystem
remotes::install_github('GreenleafLab/ArchR', ref='master', repos=BiocManager::repositories())
ArchR::installExtraPackages()
# SnapATAC2 (Python)
pip install snapatac2
# Doublet detection: AMULET is a GitHub release (jar + AMULET.sh; needs numpy/pandas/scipy/statsmodels + Java 8+)
# from github.com/UcarLab/AMULET, or use the R amulet() implementation in the scDblFinder Bioconductor package
BiocManager::install('scDblFinder')
Inputs (from 10X Cell Ranger ATAC or Multiome):
- outs/fragments.tsv.gz (and .tbi index)
- outs/filtered_peak_bc_matrix.h5 (Signac path)
- outs/singlecell.csv (per-barcode metadata)
Tell your AI agent what you want to do: - "Process 10X scATAC with Signac: TF-IDF + LSI (dims 2:30, skip depth) + UMAP + Leiden" - "Use ArchR for a 200K-cell dataset because Signac will run out of memory" - "Run AMULET for ATAC-specific doublet detection; cross-validate with ArchR's doublet score" - "Build per-cluster pseudobulk peaks with MACS3, then iterative-overlap consensus" - "Integrate 10X Multiome via WNN with PCA on RNA and LSI(2:30) on ATAC" - "Re-filter cellranger output at fragment count >= 1000 AND TSS enrichment >= 4 because cellranger's cell calling is too lenient"
"Load 10X scATAC h5 + fragments file into Signac. Compute NucleosomeSignal and TSSEnrichment. Filter cells: peak fragments 1000-20000, FRiP >= 15%, blacklist ratio < 0.05, nucleosome signal < 4, TSS enrichment > 4. Then RunTFIDF -> RunSVD -> RunUMAP(dims=2:30) -> FindNeighbors(dims=2:30) -> FindClusters(algorithm=4, resolution=0.5)."
"150K-cell scATAC dataset. Use ArchR: createArrowFiles with minTSS=4 and minFrags=1000, addDoubletScores, filterDoublets, addIterativeLSI on TileMatrix, addClusters Leiden, addUMAP. Then addReproduciblePeakSet per cluster."
"Use SnapATAC2: import fragments.tsv.gz via
snap.pp.import_fragmentswith hg38 chrom_sizes, compute tsse, filter min_counts=1000 and min_tsse=4, add_tile_matrix bin_size=500, select_features 250k, spectral, leiden, umap."
"Run AMULET (collision-based) and ArchR's doublet score in parallel; flag cells called doublet by both as high-confidence; report flagging rate per cluster."
"Aggregate cells per cluster into pseudobulk BAMs, run MACS3 callpeak per cluster, build iterative-overlap consensus across clusters, then DESeq2 differential between cluster A and B (atac-seq/differential-accessibility)."
"I have Multiome data. Run RNA workflow (LogNormalize -> PCA -> dims 1:30) and ATAC workflow (TF-IDF -> SVD -> dims 2:30) separately, then FindMultiModalNeighbors and RunUMAP nn.name='weighted.nn' for the joint embedding."
"Compute gene activity scores with Signac::GeneActivity (or ArchR getGeneScore); transfer cell type labels from a reference scRNA-seq atlas via Seurat::FindTransferAnchors."
| Metric | Pass | Reject |
|---|---|---|
| Fragment count | 3000-50000 | < 1000 or > 80000 |
| TSS enrichment | >= 4 | < 2 |
| FRiP | >= 0.15 | < 0.05 |
| Mt fraction | < 0.05 | > 0.20 |
| Nucleosome signal | < 4 | > 10 |
| Doublet score | < 0.5 (AMULET) | > 0.7 |
Per-cell thresholds are looser than bulk; cells are sparse by design.
| Use case | Ecosystem |
|---|---|
| 10X Multiome (RNA + ATAC) | Signac (Seurat integration) |
| Large dataset (>100K cells) | ArchR (Arrow files; memory-efficient) |
| Python ecosystem | SnapATAC2 |
| Trajectory analysis | ArchR getTrajectory; Cicero (Signac) |
| ATAC-only standard analysis | Either Signac or ArchR |
| Tool | Method | When to use |
|---|---|---|
| AMULET | Collision-based | Primary for ATAC; orthogonal to clustering |
| ArchR addDoubletScores | Synthetic + LSI projection | Built into ArchR; auto-thresholds |
| scDblFinder | Synthetic + classifier | RNA-developed; works on Signac/SCE |
Run two; intersection of flagged cells is high-confidence doublet set.
dims=2:30.txdbmaker or AnnotationDbi.