Pipeline Outputs¶
All SeqNado analysis results are organized within the seqnado_output/ directory (or your custom output directory specified during configuration). This page describes the structure and types of files you can expect from your pipeline runs.
General Output Structure¶
seqnado_output/{assay}/ # Assay-specific directory
├── seqnado_report.html # Main interactive QC report (MultiQC)
├── protocol.txt # Auto-generated data processing protocol
├── aligned/ # Final BAM alignment files
├── bigwigs/ # BigWig coverage tracks
├── peaks/ # Peak calling results (ATAC, ChIP, CUT&Tag)
├── readcounts/ # Quantification files (RNA, CRISPR)
├── qc/ # Quality control metrics
├── hub/ # UCSC Genome Browser hub
├── heatmap/ # DeepTools heatmap and metaplot PDFs
├── motifs/ # Motif analysis results (if enabled)
├── tag_dirs/ # HOMER tag directories
├── resources/ # Normalisation factors (spike-in and CSAW)
├── track_plots/ # PlotNado visualisations (if configured)
├── geo_submission/ # GEO submission-ready files (if enabled)
├── methylation/ # Methylation calls (METH only)
├── variant/ # VCF files (SNP only)
├── dataset.zarr/ # QuantNado multi-sample signal store (if enabled)
└── logs/ # Process execution logs
Note
Not all directories will be present for every assay. The exact output depends on your assay type and configuration options.
Main Entry Point: SeqNado Report¶
The seqnado_report.html file is your primary analysis report, generated by MultiQC. It provides:
- QC Summary: FastQC, alignment statistics, and quality metrics
- Sample Overview: All samples displayed with key metrics
- Peak Statistics: Number of peaks called, genomic distribution (for applicable assays)
- Library Complexity: Duplication rates and unique read counts
- Multi-Sample Comparisons: Side-by-side QC metrics
A protocol.txt file is also generated, providing an auto-generated data processing protocol describing the steps performed.
Viewing the Report
Open seqnado_report.html in any modern web browser. No server required!
Core Output Files¶
Alignment Files (aligned/)¶
The BAM processing pipeline runs through several intermediate stages (sorting, blacklist filtering, duplicate removal, optional Tn5 shifting, quality filtering), but all intermediate files are temporary and deleted after the pipeline completes. Only the final processed BAM files are retained:
Processing chain (intermediates are removed automatically):
raw → sorted → blacklist_regions_removed → duplicates_removed → shifted_for_tn5_insertion (ATAC/CUT&Tag only) → filtered → final
File Formats:
- BAM: Binary alignment format, viewable with samtools/IGV
- BAI: Index files for rapid random access
Coverage Tracks (bigwigs/)¶
Genome-wide signal tracks for visualisation, organised by tool and scaling method:
bigwigs/
├── {method}/ # deeptools, homer, or bamnado
│ ├── {sample}.bigWig # Default unscaled tracks
│ ├── csaw/ # CSAW-normalised individual (if enabled)
│ │ └── {sample}.bigWig
│ ├── spikein/ # Spike-in normalised (if applicable)
│ │ └── {spikein_method}/
│ │ └── {sample}.bigWig
│ ├── aggregated/ # Condition-based aggregations (if perform_comparisons enabled)
│ │ └── {condition}.bigWig # Mean bigwig across samples in condition
│ ├── subtraction/ # Condition pairwise subtractions
│ │ └── {condition1}_vs_{condition2}.bigWig
│ ├── merged/ # Consensus group merged tracks
│ │ ├── {group}.bigWig # Unscaled merged
│ │ ├── csaw/ # CSAW-scaled merged (if enabled)
│ │ │ └── {group}.bigWig
│ │ └── spikein/ # Spike-in scaled merged (if applicable)
│ │ └── {spikein_method}/
│ │ └── {group}.bigWig
│ └── spikein/ # Spike-in normalised paths
│ └── {spikein_method}/
│ ├── {sample}.bigWig # Individual spike-in samples
│ ├── aggregated/ # Condition-based aggregations (spike-in source)
│ │ └── {condition}.bigWig
│ └── subtraction/ # Condition subtractions (spike-in source)
│ └── {condition1}_vs_{condition2}.bigWig
For RNA-seq, stranded bigwigs are produced with _plus and _minus suffixes:
Pileup Tools:
- DeepTools:
bamCoverage-based tracks (supports all scaling methods, individual and merged) - HOMER:
makeBigWig.pl-based tracks (unscaled individual and unscaled merged only) - BamNado: Custom pileup tool (unscaled and CSAW individual; unscaled and CSAW merged)
Scaling Methods:
- unscaled: No normalisation applied
- csaw: CSAW-based normalisation using binned read counts across samples
- spikein: Spike-in normalisation using external control DNA (DeepTools only)
Merged Tracks (when consensus_group is set in the design file):
Individual-sample bigwigs are complemented by merged tracks for each consensus group, supporting all of the same scaling methods as individual tracks (where applicable). CSAW and spike-in scaled merged bigwigs require the corresponding normalization to be enabled.
Condition-Based Bigwig Comparisons¶
When perform_comparisons: true is set in the configuration and your design file contains a condition column with at least 2 unique condition groups, SeqNado generates condition-level aggregated and pairwise subtraction bigwigs using bamnado for averaging and comparison operations.
Generated files:
- Aggregated bigwigs (
aggregated/{condition}.bigWig): Per-condition mean tracks generated by averaging all individual sample bigwigs within each condition group - Subtraction bigwigs (
subtraction/{cond1}_vs_{cond2}.bigWig): Pairwise subtractions between condition-level aggregates, generated for all ordered condition pairs
Both are generated for:
- Unscaled source (default): bigwigs/{method}/aggregated/ and bigwigs/{method}/subtraction/
- Spike-in normalized source (if applicable): bigwigs/{method}/spikein/{spikein_method}/aggregated/ and bigwigs/{method}/spikein/{spikein_method}/subtraction/
Note
Condition-based comparisons require:
1. perform_comparisons: true in your assay configuration
2. A condition column in your design file with ≥2 unique values
3. bamnado configured as one of your pileup methods
These are only available for non-MCC assays (ATAC, ChIP, CUT&Tag, RNA). MCC assays use a separate comparison workflow.
Normalisation factor calculation¶
Per-sample bigwigs use a factor calculated individually for each sample. For CSAW, all samples within a scaling group are compared via binned read counts and each sample receives:
Samples with larger libraries are scaled down; samples with smaller libraries are scaled up. The results are written to resources/{group}_scaling_factors.tsv.
Merged bigwigs are generated from a BAM produced by samtools merge (concatenating all reads in the consensus group). The scale factor applied to the merged BAM is the arithmetic mean of the per-sample factors for all samples in that group:
This ensures the merged track is normalised to the average depth of the constituent samples.
For spike-in normalised merged bigwigs, a simple arithmetic mean of per-sample factors would give incorrect results when samples differ in sequencing depth (deeply-sequenced samples contribute far more reads to the merged BAM but their smaller factors would be under-weighted). Instead, SeqNado derives the merged factor from the pooled spike-in counts, equivalent to "merge-then-split":
- orlando:
merged_factor = 1e6 / sum(spikein_reads)— exact pooled calculation using each sample'saligned/spikein/{sample}_stats.tsv - with_input: spike-in-weighted mean of per-sample factors,
sum(f_i × S_ip_i) / sum(S_ip_i), which correctly weights samples by their sequencing depth - deseq2 / edgeR: arithmetic mean fallback (these factors come from fitted statistical models rather than raw spike-in counts)
| Per-sample bigwig | Merged bigwig | |
|---|---|---|
| Input BAM | aligned/{sample}.bam |
aligned/merged/{group}.bam (samtools merge) |
| Scale factor | individual sample factor | mean of all samples in group |
| Factor source | resources/{group}_scaling_factors.tsv |
same file, averaged |
Peak Calls (peaks/)¶
Peak calling results are simplified to 3-column BED files (chr, start, end):
peaks/
├── {method}/ # macs2, macs3, homer, lanceotron, or seacr
│ ├── {sample}.bed # Individual sample peaks
│ └── merged/ # Consensus peaks across replicates
│ └── {group}.bed
Supported Peak Callers:
- MACS2: Standard peak calling
- MACS3: Updated MACS peak calling
- HOMER:
findPeaks-based peak calling - LanceOtron: ML-based peak calling
- SEACR: Sparse Enrichment Analysis for CUT&RUN/CUT&Tag
Peak File Format:
- BED: Simple 3-column genomic coordinates (chr, start, end) extracted from each caller's native output
Read Counts (readcounts/)¶
Quantification files for RNA-seq and CRISPR assays:
readcounts/
├── feature_counts/
│ └── read_counts.tsv # Combined featureCounts output
└── salmon/ # RNA-seq only
└── salmon_counts.csv # Combined Salmon quantification
Quality Control (qc/)¶
Comprehensive QC metrics:
qc/
├── fastqc_raw/ # FastQC reports on raw reads
│ ├── {sample}_1_fastqc.html # Read 1 (paired-end)
│ └── {sample}_2_fastqc.html # Read 2 (paired-end)
├── fastq_screen/ # Contamination screening (if enabled)
│ ├── {sample}_1_screen.html
│ └── {sample}_2_screen.html
├── qualimap_bamqc/ # BAM quality metrics (non-RNA assays)
│ └── {sample}/
│ └── qualimapReport.html
├── qualimap_rnaseq/ # RNA-specific BAM QC (RNA assay only)
│ └── {sample}/
│ └── qualimapReport.html
├── alignment_stats.tsv # Aggregated alignment statistics
├── library_complexity/ # Picard duplicate metrics
│ └── {sample}.metrics
└── frip_enrichment/ # FRiP scores (if enabled, peak-calling assays)
└── {method}/
├── {sample}_frip.pdf
└── {sample}_frip.txt
Note
For single-end data, FastQC and FastQ Screen files use {sample}_fastqc.html / {sample}_screen.html without the _1/_2 suffix.
QC Metrics Include:
- Read quality scores per base position
- GC content distribution
- Adapter content
- Duplication rates
- Mapping statistics
- Coverage uniformity
UCSC Genome Browser Hub (hub/)¶
Ready-to-load UCSC track hub generated by TracKNado:
The hub structure (genomes.txt, trackDb.txt, etc.) is generated by TracKNado and includes links to your bigWig and other track files.
Usage:
- Upload the
hub/directory to a web-accessible location - Load in UCSC Genome Browser using the hub URL
- Or use locally with IGV/other genome browsers
Heatmaps (heatmap/)¶
DeepTools-generated heatmaps and metaplots (for assays with peak calling). One set of plots is produced per pileup method × scaling method combination, mirroring the bigwig structure:
heatmap/
├── {method}/ # deeptools, homer, or bamnado
│ ├── unscaled/
│ │ ├── heatmap.pdf # Signal heatmap over regions of interest
│ │ └── metaplot.pdf # Average signal profile
│ ├── csaw/ # If CSAW normalisation enabled
│ │ ├── heatmap.pdf
│ │ └── metaplot.pdf
│ └── spikein/{spikein_method}/ # If spike-in normalisation enabled
│ ├── heatmap.pdf
│ └── metaplot.pdf
└── merged/ # If consensus groups defined
└── {method}/
├── unscaled/
│ ├── heatmap.pdf
│ └── metaplot.pdf
└── csaw/ # If CSAW normalisation enabled
├── heatmap.pdf
└── metaplot.pdf
Motif Analysis (motifs/)¶
Motif enrichment analysis for peak-calling assays (if enabled):
motifs/
├── homer/ # HOMER findMotifsGenome results
│ └── {peak_method}/
│ └── {sample}/
└── meme/ # MEME-ChIP results (if enabled)
└── {peak_method}/
└── {sample}/
Genome Browser Plots (track_plots/)¶
Publication-ready visualisations generated with PlotNado (if configured with plotting coordinates). One set of plots is produced per pileup method × scaling method combination:
track_plots/
├── {method}/ # deeptools, homer, or bamnado
│ ├── unscaled/
│ │ ├── {region_name}.{format} # Named regions from BED file
│ │ ├── {chr}-{start}-{end}.{format} # Unnamed regions use coordinates
│ │ └── template.toml # PlotNado configuration template
│ ├── csaw/ # If CSAW normalisation enabled
│ │ ├── {region_name}.{format}
│ │ └── template.toml
│ └── spikein/{spikein_method}/ # If spike-in normalisation enabled
│ ├── {region_name}.{format}
│ └── template.toml
└── merged/ # If consensus groups defined
└── {method}/
├── unscaled/
│ ├── {region_name}.{format}
│ └── template.toml
└── csaw/ # If CSAW normalisation enabled
├── {region_name}.{format}
└── template.toml
Output format can be svg, png, or pdf as configured.
GEO Submission (geo_submission/)¶
Pre-formatted files for GEO/SRA submission (if enabled):
geo_submission/
├── samples_table.txt # Sample metadata (TSV format)
├── md5sums.txt # Combined checksums
├── raw_data_checksums.txt # Checksums for raw FASTQ files
├── processed_data_checksums.txt # Checksums for processed files
├── upload_instructions.txt # Instructions for GEO upload
├── {sample}_1.fastq.gz # Symlinks to raw FASTQ files
├── {sample}_2.fastq.gz
├── {sample}_{method}_{scale}.bigWig # Renamed processed bigWig files
├── {sample}_{method}.bed # Renamed peak files
└── {assay}/ # Upload directory
QuantNado Dataset (dataset.zarr)¶
When create_dataset: true is set in the config, SeqNado runs QuantNado to produce a multi-sample signal store from all aligned BAM files:
dataset.zarr/ # Zarr v3 store (single-assay runs)
multiomics/dataset.zarr/ # Zarr v3 store (multiomics runs)
Structure:
The store contains one Zarr array per chromosome, each with shape (n_samples × chromosome_length) holding integer base-resolution (1 bp) read depth values. All samples are stored together in a single matrix per chromosome, making joint access across samples efficient.
dataset.zarr/
├── chr1/ # Array: (n_samples, chrom_length), uint16/uint32
├── chr2/
├── ...
└── metadata/
├── completed # Boolean mask: which samples are fully processed
├── sparsity # Per-sample sparsity (% zero-coverage positions)
└── sample_hashes # MD5 hash of each BAM header for integrity checks
Root-level Zarr attributes store sample names, chromosome sizes, chunk length, and any sample metadata columns (assay, cell type, etc.) attached via QuantNado.
Key properties:
| Property | Value |
|---|---|
| Resolution | 1 bp |
| Dtype | uint16 (or uint32 for high-depth samples) |
| Chunking | (1 sample × 65,536 bp) |
| Compression | Blosc/zstd |
Downstream use:
The dataset is designed for programmatic access via Python. See the QuantNado documentation for the full API, including lazy loading with xarray/dask and region extraction:
from quantnado.dataset import QuantNadoDataset
ds = QuantNadoDataset("seqnado_output/chip/dataset.zarr")
# Extract a region as an xarray DataArray (lazy, dask-backed)
region = ds.extract_region("chr9:77,418,764-78,339,335")
# Load a full chromosome for all samples
xr_dict = ds.to_xarray(chromosomes=["chr1"])
Note
Only canonical chromosomes (matching chr* without underscores) are included in the store by default. The dataset is built from the final processed BAMs, so it reflects all filtering and duplicate-removal steps applied upstream.
Assay-Specific Outputs¶
ATAC-seq¶
ATAC-seq includes Tn5 insertion site correction during BAM processing and supports all peak callers. LanceOtron is the default peak caller.
Key outputs:
aligned/{sample}.bam-- Tn5-shifted, filtered alignmentspeaks/lanceotron/{sample}.bed-- ML-based peak calls (default)bigwigs/{method}/{sample}.bigWig-- Coverage tracks
Key Metrics:
- Fragment size distribution (nucleosome periodicity visible in QC report)
- FRiP (Fraction of Reads in Peaks) score (if enabled)
ChIP-seq¶
Standard ChIP-seq with support for input controls:
Key outputs:
aligned/{sample}.bam-- Final alignmentspeaks/{method}/{sample}.bed-- Peak calls (MACS2, HOMER, LanceOtron)peaks/{method}/merged/{group}.bed-- Consensus peakstag_dirs/{sample}/-- HOMER tag directoriesmotifs/homer/{method}/{sample}/-- Motif analysis (if enabled)
Normalisation resources (if applicable):
resources/{spikein_method}/normalisation_factors.json-- Spike-in scaling factorsresources/binned_counts/read_counts.tsv-- Genomic bin counts for CSAWresources/{group}_scaling_factors.tsv-- CSAW scaling factors per consensus groupbigwigs/deeptools/spikein/{spikein_method}/{sample}.bigWig-- Spike-in normalised tracksbigwigs/deeptools/csaw/{sample}.bigWig-- CSAW normalised tracks
CUT&Tag¶
CUT&Tag is a separate assay from ChIP-seq, with SEACR as the default peak caller and optional Tn5 shift correction:
Key outputs:
aligned/{sample}.bam-- Final alignments (optionally Tn5-shifted)peaks/seacr/{sample}.bed-- SEACR peak calls (default)bigwigs/{method}/{sample}.bigWig-- Coverage tracks
RNA-seq¶
RNA-seq alignment uses STAR, with quantification by featureCounts and/or Salmon:
Key outputs:
aligned/{sample}.bam-- STAR-aligned, processed BAMreadcounts/feature_counts/read_counts.tsv-- Combined gene-level countsreadcounts/salmon/salmon_counts.csv-- Salmon quantification (if enabled)bigwigs/{method}/{sample}_plus.bigWig-- Stranded coverage (plus strand)bigwigs/{method}/{sample}_minus.bigWig-- Stranded coverage (minus strand)qc/qualimap_rnaseq/{sample}/qualimapReport.html-- RNA-specific QC
Methylation (METH)¶
Methylation calling uses MethylDackel, with support for both bisulfite and TAPS methods:
methylation/
├── methyldackel/
│ ├── {sample}_{genome}_CpG.bedGraph # CpG methylation calls
│ ├── {sample}_{genome}_CpG_inverted.bedGraph # TAPS-inverted calls (TAPS method only)
│ └── bias/
│ └── {sample}_{genome}.txt # M-bias data
├── methylation_conversion.tsv # Conversion rate statistics
└── methylation_conversion.png # Conversion rate plot
Samples are split by genome (reference vs spike-in) with split BAMs at aligned/spikein/{sample}_{genome}.bam.
SNP / Variant Calling¶
Variant calling using bcftools:
variant/
├── {sample}.vcf.gz # Called variants
└── {sample}.anno.vcf.gz # Annotated variants (if annotation enabled)
QC stats are produced at qc/variant/{sample}.stats.txt.
Micro Capture-C (MCC)¶
Chromatin contact analysis:
CRISPR Screens¶
Guide RNA quantification with optional MAGeCK analysis:
readcounts/
├── feature_counts/
│ └── read_counts.tsv # featureCounts guide counts (always produced)
└── mageck/ # MAGeCK analysis (if enabled)
├── mageck_count.count.txt # Raw guide counts
├── mageck_count.count_normalized.txt # Normalised counts
├── mageck_count.countsummary.txt # Count summary
├── mageck_mle.gene_summary.txt # MAGeCK MLE gene-level results
├── mageck_mle.sgrna_summary.txt # MAGeCK MLE sgRNA-level results
└── design_matrix.txt # Design matrix used
Accessing Your Results¶
Command Line¶
# Navigate to output directory
cd seqnado_output/
# View main report
firefox {assay}/seqnado_report.html &
# List peaks
ls -lh {assay}/peaks/macs2/
# Load BAM in IGV
igv {assay}/aligned/{sample}.bam
Opening Reports¶
The HTML reports can be opened directly in your browser:
# On local machine
open seqnado_output/chip/seqnado_report.html
# Via X11 forwarding on HPC
firefox seqnado_output/chip/seqnado_report.html &
# Transfer to local machine
scp -r user@hpc:path/to/seqnado_output/ ./
Finding Specific Outputs¶
Peak calling results¶
Coverage tracks for visualisation¶
QC HTML reports¶
See Also:
- Pipeline Overview - How outputs are generated
- Tools Reference - Understanding tool-specific outputs