RandomReadsMG
Generates synthetic reads from a set of FASTA assemblies, assigning each assembly its own coverage depth so that one run produces a mixed community with known abundance ratios. Read headers record the source file, contig, strand, position, insert size, and taxID (when present) for use in accuracy evaluation.
Overview
RandomReadsMG is the multi-genome version of RandomReads. Where randomreads.sh draws reads from one reference, randomreadsmg.sh takes many assemblies (one genome per file, or several contigs per file) and gives each file a coverage depth. Depths can be set explicitly, drawn from a distribution, or derived from a target read count.
Use it to:
- Build mock metagenomes with known genome abundances.
- Test binners, taxonomic classifiers, and abundance estimators against ground truth.
- Generate several correlated samples from one community, for differential-coverage testing.
Three read models are available: Illumina short reads (single-end or paired, the default), PacBio HiFi-style long reads, and ONT-style long reads. Illumina mode can add substitution errors, adapter contamination, and PCR duplicates. Long-read modes can add platform-style substitution, insertion, and deletion errors, and can embed an exact truth CIGAR in each header. PCR duplicates are available in every mode.
Each read header has the form f_(file number)_c_(contig)_s_(strand)_p_(position)_i_(insert)_r_(reference length), followed by d_(duplicate flag) when PCR duplicates are enabled, then tid_(taxID) when a taxID is found or name_(filename) otherwise, and optionally cigar_(CIGAR). All numbers are 0-based. Paired reads end with a pair number such as " 1:" or " 2:".
Basic Usage
randomreadsmg.sh in=<files> out=<file> [options]
randomreadsmg.sh *.fa out=reads.fq.gz
randomreadsmg.sh ecoli.fa=40 ruber.fa=0.1 phix.fa=10 out=reads.fq.gz
Input can be one file, a directory, a comma-delimited list, or bare file names with no "=" sign. Each input file is a separate genome. The first form gives every file a random depth. The second form sets the depth of each named file directly with <file>=depth.
With no mode or platform flag, reads are paired Illumina reads of 150 bp with an average insert of 300 bp. With only out= given, paired output is interleaved.
Parameters
Parameters are grouped as in the shell script usage text. The last group lists options the Java class accepts that the usage text does not mention.
File Parameters
- in=<file,file>
- Assembly input. Can be a single file, a directory of files, or a comma-delimited list. Unrecognized arguments with no "=" sign are also treated as input files if they exist and are readable. Default: none (required).
- out=<file>
- Synthetic read output destination. If paired reads are generated and only out= is given, output is interleaved. Default: null (no output written).
- out2=<file>
- Read 2 output, when twin files are wanted for paired reads. Requires out=. Default: null.
Depth and Processing Parameters
- mindepth=1
- Minimum average depth assigned to an assembly when depths are drawn randomly. Alias: mincov=.
- maxdepth=256
- Maximum average depth assigned to an assembly when depths are drawn randomly. Alias: maxcov=.
- depth=
- Sets mindepth and maxdepth to the same value, so every file gets this depth. Alias: cov=. Default: unset (mindepth=1, maxdepth=256).
- reads=-1
- If positive, set each file's depth from its size so that it yields approximately this many reads (read pairs when paired). Requires reading each input file twice: once to count bases, once to generate reads. Files with a custom depth (cov_x or x=) keep that depth. Custom depths set via
cov_xorx=take precedence but are still modified byjitterwhen it is positive; onlyreads=-derived depths skip jitter. - readspercontig=-1
- If positive, ignore depth and generate this many reads from each contig. The base budget is this count times the read length (times 2 when paired).
- mode=min4
- Distribution used to draw random depths: min4, exp, root, or uniform. Uniform is the same as linear. Bare words (e.g. exp) are also accepted. See Algorithm Details for the formulas.
- cov_x=
- Set a custom depth for the file named x. The name is matched against the file name with its path removed (cov_foo.fa=5 for foo.fa). x can instead be a taxID, matched when the file name starts with tid_x_ (cov_7=5 for tid_7_foo.fa). Alias: depth_x=.
- <file>=x
- Alternate way to set a custom depth. The file named on the left (which must exist) gets depth x. For example, ecoli.fa=40.
- circular=f
- Treat each contig as circular. Each contig's sequence is doubled before reads are drawn, so reads can span the origin. Depth is halved to compensate for the doubled sequence.
- threads=
- Maximum number of threads. Default: logical core count. Each input file uses one thread. The total is the smallest of threads, the number of files, and mcg. With exactly one input file and seed set to -1, this value also enables multithreaded processing of that file. See Technical Notes.
- seed=-1
- If non-negative, use this RNG seed. Output is then deterministic regardless of thread count: each file's reads are a function of (seed, seed2, file name). With seed=-1, output varies between runs.
Multi-sample Simulation Parameters
These options generate several correlated samples from one genome set, for testing differential-coverage binners. Each sample is one invocation.
- depthseed=-1
- Seed for per-file base depth assignment. -1 uses seed. Invocations that share a depthseed, but have different seeds, draw the same base depth for each genome, so the samples are correlated.
- jitter=0.0
- Multiply each file's depth by a random factor exp(u), where u is uniform in [-jitter, +jitter]. The variation is symmetric in log space: jitter=0.1 gives roughly +/-10% per-sample variation around the base depth. With jitter=0 and a shared depthseed, samples have identical depths.
- seed2=-1
- Optional separate seed for the jitter stream. -1 uses seed. Use it to reproduce one specific jitter pattern independently of the generation seed. It is also mixed into the generation stream, so samples that share a depthseed but differ in seed or seed2 produce independent reads.
- zeroprob=0
- Probability that each genome is absent (depth 0) from a sample. The decision is keyed on depthseed, so samples that share a depthseed share their presence/absence pattern, and independent depthseeds draw independently. Applies only to randomly chosen depths, not to cov_x= or reads=.
- zeroprobbias=0
- Biases absence probability by input-file rank. 0 gives every file the flat zeroprob. 1 ramps linearly so the last file is about twice as likely to be absent as average, and the first about never absent. The mean stays at zeroprob. Files are ranked in argument order.
Example: four correlated samples with about 10% depth variation, drawn from the same community:
for S in 1 2 3 4; do
randomreadsmg.sh config=genomes.txt depthseed=777 seed=$S jitter=0.1 \
out=sample$S.fq.gz
done
Artifact Parameters
- pcr=0.0
- PCR duplicate rate, 0 to 1. A duplicate reuses the start position, strand, and insert of the previous read on the same contig, and its header carries d_1. Originals carry d_0. Alias: pcrrate=.
- randomkmer=f
- Bias read start sites with random k-mer priming. Giving kprime a numeric value also turns this on. Aliases: randompriming=, hexamer=, kmerprime=.
- kprime=6
- Length k of the random primer k-mer. Giving a numeric value sets randomkmer=true. Aliases: kmerprime=, hexamer=.
- kpower=0.5
- Raises the linear primer distribution to this power. Must be greater than 0. Higher powers increase priming bias. Aliases: kmerpower=, kexp=, kmerexp=.
- minkprob=0.1
- Minimum primer k-mer probability. Alias: minkmerprob=.
Platform Parameters
- illumina
- Use Illumina length and error model. This is the default. Bare word, or platform=ILLUMINA (alias ILL).
- pacbio
- Use PacBio HiFi length and error model. Bare word, or platform=PACBIO (alias PB).
- ont
- Use ONT length and error model. Bare word, or platform=ONT (alias NANOPORE).
- paired=true
- Generate paired reads. Applies only to Illumina mode. PacBio and ONT modes ignore this flag and write single reads.
- length=150
- Read length for Illumina mode. Aliases: len=, readlen=, readlength=. In long-read mode it also sets the mean read length (see Technical Notes). Default: 150.
- avginsert=300
- Average insert size for paired reads. Each insert is drawn from a Gaussian with mean avginsert and standard deviation 0.25 times avginsert. Alias: insert=.
Long-read Length Parameters
- minlen=1000
- Minimum read length for PacBio and ONT modes. Alias: minlength=. Contigs shorter than minlen+50 are skipped.
- meanlen=15000
- Mean read length for PacBio and ONT modes. Also sets readlen, the same field that length= sets (see Technical Notes). Alias: avglen=.
- maxlen=100000
- Maximum read length for PacBio and ONT modes. Alias: maxlength=.
- tailfactor=0.2
- ONT only. Probability that a read length is drawn from the heavy exponential tail rather than the log-normal core. Alias: ontLongTailFactor=.
- pbsigma=0.5
- PacBio only. Standard deviation of the log-normal read length distribution, in log space. Alias: pacbiosigma=.
Error Parameters (All Platforms)
- adderrors=f
- Add model-specific errors. For Illumina, substitutions are drawn from per-base quality scores. For PacBio and ONT, substitution, insertion, and deletion errors are applied using the rates in the long-read error parameters. Without this flag, long reads carry no model errors. Alias: addErrors=.
- subrate=0.0
- Add substitutions at this rate per base, independent of platform model. Alias: snprate=.
- insrate=0.0
- Add length-1 insertions at this rate, independent of platform model.
- delrate=0.0
- Add length-1 deletions at this rate, independent of platform model.
- indelrate=
- Sets insrate and delrate each to half of this value.
Illumina-specific Parameters
- illuminanames=f
- Generate Illumina-format headers of the form instrument:number:number:flowcell:lane:tile:x:y, then read number, filter flag, control bits, and barcode. The mate's header is derived from the first read's header with the read number changed to 2. Alias: illuminaHeaders=.
- qavg=25
- Average quality score, used for generating Illumina errors. Aliases: qscore=, avgq=, avgqual=.
- qrange=0
- Quality score range. Each base's quality is drawn uniformly from qavg-qrange to qavg+qrange.
- qflat=f
- Use one quality value for all bases in a read, to improve compression when qrange>0. Aliases: flat=, flatqual=.
- addadapters=f
- Add adapter sequence to paired reads whose insert is shorter than the read length. Bases beyond the adapter are set to G at quality 8 or lower.
- adapter1=
- Custom R1 adapter, as observed in R1. Default: the standard Illumina R1 adapter. Aliases: fragadapter=, fragadapter1=, adapter=.
- adapter2=
- Custom R2 adapter, as observed in R2. Default: the standard Illumina R2 adapter. Alias: fragadapter2=.
- barcode=
- Barcode written into Illumina headers. Default: a random 10+10 base barcode.
- machine=
- Machine name written into Illumina headers. Default: "LH000" followed by a random number.
Long-read Error Parameters
These apply in addition to subrate, insrate, and delrate, and only when adderrors=t. They can be overridden for any platform.
- srate=-1
- Substitution rate per base. Default: 0.0025 for ONT, 0.00015 for PacBio.
- irate=-1
- Insertion rate per base. Default: 0.0055 for ONT, 0.000055 for PacBio.
- drate=-1
- Deletion rate per base. Default: 0.0045 for ONT, 0.000045 for PacBio.
- hrate=-1
- Homopolymer error boost. The indel chance rises by this much for each additional base of the same identity in a run. Default: 0.02 for ONT, 0.000015 for PacBio.
- addcigar=f
- Append an exact extended CIGAR (=, X, I, D, M) to PacBio and ONT read headers. The CIGAR is in forward-reference order. Requires a long-read platform, and cannot be combined with circular=t. Alias: cigar=. Default false, which keeps the legacy header format.
Coverage Variation Parameters
- sinewave=f
- Enable coverage variation within contigs, using a sum of sine waves with an origin-of-replication trend. Alias: wavecov=. Setting waves to a positive number also enables this mode.
- waves=4
- Number of sine waves to combine. More waves create more irregular peaks and valleys. Aliases: sinewaves=, numwaves=. Any positive value also enables sinewave mode.
- waveamp=0.70
- Maximum variation in coverage from the sine waves. Higher values (0 to 1) give larger differences between high and low coverage regions. Alias: maxamplitude=.
- oribias=0.25
- Strength of the origin-of-replication bias: the maximum linear decrease in coverage from the start to the end of a contig.
- minprob=0.10
- Minimum coverage probability, as a fraction of the target. Keeps coverage from dropping so low that gaps appear in the assembly. Alias: minwaveprob=.
- minperiod=2k
- Minimum sine wave period, in bp. Accepts K and M suffixes. Default: 2000.
- maxperiod=80k
- Maximum sine wave period, in bp. Accepts K and M suffixes. Default: 80000.
- variance=0.0
- Variation in coverage between contigs within an assembly, as plus or minus this factor. Alias: depthvariance=. In the current source this is realized as a random linear decline in coverage along each contig, not as a per-contig depth ratio. It is ignored when sinewave mode is on. See Technical Notes.
Java Parameters
- -Xmx
- Set Java heap memory limit. Format: -Xmx20g (20 GB) or -Xmx200m (200 MB). Overrides autodetection. The maximum is typically 85% of physical memory.
- -eoom
- Exit when an out-of-memory exception occurs. Requires Java 8u92+.
- -da
- Disable Java assertions.
Additional Options Accepted by the Source
The following keys are parsed by RandomReadsMG.java but do not appear in the shell script usage text. Defaults are from the source.
- platform=ILLUMINA
- Platform by name: ILLUMINA (or ILL), ONT (or NANOPORE), PACBIO (or PB). Same effect as the bare-word flags.
- ref=
- Alias for in=. Input files are the same.
- verbose=f
- Print extra progress messages, such as stream start and end.
- loud=t
- Print each file's depth to stderr, as "File n, name ...: depth=...". Turned off automatically in single-file multithreaded mode.
- tree=f
- Load the taxonomy tree (TaxTree) for taxID handling. Alias: usetree=. Default false.
- sfthreads=1
- Threads used for a single input file. Aliases: singleFileThreads=, sft=. Only used when seed is negative. Raises the global thread count to at least this value.
- mcg=2048
- Maximum number of input files processed concurrently. Aliases: concurrency=, maxConcurrentGenomes=.
- lane=
- Lane number written into Illumina headers. Default: random.
- readlen=, avglen=, readlength=, len=
- Aliases for length=. Each sets both the read length and the long-read mean length.
- depthmode=
- Alias for mode=.
- interleaved=, int=
- Aliases for paired=.
- jitterseed=, depthjitter=, seed2variance=, absentprob=, zerobias=
- Aliases for seed2=, jitter=, jitter=, zeroprob=, and zeroprobbias= respectively.
- cigar=
- Alias for addcigar=.
- pacbiosigma=, ontLongTailFactor=, pcrrate=
- Aliases for pbsigma=, tailfactor=, and pcr= respectively.
Examples
Mock Community with Default Depths
randomreadsmg.sh *.fa out=reads.fq.gz
Each FASTA file receives a random depth between 1x and 256x (MIN4 distribution). Output is interleaved paired Illumina reads of 150 bp, with 300 bp average inserts, written to a gzipped FASTQ.
Explicit Depths per Genome
randomreadsmg.sh ecoli.fa=40 ruber.fa=0.1 phix.fa=10 out=reads.fq.gz
Sets ecoli.fa to 40x, ruber.fa to 0.1x, and phix.fa to 10x. The three files must exist.
Single-end Reads from a Directory
randomreadsmg.sh in=genomes/ out=reads.fq.gz paired=f length=100 mindepth=5 maxdepth=50 mode=exp seed=42
Reads every FASTA file in genomes/. Depths are drawn from an exponential distribution between 5x and 50x. Single-end 100 bp reads, with a fixed seed so the output is reproducible.
Target Read Count per Genome
randomreadsmg.sh in=genomes/ out=reads.fq.gz reads=1000000 seed=42
Scales each file's depth so that it yields about 1,000,000 read pairs, since paired is on by default. Each file is read twice.
PacBio HiFi Long Reads
randomreadsmg.sh in=genomes/ out=hifi.fq.gz pacbio depth=20 meanlen=15000 minlen=1000 maxlen=50000 seed=7
Generates HiFi-style reads with a log-normal length distribution (mean 15 kb), at 20x for each genome. The HiFi error rates apply only when adderrors=t is added.
ONT Reads with Errors and Truth CIGAR
randomreadsmg.sh in=genomes/ out=ont.fq.gz ont depth=10 meanlen=8000 adderrors=t addcigar=t seed=3
Generates ONT-style reads with platform error rates applied and an exact truth CIGAR in each header (cigar_ field). The CIGAR can be used to grade alignments at the indel level.
Correlated Multi-sample Simulation
for S in 1 2 3 4; do
randomreadsmg.sh config=genomes.txt depthseed=777 seed=$S jitter=0.1 \
out=sample$S.fq.gz
done
Four samples share one base depth per genome (depthseed=777), and each gets about 10% independent per-sample depth variation (jitter=0.1). Each sample has different reads, because its seed differs.
Sparse Community
randomreadsmg.sh in=genomes/ out=sparse.fq.gz zeroprob=0.3 zeroprobbias=1 depthseed=11 seed=1
About 30% of genomes are absent from the sample. Absence is more likely for genomes later in the file order, so the same genomes tend to be missing across samples that share a depthseed.
Algorithm Details
The following descriptions are taken from RandomReadsMG.java. Line numbers refer to that file.
Per-file Depth Assignment
- Precedence (lines 667-724): a custom depth (cov_x=, x=, or tid match) wins. Otherwise reads= sets the depth from file size. Otherwise a random depth is drawn from the chosen mode.
- Absence (lines 694-698): if zeroprob>0, a uniform draw below the file's absence probability sets depth to 0. The draw uses a stream keyed on depthseed and file name.
- Rank bias (lines 736-740): with zeroprobbias=b, the absence probability for file index i (0-based) is zeroprob*((1-b)+b*2(i+0.5)/N), capped at 0.95, where N is the file count.
- Jitter (lines 704-715): depth is multiplied by exp(u), u uniform in [-jitter, jitter]. Jitter is skipped for reads= depths.
- Seeds (lines 755-757): each per-file stream is seeded by hashing the stream seed, a constant salt, and the file name. This makes each file's random stream independent of thread scheduling. Reordering inputs does not change a file's random stream when rank bias is disabled, but still changes output ordering and
fnumheaders.
Depth Distributions
- MIN4 (lines 785-792): with minDepth and maxDepth as bounds, takes the minimum of four uniform draws on the square-root scale, then squares the result. This skews depths toward the low end.
- EXP (lines 822-829): exponential with lambda = 1/sqrt(minDepth*maxDepth), redrawn until the value falls within [minDepth, maxDepth].
- ROOT (lines 810-814): depth = minDepth + U^2 * (maxDepth-minDepth), with U uniform. This skews toward the low end.
- LINEAR / UNIFORM (lines 799-802): depth = minDepth + U * (maxDepth-minDepth).
Contig Processing
- Base budget (line 1399): bases to generate = depth * contig length, or readspercontig * (read length, doubled when paired) when readspercontig is set.
- Minimum contig length (lines 1389-1396): Illumina contigs must be at least the bases per read (doubled when paired) plus 10, and at least avginsert when paired. Long-read contigs must exceed minlen + 50.
- Circular contigs (lines 1380-1385): the sequence is concatenated with itself and depth is halved.
- Output batching (lines 1407-1419): reads are queued in lists of 200 to the shared writer.
Illumina Read Generation
- Single-end (lines 1517-1546): a start position is drawn uniformly on the contig. Strand is a random bit. The fragment is reverse-complemented for strand 1.
- Paired insert (lines 1566-1572): insert = (1 + g) * avginsert, with g Gaussian of standard deviation 0.25. Up to 9 attempts are made to get an insert at least as long as the read. With addadapters on, retries stop once the insert is positive.
- Pair placement (lines 1580-1592): mate 2 starts at start1 + insert - read length and is reverse-complemented. Strand 1 swaps the two reads.
- Quality and substitution errors (lines 879-923): each base gets a quality uniform in [qavg-qrange, qavg+qrange], or one shared value when qflat is on. With adderrors=t, a base is replaced with probability 1 - PROB_CORRECT[q], by one of the three alternative bases.
- Indels (lines 972-1050): when insrate or delrate is set, the source loops over bases. An insertion appends a random base after the current base. A deletion skips the current base, but only when the read has spare length, so the output read length is maintained.
- Adapters (lines 842-865, 1601-1604): when the insert is shorter than the read length, the adapter is written from the insert end. Positions beyond the adapter are set to G at quality at most 8.
Long-read Generation
- PacBio HiFi length (lines 1201-1209): log-normal, mu = ln(mean) - sigma^2/2, bounded to [minLength, max(4*mean, maxLength)].
- ONT length (lines 1225-1239): with probability tailfactor, an exponential tail with scale 2*mean, clipped to [minlen, maxlen]. Otherwise a log-normal core with sigma=0.5.
- Start and strand (lines 1466-1473): start is uniform on the contig, strand is a random bit. Reads at least as long as the contig are skipped.
- Error model (lines 1070-1118): for each base, the error probability is srate+irate+drate, plus a homopolymer bonus of hrate for each repeated base. Substitutions and indels are chosen by that draw. Deletions are chosen with probability drate/(irate+drate). Insertions repeat the base or add a random base.
PCR Duplicates
- Mechanism (lines 1462, 1520, 1563): with probability pcr, the previous read's start, strand, and insert are reused instead of drawing new ones. The header marks originals as d_0 and copies as d_1.
Within-contig Coverage Variation
- Sinewave mode (lines 1348-1350, 1636-1638): coverage is controlled by a CoverageModel object, which is defined in a separate class that was not read for this page.
- Linear decline (lines 1403, 1636-1646): when sinewave is off, each contig draws variance = U * variance, and a read is kept with probability 1 - skip, where skip rises linearly along the contig to 1 - 1/(1+variance) at the far end.
Header Format
- Fields (lines 1665-1691): f_ file number, c_ contig number, s_ strand, p_ start, i_ insert, r_ reference length after indels, d_ duplicate flag (only if pcr>0), then tid_ or name_, cigar_ (if addcigar), and the pair number.
- Circular (line 1667): for circular contigs, start is reduced by half the contig length when it lies in the second half.
Threading and Determinism
- Work distribution (lines 552-597, 1314): each thread takes the next input file from an atomic counter. The thread count is min(threads, file count, mcg).
- Single-file threading (lines 558-575): one input file is split across sfthreads threads only when seed is negative. Each thread gets a copy of the file entry and a share of the depth or read count.
- Deterministic streams (lines 1336-1338): with seed>=0, each file has its own generator, so output does not depend on which thread handles which file. With seed<0, the thread-local generator is used and output differs between runs.
Memory
RandomReadsMG does not build a genome index. Each file is streamed through a Streamer in batches of contigs (lines 649-655, 1339-1368). Memory use is set by the Java heap (see -Xmx), by the number of concurrent files, and by the largest contig, which is copied when circular=t. The Java source contains no explicit memory estimate.
Technical Notes
Discrepancies Between the Usage Text and the Source
These differences were found when reading RandomReadsMG.java. The source is treated as correct.
- variance=: the usage text describes per-contig depth variation. The per-contig branch depends on varyDepthPerContig, which is initialized false and not set anywhere in RandomReadsMG.java. In the current code, variance produces the per-contig linear decline described under Within-contig Coverage Variation. It is ignored when sinewave mode is on.
- threads= with one file: the usage text says this flag forces multithreaded processing of a single file. The code does so only when seed is negative (line 558). With seed>=0, a single file is processed on one thread, so that output does not depend on thread count.
- length= and meanlen=: the usage text lists length= as the Illumina read length and meanlen= as the long-read mean. The parser assigns both keys to the same two fields (lines 293-296): readlen and meanLength. In long-read mode, length= sets the mean read length, and meanlen= also sets readlen. readlen is used when computing the base budget for readspercontig (line 1386), so meanlen= affects that calculation.
- Sinewave enablement: waves=N with N positive turns on sinewave mode (line 213), so waves=4 alone is enough to enable it.
- kprime: giving kprime a numeric value turns on random k-mer priming (line 251), in addition to the randomkmer flag.
- Unknown parameters: an argument that is neither a known key nor an existing file prints "Unknown parameter" to the output stream and triggers an assertion, which only fails when assertions are enabled (lines 365-366).
- config=: the usage example uses config=genomes.txt. RandomReadsMG.parse() does not handle this key. Config file handling may be done by PreParser, which was not read for this page.
Parameters Handled by Shared Classes
out=, out2=, overwrite=, append=, and extension overrides are passed to the shared Parser class (line 358). Its handling was not read for this page. The usage text documents out= and out2=. The field defaults are overwrite=true and append=false (lines 1911-1913), but Parser values are copied over them (lines 140-147).
Platform Defaults
When a long-read platform is set, the substitution, insertion, deletion, and homopolymer rates are set from the platform defaults unless given explicitly (lines 449-466). Shared.FAKE_QUAL is set to 20 for ONT and 35 for PacBio (lines 456, 462).
Constraints
- addcigar=t requires pacbio or ont. Illumina mode throws an exception (line 435).
- addcigar=t cannot be combined with circular=t (line 436).
- out2= requires out= (line 389).
- The paired flag has no effect on PacBio and ONT modes (lines 1439-1443).
Performance
- Parallelism: one file per thread. A run with many files uses the available cores, up to threads.
- Read budget: the number of reads is set by depth or reads=. Reads are generated until the base budget is met, so the output size grows with depth.
- Deterministic output: with seed set, output is the same regardless of thread count. Speed is not measured on this page.
Not Verified for This Page
- CoverageModel (sinewave mode internals), RandomHexamer (priming defaults and formulas), TaxTree (taxID parsing), PreParser (config files), and Parser (out/out2 and overwrite handling) were not read for this page. The defaults for kprime, kpower, and minkprob come from the shell script usage text.
- Output timing and memory figures were not measured.
Support
For questions and support:
- Email: bbushnell@lbl.gov
- Documentation: bbmap.org
- Single-genome version: RandomReads