SimLoRD simulates PacBio SMRT long reads from a reference FASTA. Its error model follows the number of passes a molecule gets around the circular template. More passes give a more accurate consensus read. Each read draws a pass count, and the insertion, deletion and substitution probabilities fall with it. You give a reference, a coverage and a read-length rule. It returns a FASTQ, and optionally a SAM of the true alignments.
Key assumptions: the single-pass error rates are the ones you set (defaults 0.11 insertion, 0.04 deletion, 0.01 substitution), and the pass count follows a fitted chi-squared model capped by --max-passes (default 40).
When to use it
Test a PacBio-oriented pipeline across a range of accuracy, from noisy single-pass to near-perfect consensus reads.
Draw read lengths from a log-normal distribution, a fixed length, or the lengths in your own FASTQ.
Get the true origin of each read from the header.
Alternatives on biosimhub: PBSIM2 and PBSIM3 use quality-score HMMs and cover Nanopore too. CycSim learns errors from real reads and ties them to the local sequence.
Install it yourself
SimLoRD 1.0.4 is on bioconda (dry-run resolved on linux-aarch64 to build py310h5cfe7d9_6, 34 kB).
The last argument is the output prefix. The reads go to sim.fastq. Without --no-sam it also aligns every read and writes sim.sam. Other options: --num-reads (default 1000) instead of --coverage, --gzip, --without-ns, and --generate-reference GC LENGTH to make a random genome.
Run the tested example
This recipe builds SimLoRD in a container and runs the example below. It needs Docker and nothing else. It last ran on 2026-10-12 in 0.8 s.
Ranges are the limits used for the example recipe; the program itself may accept more.
Reading the output
The reference is one 20,000 bp sequence named synthetic_ref. At 5x with fixed 1000 bp reads, SimLoRD writes 100 reads (100,000 bases) into sim.fastq (218,756 bytes). simlord_log.txt is empty.
numberOfErrors=21 is the count of inserted, deleted and changed bases in this read.
passes=3.67 is the pass count. Fewer passes mean more errors. The second read has 9.45 passes and 2 errors.
Quality values are one flat character (2, Phred 17) on every base. They carry no per-base information.
Across the 100 reads the mean is 4.98 errors per 1000 bp and 9.88 passes.
Your own runs
Single pass. Add --max-passes 1. Result: 100 reads, all with passes=1, and a mean of 173.0 errors per read (17.3%) against 4.98 before.
Real-looking lengths. Replace --fixed-readlength 1000 with --lognorm-readlength and use coverage 10. Result: 24 reads, 212,073 bases, mean 8,836 bp. Coverage targets total bases (10 x 20,000 = 200,000), so a long-tailed length draw gives fewer reads.
Your genome. Mount your FASTA, keep --no-sam while you tune, and drop it when you need truth alignments.
Pitfalls
Error rates are single-pass rates.--prob-ins, --prob-del and --prob-sub describe a one-pass read. Multi-pass reads get fewer errors, so the reads you see are cleaner than those values.
Flat quality scores. Tools that use base qualities see no signal here. Do not use these FASTQs to test quality filtering.
Coverage is by bases. The read count depends on the length rule. Use --num-reads for an exact count.
SAM output costs time. Without --no-sam, SimLoRD aligns every read and writes a SAM file. Large genomes need the extra time and disk.
No seed option. The help lists no seed flag, so runs are not repeatable.