All chapters

Read Trimming

intermediate

Trimming Decision Flow

Read Trimming Workflow

📄Raw FASTQ
🔍FastQC Check
✂️fastp Trim
✅FastQC Again
📄Clean FASTQ
Raw FASTQ: Before QC
FastQC Check: Check adapters & Q30
fastp Trim: --detect_adapter_for_pe
FastQC Again: Verify improvement
Clean FASTQ: Ready for alignment

Why Trim?

  • Adapter sequences introduced during library prep contaminate reads if insert < read length
  • Low-quality bases at 3' end increase misalignment and false variant calls
  • Poly-G tails (NovaSeq two-colour chemistry) at read ends confuse aligners
  • Over-trimming is as harmful as under-trimming - removes real sequence
  • Recommended: trim adapters always; quality trimming only if Q30 rate <80%

fastp (Recommended)

fastp is 2–3× faster than Trimmomatic, auto-detects adapters, and generates built-in QC reports. The standard tool in modern pipelines including ATGC Flow.

code
# Basic paired-end trimming
fastp \
  -i R1.fastq.gz -I R2.fastq.gz \
  -o clean_R1.fastq.gz -O clean_R2.fastq.gz \
  --detect_adapter_for_pe \
  --thread 8 \
  -j fastp.json -h fastp.html

# With quality filtering (clinical)
fastp \
  -i R1.fastq.gz -I R2.fastq.gz \
  -o clean_R1.fastq.gz -O clean_R2.fastq.gz \
  --detect_adapter_for_pe \
  --qualified_quality_phred 20 \
  --unqualified_percent_limit 40 \
  --length_required 36 \
  --correction \
  --thread 8 \
  -j fastp.json -h fastp.html

Trimmomatic

code
trimmomatic PE -threads 8 \
  R1.fastq.gz R2.fastq.gz \
  R1_paired.fastq.gz R1_unpaired.fastq.gz \
  R2_paired.fastq.gz R2_unpaired.fastq.gz \
  ILLUMINACLIP:TruSeq3-PE.fa:2:30:10:2:True \
  LEADING:3 \
  TRAILING:3 \
  SLIDINGWINDOW:4:20 \
  MINLEN:36

# Parameter explanation:
# ILLUMINACLIP: adapter_file:seed_mismatches:palindrome_threshold:simple_threshold
# LEADING/TRAILING: remove bases below Q3 from ends
# SLIDINGWINDOW:4:20 - scan 4-base window, cut when avg <Q20
# MINLEN:36 - discard reads shorter than 36 bp

Trimming Best Practices

  • Always run FastQC before AND after trimming to confirm improvement
  • Keep R1/R2 in sync - unpaired reads are discarded in paired-end alignment
  • For WES: use Agilent/Illumina/Twist-specific adapter sequences
  • Do NOT quality-trim if reads are already Q30+ - unnecessary information loss
  • Poly-G trimming: add --trim_poly_g for NovaSeq data (2-colour chemistry)
  • fastp --correction: corrects mismatches in overlapping paired-end reads
  • Target: >95% reads passing with >90% bases ≥Q30 after trimming