changeset 0:1ef267476a17 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/bbtools commit 35db9ac8668f3e376886ea09de63c87dce93e1ce
author iuc
date Tue, 30 May 2023 09:02:11 +0000
parents
children a9329b77db78
files bbnorm.xml macros.xml readme.rst test-data/13-1941-6_S4_L001_R1_600000.fastq.gz test-data/13-1941-6_S4_L001_R2_600000.fastq.gz test-data/NC_002945v4.fasta test-data/SRX7529235_SRR10859038_1.fastq.gz test-data/SRX7529235_SRR10859038_2.fastq.gz test-data/adapters.fa.gz test-data/bbmerge/input_R1.fastq test-data/bbmerge/input_R2.fastq test-data/bbmerge/input_interleaved.fastq test-data/bbmerge/insert_length_hist.tabular test-data/bbmerge/merged.fastq test-data/bbmerge/unmerged.fastq test-data/bbnorm/discarded.fastq test-data/bbnorm/input_R1.fastq test-data/bbnorm/input_R1.fastq.gz test-data/bbnorm/input_R2.fastq test-data/bbnorm/input_interleaved.fastq test-data/bbnorm/kmer_hist_input.tabular test-data/bbnorm/kmer_hist_output.tabular test-data/bbnorm/normalised_R1.fastq test-data/bbnorm/normalised_R2.fastq test-data/bbnorm/normalised_interleaved.fastq test-data/bduk_output_dump1.fasta test-data/bduk_output_quhist1.tabular test-data/bduk_outputu1.fastqsanger test-data/bduk_outputu2.fastqsanger test-data/cv_input.bam test-data/cv_output.gff test-data/cv_output.txt test-data/cv_output.vcf test-data/cv_qualityhist_output.tabular test-data/cv_scorehist_output.tabular test-data/cv_zygosityhist_output.tabular test-data/fasta_indexes.loc tool-data/fasta_indexes.loc.sample tool_data_table_conf.xml.sample tool_data_table_conf.xml.test
diffstat 40 files changed, 1761 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bbnorm.xml	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,392 @@
+<tool id="bbtools_bbnorm" name="BBTools: BBNorm" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="@PROFILE@">
+    <description>Normalise sequencing coverage</description>
+    <macros>
+        <import>macros.xml</import>
+    </macros>
+    <expand macro="edam_ontology"/>
+    <expand macro="requirements"/>
+    <stdio>
+        <regex match="This table is (very|crazy|totally) full, which may reduce accuracy.  Ideal load is under" source="stderr" level="fatal_oom" description="Too low memory - generated results might be inaccurate."/>
+    </stdio>
+    <command detect_errors="exit_code"><![CDATA[
+## bbtools recommends keeping a proper file extension to determine the input format
+## so we hardcode them in the below block.
+#if str($input_type_cond.input_type) == 'paired':
+    #set read1 = $input_type_cond.reads_collection['forward']
+    #set read2 = $input_type_cond.reads_collection['reverse']
+#else:
+    #set read1 = $input_type_cond.read1
+    #if str($input_type_cond.input_type) == 'PE_2files':
+        #set read2 = $input_type_cond.read2
+    #end if
+#end if
+
+#if $read1.ext.endswith('.gz'):
+    #set read1_file = 'forward.fastq.gz'
+#else
+    #set read1_file = 'forward.fastq'
+#end if
+ln -s '${read1}' '${read1_file}' &&
+
+#if $str($input_type_cond.input_type) in ['PE_2files', 'paired']:
+    #if $read2.ext.endswith('.gz'):
+        #set read2_file = 'reverse.fastq.gz'
+    #else
+        #set read2_file = 'reverse.fastq'
+    #end if
+    ln -s '${read2}' '${read2_file}' &&
+#end if
+
+
+## As the program relies on a count-min-sketch algorithm, the potential hash collisions
+## are ignored and translates to a decreased accuracy of the results. Therefore the allocated
+## memory amount effects the numerical output: the more RAM the more accurate the results.
+## Check if a memory cap was set.
+if [[ "\${_JAVA_OPTIONS}" != *-Xmx* && "\${JAVA_TOOL_OPTIONS}" != *-Xmx* ]]; then
+    export _JAVA_OPTIONS="\${_JAVA_OPTIONS} -Xmx\${GALAXY_MEMORY_MB:-4096}m -Xms256m";
+fi &&
+
+bbnorm.sh tmpdir="\$TMPDIR" t="\${GALAXY_SLOTS:-2}"
+
+#### Input parameters
+#if str($input_type_cond.input_type) == 'single_end':
+    in='${read1_file}'
+    interleaved=f
+#else:
+    #if str($input_type_cond.input_type) == 'PE_1file':
+        in='${read1_file}'
+        interleaved=t
+    #else:
+        in1='${read1_file}'
+        in2='${read2_file}'
+        interleaved=f
+    #end if
+#end if
+
+#### Output options
+out=normalised_R1.fastq
+#if $str($input_type_cond.input_type) in ['PE_2files', 'paired']:
+    out2=normalised_R2.fastq
+#end if
+#if $output_options.save_discarded_reads:
+    outt=discarded.fastq
+#end if
+touppercase=t
+#if $output_options.save_kmer_hists:
+    hist=kmer_hist_input.tabular
+    histout=kmer_hist_output.tabular
+#end if
+
+#### Hashing parameters
+k=$hashing_params.k
+bits=$hashing_params.bits
+hashes=$hashing_params.hashes
+#if str($hashing_params.prefilter) == "true":
+    prefilter=t
+    prehashes=$hashing_params.prehashes
+    prefilterbits=$hashing_params.prefilterbits
+    prefiltersize=$hashing_params.prefiltersize
+#end if
+buildpasses=$hashing_params.buildpasses
+minq=$hashing_params.minq
+minprob=$hashing_params.minprob
+rdk=$hashing_params.rdk
+
+### Normalization parameters
+fixspikes=$norm_params.fixspikes
+target=$target
+maxdepth=$norm_params.maxdepth
+mindepth=$norm_params.mindepth
+minkmers=$norm_params.minkmers
+percentile=$norm_params.percentile
+uselowerdepth=$norm_params.uselowerdepth
+deterministic=$norm_params.deterministic
+passes=$norm_params.passes
+
+### Error detection parameters
+hdp=$error_det_params.hdp
+ldp=$error_det_params.ldp
+tossbadreads=$error_det_params.tossbadreads
+requirebothbad=$error_det_params.requirebothbad
+errordetectratio=$error_det_params.errordetectratio
+highthresh=$error_det_params.highthresh
+lowthresh=$error_det_params.lowthresh
+
+### Error correction parameters
+#if str($error_corr_params.ecc.ecc) == "true":
+    ecc=t
+    ecclimit=$error_corr_params.ecclimit
+    errorcorrectratio=$error_corr_params.errorcorrectratio
+    echighthresh=$error_corr_params.echighthresh
+    eclowthresh=$error_corr_params.eclowthresh
+    eccmaxqual=$error_corr_params.eccmaxqual
+    meo=$error_corr_params.meo
+    mue=$error_corr_params.mue
+    overlap=$error_corr_params.overlap
+#end if
+]]></command>
+    <inputs>
+        <conditional name="input_type_cond">
+            <param name="input_type" type="select" label="Choose the category of inputs to be analyzed">
+                <option value="single_end">Single-end reads</option>
+                <option value="PE_1file">Paired-end reads as a single, interleaved dataset</option>
+                <option value="PE_2files" selected="true">Paired-end reads as two separate datasets</option>
+                <option value="paired">Paired-end reads as a collection</option>
+            </param>
+            <when value="single_end">
+                <param name="read1" type="data" format="fastqsanger,fastqsanger.gz" label="Single-end data"/>
+            </when>
+            <when value="PE_1file">
+                <param name="read1" type="data" format="fastqsanger,fastqsanger.gz" label="Interleaved paired-end data"/>
+            </when>
+            <when value="PE_2files">
+                <param name="read1" type="data" format="fastqsanger,fastqsanger.gz" label="Forward reads"/>
+                <param name="read2" type="data" format="fastqsanger,fastqsanger.gz" label="Reverse reads"/>
+            </when>
+            <when value="paired">
+                <param name="reads_collection" type="data_collection" format="fastqsanger,fastqsanger.gz" collection_type="paired" label="Collection of forward and reverse reads"/>
+            </when>
+        </conditional>
+        <param argument="target" type="integer" value="100" min="1" label="Target normalization depth" help="All depth parameters control kmer depth, not read depth. For kmer depth Dk, read depth Dr, read length R, and kmer size K: Dr=Dk*(R/(R-K+1))"/>
+        <section name="norm_params" title="Normalization parameters">
+            <param argument="maxdepth" type="integer" value="-1" min="-1" label="Reads will not be downsampled when below this depth, even if they are above the target depth." help="All depth parameters control kmer depth, not read depth. For kmer depth Dk, read depth Dr, read length R, and kmer size K: Dr=Dk*(R/(R-K+1))"/>
+            <param argument="mindepth" type="integer" value="5" min="0" label="kmers with depth below this number will not be included when calculating the depth of a read." help="All depth parameters control kmer depth, not read depth. For kmer depth Dk, read depth Dr, read length R, and kmer size K: Dr=Dk*(R/(R-K+1))"/>
+            <param argument="minkmers" type="integer" value="15" min="0" label="Reads must have at least this many kmers over min depth to be retained."/>
+            <param argument="percentile" type="integer" value="54" min="1" max="100" label="Percentile to infer read depth" help="Read depth is by default inferred from the 54th percentile of kmer depth, but this may be changed to any number 1-100."/>
+            <param argument="uselowerdepth" type="boolean" checked="true" label="For pairs, use the depth of the lower read as the depth proxy."/>
+            <param argument="deterministic" type="boolean" checked="true" label="Generate random numbers deterministically" help="This would ensure identical output between multiple runs. May decrease speed with a huge number of threads."/>
+            <param argument="fixspikes" type="boolean" checked="false" label="Do a slower, high-precision bloom filter lookup of kmers that appear to have an abnormally high depth due to collisions."/>
+            <param argument="passes" type="integer" value="2" label="Number of passes to perform" help=" pass is the basic mode. 2 passes allows greater accuracy, error detection, better contol of output depth."/>
+        </section>
+        <section name="hashing_params" title="Hashing parameters">
+            <param argument="k" type="integer" value="31" min="1" label="kmer length" help="Values under 32 are most efficient, but arbitrarily high values are supported."/>
+            <param argument="bits" type="select" label="Bits per cell in bloom filter" help="Maximum kmer depth recorded is 2^c bits. Large values decrease accuracy for a fixed amount of memory, so use the lowest number you can that will still capture highest-depth kmers.">
+                <option value="2">2</option>
+                <option value="4">4</option>
+                <option value="8">8</option>
+                <option value="16" selected="true">16</option>
+                <option value="32">32</option>
+            </param>
+            <param argument="hashes" type="integer" value="3" min="1" label="Number of times each kmer is hashed and stored." help="Higher is slower. Higher is more accurate if there is enough memory, but less accurate if there is not enough memory."/>
+            <conditional name="prefilter">
+                <param argument="prefilter" type="select" label="Use a prefilter to eliminate low-depth kmers" help="True is slower, but generally more accurate; filters out low-depth kmers from the main hashtable. The prefilter is more memory-efficient because it uses 2-bit cells.">
+                    <option value="true">Yes</option>
+                    <option value="false" selected="true">No</option>
+                </param>
+                <when value="false"/>
+                <when value="true">
+                    <param argument="prehashes" type="integer" value="2" min="1" label="Number of hashes for the prefilter"/>
+                    <param argument="prefilterbits" type="integer" value="2" min="1" label="Bits per cell in prefilter"/>
+                    <param argument="prefiltersize" type="float" value="0.35" min="0" max="1" label="Fraction of memory to allocate for the prefilter."/>
+                </when>
+            </conditional>          
+            <param argument="buildpasses" type="integer" value="1" min="1" label="Number of passes" help="More passes can sometimes increase accuracy by iteratively removing low-depth kmers"/>
+            <param argument="minq" type="integer" value="6" min="0" label="Ignore kmers containing bases with quality below this threshold"/>
+            <param argument="minprob" type="float" value="0.5" min="0" max="1" label="Ignore kmers with overall probability of correctness below this threshold"/>
+            <param argument="rdk" type="boolean" checked="true" label="Remove duplicate kmers" help="When true, a kmer's count will only be incremented once per read pair, even if that kmer occurs more than once."/>
+        </section>
+        <section name="error_det_params" title="Error detection parameters">
+            <param argument="hdp" type="integer" value="90" min="0" max="100" label="highdepthpercentile" help="Position in sorted kmer depth array used as proxy of a read's high kmer depth."/>
+            <param argument="ldp" type="integer" value="25" min="0" max="100" label="lowdepthpercentile" help="Position in sorted kmer depth array used as proxy of a read's low kmer depth."/>
+            <param argument="tossbadreads" type="boolean" checked="false" label="Throw away reads detected as containing errors."/>
+            <param argument="requirebothbad" type="boolean" checked="false" label="Only toss bad pairs if both reads are bad."/>
+            <param argument="errordetectratio" type="integer" value="125" min="0" label="Error detection ratio" help="Reads with a ratio of at least this much between their high and low depth kmers will be classified as error reads."/>
+            <param argument="highthresh" type="integer" value="12" min="0" label="Threshold for high kmer" help="A high kmer at this or above are considered non-error."/>
+            <param argument="lowthresh" type="integer" value="3" min="0" label="Threshold for low kmer" help="Kmers at this and below are always considered errors."/>
+        </section>
+        
+        <section name="error_corr_params" title="Error correction parameters">
+            <conditional name="ecc">
+                <param argument="ecc" type="select" label="What should be done with detected errors?" help="Tadpole is now preferred for error correction, as it does a better job.">
+                    <option value="true" >Correct errors when possible</option>
+                    <option value="false" selected="true">Do not attempt to correct errors</option>
+                </param>
+                <when value="false"/>
+                <when value="true">
+                    <param argument="ecclimit" type="integer" value="3" min="1" label="Correct up to this many errors per read." help="If more are detected, the read will remain unchanged."/>
+                    <param argument="errorcorrectratio" type="integer" value="140" min="0" label="Depth ratio" help="Adjacent kmers with a depth ratio of at least this much between will be classified as an error."/>
+                    <param argument="echighthresh" type="integer" value="22" min="0" label="Threshold for high kmer" help="A kmer at this or above may be considered non-error."/>
+                    <param argument="eclowthresh" type="integer" value="2" min="0" label="Threshold for low kmer." help="kmers at this depth or below will be considered as errors."/>
+                    <param argument="eccmaxqual" type="integer" value="127" min="0" label="Do not correct bases with quality above this value."/>
+                    <param argument="meo" type="boolean" checked="false" label="Marks errors by reducing quality value of suspected errors; does not correct anything."/>
+                    <param argument="mue" type="boolean" checked="true" label="Mark errors only on uncorrectable reads."/>
+                    <param argument="overlap" type="boolean" checked="false" label="Correct errors by read overlap."/>
+                </when>
+            </conditional>
+        </section>
+
+        <section name="output_options" title="Output options">
+            <param name="save_discarded_reads" type="boolean" checked="false" label="Save the reads that were eliminated from the input datasets to the history"/>
+            <param name="save_kmer_hists" type="boolean" checked="false" label="Save the kmer histograms (in tabular format) for the input and output datasets to the history"/>
+        </section>
+    </inputs>
+    <outputs>
+        <data name="output_normalised_R1" format_source="read1" from_work_dir="normalised_R1.fastq" label="${tool.name} on ${on_string} (normalised R1 reads)">
+            <filter>input_type_cond['input_type'] != 'paired'</filter>
+        </data>
+        <data name="output_normalised_R2" format_source="read2" from_work_dir="normalised_R2.fastq" label="${tool.name} on ${on_string} (normalised R2 reads)">
+            <filter>input_type_cond['input_type'] == 'PE_2files'</filter>
+        </data>
+        <collection name="output_pair" type="paired" format_source="reads_collection" label="${tool.name} on ${on_string} (normalised reads)">
+            <filter>input_type_cond['input_type'] == 'paired'</filter>
+            <data name="forward" from_work_dir="normalised_R1.fastq" label="${tool.name} on ${on_string} (normalised R1 reads)"/>
+            <data name="reverse" from_work_dir="normalised_R2.fastq" label="${tool.name} on ${on_string} (normalised R2 reads)"/>
+        </collection>
+        <data name="output_discarded" format="fastqsanger" from_work_dir="discarded.fastq" label="${tool.name} on ${on_string} (discarded reads)">
+            <filter>output_options['save_discarded_reads'] is True</filter>
+        </data>
+        <data name="kmer_hist_input" format="tabular" from_work_dir="kmer_hist_input.tabular" label="${tool.name} on ${on_string} (kmer histogram input)">
+            <filter>output_options['save_kmer_hists'] is True</filter>
+        </data>
+        <data name="kmer_hist_output" format="tabular" from_work_dir="kmer_hist_output.tabular" label="${tool.name} on ${on_string} (kmer histogram output)">
+            <filter>output_options['save_kmer_hists'] is True</filter>
+        </data>
+    </outputs>
+    <tests>
+        <!-- Single end sequencing -->
+        <test expect_num_outputs="1">
+            <param name="input_type" value="single_end"/>
+            <param name="read1" ftype="fastqsanger" value="bbnorm/input_R1.fastq"/>
+            <param name="target" value="4"/>
+            <section name="norm_params">
+                <param name="deterministic" value="true"/>
+                <param name="mindepth" value="0"/>
+            </section>
+            <output name="output_normalised_R1" ftype="fastqsanger" value="bbnorm/normalised_R1.fastq"/>
+        </test>
+        <!-- Single end sequencing, compressed -->
+        <test expect_num_outputs="1">
+            <param name="input_type" value="single_end"/>
+            <param name="read1" ftype="fastqsanger.gz" value="bbnorm/input_R1.fastq.gz"/>
+            <param name="target" value="4"/>
+            <section name="norm_params">
+                <param name="deterministic" value="true"/>
+                <param name="mindepth" value="0"/>
+            </section>
+            <output name="output_normalised_R1" ftype="fastqsanger.gz" value="bbnorm/normalised_R1.fastq"/>
+        </test>
+        <!-- PE as an interleaved file -->
+        <test expect_num_outputs="4">
+            <param name="input_type" value="PE_1file"/>
+            <param name="read1" ftype="fastqsanger" value="bbnorm/input_interleaved.fastq"/>
+            <param name="target" value="4"/>
+            <section name="norm_params">
+                <param name="deterministic" value="true"/>
+                <param name="mindepth" value="0"/>
+            </section>
+            <section name="output_options">
+                <param name="save_discarded_reads" value="true"/>
+                <param name="save_kmer_hists" value="true"/>
+            </section>
+            <output name="output_normalised_R1" ftype="fastqsanger" value="bbnorm/normalised_interleaved.fastq"/>
+            <output name="output_discarded" ftype="fastqsanger" value="bbnorm/discarded.fastq"/>
+            <output name="kmer_hist_input" ftype="tabular" file="bbnorm/kmer_hist_input.tabular"/>
+            <output name="kmer_hist_output" ftype="tabular" file="bbnorm/kmer_hist_output.tabular"/>
+        </test>
+        <!-- PE as 2 files -->
+        <test expect_num_outputs="2">
+            <param name="input_type" value="PE_2files"/>
+            <param name="read1" ftype="fastqsanger" value="bbnorm/input_R1.fastq"/>
+            <param name="read2" ftype="fastqsanger" value="bbnorm/input_R2.fastq"/>
+            <param name="target" value="4"/>
+            <section name="norm_params">
+                <param name="deterministic" value="true"/>
+                <param name="mindepth" value="0"/>
+            </section>
+            <output name="output_normalised_R1" ftype="fastqsanger" value="bbnorm/normalised_R1.fastq"/>
+            <output name="output_normalised_R2" ftype="fastqsanger" value="bbnorm/normalised_R2.fastq"/>
+        </test>
+        <!-- Paired end collection -->
+        <test expect_num_outputs="3">
+            <param name="input_type" value="paired"/>
+            <param name="reads_collection">
+                <collection type="paired">
+                    <element name="forward" ftype="fastqsanger" value="bbnorm/input_R1.fastq"/>
+                    <element name="reverse" ftype="fastqsanger" value="bbnorm/input_R2.fastq"/>
+                </collection>
+            </param>
+            <param name="target" value="4"/>
+            <section name="norm_params">
+                <param name="deterministic" value="true"/>
+                <param name="mindepth" value="0"/>
+            </section>
+            <output_collection name="output_pair" type="paired" count="2">
+                <element name="forward" ftype="fastqsanger" value="bbnorm/normalised_R1.fastq"/>
+                <element name="reverse" ftype="fastqsanger" value="bbnorm/normalised_R2.fastq"/>
+            </output_collection>
+        </test>
+    </tests>
+    <help>
+**What it does**
+
+BBNorm downsamples a provided sequencing output, while paying attention to potential heteregeneities in sequencing depth obtained from the wet-lab workflow. The reads corresponding to regions with low coverage will be kept as is, whereas some of the reads contributing to an above-threshold coverage depth will be subsampled. The resulting data set is expected to be smaller in size, whereas the genome regions with low coverage levels will still be represented in the subsampled dataset. This provides a more uniform coverage depth against all genomic coordinates while the computational resources needed for subsequent steps such as assembly can be substantially reduced without losing coverage anywhere.
+
+-----
+
+**If the target sequencing depth is 2X, a Martian genome sequencing result is expected to be down-sampled as follows:**
+
+input.fastq::
+
+    @read_header_1
+    AAAAATTTTTCCCCCGGGGGAAATTT
+    +
+    FFFFFFFFFFFFFFFEFFFFFF,FFE
+    @read_header_2
+    TTTTTCCCCCGGGGGAAATTTCCCGGG
+    +
+    FFFFFFFFFFFFFFFEFFFFFFEFFDD
+    @read_header_3
+    TTTTTCCCCCGGGGGAAATTTCCCGGG
+    +
+    FFFFFFFFFFFCEFFEFFFFFFEFFEE
+    @read_header_4
+    TTTTTCCCCCGGGGGAAATTTCCCGGG
+    +
+    FFFFFDDFFFFFFFFEFFFFFFEFFEF    
+    @read_header_5
+    TTTTTCCCCCGGGGGAAATTTCCCGGG
+    +
+    FFFFFEFFFFEEFFFEFFFFFFDFFFF
+    @read_header_6
+    AAAAATTTTTCCCCCGGGGGAAATTT
+    +
+    FFFFFFFFFFFFFFFEFFFFFFEFFD
+
+
+output.fastq::
+
+    @read_header_1
+    AAAAATTTTTCCCCCGGGGGAAATTT
+    +
+    FFFFFFFFFFFFFFFEFFFFFF,FFE
+    @read_header_2
+    TTTTTCCCCCGGGGGAAATTTCCCGGG
+    +
+    FFFFFFFFFFFFFFFEFFFFFFEFFDD
+    @read_header_3
+    TTTTTCCCCCGGGGGAAATTTCCCGGG
+    +
+    FFFFFFFFFFFCEFFEFFFFFFEFFEE
+    @read_header_6
+    AAAAATTTTTCCCCCGGGGGAAATTT
+    +
+    FFFFFFFFFFFFFFFEFFFFFFEFFD
+
+
+**Indications**
+
+BBNorm is mainly intended for use in assembly pipelines out of short reads. It might be useful when there is too much data that increases computation time or a highly skewed coverage distribution by subsampling from the existing data. As opposed to keeping a randomly selected subset of reads, such as retaining the first n-many elements, this is a weighted resampling that tries to reduce coverage around coordinates of very high sequencing depth.
+
+
+**Contraindications**
+
+* The data already has a roughly uniform coverage that does not need to be normalised further.
+* You do not have any excess data to discard: BBnorm does not increase data quantity by imputation or by repeatedly sampling with replacement.
+* Your pipeline reports results that rely on quantification of abundance (ex: differential expression profiling or ChIP-Seq)
+* You want to do variant discovery. Reduction of sequencing depth might bias significance levels, or even obscure the existence of rare variants altogether.
+* The sequencing platform has a very high error rate (ex: ONT) that might mislead this algorithm.
+
+    </help>
+    <expand macro="citations"/>
+</tool>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,107 @@
+<macros>
+    <token name="@TOOL_VERSION@">39.01</token>
+    <token name="@VERSION_SUFFIX@">0</token>
+    <token name="@PROFILE@">22.01</token>
+    <xml name="edam_ontology">
+        <edam_topics>
+            <edam_topic>topic_0622</edam_topic> <!-- Genomics -->
+            <edam_topic>topic_0091</edam_topic> <!-- Bioinformatics -->
+        </edam_topics>
+        <edam_operations>
+            <edam_operation>operation_0496</edam_operation> <!-- Global alignment -->
+            <edam_operation>operation_0491</edam_operation> <!-- Pairwise sequence alignment -->
+        </edam_operations>
+    </xml>
+    <xml name="requirements">
+        <requirements>
+            <requirement type="package" version="@TOOL_VERSION@">bbmap</requirement>
+            <requirement type="package" version="1.16.1">samtools</requirement> <!-- automatic solving installs 1.6 in some cases, instead -->
+        </requirements>
+    </xml>
+    <macro name="dbKeyActionsBBMap">
+        <expand macro="dbKeyActions">
+            <option type="from_data_table" name="fasta_indexes" column="1" offset="0">
+                <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+                <filter type="param_value" ref="ref_source_cond.reference" column="1"/>
+            </option>
+        </expand>
+    </macro>
+    <macro name="dbKeyActions">
+        <actions>
+            <conditional name="ref_source_cond.ref_source">
+                <when value="cached">
+                    <action type="metadata" name="dbkey">
+                        <yield/>
+                    </action>
+                </when>
+                <when value="history">
+                    <action type="metadata" name="dbkey">
+                        <option type="from_param" name="ref_source_cond.reference" param_attribute="dbkey"/>
+                    </action>
+                </when>
+            </conditional>
+        </actions>
+    </macro>
+    <macro name="input_type_cond">
+        <conditional name="input_type_cond">
+            <param name="input_type" type="select" label="Choose the category of the files to be analyzed">
+                <option value="single" selected="true">Single dataset</option>
+                <option value="pair">Dataset pair</option>
+                <option value="paired">List of dataset pairs</option>
+            </param>
+            <when value="single">
+                <param name="read1" type="data" format="fastqsanger.gz,fastqsanger" label="Fastq file"/>
+            </when>
+            <when value="pair">
+                <param name="read1" type="data" format="fastqsanger.gz,fastqsanger" label="Forward reads fastq file"/>
+                <param name="read2" type="data" format="fastqsanger.gz,fastqsanger" label="Reverse reads fastq file"/>
+            </when>
+            <when value="paired">
+                <param name="reads_collection" type="data_collection" format="fastqsanger,fastqsanger.gz" collection_type="paired" label="Collection of fastqsanger paired read files"/>
+            </when>
+        </conditional>
+    </macro>
+    <macro name="reference_source_cond">
+        <conditional name="ref_source_cond">
+            <param name="ref_source" type="select" label="Select reference genome source; a cached reference or one from the history">
+                <option value="cached" selected="True">Use a cached reference</option>
+                <option value="history">Use a reference from the history</option>
+            </param>
+            <when value="cached">
+                <param name="reference" type="select" label="Using reference genome">
+                    <options from_data_table="fasta_indexes">
+                        <filter type="sort_by" column="2"/>
+                        <validator type="no_options" message="A built-in reference genome is not available"/>
+                    </options>
+                </param>
+            </when>
+            <when value="history">
+                <param name="reference" type="data" format="fasta" label="Using reference genome"/>
+            </when>
+        </conditional>
+    </macro>
+    <macro name="ktrim_cond">
+        <conditional name="ktrim_cond">
+            <param name="ktrim_select"  type="select" label="Trim reads to remove bases matching reference kmers?">
+                <option value="no" selected="true">No</option>
+                <option value="yes">Yes</option>
+            </param>
+            <when value="no"/>
+            <when value="yes">
+                <param argument="ktrim"  type="select" label="Select trimming position">
+                    <option value="r">Trim to the right</option>
+                    <option value="l">Trim to the left</option>
+                </param>
+                <param argument="minlength" type="integer" value="10" label="Minimum read length" help="Trimmed reads shorter than this will be discarded, pairs will be discarded if both are shorter."/>
+             </when>
+        </conditional>
+    </macro>
+    <xml name="citations">
+        <citations>
+            <citation type="doi">
+                https://doi.org/10.1371/journal.pone.0185056
+            </citation>
+        </citations>
+    </xml>
+</macros>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/readme.rst	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,18 @@
+
+=================
+IMPORTANT NOTE REGARDING SYSTEM CONFIGURATION
+=================
+
+All of the Galaxy wrappers contained herein call the respective bbtools' shell wrapper, which calls the underlying java-based tool. Unlike a C-based program, java will grab a pre-determined amount of memory at the very beginning of the execution.
+
+Some of the algorithms (e.g. bbnorm) utilise a hash table, and potential collusions can decrease the numeric accuracy of the output. This problem is expected to become more pronounced if the fraction of the memory occupied w.r.t. allocated memory becomes high, i.e. when the available memory is low and/or the input file is big. If the tool generates a warning to stderr, and will be caught by the Galaxy wrapper resulting in a failed job. However, `count min sketch <https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch>` does not run out of memory, this is a gradual effect, and will NOT trigger a fatal error unless the load reaches this critically high level. You can read more about the implications of this at the `BBtools manual <https://jgi.doe.gov/data-and-tools/software-tools/bbtools/bb-tools-user-guide/bbnorm-guide/>`
+
+If you are administering a heteregenous computing environment with multiple nodes of very different quantities of physically available RAM, it is recommended to define a global cap on the RAM to be used to avoid introducing run-to-run bias by exporting an environmental variable, by something like:
+export _JAVA_OPTIONS="-Xmx2048m -Xms256m"
+
+The tool currently considers the following limits, in the given priority order:
+1) _JAVA_OPTIONS
+2) JAVA_TOOL_OPTIONS
+3) GALAXY_MEMORY_MB
+4) 4 GB
+
Binary file test-data/13-1941-6_S4_L001_R1_600000.fastq.gz has changed
Binary file test-data/13-1941-6_S4_L001_R2_600000.fastq.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/NC_002945v4.fasta	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,101 @@
+>NC_002945.4 Mycobacterium bovis AF2122/97 genome assembly, chromosome: Mycobacterium_bovis_AF2122/97
+TTGACCGATGACCCCGGTTCAGGCTTCACCACAGTGTGGAACGCGGTCGTCTCCGAACTTAACGGCGACC
+CTAAGGTTGACGACGGACCCAGCAGTGATGCTAATCTCAGCGCTCCGCTGACCCCTCAGCAAAGGGCTTG
+GCTCAATCTCGTCCAGCCATTGACCATCGTCGAGGGGTTTGCTCTGTTATCCGTGCCGAGCAGCTTTGTC
+CAAAACGAAATCGAGCGCCATCTGCGGGCCCCGATTACCGACGCTCTCAGCCGCCGACTCGGACATCAGA
+TCCAACTCGGGGTCCGCATCGCTCCGCCGGCGACCGACGAAGCCGACGACACTACCGTGCCGCCTTCCGA
+AAATCCTGCTACCACATCGCCAGACACCACAACCGACAACGACGAGATTGATGACAGCGCTGCGGCACGG
+GGCGATAACCAGCACAGTTGGCCAAGTTACTTCACCGAGCGCCCGCGCAATACCGATTCCGCTACCGCTG
+GCGTAACCAGCCTTAACCGTCGCTACACCTTTGATACGTTCGTTATCGGCGCCTCCAACCGGTTCGCGCA
+CGCCGCCGCCTTGGCGATCGCAGAAGCACCCGCCCGCGCTTACAACCCCCTGTTCATCTGGGGCGAGTCC
+GGTCTCGGCAAGACACACCTGCTACACGCGGCAGGCAACTATGCCCAACGGTTGTTCCCGGGAATGCGGG
+TCAAATATGTCTCCACCGAGGAATTCACCAACGACTTCATTAACTCGCTCCGCGATGACCGCAAGGTCGC
+ATTCAAACGCAGCTACCGCGACGTAGACGTGCTGTTGGTCGACGACATCCAATTCATTGAAGGCAAAGAG
+GGTATTCAAGAGGAGTTCTTCCACACCTTCAACACCTTGCACAATGCCAACAAGCAAATCGTCATCTCAT
+CTGACCGCCCACCCAAGCAGCTCGCCACCCTCGAGGACCGGCTGAGAACCCGCTTTGAGTGGGGGCTGAT
+CACTGACGTACAACCACCCGAGCTGGAGACCCGCATCGCCATCTTGCGCAAGAAAGCACAGATGGAACGG
+CTCGCGATCCCCGACGATGTCCTCGAACTCATCGCCAGCAGTATCGAACGCAATATCCGTGAACTCGAGG
+GCGCGCTGATCCGGGTCACCGCGTTCGCCTCATTGAACAAAACACCAATCGACAAAGCGCTGGCCGAGAT
+TGTGCTTCGCGATCTGATCGCCGACGCCAACACCATGCAAATCAGCGCGGCGACGATCATGGCTGCCACC
+GCCGAATACTTCGACACTACCGTCGAAGAGCTTCGCGGGCCCGGCAAGACCCGAGCACTGGCCCAGTCAC
+GACAGATTGCGATGTACCTGTGTCGTGAGCTCACCGATCTTTCGTTGCCCAAAATCGGCCAAGCGTTCGG
+CCGTGATCACACAACCGTCATGTACGCCCAACGCAAGATCCTGTCCGAGATGGCCGAGCGCCGTGAGGTC
+TTTGATCACGTCAAAGAACTCACCACTCGCATCCGTCAGCGCTCCAAGCGCTAGCACGGCGTGTTCTTCC
+GACAACGTTCTTAAAAAAACTTCTCTCTCCCAGGTCACACCAGTCACAGAGATTGGCTGTGAGTGTCGCT
+GTGCACAAACCGCGCACAGACTCATACAGTCCCGGCGGTTCCGTTCACAACCCACGCCTCATCCCCACCG
+ACCCAACACACACCCCACAGTCATCGCCACCGTCATCCACAACTCCGACCGACGTCGACCTGCACCAAGA
+CCAGACTGTCCCCAAACTGCACACCCTCTAATACTGTTACCGAGATTTCTTCGTCGTTTGTTCTTGGAAA
+GACAGCGCTGGGGATCGTTCGCTGGATACCACCCGCATAACTGGCTCGTCGCGGTGGGTCAGAGGTCAAT
+GATGAACTTTCAAGTTGACGTGAGAAGCTCTACGGTTGTTGTTCGACTGCTGTTGCGGCCGTCGTGGCGG
+GTCACGCGTCATGGGCGTTCGTCGTTGGCAGTCCCCACGCTAGCGGGGCGCTAGCCACGGGATCGAACTC
+ATCGTGAGGTGAAAGGGCGCAATGGACGCGGCTACGACAAGAGTTGGCCTCACCGACTTGACGTTTCGTT
+TGCTACGAGAGTCTTTCGCCGATGCGGTGTCGTGGGTGGCTAAAAATCTGCCAGCCAGGCCCGCGGTGCC
+GGTGCTCTCCGGCGTGTTGTTGACCGGCTCGGACAACGGTCTGACGATTTCCGGATTCGACTACGAGGTT
+TCCGCCGAGGCCCAGGTTGGCGCTGAAATTGTTTCTCCTGGAAGCGTTTTAGTTTCTGGCCGATTGTTGT
+CCGATATTACCCGGGCGTTGCCTAACAAGCCCGTAGGCGTTCATGTCGAAGGTAACCGGGTCGCATTGAC
+CTGCGGTAACGCCAGGTTTTCGCTACCGACGATGCCAGTCGAGGATTATCCGACGCTGCCGACGCTGCCG
+GAAGAGACCGGATTGTTGCCTGCGGAATTATTCGCCGAGGCAATCAGTCAGGTCGCTATCGCCGCCGGCC
+GGGACGACACGCTGCCTATGTTGACCGGCATCCGGGTCGAAATCCTCGGTGAGACGGTGGTTTTGGCCGC
+TACCGACAGGTTTCGCCTGGCTGTTCGAGAACTGAAGTGGTCGGCGTCGTCGCCAGATATCGAAGCGGCT
+GTGCTGGTCCCGGCCAAGACGCTGGCCGAGGCCGCCAAAGCGGGCATCGGCGGCTCTGACGTTCGTTTGT
+CGTTGGGTACTGGGCCGGGGGTGGGCAAGGATGGCCTGCTCGGTATCAGTGGGAACGGCAAGCGCAGCAC
+CACGCGACTTCTTGATGCCGAGTTCCCGAAGTTTCGGCAGTTGCTACCAACCGAACACACCGCGGTGGCC
+ACCATGGACGTGGCCGAGTTGATCGAAGCGATCAAGCTGGTTGCGTTGGTAGCTGATCGGGGCGCGCAGG
+TGCGCATGGAGTTCGCTGATGGCAGCGTGCGGCTTTCTGCGGGTGCCGATGATGTTGGACGAGCCGAGGA
+AGATCTTGTTGTTGACTATGCCGGTGAACCATTGACGATTGCGTTTAACCCAACCTATCTAACGGACGGT
+TTGAGTTCGTTGCGCTCGGAGCGAGTGTCTTTCGGGTTTACGACTGCGGGTAAGCCTGCCTTGCTACGTC
+CGGTGTCCGGGGACGATCGCCCTGTGGCGGGTCTGAATGGCAACGGTCCGTTCCCGGCGGTGTCGACGGA
+CTATGTCTATCTGTTGATGCCGGTTCGGTTGCCGGGCTGAGCACTTGGCGCCCGGGTAGGTGTACGTCCG
+TCATTTGGGGCTGCGTGACTTCCGGTCCTGGGCATGTGTAGATCTGGAATTGCATCCAGGGCGGACGGTT
+TTTGTTGGGCCTAACGGTTATGGTAAGACGAATCTTATTGAGGCACTGTGGTATTCGACGACGTTAGGTT
+CGCACCGCGTTAGCGCCGATTTGCCGTTGATCCGGGTAGGTACCGATCGTGCGGTGATCTCCACGATCGT
+GGTGAACGACGGTAGAGAATGTGCCGTCGACCTCGAGATCGCCACGGGGCGAGTCAACAAAGCGCGATTG
+AATCGATCATCGGTCCGAAGTACACGTGATGTGGTCGGAGTGCTTCGAGCTGTGTTGTTTGCCCCTGAGG
+ATCTGGGGTTGGTTCGTGGGGATCCCGCTGACCGGCGGCGCTATCTGGATGATCTGGCGATCGTGCGTAG
+GCCTGCGATCGCTGCGGTACGAGCCGAATATGAGAGGGTGGTGCGCCAGCGGACGGCGTTATTGAAGTCC
+GTACCTGGAGCACGGTATCGGGGTGACCGGGGTGTGTTTGACACTCTTGAGGTATGGGACAGTCGTTTGG
+CGGAGCACGGGGCTGAACTGGTGGCCGCCCGCATCGATTTGGTCAACCAGTTGGCACCGGAAGTGAAGAA
+GGCATACCAGCTGTTGGCGCCGGAATCGCGATCGGCGTCTATCGGTTATCGGGCCAGCATGGATGTAACC
+GGTCCCAGCGAGCAGTCAGATACCGATCGGCAATTGTTAGCAGCTCGGCTGTTGGCGGCGCTGGCGGCCC
+GTCGGGATGCCGAACTCGAGCGTGGGGTTTGTCTAGTTGGTCCGCACCGTGACGACCTAATACTGCGACT
+AGGCGATCAACCCGCGAAAGGATTTGCTAGCCATGGGGAGGCGTGGTCGTTGGCGGTGGCACTGCGGTTG
+GCGGCCTATCAACTGTTACGCGTTGATGGTGGTGAGCCGGTGTTGTTGCTCGACGACGTGTTCGCCGAAC
+TGGATGTCATGCGCCGTCGAGCGTTGGCGACGGCGGCCGAGTCCGCCGAACAGGTGTTGGTGACTGCCGC
+GGTGCTCGAGGATATTCCCGCCGGCTGGGACGCCAGGCGGGTGCACATCGATGTGCGTGCCGATGACACC
+GGATCGATGTCGGTGGTTCTGCCATGACGGGTTCTGTTGACCGGCCCGACCAGAATCGCGGTGAGCGATT
+AATGAAGTCACCAGGGTTGGATTTGGTCAGGCGCACCCTGGACGAAGCTCGTGCTGCTGCCCGCGCGCGC
+GGACAAGACGCCGGTCGAGGGCGGGTCGCTTCCGTTGCGTCGGGTCGGGTGGCCGGACGGCGACGAAGCT
+GGTCGGGTCCGGGGCCCGACATTCGTGATCCACAACCGCTGGGTAAGGCCGCTCGTGAGCTGGCAAAGAA
+ACGCGGCTGGTCGGTGCGGGTCGCCGAGGGTATGGTGCTCGGCCAGTGGTCTGCGGTGGTCGGCCACCAG
+ATCGCCGAACATGCACGCCCGACTGCGCTAAACGACGGGGTGTTGAGCGTGATTGCGGAGTCGACGGCGT
+GGGCGACGCAGTTGAGGATCATGCAGGCCCAGCTTCTGGCCAAGATCGCCGCAGCGGTTGGCAACGATGT
+GGTGCGATCGCTAAAGATCACCGGGCCGGCGGCACCATCGTGGCGCAAGGGGCCTCGCCATATTGCCGGT
+AGGGGTCCGCGCGACACCTACGGATAACACGTCGATCGGCCCAGAACAAGGCGCTCCGGTCCCGGCCTGA
+GAGCCTCGAGGACGAAGCGGATCCGTATGCCGGACGTCGGGACGCACCAGGAAGAAAGATGTCCGACGCA
+CGGCGCGGTTAGATGGGTAAAAACGAGGCCAGAAGATCGGCCCTGGCGCCCGATCACGGTACAGTGGTGT
+GCGACCCCCTGCGGCGACTCAACCGCATGCACGCAACCCCTGAGGAGAGTATTCGGATCGTGGCTGCCCA
+GAAAAAGAAGGCCCAAGACGAATACGGCGCTGCGTCTATCACCATTCTCGAAGGGCTGGAGGCCGTCCGC
+AAACGTCCCGGCATGTACATTGGCTCGACCGGTGAGCGCGGTTTACACCATCTCATTTGGGAGGTGGTCG
+ACAACGCGGTCGACGAGGCGATGGCCGGTTATGCAACCACAGTGAACGTAGTGCTGCTTGAGGATGGCGG
+TGTCGAGGTCGCCGACGACGGCCGCGGCATTCCGGTCGCCACCCACGCCTCCGGCATACCGACCGTCGAC
+GTGGTGATGACACAACTACATGCCGGCGGCAAGTTCGACTCGGACGCGTATGCGATATCTGGTGGTCTGC
+ACGGCGTCGGCGTGTCGGTGGTTAACGCGCTATCCACCCGGCTCGAAGTCGAGATCAAGCGCGACGGGTA
+CGAGTGGTCTCAGGTTTATGAGAAGTCGGAACCCCTGGGCCTCAAGCAAGGGGCGCCGACCAAGAAGACG
+GGGTCAACGGTACGGTTCTGGGCCGACCCCGCTGTTTTCGAAACCACGGAATACGACTTCGAAACCGTCG
+CCCGCCGGCTGCAAGAGATGGCGTTCCTCAACAAGGGGCTGACCATCAACCTGACCGACGAGAGGGTGAC
+CCAAGACGAGGTCGTCGACGAAGTGGTCAGCGACGTCGCCGAGGCGCCGAAGTCGGCAAGTGAACGCGCA
+GCCGAATCCACTGCACCGCACAAAGTTAAGAGCCGCACCTTTCACTATCCGGGTGGCCTGGTGGACTTCG
+TGAAACACATCAACCGCACCAAGAACGCGATTCATAGCAGCATCGTGGACTTTTCCGGCAAGGGCACCGG
+GCACGAGGTGGAGATCGCGATGCAATGGAACGCCGGGTATTCGGAGTCGGTGCACACCTTCGCCAACACC
+ATCAACACCCACGAGGGCGGCACCCACGAAGAGGGCTTCCGCAGCGCGCTGACGTCGGTGGTGAACAAGT
+ACGCCAAGGACCGCAAGCTACTGAAGGACAAGGACCCCAACCTCACCGGTGACGATATCCGGGAAGGCCT
+GGCCGCTGTGATCTCGGTGAAGGTCAGCGAACCGCAGTTCGAGGGCCAGACCAAGACCAAGTTGGGCAAC
+ACCGAGGTCAAATCGTTTGTGCAGAAGGTCTGTAATGAACAGCTGACCCACTGGTTTGAAGCCAACCCCA
+CCGACTCGAAAGTCGTTGTGAACAAGGCTGTGTCCTCGGCGCAAGCCCGTATCGCGGCACGTAAGGCACG
+AGAGTTGGTGCGGCGTAAGAGCGCCACCGACATCGGTGGATTGCCCGGCAAGCTGGCCGATTGCCGTTCC
+ACGGATCCGCGCAAGTCCGAACTGTATGTCGTAGAAGGTGACTCGGCCGGCGGTTCTGCAAAAAGCGGTC
+GCGATTCGATGTTCCAGGCGATACTTCCGCTGCGCGGCAAGATCATCAATGTGGAGAAAGCGCGCATCGA
+CCGGGTGCTAAAGAACACCGAAGTTCAGGCGATCATCACGGCGCTGGGCACCGGGATCCACGACGAGTTC
+GATATCGGCAAGCTGCGCTACCACAAGATCGTGCTGATGGCCGACGCCGATGTTGACGGCCAACATATTT
+CCACGCTGTTGTTGACGTTGTTGTTCCGGTTCATGCGGCCGCTCATCGAGAACGGGCATGTGTTTTTGGC
+ACAACCGCCGCTGTACAAACTCAAGTGGCAGCGCAGTGACCCGGAATTCGCATACTCCGACCGCGAGCGC
Binary file test-data/SRX7529235_SRR10859038_1.fastq.gz has changed
Binary file test-data/SRX7529235_SRR10859038_2.fastq.gz has changed
Binary file test-data/adapters.fa.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbmerge/input_R1.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,40 @@
+@A00604:500:HKMVNDSX3:2:1101:8196:1000 1:N:0:ATCGTCTC+NTAACCGA
+NATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGTGGAATCGCAGCCGAACCTGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20419:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFF,,,F:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20853:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGGCCGCGGACATCTCGGTGGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFF:FFF:FFFFFFFFFFFFFFFFFFFFF:FF,FFFFFFFFFFFFFFFFF:FFFFFF:FF:FFFFF
+@A00604:500:HKMVNDSX3:2:1101:20943:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGTAAGTCATGGAGATTGTGTCTATATAAAAAGTGGTAGTGAAATCTGCATTATAAGATGACACTATCTCAAAGTGTATATCAATGAAGAGGATTGGTCATCCAGAAGTAGCACTGGAA
++
+FFFFFFFFFFFFFFFFFFFF:FFFFFF:FFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:29460:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGTCGATTCGGCCGCAGACGGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFF:FFFFFFFFFFFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFF:FFF:FF,FFFFFFFFFFFFF:FFFFFFFFFF:FFFFFF:FFFFFFFF:FFFFFFFFF,FFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:12979:1016 1:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACTGCGCACTGCAGGTGCCATCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFF:FFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:17517:1016 1:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGATGAAACTATGGGACCCTCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFF,FF:FFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:25310:1016 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCAAAGCCCCGGTAGGGCCGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFF:FFFFFFF:FFFFFF:FFFFFFF:FFFF:F:FF:FFFFF::FFFFFFFF::FFF:FFF:FFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:7346:1031 1:N:0:ATCGTCTC+GTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGGACTCGCCCACCTATGTCCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFF:FFFFFFFFFFFFFFF:FF
+@A00604:500:HKMVNDSX3:2:1101:8919:1031 1:N:0:ATCGTCTC+GTAACCGA
+GATCTCATTCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCTCACCGGTTCTGCAGTAAGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF::FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFF:F
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbmerge/input_R2.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,40 @@
+@A00604:500:HKMVNDSX3:2:1101:8196:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACAGGTTCGGCTGCGATTCCACGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFF
+@A00604:500:HKMVNDSX3:2:1101:20419:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20853:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACCCACCGAGATGTCCGCGGCCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFF,FFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20943:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAACCAAGAGGGGCTAAAAATTTTCAAAGGTTACCTATATGATCAGATAAGTTCTGTTGGAAAGAAAATCAATTGATATGACATTGTCAGTCAACTGACATGGATTTTCTCATGACCTAACATGATATATTAAC
++
+FFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFF:FFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFF:FFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFF:FFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:29460:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACCCGTCTGCGGCCGAATCGACGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFF:FFFFFFFFFFFFFFF:F:FFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:12979:1016 2:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGATGGCACCTGCAGTGCGCAGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:17517:1016 2:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGAGGGTCCCATAGTTTCATCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:,FFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF::FF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:25310:1016 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACCGGCCCTACCGGGGCTTTGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:7346:1031 2:N:0:ATCGTCTC+GTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGGACATAGGTGGGCGAGTCCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFFF:FFFFFFFF,FFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFF:FFFFFFFFFFFFFFFF:FFFFFF:FFF
+@A00604:500:HKMVNDSX3:2:1101:8919:1031 2:N:0:ATCGTCTC+GTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACTTACTGCAGAACCGGTGAGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FF,FFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbmerge/input_interleaved.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,80 @@
+@A00604:500:HKMVNDSX3:2:1101:8196:1000 1:N:0:ATCGTCTC+NTAACCGA
+NATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGTGGAATCGCAGCCGAACCTGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:8196:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACAGGTTCGGCTGCGATTCCACGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFF
+@A00604:500:HKMVNDSX3:2:1101:20419:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFF,,,F:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20419:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20853:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGGCCGCGGACATCTCGGTGGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFF:FFF:FFFFFFFFFFFFFFFFFFFFF:FF,FFFFFFFFFFFFFFFFF:FFFFFF:FF:FFFFF
+@A00604:500:HKMVNDSX3:2:1101:20853:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACCCACCGAGATGTCCGCGGCCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFF,FFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20943:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGTAAGTCATGGAGATTGTGTCTATATAAAAAGTGGTAGTGAAATCTGCATTATAAGATGACACTATCTCAAAGTGTATATCAATGAAGAGGATTGGTCATCCAGAAGTAGCACTGGAA
++
+FFFFFFFFFFFFFFFFFFFF:FFFFFF:FFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20943:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAACCAAGAGGGGCTAAAAATTTTCAAAGGTTACCTATATGATCAGATAAGTTCTGTTGGAAAGAAAATCAATTGATATGACATTGTCAGTCAACTGACATGGATTTTCTCATGACCTAACATGATATATTAAC
++
+FFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFF:FFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFF:FFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFF:FFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:29460:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGTCGATTCGGCCGCAGACGGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFF:FFFFFFFFFFFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFF:FFF:FF,FFFFFFFFFFFFF:FFFFFFFFFF:FFFFFF:FFFFFFFF:FFFFFFFFF,FFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:29460:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACCCGTCTGCGGCCGAATCGACGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFF:FFFFFFFFFFFFFFF:F:FFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:12979:1016 1:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACTGCGCACTGCAGGTGCCATCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFF:FFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:12979:1016 2:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGATGGCACCTGCAGTGCGCAGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:17517:1016 1:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGATGAAACTATGGGACCCTCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFF,FF:FFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:17517:1016 2:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGAGGGTCCCATAGTTTCATCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:,FFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF::FF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:25310:1016 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCAAAGCCCCGGTAGGGCCGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFF:FFFFFFF:FFFFFF:FFFFFFF:FFFF:F:FF:FFFFF::FFFFFFFF::FFF:FFF:FFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:25310:1016 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACCGGCCCTACCGGGGCTTTGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:7346:1031 1:N:0:ATCGTCTC+GTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGGACTCGCCCACCTATGTCCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFF:FFFFFFFFFFFFFFF:FF
+@A00604:500:HKMVNDSX3:2:1101:7346:1031 2:N:0:ATCGTCTC+GTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGGACATAGGTGGGCGAGTCCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF,FFFFFF:FFFFFFFF,FFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFF:FFFFFFFFFFFFFFFF:FFFFFF:FFF
+@A00604:500:HKMVNDSX3:2:1101:8919:1031 1:N:0:ATCGTCTC+GTAACCGA
+GATCTCATTCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCTCACCGGTTCTGCAGTAAGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAA
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF::FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFF:F
+@A00604:500:HKMVNDSX3:2:1101:8919:1031 2:N:0:ATCGTCTC+GTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACTTACTGCAGAACCGGTGAGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTT
++
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FF,FFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbmerge/insert_length_hist.tabular	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,8 @@
+#Mean	165.889
+#Median	166
+#Mode	166
+#STDev	0.314
+#PercentOfPairs	90.000
+#InsertSize	Count
+165	1
+166	8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbmerge/merged.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,36 @@
+@A00604:500:HKMVNDSX3:2:1101:8196:1000 1:N:0:ATCGTCTC+NTAACCGA
+NATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGTGGAATCGCAGCCGAACCTGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAAAAGTGGCACCGAGT
++
+!FFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20419:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAAAAGTGGCACCGAGT
++
+FFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJHHHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20853:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGGCCGCGGACATCTCGGTGGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAAAAGTGGCACCGAGT
++
+FFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJHJJJJJHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:29460:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGTCGATTCGGCCGCAGACGGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAAAAGTGGCACCGAGT
++
+FFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:12979:1016 1:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACTGCGCACTGCAGGTGCCATCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+FFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:17517:1016 1:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGATGAAACTATGGGACCCTCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+FFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJH<JJJJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:25310:1016 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCAAAGCCCCGGTAGGGCCGGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAAAAGTGGCACCGAGT
++
+FFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:7346:1031 1:N:0:ATCGTCTC+GTAACCGA
+ACTCGGTGCCACTTTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGGACTCGCCCACCTATGTCCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+FFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJHJJJJJJJHJJJJJJJHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:8919:1031 1:N:0:ATCGTCTC+GTAACCGA
+GATCTCATTCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCTCACCGGTTCTGCAGTAAGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAAAAGTGGCACCGAGT
++
+FFFFFFFFFFFFFFJJJJJHJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbmerge/unmerged.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,8 @@
+@A00604:500:HKMVNDSX3:2:1101:20943:1000 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGTAAGTCATGGAGATTGTGTCTATATAAAAAGTGGTAGTGAAATCTGCATTATAAGATGACACTATCTCAAAGTGTATATCAATGAAGAGGATTGGTCATCCAGAAGTAGCACTGGAA
++
+FFFFFFFFFFFFFFFFFFFF:FFFFFF:FFF:FF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@A00604:500:HKMVNDSX3:2:1101:20943:1000 2:N:0:ATCGTCTC+NTAACCGA
+ACTCGGTGCCACTTTTTCAACCAAGAGGGGCTAAAAATTTTCAAAGGTTACCTATATGATCAGATAAGTTCTGTTGGAAAGAAAATCAATTGATATGACATTGTCAGTCAACTGACATGGATTTTCTCATGACCTAACATGATATATTAAC
++
+FFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFF:FFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFF:FFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFF:FFFFFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/discarded.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,32 @@
+@read1:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read1:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read5:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read5:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read7:duplicateB 1:N:0:ATCGTCTC+NTAACCGA
+AAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read7:duplicateB 2:N:0:ATCGTCTC+NTAACCGA
+ACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read8:duplicateB 1:N:0:ATCGTCTC+NTAACCGA
+AAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read8:duplicateB 2:N:0:ATCGTCTC+NTAACCGA
+ACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/input_R1.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,40 @@
+@read1:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read2:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read5:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read7:duplicateB 1:N:0:ATCGTCTC+NTAACCGA
+AAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read8:duplicateB 1:N:0:ATCGTCTC+NTAACCGA
+AAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Binary file test-data/bbnorm/input_R1.fastq.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/input_R2.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,40 @@
+@read1:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read2:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read5:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read7:duplicateB 2:N:0:ATCGTCTC+NTAACCGA
+ACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read8:duplicateB 2:N:0:ATCGTCTC+NTAACCGA
+ACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/input_interleaved.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,80 @@
+@read1:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read1:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read2:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read2:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read5:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read5:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read7:duplicateB 1:N:0:ATCGTCTC+NTAACCGA
+AAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read7:duplicateB 2:N:0:ATCGTCTC+NTAACCGA
+ACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read8:duplicateB 1:N:0:ATCGTCTC+NTAACCGA
+AAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read8:duplicateB 2:N:0:ATCGTCTC+NTAACCGA
+ACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/kmer_hist_input.tabular	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,6 @@
+#Depth	Raw_Count	Unique_Kmers
+2	188	94
+4	472	118
+6	708	118
+8	752	94
+10	300	30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/kmer_hist_output.tabular	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,4 @@
+#Depth	Raw_Count	Unique_Kmers
+2	424	212
+4	848	212
+6	180	30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/normalised_R1.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,24 @@
+@read2:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/normalised_R2.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,24 @@
+@read2:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bbnorm/normalised_interleaved.fastq	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,48 @@
+@read2:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read2:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read3:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read4:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 1:N:0:ATCGTCTC+NTAACCGA
+GATCTCATTCCTTGAAAGTATTTCGATTTCTTGGCTTTATATATCTTGTGGAAAGGACGAAACACCGCCGGGCGACGATCATGAGCGTTTAAGAGCTATGCTGGAAACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read6:duplicateA 2:N:0:ATCGTCTC+NTAACCGA
+TTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGTTTCCAGCATAGCTCTTAAACGCTCATGATCGTCGCCCGGCGGTGTTTCGTCCTTTCCACAAGATATATAAAGCCAAGAAATCGAAATACTTTCAAGGAATGAGATC
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read9:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 1:N:0:ATCGTCTC+NTAACCGA
+ACAGCATAGCAAGTTTAAATAAGGCTAGTCCGTTATCAACTTGAAACGCGCGAGTCGGCATGCTGATGCACGATGCTAGCTGAGCATGCTAGTCGAGCAGTCGTAGCGCGCGCGCTATCGCGATCGCGATCGGCATCGGAGCTACGGAATA
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+@read10:duplicateC 2:N:0:ATCGTCTC+NTAACCGA
+TATTCCGTAGCTCCGATGCCGATCGCGATCGCGATAGCGCGCGCGCTACGACTGCTCGACTAGCATGCTCAGCTAGCATCGTGCATCAGCATGCCGACTCGCGCGTTTCAAGTTGATAACGGACTAGCCTTATTTAAACTTGCTATGCTGT
++
+EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bduk_output_dump1.fasta	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,100 @@
+>116
+GAGATGGAACTGTAACTGGAGTTCCTT
+>7
+TGCCTAAGTGACTAGAGTTCAGACGTG
+>28
+TGAACTCCAGTCAAATTCCTTTATCTC
+>141
+GCATACGAGATGTATAGGTGACTGGAG
+>3
+GTTCAGCAGGAATACCGAGACCGATCT
+>126
+GGTAGCATCTCGTATGCCGTCTTCTGC
+>123
+GCCAAGGAACTCCAGTCACGTTTCGAT
+>126
+ATACGAGATGCTAACGTGACTGGAGTT
+>18
+CCGTATCTCGTATACCGTCTTCTGCTT
+>26
+TCTGAACTCCAGTAACGAGTGGATATC
+>17
+GAAGACGGCATACAAGATTGTTGACTG
+>22
+TGAACTCCAGTCAAGTGAAACGATCTC
+>50
+ACGCTACGCTATCACGTATGCCGTCTT
+>103
+TCGGGTGCCAAGGAACTCCAGTCACAT
+>141
+ATACATCTCGTATACCGTCTTCTGCTT
+>113
+TCGGGTGCCAAGGAACTCCAGTCACGG
+>84
+GAGATTACTACGCATCTCGTGGGCTCG
+>122
+CGTGGCCATCTCGAATGCCGTCTTCTG
+>139
+TCCAGTCACCGGAATATCTCGTATGCC
+>42
+CAGAAGACGGCATACGAGATTCGCCTT
+>107
+TGTGTGACTGGAGATCCTTGGCACCCG
+>140
+CATACGAGATAGCAAGGTGACTGGAGT
+>6
+GGTGACTGGAGTTAAGACGTGTGCTCT
+>30
+TCTCTTATACACAACTCCGAGCCCACG
+>122
+CAGTCACGTGGCCATCTCGTATGCCGT
+>19
+GTCACATGTCAGAATCTCGTATGCCGT
+>41
+GCGTGTAGATCTCAGTGGTCGCCGTAT
+>1
+GTGACTGGAGTTCAGACGTGTGCTCTT
+>15
+GTCTGAACTCCAGACACGGCTACATCT
+>4
+TCCGATCTCAAGCAGAAGACGGCATAC
+>119
+GAAGACGGCATACAAGATCTCTACGTG
+>129
+GTCACATTCCTATATCGTATGCCGTCT
+>107
+GATCACTGTGTGAATGGAGTTCCTTGG
+>9
+ATACGAGATCACTATGTGACTGGAGTT
+>24
+CTGAACTCCAGTCACGTTTCGGAATCT
+>116
+TGGAACTGTGACTAGAGTTCCTTGGCA
+>13
+GAAGACGGCATACAAGATCTGATCGTG
+>30
+TCTTATACACATCACCGAGCCCACGAG
+>49
+CAGAGAGGATCTCATATGCCGTCTTCT
+>133
+TCGTGGTGACTGGAGTTCCTTGGCACC
+>8
+CAGTCACTGACCAATCTCGTATGCCGT
+>33
+TCTAGTGTAGATCACGGTGGTCGCCGT
+>21
+TGCGGACGTGACTAGAGTTCAGACGTG
+>37
+GACGACTCCTTACATGTAGATCTCGGT
+>124
+GTACGGTGACTGGAGTTCCTTGGCACC
+>69
+TACACTTATGCGAACGTCGGCAGCGTC
+>149
+GCATACGAGATCTACGAGTGACTGGAG
+>124
+GAGATCGTACGGTAACTGGAGTTCCTT
+>105
+GCCAAGGAACTCCAGTCACTTAGGCAT
+>150
+CAGTCACTCGGCAATCTCGTATGCCGT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bduk_output_quhist1.tabular	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,101 @@
+#BaseNum	Read1_linear	Read1_log	Read2_linear	Read2_log
+1	16.400	4.332	32.940	32.694
+2	24.580	19.293	32.680	30.545
+3	29.880	28.913	32.720	32.218
+4	35.400	35.023	35.740	28.139
+5	35.610	35.076	35.980	34.688
+6	36.070	35.819	36.130	35.232
+7	36.030	35.134	35.750	28.304
+8	36.210	35.891	35.760	30.427
+9	37.770	36.724	37.550	36.174
+10	37.770	36.627	37.890	36.829
+11	38.130	34.528	37.720	35.825
+12	38.120	37.610	37.930	36.724
+13	37.600	29.816	37.860	33.975
+14	39.600	38.822	39.490	29.436
+15	39.240	37.118	39.430	34.527
+16	39.370	37.815	39.670	29.527
+17	39.230	35.062	39.310	34.199
+18	39.410	38.456	39.700	38.264
+19	39.470	38.621	38.680	28.791
+20	39.170	36.390	39.340	38.126
+21	39.340	38.280	39.320	37.141
+22	38.870	32.580	38.480	25.015
+23	39.370	37.125	38.850	32.436
+24	38.940	36.347	39.200	37.110
+25	38.560	36.248	39.000	28.586
+26	38.810	33.655	38.460	29.005
+27	38.930	35.395	38.560	25.539
+28	39.090	37.259	38.190	23.947
+29	38.610	25.879	38.730	30.749
+30	38.540	33.271	38.520	32.796
+31	38.840	33.517	38.040	30.447
+32	38.730	36.053	38.530	27.397
+33	38.340	34.385	38.880	35.605
+34	38.470	28.217	38.430	32.167
+35	37.350	30.035	38.560	26.684
+36	37.380	20.434	38.900	32.524
+37	37.810	32.591	38.450	34.632
+38	38.150	33.133	38.750	35.749
+39	37.660	31.924	38.420	26.003
+40	38.040	34.153	38.730	36.080
+41	37.970	35.596	39.020	37.708
+42	37.240	31.069	39.380	33.973
+43	37.740	29.175	38.840	35.607
+44	38.070	34.040	38.400	23.939
+45	37.690	30.131	38.160	26.507
+46	37.160	26.236	37.990	32.407
+47	37.820	35.168	37.330	29.388
+48	37.920	35.623	37.850	31.413
+49	38.150	34.322	37.830	27.255
+50	38.250	34.017	38.260	36.442
+51	38.060	36.455	36.270	30.125
+52	37.240	34.726	37.000	33.291
+53	37.700	32.804	37.210	34.667
+54	37.740	33.699	37.520	34.736
+55	37.780	33.713	37.880	35.604
+56	37.470	31.063	37.880	35.326
+57	36.680	26.593	36.810	22.646
+58	36.390	26.714	37.140	31.327
+59	35.960	29.732	36.900	20.404
+60	35.500	27.738	36.440	21.355
+61	35.800	28.761	36.200	20.579
+62	34.880	22.760	36.570	21.483
+63	35.560	30.716	36.180	21.372
+64	35.460	30.521	35.970	20.108
+65	35.090	25.249	35.450	20.127
+66	35.240	31.736	35.330	20.499
+67	35.230	25.003	35.410	21.618
+68	34.870	25.901	35.400	21.693
+69	34.560	24.095	35.200	21.684
+70	34.670	29.988	34.730	21.372
+71	35.010	32.741	34.710	21.582
+72	33.750	21.148	34.060	18.014
+73	34.130	29.634	34.040	18.342
+74	34.080	21.493	33.840	17.025
+75	33.590	20.367	33.380	16.366
+76	31.930	18.529	33.300	17.088
+77	32.400	18.486	32.360	15.307
+78	32.840	18.708	32.170	15.246
+79	33.190	18.732	32.130	15.504
+80	32.680	17.826	32.770	15.850
+81	32.690	17.578	32.640	15.552
+82	32.510	16.664	32.800	15.822
+83	31.640	15.134	32.350	15.209
+84	31.220	15.026	32.320	15.547
+85	31.270	14.413	32.170	15.387
+86	31.310	14.436	32.520	15.576
+87	32.130	14.923	32.070	15.354
+88	31.610	14.417	31.780	15.361
+89	31.240	14.665	32.290	15.854
+90	31.130	14.606	31.730	15.508
+91	31.350	14.867	32.120	14.926
+92	31.270	14.282	32.040	14.910
+93	31.790	14.879	31.770	14.676
+94	31.010	13.468	31.380	14.768
+95	30.280	12.737	31.220	14.847
+96	30.310	12.852	31.050	14.129
+97	30.390	12.411	31.160	13.935
+98	30.150	12.394	30.960	13.893
+99	30.300	11.964	30.610	13.166
+100	29.860	11.945	30.460	12.397
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bduk_outputu1.fastqsanger	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,102 @@
+@XXXXXXXXXX:7:1101:1582:1835#/1
+NGCTTCAGTTGGTACAGGTGTGTCACCCGTAGTTTGTAGGCTTGGAAGCCTGTAAGCTGTAGGGAACGTGGCAAGAACCAGATCTGGCCTTCCATATCTC
++
+!1=DDDDDAFFDDEFFG@AGHBCFHIFIEGIC?DBFGIFF?FGDFIBFFII8BCFIEEF.@FFIIEFFCE=??B@>A@@@BBBAD>A:?BBBBB@>>>B:
+@XXXXXXXXXX:7:1101:1610:1859#/1
+NTTATGTGTTACGTGAATCTCCTGAAGACAGCAGAAACTAGGTTGGTGAATTCTTATCCATTCTGCCATTCTGTATCTTTTAAGTGGAGCATTTAGGCTA
++
+!1=DDFDFHHHHHHJJIJJJJJJJJJJJIJIIJJJIJIJJJJIJJJIIJJJIJJJIIJJJJIIJJJJGIJJJIHJHHHHHHHFFFFFFDDDEEDEDDCDD
+@XXXXXXXXXX:7:1101:1743:1871#/1
+NCGGGATGGAGGCAGGGCAAGCGGATGCAGGCCCAGCCCTGCCCTTACAGGTAGCTGGAAGTGACGAAGGAGTGGGGCCCCCGGACTCTGCTCAGGTGGA
++
+!1=DDDFFHHHHHIJJJEGGGIHIGIIGGGIIIJEHHHGGCCHIIIFHHFHADDCDDC@CECECCDDB7?BB9?BA>9<@DDB>>9>CD>:>CA9A:A@A
+@XXXXXXXXXX:7:1101:1536:1878#/1
+NGGCCTTTTTGGACAGGTGGTGTGTGGTGGCCTTGGTATGTGCTTTCTCGTGTTACATCGCGCCATCATTGGTATATGGTTAGTGTGTTGGTTAGTAGGC
++
+!1=DDDFEHHHHCGGIJFHIECHEFHIGGGGIJI<BBFGEIFGIIJIIJJJEGGEGGIHCCBHBFFCCEDEEC@CDDDC3>:95>@ABCAA<?C?>CDCC
+@XXXXXXXXXX:7:1101:2990:100153#/1
+GCCAGGAGTGACTGTGTTGTTCTTTGCTTTATATACATAAGCGCATCTCTTGCCCAAATAGAATTCTGTTTCATCTCGGGCGTAAACACCTTCAATTTTA
++
+@@@DDDFDBFHDFH<EHGIHGCHEGHGIIGIIEGFEIGGIIIIII<GICCE@4?BBFHGHAEGIHHIICDHEEEAAHFBEDD@B@B@><@D>CDDDDCCB
+@XXXXXXXXXX:7:1101:1624:1906#/1
+NCCAGGTTTAAGGCATTACATCGAGGGGCTGAACTTGAGACAGTCCCTGAAAATGTAAGAACAGGAGCTAGAACTTGCTTATGGGAAGGGCCTAGGGAGA
++
+!1=DDFFFHHHHHJJJJJIJJJJJJJJJJJJJJJJJIJJIJIIJJJJJJJGIJJIIJIECGIHHHHFFFFEECEECEDDDDDDCDCDDDDDDDDDDDDD@
+@XXXXXXXXXX:7:1101:1666:1926#/1
+NGCAAACTGGTCAGGACCTGGAGCTGCTTGCCTGGCCTTGGCACAAGAGGCCGACATATGCCCAGCCCCTAGGAGTGACAGATCCGTCCTCTGTGGGAAC
++
+!1BDFFFFHHHHHJJJJJJJJJJJJJJJJJJJIJIJJJJJJIJJJJJJJJJJJJJJJHHHHHHFFFFDDDDDDCCDBDDDDDDDDDDDDDDDDDDDDBCD
+@XXXXXXXXXX:7:1101:2921:100163#/1
+CTCCGGATGCCAAAGGATCTGACAGTGTATCTAGCTTTGGAAAACACAGGGGTCTGCCCTGTGAGCTGCTCCAACACCTTGGCTGCTCGCGTCAGTCTGT
++
+CCBFFFFFHHHHHJJJIJIIIJJJJHIFFHGIIHEIJIIIIIJIIGIIIICHHHHIJIIEHHJIHHFHHFFFFFFBDDDDDCDDDDDDDDD@B@@CCDDD
+@XXXXXXXXXX:7:1101:1513:1929#/1
+NCACTATCAAGGTTAGTGTCTATATCTACTTGAGANAAAATACTGAAAATTCAGTGTATGAAGCCAAATCCTGATTTAACAAGTTATTGGTAGTATAAGT
++
+!1:ABDDDDFFF:ACGFGFHHFIFAHEEHDFI@F8!1:CFEFFIGEFGIII>GIFICGGII@FFFIEFEADGIIEIFFFFFFFEEDDDDBDAC>>;;BA5
+@XXXXXXXXXX:7:1101:2759:100170#/1
+CTGCTCATCACATTCCAGATGCCATCACAGGCAATGACCATGAATTCATGGTCGTCAGTGAGAGTCAGCACCTTGATGTCAGGAAGGGCTGAAATCATCT
++
+CCCFFFFFHHHHHJJJJJIJJJJJJJJJJJJJJJJJJJJJJJJIJJJIJJJIJJJJJJHIIJJJIJJJJJJJHHHHHHHFFFFFEEDDDDDBCDDDDDDD
+@XXXXXXXXXX:7:1101:1708:1937#/1
+NGGTCGGTGTCCTTTTTTGGCGTCAAACTTATAGAGGGAAGCAGGGAATCTACCCAACCAAAGCCAATGAACAGTCAGTCAGTCCATCTAGTTAAGGTTC
++
+!1=BDDDDFDHHHIJJIJIJGIJIGGIJIGAGFHGHIGA=FCDFGHJJHEHFHHEFFFDABCDCDCCCDCDDDDDACDDCDDCAAACCDDDDDDACCACD
+@XXXXXXXXXX:7:1101:2981:100211#/1
+GGGGTCAGTGGGAAAGGTGTCAATGGGACTTCGGTCTCCATGCCGAAACACCAAAGTCACAAACTTCAACTCCTTGGCTAGTACACTTCGGTCTAGCCAG
++
+@@CFDDDFFFFHHEIGGHIIIIJJIIDHIGGIJFGBHIIIGGGGGGGIIJJHJGIG=DECEEEFFFFCDCCE@CC@?CDCBDDCDCCCCBB?B@>CACAB
+@XXXXXXXXXX:7:1101:1688:1946#/1
+NCCGCCTTCTTTCTCTACTTCGTGACCTTTTGTGGTCCCGAGACCTGCTGCATCTTCTGTCTGATGTTCGGCTTGAGTGTCTACTTCCTGAACGACTTCT
++
+!1:BDAAD<DDDDIEE>DBEEFEEFIIIIIEADEC?C>DD<?D@?@BDDDEEDIEIEDE=CEE>CE?CCC6=?###########################
+@XXXXXXXXXX:7:1101:2767:100225#/1
+CGCCTGGTGTCAATGCGCACATCTGGAGTTCCCATCTCCTTCATGGCAAATTTCCGAATCTCTTTGAGTGCCCGAGGTGCACGCTTCTTGAAGCCCACTC
++
+@@@FDFFFGHHHFJJIJIIIIJIJIJIGHBD@DFGGGJIFIJJJJIIIIIGHIIGIJFIJJIJIG@EECCHEEDCAD>ACCCDDDDDACCAC@CDDDDDD
+@XXXXXXXXXX:7:1101:1536:1959#/1
+NGATACTGTTGGGTCAGGACCAGGGCCTGCACCACCGAAATTCTGTCTTTTACAAACTGGACCAAGCGGTTGAGAATACAGGGGCCGAAGAGTAGGATTA
++
+!4:BB?DDHHDHAE?ECB@=GGI=<;CG@B;<D@DG:@FFABFBG<=FFGFHIIGGH@>==AEC?DECA<;8;3<AC>CCCC8&-5>@@59?4::>>>CC
+@XXXXXXXXXX:7:1101:2797:100234#/1
+GTGCTGGTCTCTCTCCACGATCTCTTACGTGCTAGCAGGGTGAACAAGGACGCCTCGCTGTCATTGCACTCACGCCACAGGAGCCTGGCACATTTCCGCT
++
++:?BDD8DFFFB8ED;@GF8A3?FH?B<)11?@FG<E<;@F629?BF@?2=A;4C6BE7-,7@;@;@A>;@CBB?=88?5(95983?(8<><AA######
+@XXXXXXXXXX:7:1101:1552:1976#/1
+NTGATGAGTTTGCTAATACAATGCCAGTCAGGCCACCTACGGTGAAAAGAAAGATGAATCCTAGGGCTCAGAGCACTGCAGCAGATCATTTCATATTGCT
++
+!1=DDFFFFHFHGJJJJIJJJJJJJJJJJIIJFGHGIIIJIJGHIEIIJJJHIGIIJGJIIJJJBHIIJHHHHHDEFCECEEEEDDDDDEFEEEEEEEDD
+@XXXXXXXXXX:7:1101:1748:1978#/1
+NCGCTGAGCAGGGCAGGCAGTGGTGGAGGCAGCCCCCCAAGACCCCATCTCTATCACAGTGAGAGCATCTGAACTCCAAAGCCACGACAGAACAGCTCCC
++
+!1=DFFFFHHHHHIJJJJIJIJJFHJIIJIJJGJJIIJAHGGGHHHHFFFFFFEEDECE@CDDCDDDCDDDACCCCDDDDCDDDDDDDDBDDCCC@ACDD
+@XXXXXXXXXX:7:1101:2779:100239#/1
+TGGGTGCTCTCCTTGGTCAGCTGCTGCTCGAACAGAGCACTTCTAGATACAGAGTTGGACCCAGACACAGCAGGGGTGGCCATGGCGGCTGGGAAAGACC
++
+@@@?DD?DFHHFFHIEEHIBGI9CFHFGCB::CGIGHG@BF<FHFHD@DDDBBDBFGH<C;C;==;C;;?H;;?<>88=@?C##################
+@XXXXXXXXXX:7:1101:1593:1980#/1
+NGGCACCAGAAGCATGAGCATAGGCAGAGCCATTTCCACCATGCTGACGGCAGGCAAGAAGAAGACAAAAATGAACCCCTTTCATGCTTGTTTAGAAATG
++
+!1=DFFFFHHHHGJJJJJJJJIJJIJJJIGJIIJJJJGIIIJJJJJIIJJJJJJIIJHHHHHFFFFFEEDDDDDDDDDDDDDDDEDDDEDDDDDDDDDDD
+@XXXXXXXXXX:7:1101:2946:100242#/1
+TGGGGATGTTGTTAAAAAAAATACAGGCTCCCCCACAACTGGGGTGCCTGGGGGGAACTTGGTCTGCTTCAGCCCAAGAGGAATCAAAAGATCAAAAGCA
++
+@@@FFDDDHHHHHJIIGIJIGEGIIJJIIJJGJJEECDEA=FHI-=?B?CEDDDD5583:AC3::94:CAACCDBABD8?BA?CCDDDDD@CCACCDCBD
+@XXXXXXXXXX:7:1101:1987:1781#/1
+NTTAGCAGGTCCTCGTAGCGTTTCCGCAACTCTCGGAATCTGGAGTCTTCGGAGTGCAACTCTGAGGGTCCCGGGAAACTTGCGCGGCTCGCCTCGGCCA
++
+!1=DDFFFHHHHHJJJJJIJJJJIJJJJJJJJJJJJJJJGJJJJIIHIJJJIJHHGHFFFFFFCEEDDDDDDDDDBDDDDDDDDDDDDDDBBDDD9B?B<
+@XXXXXXXXXX:7:1101:3046:100006#/1
+CTGTACAGCATGGATGTGGACAGGGAAAACAGCAAGTGCACACAGTGGGACAGGCCACAGGACAGGCTGGGAGTGAATAAAGAGTTCACACTGCTTCCCT
++
+CCCFFFFFHHHHHJJJIJJJJJJJJJJJJJJJIJJJFHIJJIIJIGGHIJJJJJJIJJIIJJJHHHHFFFD=C;?CDCDDD@>?>@CACDACCDDCDDDD
+@XXXXXXXXXX:7:1101:1900:1788#/1
+NCCCGCTGCCCACGCCACTGTCCCGGCGCTGCCCTGGGCGCGGAATGCGCGTTAGGCAATCCCCGGTCTGCGCGTCCCACACGCAGATGTGGCCTGCCAG
++
+!1=DFFFFGHHGHJJJIJJIJJJJGIIJJJIIJJIJJJIHFFDDDDDDDDDBDDDDDDDDDDDDBD@BDDDB>BB<BBDDDDDDDDDDDECDDBDDDDC@
+@XXXXXXXXXX:7:1101:3214:100027#/1
+GGCTGAGGTACTGAATGAGGAACAGCAGGAGGTAACGTCTGAGGGTGCGGCTGGGGAACGGTTTGCACAGGGGTGGCTGTAGGAGCAGGAGGTGAAACAC
++
+@@@FFDFF?DFHHIIIIIIGIIGHGIIGIIII?FHHGDFGIGGIC6?FHIIFIHHH59;=B559=33:55<(830588<((>:(98<CB02&28>CA>98
+@XXXXXXXXXX:7:1101:1848:1879#/1
+NCTTCTTCTTCCTCATGTTTTTTGATCAACTGCTCCACTTCTTTTTGTTTGAGAACTCTGATTACTGTCTTTCCATTCTCTCTTGTTAGTGTTGCAATTT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bduk_outputu2.fastqsanger	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,102 @@
+@XXXXXXXXXX:7:1101:1582:1835#/2
+GCAATGATGGGGCCGCTCCCGGGGCCACACCTGCTTCTGGATCCGCTGCTTCCAAGTTCCTTTGCCTCCCTCCTGGCATCACTGTCTGCGACTCAGGCCG
++
+@@@DDDADHFHGFEGIGIIIGEGFD@FHA@GIGIJJIJJEAHHEBEDACEAC@CDDDC@@CCCCDCD@AD9?BCCDDCCDDDDDDDDCC99BBDDCACBB
+@XXXXXXXXXX:7:1101:1610:1859#/2
+CAATAACACAGTCCAAAATATATGTATGTATGTATATATATATGCAGGCAACAAATAGCACAATGAATAAAATAGTACTTCATCTCAGTACTAACATTGA
++
+C@BFFFFFHHGHDIIJJJJJJIIJHIJJHIJIJJIGIJIJJJJJFIIJJIIIIIJJJIJJJJJJJJIJJJIJJJJEGIIJJIJHHHHHCDFFFFFFEEEE
+@XXXXXXXXXX:7:1101:1743:1871#/2
+GCTTCCAAGGGACAAAGTCCTGCCCTTGGGTGTGGAAGACACCGTGGACAAGCTCAAGATGCTGGAAGGCCGCAAGACCAGCATCCGCAAGTCAGTGCAG
++
+CCCFFFFFHHHHHJJJJJIIJHEHJIJJJIEDGIIIJIGGGIJIGEIIIIJIIIIIHGHHHHFFFFFFFDB>B@BDDCDDDDDDDCB?@BDCCDDDDDDD
+@XXXXXXXXXX:7:1101:1536:1878#/2
+TGCCTATCATATAGTAAAACCCAGCCCATGACCCCTAACAGGGGCCCTCTCAGCCCTCCTAATGACCTCCGGCCTAGCCATGTGATTTCACTTCCACTCC
++
+@@@DFFFFHGFHGIJJJJJJJAFDHICDFHGIJIIJEEIJGIJGHJIJJIFAAAFGBGGFFFHGHFDFDFBCBDDDD<ACDDDCADEDDDDCD:>CDDCC
+@XXXXXXXXXX:7:1101:2990:100153#/2
+TGGAGGCCTGCTGGGAACGGGACTTCTAAAAGGAACTATGTCTGGAAGGCTGTGGTCCAAGGCCATTTTTGCTGGCTATAAGCGGGGTCTCCGGAACCAA
++
+@@@DDDDFHHFDHJJIGGHIJHIJJJJJGGGHJEGIIJJJIJJJIJJII?=FFHIHGGIJIHHHHFFC@BBCCEDDDDDECCDBDBD09CDDDDBBB??1
+@XXXXXXXXXX:7:1101:1624:1906#/2
+GGCTGGTCTGTCCCCTCTGCATCTGGGGCTCCTCCTGGCCCTTCTCCCGCTGCCTGTCCTGCCTCCTGGCCCTGCAGCAGCACCTTGCCCAGTGATCTTT
++
+CCCFFFFFHGHHHJJJJJJJIJJJIJJJIJIJJIJJIJIJJJJJJGGIJJFGIJGHHIFHHHHHFFDFDEEDDDD?CDDDDDDDDDCCDCDDCCCDCCCD
+@XXXXXXXXXX:7:1101:1666:1926#/2
+GGCTGTGGGAACTCTAGCTGCTGTCAGCCCCTCCTGTAGGAGCTGGCCCTGCCCAGGCTCCTGACTTCCCTCAGGAAGTCTTTCTGTCTTTCTCCATCAG
++
+CCCFFFFFHHFHHJJIJJJJJJIJJJJJJJJJJJJJJJJIIJJJJIJJJJIJJIJJIIJJJIHCHHGHFFFFBEE>@B>CDDDCDDDDDDDDDACDDCCD
+@XXXXXXXXXX:7:1101:2921:100163#/2
+GAAAAGGAGAACCCCATGCGGGAACTTCGCATCCGCAAACTCTGTCTCAACATCTGTGTTGGGGAGAGTGGAGACAGACTGACGCGAGCAGCCAAGGTGT
++
+CCCFFFFFHHGHHJJIJJJJJJIIJJJIIIGDHIGIJJJIJJ>HHGEHHGEHFFFFCDEEDCBDDDBB>C@DDCDDDDDDDDDDB@BD@BDDDBDDD:@@
+@XXXXXXXXXX:7:1101:1513:1929#/2
+AAAATGAGGGCCCGTAACAGAACCAGTGTGTGTATAACGAAAACCATGTATAAAATGGGCCTATCACCCTTGTCAGAGATATAAATTACCACATTTGCCT
++
+?@@;;D>DFH:;?EFD:F<FE?;CBF:DCG?FD4?FIGHIGIJJGFGIFG@FGGDHIHIGHHGFFFFFECEDADCDACA>CAADACDDCDCC<ACDDDDD
+@XXXXXXXXXX:7:1101:2759:100170#/2
+GGTCACCATGGATGGGCGAGTCAACGGGGGCCTCAACCTCTCCAGAGCCATTGGGGACCACTTCTATAAGAGAAACAAGAACCTGCCACCTGAGGAACAG
++
+CC@FFFFFHHHHHJJJJJIJGIIJJJJJJIJJGGHHCEFFFFEEEEDDDDDDDDDDDDDDDDDDDDEEDDDDCDDDDDDDDDDDDDDDDDDDDCDC?ABD
+@XXXXXXXXXX:7:1101:1708:1937#/2
+GAATACTTTGTGTTTACCCACTGCCCCCTGACCACTGCTGAAGGCAGAAAGGGACGATCACCTACAGTACCTGGTTTGGGTCTTTATTCTCTCATTCTAG
++
+B@BFFFFFHHCFHIJIHGIGIIJJGGIJJGIIIGIGGIJJEIGIHHJJJJIHIIJJIJHHHGFBEFFCCEEDCD;@A?BB?ACCCCCCCCACD@DADA@C
+@XXXXXXXXXX:7:1101:2981:100211#/2
+TTCCTCCTAACTCCTGCCAGAAACAGCTCTCCTCAACATGAGAGCTGCACCCCTCCTCCTGGCCAGGGCAGCAAGCCTTAGCCTTGGCTTCTTGTTTCTG
++
+@@BFFFFFHBDHHIHIIIIGGGADGGIGIEHIIIIJJIIIE<BHAHHHIGFGIJJJJIIHIBDGGEAEFFF;>CCABCDCDDCACDCCAA?@CD4:<@AC
+@XXXXXXXXXX:7:1101:1688:1946#/2
+GAGAAAGGGAAGAAAGAGAAAGGAAAAGACGAAGGGAAGAGGAAGAAAGAGAAAAAGAAAGGGCTCGTGACAGAGAAAGAAGAAAGAGAAGTCGTTCACG
++
+BB@ADFFFHDDHAGGHGHGGHEHGIJJIIJIIJJJJ<FH;FGDEGEGHGIFHEGIJFFHHFDFFEDDBDDDDCCCACCDABDDDDDCCCCDCCD@B?CDD
+@XXXXXXXXXX:7:1101:2767:100225#/2
+TGCAGAATGGCTCCCGCAAAGAAGGGTGGCGAGAAGAAAAAGGGCCGTTCTGCCATCAACGAAGTGGTAACCCGAGAATACACCATCAACATTCACAAGC
++
+@@@FFFFF<FFHHGGIJIIGGGIII>):?FF:FGGGIJIJIHCHHHFBCE;ACDDDDDCA@<@DBDDCDDCDDDDDDDDD@CCCDAA@>ACC>>A@@C1<
+@XXXXXXXXXX:7:1101:1536:1959#/2
+GAGACAAAAATTGTTTGAATCAGGACAAGGGAGGTTTGAGGGACTGTTTAACAGGTCCCCATGGTTCACGACCCTGATATCCACCATTATGGGCCCTCTG
++
+@8@1:?:=DD>D<CE+A:+C?+AF++++281)?D):?HD=FG6((?88=CFFCHG7=@HH@9?3.)7772?3,9;A(((5>;5>BBAA:>CCD?8@BD9A
+@XXXXXXXXXX:7:1101:2797:100234#/2
+GGAAACGCTGGAGAAGACAGTGTTGCTAGTCTGTTCCTGTTCGTGAGAATGCTTTGAATGGAGGCTCACTGTGCTGCGGCGGCTGCGGCCGTAGCGGGCG
++
+B1=+:A+0A::A2+2A2A3A<+2<?9<*119:9:1CC:DDFF<)800//9/>8E=<)/8@@@6C(6==737==>>@########################
+@XXXXXXXXXX:7:1101:1552:1976#/2
+TGTGAGCACACCATATATTTACAGTAGGAATAGACGTAGACACACGAGCATATTTCACCTCCGCTACCATAATCATCGCTATCCCCACCGGCGTCAAAGT
++
+CCCFFFFFHHHHHIIGIGGIHJIGHHJIECGGGHJIJJJJJJJJJGHIJJGGHGIIEHIIJDIJFHFFFFF@CCCEECDDDDDCDDDB@BDDBBBDDCD>
+@XXXXXXXXXX:7:1101:1748:1978#/2
+CAAGGAGCTGTTCTGTCGTGGCTTTGGAATTCAGATGCTCTCACTGTGATAGAGATGGGGTCTTGGGGGGCTGGGAGCTGTTCTGTCGTGGCTTTGGAGT
++
+B@@FFFFFHHHHHJJIIJHIJIJJJJJIIJJIJJJJJIJJJJIJJJGHFGGHHIIIJIJJ@GIIJJIHFDDDDDDABBDCCDDEDDDB?BDDDDCCDCDA
+@XXXXXXXXXX:7:1101:2779:100239#/2
+GCTGTGGTTACCTGTCCCCTGCCCCTGGCCTCCAGCCAGCTGCCAGTGGCCCCTCAGCTGCCTGTGGTGAGGCAATACTTAGCTAGGTTCTTAGACGGCC
++
+?<?BBDDEFADA?ECCFFGEHDIDB;;FBG>GDHFGGGAFEHE?F@8?>F;CFCEADEEG@EEHAEFBDEEED7A>CACDECD>C@A(5>>C@>A#####
+@XXXXXXXXXX:7:1101:1593:1980#/2
+GGCTGTTCTCGAACTCCTGACCTCAGGTGATCTGCCTGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACTGCGCCTAGCCGTCACATTTC
++
+CCCFFFFFHHHHHJJJJJJJJJJJJJJFHIIJJJJJIIJJJJJJJJJJJJJJJIHIJJJJJHIJJJJJJJHEEEFEEEEDECDDDDDDDDDBDDDCDDEE
+@XXXXXXXXXX:7:1101:2946:100242#/2
+AATCCCTTCACCCCAGTTGCCAAACAGACCCCCCACCCCCTGGATTTTCCTTCTCCCTCCATCCCTTGACGGTTCTGGCCTTCCCAAACTGCTTTTGATC
++
+C@CFFFFFHHHFFHBHHHEIJJIIIJIIJCGGIIGIHHIJIG@D;DCE>>?AEEFF@@DB(.;>?;CC@>=',5<CC>ADCDCCDA>B?CDD>ACCC0>C
+@XXXXXXXXXX:7:1101:1987:1781#/2
+GCCGCAACCTGCACAGCCATGCCCGGGCAAGAACTCAGGACGCTGAATGGCTCTCAGATGCTCCTGGTGTTGCTGGTGCTCTCGTGGCTGCCGCATGGGG
++
+CCCFFFFFHHHHHJJJJJJIJJJJJJJJJJJJJJJJJJIIJIJJJJJHHHHHFFFFFFEEEEEEDDDCCBDDDDDDDDDDDDDDDDDDDDDD<@BBDBBD
+@XXXXXXXXXX:7:1101:3046:100006#/2
+GACGAGATGGAGTTCACCGAGGCCGAGAGCAACATGAATGACCTGGTGTCCGAGTACCAGCAGTACCAGGATGCCACAGCCGAGGAGGAGGGCGAGTTCG
++
+CCCFFFFFHHHHFIJJJJJIIJIJJIHIIIJJJIIJJJGIJJJIJJIJHGEHFFFEEEEEDDDDDDDDDDDCDDDDDDDDDDDDDDDDBDDBDD<B9@CB
+@XXXXXXXXXX:7:1101:1900:1788#/2
+CGGCTATGCGCCACCCGAGACGGAGATCGTGCCGCTTGTGCTGCGCGGCCACCTCATGGACATCGAGTGCCTGGCCAGCGACGGCATGCTGCTGGTGAGC
++
+CCCFFFFFGHHHHJJJJJJHHJJIFHIJJHHIIIJJJIIIJJJJJHFDDD@@DDDDCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCDD<?C@C
+@XXXXXXXXXX:7:1101:3214:100027#/2
+CACAACAACTGCTACTTCAGTTGCGCAGACAGTATCAACACCCACAACACAAGATCAGACCCCAAGTTCTGCTGTTTCAGTTGCCACGCCTACAGTTAGT
++
+@CCFFFFFGFHHHIIJJJIIHIIIIIJ<GIIG?DHIJJGIIJBHJJJJJIGCGGHHJJHHHHFDEF;ACEEEDDDDDCEDDDDCDCDDDDDDDCCDDDD>
+@XXXXXXXXXX:7:1101:1848:1879#/2
+GGAGAAATGACCTTGAAGTCAGCACTTGCTTTAGCTATCAAAGTACTAAATAAGACCATGGATGTTAGTAAACTCTCTGCTGAAAAAGTGGAAATTGCAA
Binary file test-data/cv_input.bam has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cv_output.gff	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,18 @@
+##gff-version
+#BBMapVersion
+#ploidy	2
+#rarity	1.00000
+#minAlleleFraction	0.1000
+#reads	2207
+#pairedReads	0
+#properlyPairedReads	0
+#readLengthAvg
+#properPairRate	0.0000
+#totalQualityAvg
+#mapqAvg
+#reference
+#seqid	source	type	start	end	score	strand	phase	attributes
+NC_002945.4	.	sequence_variant_obs	976327	976327
+NC_002945.4	.	sequence_variant_obs	1501932	1501932
+NC_002945.4	.	sequence_variant_obs	3380579	3380579
+NC_002945.4	.	sequence_variant_obs	3646293	3646293
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cv_output.txt	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,18 @@
+#fileformat
+#BBMapVersion
+#ploidy	2
+#rarity	1.00000
+#minAlleleFraction	0.1000
+#reads	2207
+#pairedReads	0
+#properlyPairedReads	0
+#readLengthAvg
+#properPairRate
+#totalQualityAvg
+#mapqAvg
+#reference
+#scaf	start	stop	type	call	r1p	r1m	r2p	r2m	paired	lengthSum	mapq	mapqMax	baseq	baseqMax	edist	edistMax	id	idMax	cov	minusCov	nearbyVarCount	flagged	contigEndDist	phredScore	readCount	alleleFraction	revisedAF	strandRatio	baseqAvg	mapqAvg	edistAvg	identityAvg	edistScore	identityScore	qualityScore	pairedScore	biasScore	coverageScore	homopolymerScore	score
+0	976326	976327	SUB	T
+0	1501931	1501932	SUB	C
+0	3380578	3380579	SUB	G
+0	3646292	3646293	SUB	A
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cv_output.vcf	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,60 @@
+##fileformat=VCFv4.2
+##BBMapVersion=
+##ploidy=2
+##rarity=1.00000
+##minallelefraction=0.10000
+##reads=2207
+##pairedReads=0
+##properlyPairedReads=0
+##readLengthAvg=
+##properPairRate=0.00000
+##totalQualityAvg=
+##mapqAvg=43.348
+##reference=
+##contig=<ID=NC_002945.4,length=7000>
+##FILTER=<ID=FAIL,Description="Fail">
+##FILTER=<ID=PASS,Description="Pass">
+##INFO=<ID=SN,Number=1,Type=Integer,Description="Scaffold Number">
+##INFO=<ID=STA,Number=1,Type=Integer,Description="Start">
+##INFO=<ID=STO,Number=1,Type=Integer,Description="Stop">
+##INFO=<ID=TYP,Number=1,Type=String,Description="Type">
+##INFO=<ID=R1P,Number=1,Type=Integer,Description="Read1 Plus Count">
+##INFO=<ID=R1M,Number=1,Type=Integer,Description="Read1 Minus Count">
+##INFO=<ID=R2P,Number=1,Type=Integer,Description="Read2 Plus Count">
+##INFO=<ID=R2M,Number=1,Type=Integer,Description="Read2 Minus Count">
+##INFO=<ID=AD,Number=1,Type=Integer,Description="Allele Depth">
+##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
+##INFO=<ID=MCOV,Number=1,Type=Integer,Description="Minus Coverage">
+##INFO=<ID=PPC,Number=1,Type=Integer,Description="Paired Count">
+##INFO=<ID=AF,Number=1,Type=Float,Description="Allele Fraction">
+##INFO=<ID=RAF,Number=1,Type=Float,Description="Revised Allele Fraction">
+##INFO=<ID=LS,Number=1,Type=Integer,Description="Length Sum">
+##INFO=<ID=MQS,Number=1,Type=Integer,Description="MAPQ Sum">
+##INFO=<ID=MQM,Number=1,Type=Integer,Description="MAPQ Max">
+##INFO=<ID=BQS,Number=1,Type=Integer,Description="Base Quality Sum">
+##INFO=<ID=BQM,Number=1,Type=Integer,Description="Base Quality Max">
+##INFO=<ID=EDS,Number=1,Type=Integer,Description="End Distance Sum">
+##INFO=<ID=EDM,Number=1,Type=Integer,Description="End Distance Max">
+##INFO=<ID=IDS,Number=1,Type=Integer,Description="Identity Sum">
+##INFO=<ID=IDM,Number=1,Type=Integer,Description="Identity Max">
+##INFO=<ID=NVC,Number=1,Type=Integer,Description="Nearby Variation Count">
+##INFO=<ID=FLG,Number=1,Type=Integer,Description="Flagged">
+##INFO=<ID=CED,Number=1,Type=Integer,Description="Contig End Distance">
+##INFO=<ID=HMP,Number=1,Type=Integer,Description="Homopolymer Count">
+##INFO=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##INFO=<ID=DP4,Number=4,Type=Integer,Description="Ref+, Ref-, Alt+, Alt-">
+##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
+##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">
+##FORMAT=<ID=AD,Number=1,Type=Integer,Description="Allele Depth">
+##FORMAT=<ID=AF,Number=1,Type=Float,Description="Allele Fraction">
+##FORMAT=<ID=RAF,Number=1,Type=Float,Description="Revised Allele Fraction">
+##FORMAT=<ID=NVC,Number=1,Type=Integer,Description="Nearby Variation Count">
+##FORMAT=<ID=FLG,Number=1,Type=Integer,Description="Flagged">
+##FORMAT=<ID=SB,Number=1,Type=Float,Description="Strand Bias">
+##FORMAT=<ID=SC,Number=1,Type=Float,Description="Score">
+##FORMAT=<ID=PF,Number=1,Type=String,Description="Pass Filter">
+#CHROM	POS	ID	REF	ALT	QUAL	FILTER	INFO	FORMAT	
+NC_002945.4	976327	.	N	T	22.21	PASS	SN=0;STA=976326;STO=976327;TYP=SUB;R1P=2;R1M=0;R2P=0;R2M=0;AD=2;DP=2;MCOV=-1;PPC=0;AF=1.0000;RAF=1.0000;LS=292;MQS=77;MQM=40;BQS=48;BQM=24;EDS=111;EDM=65;IDS=1930;IDM=972;NVC=0;FLG=0;CED=0;HMP=0;SB=0.9980	GT:DP:AD:AF:RAF:NVC:FLG:SB:SC:PF	1/1:2:2:1.0000:1.0000:0:0:0.9980:22.21:PASS
+NC_002945.4	1501932	.	N	C	27.20	PASS	SN=0;STA=1501931;STO=1501932;TYP=SUB;R1P=0;R1M=2;R2P=0;R2M=0;AD=2;DP=2;MCOV=-1;PPC=0;AF=1.0000;RAF=1.0000;LS=292;MQS=88;MQM=44;BQS=64;BQM=39;EDS=74;EDM=38;IDS=1986;IDM=993;NVC=0;FLG=0;CED=0;HMP=0;SB=0.9980	GT:DP:AD:AF:RAF:NVC:FLG:SB:SC:PF	1/1:2:2:1.0000:1.0000:0:0:0.9980:27.20:PASS
+NC_002945.4	3380579	.	N	G	27.85	PASS	SN=0;STA=3380578;STO=3380579;TYP=SUB;R1P=0;R1M=2;R2P=0;R2M=0;AD=2;DP=2;MCOV=-1;PPC=0;AF=1.0000;RAF=1.0000;LS=289;MQS=87;MQM=44;BQS=75;BQM=38;EDS=105;EDM=63;IDS=1986;IDM=993;NVC=0;FLG=0;CED=0;HMP=0;SB=0.9980	GT:DP:AD:AF:RAF:NVC:FLG:SB:SC:PF	1/1:2:2:1.0000:1.0000:0:0:0.9980:27.85:PASS
+NC_002945.4	3646293	.	N	A	23.34	PASS	SN=0;STA=3646292;STO=3646293;TYP=SUB;R1P=1;R1M=1;R2P=0;R2M=0;AD=2;DP=2;MCOV=-1;PPC=0;AF=1.0000;RAF=1.0000;LS=291;MQS=86;MQM=44;BQS=76;BQM=38;EDS=44;EDM=31;IDS=1986;IDM=993;NVC=0;FLG=0;CED=0;HMP=0;SB=1.0000	GT:DP:AD:AF:RAF:NVC:FLG:SB:SC:PF	1/1:2:2:1.0000:1.0000:0:0:1.0000:23.34:PASS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cv_qualityhist_output.tabular	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,46 @@
+#BaseQualityHist
+#Vars
+#Mean
+#Median
+#Mode
+#Quality	AvgCount	MaxCount
+0	0	0
+1	0	0
+2	0	0
+3	0	0
+4	0	0
+5	0	0
+6	0	0
+7	0	0
+8	0	0
+9	0	0
+10	0	0
+11	0	0
+12	0	0
+13	0	0
+14	0	0
+15	0	0
+16	0	0
+17	0	0
+18	0	0
+19	0	0
+20	0	0
+21	0	0
+22	0	0
+23	0	0
+24	1	1
+25	0	0
+26	0	0
+27	0	0
+28	0	0
+29	0	0
+30	0	0
+31	0	0
+32	1	0
+33	0	0
+34	0	0
+35	0	0
+36	0	0
+37	1	0
+38	1	2
+39	0	1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cv_scorehist_output.tabular	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,34 @@
+#ScoreHist
+#Vars
+#Mean
+#Median
+#Mode
+#Quality	Count
+0	0
+1	0
+2	0
+3	0
+4	0
+5	0
+6	0
+7	0
+8	0
+9	0
+10	0
+11	0
+12	0
+13	0
+14	0
+15	0
+16	0
+17	0
+18	0
+19	0
+20	0
+21	0
+22	1
+23	1
+24	0
+25	0
+26	0
+27	2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/cv_zygosityhist_output.tabular	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,8 @@
+#ZygoHist
+#Vars
+#Mean
+#HomozygousFraction
+#Zygosity	Count
+0	0
+1	0
+2	4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_indexes.loc	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,1 @@
+89	89	Mycobacterium_AF2122	${__HERE__}/NC_002945v4.fasta
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/fasta_indexes.loc.sample	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,29 @@
+#This is a sample file distributed with Galaxy that enables tools
+#to use a directory of Samtools indexed sequences data files.  You will need
+#to create these data files and then create a fasta_indexes.loc file
+#similar to this one (store it in this directory) that points to
+#the directories in which those files are stored. The fasta_indexes.loc
+#file has this format (white space characters are TAB characters):
+#
+# <unique_build_id>	<dbkey>	<display_name>	<file_base_path>
+#
+#So, for example, if you had hg19 Canonical indexed stored in
+#
+# /depot/data2/galaxy/hg19/sam/,
+#
+#then the fasta_indexes.loc entry would look like this:
+#
+#hg19canon	hg19	Human (Homo sapiens): hg19 Canonical	/depot/data2/galaxy/hg19/sam/hg19canon.fa
+#
+#and your /depot/data2/galaxy/hg19/sam/ directory
+#would contain hg19canon.fa and hg19canon.fa.fai files.
+#
+#Your fasta_indexes.loc file should include an entry per line for
+#each index set you have stored.  The file in the path does actually
+#exist, but it should never be directly used. Instead, the name serves
+#as a prefix for the index file.  For example:
+#
+#hg18canon	hg18	Human (Homo sapiens): hg18 Canonical	/depot/data2/galaxy/hg18/sam/hg18canon.fa
+#hg18full	hg18	Human (Homo sapiens): hg18 Full	/depot/data2/galaxy/hg18/sam/hg18full.fa
+#hg19canon	hg19	Human (Homo sapiens): hg19 Canonical	/depot/data2/galaxy/hg19/sam/hg19canon.fa
+#hg19full	hg19	Human (Homo sapiens): hg19 Full	/depot/data2/galaxy/hg19/sam/hg19full.fa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data_table_conf.xml.sample	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,8 @@
+<!-- Use the file tool_data_table_conf.xml.oldlocstyle if you don't want to update your loc files as changed in revision 4550:535d276c92bc-->
+<tables>
+    <!-- Location of SAMTools indexes for FASTA files -->
+    <table name="fasta_indexes" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/fasta_indexes.loc" />
+    </table>
+</tables>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data_table_conf.xml.test	Tue May 30 09:02:11 2023 +0000
@@ -0,0 +1,6 @@
+<tables>
+    <table name="fasta_indexes" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="${__HERE__}/test-data/fasta_indexes.loc" />
+    </table>
+</tables>