Glossary · Genomics and Variants
FRiP (fraction of reads in peaks)
A single number that tells you whether your ChIP-seq or ATAC-seq depth landed on real signal or was wasted on background.
By Ming "Tommy" Tang, Director of Bioinformatics in Big Pharma · Reviewed September 2026 · 2 min read
Also: fraction reads in peaks
Definition
FRiP (fraction of reads in peaks) is the proportion of uniquely aligned, non-duplicate reads from a ChIP-seq, CUT&RUN, or ATAC-seq experiment that fall inside the set of peaks called from that same dataset. It is calculated as reads in peak regions divided by total aligned reads, usually reported as a fraction or percentage. FRiP is a signal-to-noise metric: a high value means most of your sequencing depth landed on real binding sites or accessible chromatin, while a low value means most reads landed in background regardless of how many peaks the caller reported.
You run into FRiP right after peak calling, at the same QC checkpoint where you're deciding whether the experiment is worth carrying forward into differential binding, motif enrichment, or footprinting. The peak caller has already given you a list of regions; FRiP tells you how much of your sequencing budget actually supports that list versus how much landed in open, unbound genomic space.
It matters because peak count alone lies to you. A caller run with loose settings will happily hand back thousands of peaks from a failed pulldown or a poorly tagmented ATAC library. FRiP is the number that catches that, because it is computed from the same alignment and the same peak set, so it can't be inflated just by relaxing the caller's p-value cutoff.
Why it matters
Getting this right decides whether you troubleshoot now or waste time on downstream analysis of noise. ENCODE sets FRiP ≥1% as a ChIP-seq quality guideline and ≥0.2 (optimal ≥0.3) for ATAC-seq; a ChIP-seq sample with 5,000 called peaks but a FRiP of 0.4% is telling you the antibody pulled down mostly nonspecific chromatin, not that you have a rich binding landscape. For ATAC-seq, a low FRiP alongside a flat TSS enrichment profile usually points to incomplete tagmentation or high mitochondrial contamination rather than genuinely low chromatin accessibility.
Ignore it and you build differential-binding or footprinting analysis on a peak set that is mostly background, and every downstream p-value and fold-change inherits that noise. Checking FRiP before investing in motif or pathway analysis is a five-minute gate that can save days of analysis on unusable data.
Where people get it wrong
The mistake is treating FRiP as a universal pass/fail cutoff instead of a comparative signal-to-noise metric. FRiP is peak-caller-dependent: running the same BAM through MACS2, MACS3, or Genrich changes both the numerator (which reads count as "in a peak") and the peak set behind the denominator, so a FRiP computed against one caller's output isn't directly comparable to another's. Practitioners also conflate a high peak count with quality: a caller can report many peaks from a diffuse noisy signal while FRiP stays low, and conversely a factor with a small number of strong, punctate sites can post a modest FRiP while still being a clean experiment. And a FRiP that clears the ENCODE bar does not by itself validate the biology; you still need to check that peaks land at expected genes for that factor before trusting the pulldown worked.
A concrete example
Compute FRiP for a ChIP-seq BAM against its own MACS2 peak calls using deepTools plotEnrichment, which needs a sorted, indexed BAM and the peaks as a BED file. For ATAC-seq, call peaks first with shift/extend parameters tuned for Tn5 cut sites, then run the same enrichment check.
# ChIP-seq: FRiP against your own peak calls
samtools sort -o sample.sorted.bam sample.bam
samtools index sample.sorted.bam
plotEnrichment \
-b sample.sorted.bam \
--BED peaks.narrowPeak \
-o frip_enrichment.png \
--outRawCounts frip_counts.txt
# frip_counts.txt reports reads-in-peaks and total reads per BAM;
# FRiP = reads_in_peaks / total_reads
# ATAC-seq: call peaks with Tn5-appropriate shift/extend, then check FRiP the same way
macs2 callpeak -t ATAC_sample.bam --shift -75 --extsize 150 \
-n atac_peaks --format BAMPERelated terms
Questions people ask
- What is a good FRiP score?
For ATAC-seq, ENCODE calls FRiP above 0.2 acceptable and above 0.3 optimal. For ChIP-seq, the working threshold is much lower, around 1%, because far fewer reads are expected to fall in narrow, sparse binding sites across a large mammalian genome. Treat both as guidelines to flag problems, not hard pass/fail gates.
- Why is my FRiP score low even though I have thousands of peaks?
A large peak count with low FRiP usually means the caller's threshold is too permissive and most called regions are capturing background reads rather than concentrated signal. It can also mean genuine antibody or tagmentation problems: a weak ChIP pulldown or under-tagmented ATAC library spreads reads diffusely across the genome instead of concentrating them at true sites.
- Does FRiP mean the same thing for ChIP-seq and ATAC-seq?
The formula is identical, reads in peaks divided by total aligned reads, but the expected range differs because the underlying biology differs. ChIP-seq targets a specific protein at a limited number of genomic sites, so FRiP is naturally much lower than ATAC-seq, which captures all accessible chromatin genome-wide.
- Can I compare FRiP scores across different peak callers?
Not directly. Because FRiP depends on which peaks were called, switching from MACS2 to MACS3 or Genrich changes the peak set and therefore the FRiP value even on the identical BAM file. Only compare FRiP across samples processed with the same peak caller and settings.
- What should I check if FRiP looks fine but the experiment still seems off?
Pair FRiP with TSS enrichment, duplication rate, and mitochondrial read fraction, then confirm peaks actually sit at genes or sites you'd expect biologically for that factor or cell type. A FRiP score that clears the threshold does not confirm the antibody or assay worked; biological validation is a separate check.
Related reading on the blog
Sources
- ATAC-seq Data Standards and Processing Pipeline — ENCODE FRiP thresholds for ATAC-seq (>0.3 optimal, >0.2 acceptable)
- ATAC-seq, Epigenomics Workshop 2025 — FRiP calculation and its dependence on peak-calling methodology
- ChIP-seq Quality Control Guidelines — ChIP-seq FRiP >=1% threshold and caveats against hard cutoffs
- scATAC-pro: A Comprehensive Workbench for Single-Cell Chromatin Accessibility Sequencing Data — FRiP thresholds for single-cell ATAC-seq
- plotEnrichment, deepTools Documentation — Command for calculating FRiP from BAM and BED files