diff --git a/qiime/format.py b/qiime/format.py
index 9789479ecd..60332350e3 100755
--- a/qiime/format.py
+++ b/qiime/format.py
@@ -3,7 +3,8 @@
__author__ = "Rob Knight"
__copyright__ = "Copyright 2011, The QIIME Project"
__credits__ = ["Rob Knight", "Justin Kuczynski", "Jeremy Widmann",
- "Antonio Gonzalez Pena", "Daniel McDonald", "Jai Ram Rideout"]
+ "Antonio Gonzalez Pena", "Daniel McDonald", "Jai Ram Rideout",
+ "Mike Robeson"]
# remember to add yourself if you make changes
__license__ = "GPL"
__version__ = "1.8.0-dev"
@@ -14,13 +15,14 @@
from numpy import asarray, isnan, log10, median
from StringIO import StringIO
from re import compile, sub
-from os import walk
+from os import walk, path
from os.path import join, splitext, exists, isfile, abspath
+from skbio.io import read
from skbio.sequence import BiologicalSequence
from biom.table import Table
-from qiime.util import get_qiime_library_version, load_qiime_config
+from qiime.util import get_qiime_library_version, load_qiime_config, qiime_open
from qiime.colors import data_color_hsv
"""Contains formatters for the files we expect to encounter in 454 workflow.
@@ -601,7 +603,7 @@ def write_Fasta_from_name_seq_pairs(name_seqs, fh):
raise ValueError("Need open file handle to write to.")
for (name, seq) in name_seqs:
- fh.write("%s\n" % BiologicalSequence(seq, id=name).to_fasta())
+ BiologicalSequence(seq, id=name).write(fh, format='fasta')
def illumina_data_to_fastq(record_data, number_of_bases=None):
@@ -895,6 +897,68 @@ def format_fastq_record(label,
return "@%s\n%s\n+\n%s\n" % (label, seq, qual)
+def write_synced_barcodes_fastq(joined_fp, index_fp, qual_score_variant='illumina1.8'):
+ """Writes new index file based on surviving assembled paired-ends.
+ -joined_fp : file path to paired-end assembled fastq file
+ -index_fp : file path to index / barcode reads fastq file
+ -qual_score_variant : format of fastq quality scores. Can be
+ \'illumina1.3\' or \'illumina1.8\'
+
+ This function iterates through the joined reads file and index file.
+ Only those index-reads within the file at index_fp, that have headers
+ matching those within the joined-pairs at joined_fp, are written
+ to file.
+
+ Always forces output to be: illumina1.8
+
+ WARNING: Assumes reads are in the same order in both files,
+ except for cases in which the corresponding
+ read in the joined_fp file is missing (i.e. pairs
+ failed to assemble).
+
+ """
+
+ # open files (handles normal / gzipped data)
+ jh = qiime_open(joined_fp)
+ ih = qiime_open(index_fp)
+
+ # base new index file name on joined paired-end file name:
+ j_path, ext = path.splitext(joined_fp)
+ filtered_bc_outfile_path = j_path + '_barcodes.fastq'
+ fbc_fh = open(filtered_bc_outfile_path, 'w')
+
+ # Set up iterators
+ index_fastq_iter = read(ih, format='fastq', variant=qual_score_variant)
+ joined_fastq_iter = read(jh, format='fastq', variant=qual_score_variant)
+
+ # Write barcodes / index reads that we observed within
+ # the joined paired-ends. Warn if index and joined data
+ # are not in order.
+ for joined in joined_fastq_iter:
+ index = index_fastq_iter.next()
+ while joined.id != index.id:
+ try:
+ index = index_fastq_iter.next()
+ except StopIteration:
+ raise StopIteration("\n\nReached end of index-reads file" +
+ " before iterating through joined paired-end-reads file!" +
+ " Except for missing paired-end reads that did not survive" +
+ " assembly, your index and paired-end reads files must be in" +
+ " the same order! Also, check that the index-reads and" +
+ " paired-end reads have identical headers. The last joined" +
+ " paired-end ID processed was:\n\'%s\'\n" % (joined.id))
+ else:
+ # force output to illumina1.8
+ index.write(fbc_fh, format='fastq', variant='illumina1.8')
+
+ ih.close()
+ jh.close()
+ fbc_fh.close()
+
+ return filtered_bc_outfile_path
+
+
+
HTML_LINES_INIT = """
diff --git a/qiime/join_paired_ends.py b/qiime/join_paired_ends.py
index a9d935c739..d4ae621b6a 100644
--- a/qiime/join_paired_ends.py
+++ b/qiime/join_paired_ends.py
@@ -8,11 +8,8 @@
__maintainer__ = "Mike Robeson"
__email__ = "robesonms@ornl.gov"
-from skbio.parse.sequences import parse_fastq
-from skbio.format.sequences import format_fastq_record
from bfillings.fastq_join import FastqJoin, join_paired_end_reads_fastqjoin
from bfillings.seqprep import SeqPrep, join_paired_end_reads_seqprep
-from qiime.util import qiime_open
import os
import gzip
@@ -21,57 +18,4 @@
'SeqPrep': join_paired_end_reads_seqprep}
-def write_synced_barcodes_fastq(joined_fp, index_fp):
- """Writes new index file based on surviving assembled paired-ends.
- -joined_fp : file path to paired-end assembled fastq file
- -index_fp : file path to index / barcode reads fastq file
- This function iterates through the joined reads file and index file.
- Only those index-reads within the file at index_fp, that have headers
- matching those within the joined-pairs at joined_fp, are written
- to file.
-
- WARNING: Assumes reads are in the same order in both files,
- except for cases in which the corresponding
- read in the joined_fp file is missing (i.e. pairs
- failed to assemble).
-
- """
-
- # open files (handles normal / gzipped data)
- jh = qiime_open(joined_fp)
- ih = qiime_open(index_fp)
-
- # base new index file name on joined paired-end file name:
- j_path, ext = os.path.splitext(joined_fp)
- filtered_bc_outfile_path = j_path + '_barcodes.fastq'
- fbc_fh = open(filtered_bc_outfile_path, 'w')
-
- # Set up iterators
- index_fastq_iter = parse_fastq(ih, strict=False)
- joined_fastq_iter = parse_fastq(jh, strict=False)
- # Write barcodes / index reads that we observed within
- # the joined paired-ends. Warn if index and joined data
- # are not in order.
- for joined_label, joined_seq, joined_qual in joined_fastq_iter:
- index_label, index_seq, index_qual = index_fastq_iter.next()
- while joined_label != index_label:
- try:
- index_label, index_seq, index_qual = index_fastq_iter.next()
- except StopIteration:
- raise StopIteration("\n\nReached end of index-reads file" +
- " before iterating through joined paired-end-reads file!" +
- " Except for missing paired-end reads that did not survive" +
- " assembly, your index and paired-end reads files must be in" +
- " the same order! Also, check that the index-reads and" +
- " paired-end reads have identical headers. The last joined" +
- " paired-end ID processed was:\n\'%s\'\n" % (joined_label))
- else:
- fastq_string = format_fastq_record(index_label, index_seq, index_qual)
- fbc_fh.write(fastq_string)
-
- ih.close()
- jh.close()
- fbc_fh.close()
-
- return filtered_bc_outfile_path
diff --git a/scripts/join_paired_ends.py b/scripts/join_paired_ends.py
index e03e18fead..9041cb6a32 100755
--- a/scripts/join_paired_ends.py
+++ b/scripts/join_paired_ends.py
@@ -9,8 +9,8 @@
__email__ = "robesonms@ornl.gov"
from qiime.join_paired_ends import (join_method_names,
- join_method_constructors,
- write_synced_barcodes_fastq)
+ join_method_constructors)
+from qiime.format import write_synced_barcodes_fastq
from qiime.util import (parse_command_line_parameters, get_options_lookup,
make_option, load_qiime_config, create_dir)
import os
@@ -114,7 +114,14 @@
help='Only applies to SeqPrep method, otherwise ignored.' +
' Set if input reads are in phred+64 format. Output will '
'always be phred+33. [default: %default]',
- default=False)]
+ default=False),
+ make_option('-q', '--qual_score_variant',
+ help=' Input format of fastq data. Can be: \'illumina1.3\' or'+
+ ' \'illumina1.8\'. Only used if using the \'-b\' option.' +
+ ' Output will always be \'illumina1.8\'.' +
+ '[default: %default]. For more info see: '+
+ 'http://scikit-bio.org/docs/latest/generated/skbio.io.fastq.html',
+ default='illumina1.8')]
script_info['version'] = __version__
@@ -127,6 +134,7 @@ def main():
forward_reads_fp = opts.forward_reads_fp
reverse_reads_fp = opts.reverse_reads_fp
pe_join_method = opts.pe_join_method
+ qual_score_variant=opts.qual_score_variant
output_dir = opts.output_dir
# fastq-join only options:
perc_max_diff = opts.perc_max_diff
@@ -168,7 +176,7 @@ def main():
if opts.index_reads_fp:
index_reads = opts.index_reads_fp
assembly_fp = paths['Assembled'] # grab joined-pairs output path
- write_synced_barcodes_fastq(assembly_fp, index_reads)
+ write_synced_barcodes_fastq(assembly_fp, index_reads, qual_score_variant=qual_score_variant)
if __name__ == "__main__":
diff --git a/tests/test_format.py b/tests/test_format.py
index 91a16d980c..fcc55a0f25 100755
--- a/tests/test_format.py
+++ b/tests/test_format.py
@@ -6,7 +6,7 @@
__copyright__ = "Copyright 2011, The QIIME Project" # consider project name
__credits__ = [
"Rob Knight", "Jeremy Widmann", "Jens Reeder", "Daniel McDonald",
- "Jai Ram Rideout", "Jose Antonio Navas Molina"]
+ "Jai Ram Rideout", "Jose Antonio Navas Molina","Mike Robeson"]
# remember to add yourself if you make changes
__license__ = "GPL"
__version__ = "1.8.0-dev"
@@ -20,7 +20,7 @@
from numpy import array, nan, array_equal
from skbio.util import remove_files
from unittest import TestCase, main
-from skbio.parse.sequences import parse_fasta
+from skbio.io import read
from qiime.util import get_qiime_library_version
from qiime.parse import fields_to_dict, parse_mapping_file
from qiime.format import (format_distance_matrix, build_prefs_string,
@@ -33,7 +33,8 @@
format_p_value_for_num_iters, format_mapping_file, illumina_data_to_fastq,
format_mapping_html_data, format_te_prefs,
format_tep_file_lines, format_jnlp_file_lines,
- format_fastq_record, format_histograms_two_bins)
+ format_fastq_record, format_histograms_two_bins,
+ write_synced_barcodes_fastq)
from biom.parse import parse_biom_table
from biom.table import Table
from StringIO import StringIO
@@ -81,6 +82,42 @@ def setUp(self):
(-0.1, 0.2)),
('S3', 'T3', 100.68, 0.9, 1, 1, 1, (-0.4, -0.2))]
self.corr_vec3 = [('S1', 'T1', 0.7777777777, 0, 0, 0, 0, (None, None))]
+
+ # For testing `write_synced_barcodes_fastq`
+ # store files:
+ # joined_pairs
+ fd,self.joined_pe_fp = mkstemp(prefix='joined_', suffix='.fastq')
+ close(fd)
+ self.joined_pe = open(self.joined_pe_fp,'w')
+ self.joined_pe.write(joined_reads)
+ self.joined_pe.close()
+ self.files_to_remove.append(self.joined_pe_fp)
+
+ # all barcodes
+ fd,self.all_barcodes_fp = mkstemp(prefix='all_bc_', suffix='.fastq')
+ close(fd)
+ self.all_barcodes = open(self.all_barcodes_fp,'w')
+ self.all_barcodes.write(all_barcodes)
+ self.all_barcodes.close()
+ self.files_to_remove.append(self.all_barcodes_fp)
+
+ # out-of-order barcodes
+ fd,self.ooo_barcodes_fp = mkstemp(prefix='ooo_bc_',suffix='.fastq')
+ close(fd)
+ self.ooo_barcodes = open(self.ooo_barcodes_fp,'w')
+ self.ooo_barcodes.write(all_barcodes_out_of_order)
+ self.ooo_barcodes.close()
+ self.files_to_remove.append(self.ooo_barcodes_fp)
+
+ # missing barcodes
+ fd,self.missing_barcodes_fp = mkstemp(prefix='missing_bc_', suffix='.fastq')
+ close(fd)
+ self.missing_barcodes = open(self.missing_barcodes_fp,'w')
+ self.missing_barcodes.write(missing_barcodes)
+ self.missing_barcodes.close()
+ self.files_to_remove.append(self.missing_barcodes_fp)
+
+
def tearDown(self):
remove_files(self.files_to_remove)
@@ -441,7 +478,7 @@ def test_write_Fasta_from_name_seqs_pairs(self):
fh = open(tmp_filename, "w")
write_Fasta_from_name_seq_pairs(seqs, fh)
fh.close()
- actual_seqs = list(parse_fasta(open(tmp_filename, "U")))
+ actual_seqs = [(rec.id, rec.sequence) for rec in (read(tmp_filename, format='fasta'))]
remove(tmp_filename)
self.assertEqual(actual_seqs, seqs)
@@ -696,6 +733,40 @@ def test_format_fastq_record(self):
expected_lines = '@test_label\nAATTCCGG\n+\n12345678\n'
self.assertEqual(actual_lines, expected_lines)
+
+ # tests for writing barcodes of surviving joined paired ends.
+ def test_write_synced_barcodes_fastq(self):
+ """write_synced_barcodes_fastq: should work properly.
+ This function expects the barcodes.fastq and joined_pairs.fastq
+ files to be in the same order except for those missing data
+ that could not be joined. That is, not all paired-ends will
+ assemble.
+ """
+ filtered_bc_path = write_synced_barcodes_fastq(
+ self.joined_pe_fp,
+ self.all_barcodes_fp)
+
+ observed_barcodes = open(filtered_bc_path, 'U').read()
+ self.assertEqual(observed_barcodes, synced_barcodes)
+
+ remove(filtered_bc_path)
+
+ def test_out_of_order_barcodes(self):
+ """write_synced_barcodes_fastq: should fail if barcodes out of order
+ By out of order I mean that the data in the barcodes file
+ are not in the same order as the data within the joined paired-ends
+ file.
+ """
+ self.assertRaises(StopIteration, write_synced_barcodes_fastq,
+ self.joined_pe_fp,
+ self.ooo_barcodes_fp)
+
+ def test_missing_barcodes(self):
+ """"write_synced_barcodes_fastq: should fail if barcodes are missing."""
+ self.assertRaises(StopIteration, write_synced_barcodes_fastq,
+ self.joined_pe_fp,
+ self.missing_barcodes_fp)
+
example_mapping_file = """#SampleID\tcol1\tcol0\tDescription
@@ -897,6 +968,391 @@ def test_format_fastq_record(self):
"""
+all_barcodes = """@MISEQ03:64:000000000-A2H3D:1:1101:14358:1530 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14206:1564 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14943:1619 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15764:1660 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15211:1752 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15201:1774 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15976:1791 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:16031:1840 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:12964:1852 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17245:1906 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:18171:1983 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14225:2009 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:16656:2052 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:18209:2060 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13824:2095 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17839:2106 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17831:2124 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:12555:2129 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13627:2170 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:11781:2223 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17996:2254 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13712:2276 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15819:2301 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:11958:2304 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:19110:2311 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+"""
+
+all_barcodes_out_of_order = """@MISEQ03:64:000000000-A2H3D:1:1101:14358:1530 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14206:1564 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14943:1619 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15764:1660 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15976:1791 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:16031:1840 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:12964:1852 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17245:1906 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:18171:1983 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14225:2009 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:16656:2052 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:18209:2060 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15211:1752 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15201:1774 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13824:2095 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17839:2106 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17831:2124 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:12555:2129 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13627:2170 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:11781:2223 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17996:2254 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13712:2276 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15819:2301 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:11958:2304 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:19110:2311 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+"""
+
+missing_barcodes = """@MISEQ03:64:000000000-A2H3D:1:1101:14358:1530 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14206:1564 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:14943:1619 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15764:1660 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15211:1752 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15201:1774 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15976:1791 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:16031:1840 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:12964:1852 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17245:1906 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:18209:2060 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13824:2095 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17839:2106 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17831:2124 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:12555:2129 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13627:2170 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:11781:2223 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:17996:2254 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:13712:2276 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:15819:2301 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:11958:2304 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+@MISEQ03:64:000000000-A2H3D:1:1101:19110:2311 1:N:0:TCCACAGGAGT
+TCCACAGGAGT
++
+FFFFFFFFFFF
+"""
+joined_reads = """@MISEQ03:64:000000000-A2H3D:1:1101:14358:1530 1:N:0:TCCACAGGAGT
+TNCAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAATCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGTGCGAAAGCGTGGGGAGCAAACAGGATTAGAAACCCTTGTAGTCCGT
++
+?#5???DDDDDDDDEEEEFFHHHHHHHHHHHHHHDCCHHFGDEHEH>CCE5AEEHHHHHHHHHHHHHHHHHFFFFHHHHHHEEADEEEEEEEEEEEEEEEEEEEEEEE?BEEEEEEEEEEEAEEEE0?A:?EFCAC==ECEEFFEFEEFBACEEDD=8CDDDEDFFFDFFHHHFHHFAFDHFCHHFHHHHHHEDCHHIHFECIIIIIHHHHGGDIHHGIHIIHFHHHHHIIIHHHEHHHHGFIIIIIIIIHFFCFFCBBDDDBDDB@@?????
+@MISEQ03:64:000000000-A2H3D:1:1101:14206:1564 1:N:0:TCCACAGGAGT
+TACGTAGGGTGCGAGCGTTAATCGGAATTACTGGGCGTAAAGCGTGCGCAGGCGGTTTTGTAAGTCAGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCGTTTGAAACTACAAGGCTAGAGTGTAGCAGAGGGGGGTAGAATTCCACGTGTAGCAGTGAAATGCGTAGAGATGTGGAGGAATACCAATGGCGAAGGCAGCCCCCTGGGTTAACACTGACGCTCATGCACGAAAGCGTGGGGAGCAAACAGGATTAGAAACCCCTGTAGTCCGT
++
+?????BB?DDDDDD@DDCEEFFH>EEFHHHHHHGHHHCEEFFDC5EECCCCCCDECEHF;?DFDDFHDDBBDF?CFDCCFEAA@?:;EEEEEEEECBA,BBE?EEAAECA0:?C?:??A:8*:00?0**:8:DDECDD0.?:????:,:?EEEEEE??44BEEEEEDDBD=EEB==FFFDFDFD?FFEE:EEFFFDFFECCDHHHHEHHHHHHHFBHHHDCGBHF@HFFDEHFF@HHHHHHHHHHHFFHHHHHFFFFFC@?DDDBDDB@@?????
+@MISEQ03:64:000000000-A2H3D:1:1101:14943:1619 1:N:0:TCCACAGGAGT
+TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGTGCGAAAGCGTGGGGAGCAAACAGGATTAGATACCCCTGTAGTCCGT
++
+?AAAABBADDDEDEDDGGGGGGIIHHHIIIIIIIHHHCCHHFFEFHHHDCDH5CFHIIHIIIIHHHHHHHHHHHHHHHHHHHGGGEGGGGDDEGEGGGGGGGGGGGGGGEEEGCCGGGGGGEGCEEEECEAECGFEEFEACEEGGGEEEFECE>FFFEFF*?EED;?8AEE08*A?A:?EA;?EEEEE??:CBBE?EEEFEEE?BCE?;CE?=EDEE=EECEFE?C0DD8D4C?CEHDGDDCDE5CCEACFHHHHHHHHFFHHHHHHHHFHHFHHHHHHDEBFEEE@DEEEEEEEEEEEEEEBBCBECEEEEEEEEEEEEEEECACCEEEEEEA00E?EEEBAEEEE?>?CEDDC?B?A:EDEEDEDEFFBFFFDFD@DEEEFHHDDD+HDDECDDEDGFBHHFHFFHHHGCFGEEEEGHHFHHHHHHHHHHHEFEHHGDHHECFCFHFFFFFFC=CDHAEFHFGHHFHHHHHHHHHFHHFHFFHHHHHGBEEAD;DGGGGEGGGCGCEEEGEGGGCEA>>CEDGDGE:C:CGGG:AC??EEA8C::AECEGEGCCECEEGGGGGEBCECE@CEFEDFEFFFFFFFBF@HHHHHHHHHHHHDEHEHHHHFDHIIIHIFHF=IHFHIHIHHGFIHHHHEHFHEHHHHHIIHHHIIIHFHHHFFFFFEDDDDDDDDB@@?????
+@MISEQ03:64:000000000-A2H3D:1:1101:11781:2223 1:N:0:TCCACAGGAGT
+TACGTAGGGCGCAAGCGTTATCCGGAATTATTGGGCGTAAAGAGCTCGTAGGCGGTTTGTCGCGTCTGCCGTGAAAGTCCGGGGCTCAACTCCGGATCTGCGGTGGGTACGGGCAGACTAGAGTGATGTAGGGGAGATTGGAATTCCTGGTGTAGCGGTGAAATGCGCAGATATCAGGAGGAACACCGATGGCGAAGGCAGGTCTCTGGGCATTAACTGACGCTGAGGAGCGAAAGCATGGGGAGCGAACAGGATTAGATACCCCAGTAGTCCGT
++
+???A?BB?DDDDDDDDEEECFFHHHHHIHHHIIIHHHECEHFCFHGGH>CFEFEHHHHHFFDFHCDEFFHHEBFFFF?BBEEEEEEEFFFBEEEEAEDEFEDD.?EA4ACEDDDECEFFFFEF:*::?ACCFFD8DCH5AECFHHHFHHHHHHHHHHHGFHHCFHHHHHEEEDEDEED@EEEEEEEEEEEEEEEEE?;BEEE?EEEEEE?*?CA?EE:EA?'8C*:1?CEEECAAECA:CEEFFECEEEEEEEBEFFEEEEA??DDB?FFEHHFHEEHFFHDDCCC5*5+DHHFA5FA5-HHHHHGFAGHHHHHHHEHFHEEHHHHHHHFGC>FHHHHHFFFFFC5CCE5AEEHHHHHHHHHHHHHHHHHFFFFHHHHHHEEADEEEEEEEEEEEEEEEEEEEEEEE?BEEEEEEEEEEEAEEEE0?A:?EE)8;)0ACEEECECCECAACEE?>)8CCC?CCA8?88ACC*A*::A??:0?C?.?0:?8884>'.''..'0?8C?C**0:0::?ECEE?############################
-@MISEQ03:64:000000000-A2H3D:1:1101:14206:1564 1:N:0:TCCACAGGAGT
-TACGTAGGGTGCGAGCGTTAATCGGAATTACTGGGCGTAAAGCGTGCGCAGGCGGTTTTGTAAGTCAGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCGTTTGAAACTACAAGGCTAGAGTGTAGCAGAGGGGGGTAGAATTCCACGTGTAGCGGTGAAATGCGTAGAGATGGGGAGGAATACCAATGGCGAAGGCAGCCCCCGGGGTTAACACTGACGCCAAGGCACGAAAGCGGGGGGGGCAAACG
-+
-?????BB?DDDDDD@DDCEEFFH>EEFHHHHHHGHHHCEEFFDC5EECCCCCCDECEHF;?DFDDFHDDBBDF?CFDCCFEA@@::;EEEEEEEECBA,BBE?:>AA?CA*:**0:??A:8*:*0*0**0*:?CE?DD'..0????:*:?*0?EC*'.)4.?A***00)'.00*0*08)8??8*0:CEE*0:082.4;**?AEAA?#############################################
-@MISEQ03:64:000000000-A2H3D:1:1101:14943:1619 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGGGGCGAAGGCGACCACCTGGACTGAAACTGACACTGAGGGGCGAAAGCGGGGGGGGCAAAAG
-+
-?AAAABBADDDEDEDDGGGGGGIIHHHIIIIIIIHHHCCHHFFEFHHHDCDH5CFHIIHIIIIHHHHHHHHHHHHHHHHHHHGGGEGGGGDDEGEGGGGGGGGGGGGGGEEEGCCGGGGGGEGCEEEECE?ECGE.84.8CEEGGGE:CCCC0:?C<8.48CC:C??.8.8?C:*:0:*9)??CCEE**)0'''42<2C8'8..8801**0*.1*1?:?EEEC?###########################
-@MISEQ03:64:000000000-A2H3D:1:1101:15764:1660 1:N:0:TCCACAGGAGT
-TACGAAGGGGGCTAGCGTTGCTCGGAATCACTGGGCGTAAAGCGCACGTAGGCGGATTGTTAAGTCAGGGGTGAAATCCTGGAGCTCAACTCCAGAACTGCCTTTGATACTGGCGATCTTGAGTCCGGGAGAGGTGAGTGGAACTGCGAGTGTAGAGGTGAAATTCGTAGATATTCGCAAGAACACCAGTGGCGAAGGCGGCTCACTGGCCCGGAACTGACGCTGAGGGGCGAAAGCTGGGGGAGCAAACG
-+
-???????@DDDDDDBDFEEFEFHEHHHHHHHHHHHHHEHHHHFEHHHHAEFHGEHAHHHHHHHHHHHHHHH=@FEFEEFEFEDAEEEFFE=CEBCFFFCECEFEFFFCEEEFFCD>>FFFEFF*?EED;?8AEE08*A*1)?E::???;>2?*01::A?EEEFEEE?:C.8:CE?:?8EE8AECEFE?C0::8'488DE>882)*1?A*8A########################################
-@MISEQ03:64:000000000-A2H3D:1:1101:15211:1752 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAATCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGGGGTGGAATTTCCTGTGTAGCGGGGAAATGCGTAGATATGGGAAGGAACACCAGGGGCGAAGGCGACCACCTGGACTGATACTGACACTGGGGTGGGAAAGGGGGGGGAGGAAAAG
-+
-?????EFFFEAACEC7>E5AFEFHHHHHHF=GHFGHFHHHHFHFHH;CED8@DDDE=4@EEEEECE=CECECEECCBB34,=CAB,40:?EEEE:?AAAE8'.4'..8*:AEEECCCA::A################################################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:15201:1774 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAATCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGGGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGTGCGAAAGCGGGGGGGGCAAACG
-+
-?????BB?DDDDDDBDEEEEFFHFHHHHHHHHHHHFH>CEHDGDDCDE5CCEACFHHHHHHHHFFHHHHHHHHFHHFHHHHHHDEBFEEE@DEEEEEEEEEEEEEEBBCBECEEEEEEEEEEEEEEE?ACCEEEA)84)0.?EEE:AEACA?0?CEDD'.4?A:ACA)0'80:A:?*0*0)8CEEEEE?*0*)88888A'.5;2A)*0000*8:*0:?CEEEE?A*?A#######################
-@MISEQ03:64:000000000-A2H3D:1:1101:15976:1791 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTCGTTAAGTTGGATGTGAAATCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGGGAAATGCGTAGATATGGGAAGGAACACCGGGGGGGAGGGGGGCTCTCGGGTCCTTTTCGGCGGCTGGGGGCGGAAGGCAGGGGGGGCAACCG
-+
-?????BB?DDDDDDDDEEEEFFIFHHHHHHIIIHIFHCCHF@F>CECHCDDECCFEADEHHHHHHHHFGHHHHHHFHHHHHHF8:>'88AC?::?AA##################################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:16031:1840 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGGGAAATGCGTAGATATAGGAAGGAACACCAGGGGCGAAGGCGACCACCTGGACGGATACTGACACTGAGGGGCGAAAGGGTGGGGAGAAAAAG
-+
-?????BB?DDDDDDDDGFEGGGIHHHHIIIIIIIHFE>CFFFFDCHCH>>CE-5EEIIHHHIHHHHHHHHHHGHFDFHFHEHGBEEEEGGEDGGGGEGGEGGGGGCEGCCEEGGG>'.8?8:C:?00.0?:?*1::*9CC?EEEG*?##############################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:12964:1852 1:N:0:TCCACAGGAGT
-TNCAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGCAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGAAGCGGGGAAATGCGTAGATATAGGAAGGAACACCAGGGGCGAAGGCAACCACCGGGACTGAAACTGAACCGGAGGGGGGAAAGCGGGGGGGGAAAACG
-+
-?#55????DDDDDDDDEEEEFFHHBHHHFFGHHFHDC+5>C/?E7DCHCCCD5AECFHHHFHHHHHHHHHFFFFFHFFDFEFF5)@=DEFDEFEEFF;AEAABC,4BECCC=B,5?C8?CC?CC*:?E010:?EA)0.)08C?A:?A########################################################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:17245:1906 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAGGGAACACAAGGGGCGAAGGCGACCACCGGGACGGAAACTGCAACTGGGGGGGGAAAGCGGGGGGGGAAACAG
-+
-AAA??BB?DDDDDDDDGGEGGGIHGHIIIIIIHF?CFCCDFFFDCHEHC>DH5AFEHIHHHHHHHHHHHHHHFFFFFHHHHHGDBEEGGGGGGG@EGEGGGGGGGCGEGACC>EGEGGGGC:C0CEEG:0::CEE)88)08?:CECCE:C*10*104A.4CE:*:?C8)'8CC##############################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:18171:1983 1:N:0:TCCACAGGAGT
-GACGTAGGAGGCGAGCGTTGTCCGGATTCATTGGGCGTAAAGAGCGCGCAGGCGGCTTGGTAAGTCGGATGTGAAATCCCGAGGCTCAACCTCGGGTCTGCATCCGATACTGCCCGGCTAGAGGTAGGTAGGGGAGATCGGAATTCCTGGTGTAGCGGTGAAATGCGCAGATATCAGGAGGAACACCGGGGGCGAAGGCGGATCTCTGGGCCTTCCCTGACGCTCAGGCGCGAAAGCGGGGGGGGCGAACG
-+
-??????B?DDDDDDDDFFEFFFIHFEEEHHIHHHFHHEHHFGFFFHCEHEHCDECCEFFE4DDFDBEEEEEFFFFEEFFCE8B>BEFEEFFCEFE>8>EFFE*A?A?ADDAAEE8E>;>EA:??1*:?111?C<88AA08?ACECF:*:?*08:0:8<.4?EE*A:))'..0*01*?:08?A*?CA#################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:14225:2009 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGAAACGGACACTGAGGGGCGAAAGCGGGGGGGGCAAACG
-+
-?????BB?DDDDDDBDEEEEFFHHHHIIIIHHIIIIHHEHIFGEHHHHCCEHAEFHIIHIIIIHHHHHHHHHHFHHHHHHHHFFFEFFFFFEFFFFFFEFFFFFFEFFFEFCACEFFFFFF:C?CEEE*?:AAEE88;088?AEFCEAEECEEEFE>?).?ECCEEE8?4AFFE0?*0088ACFFFAAC*0?C888>>CD?D;8CE*:*:A?CF*::)0?DD?:::?########################
-@MISEQ03:64:000000000-A2H3D:1:1101:16656:2052 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGGGGCGAAGGCGACCACCGGGACTGAAACTGACACTGAGGGGGGAAAGCGGGGGGGGAAAACA
-+
-?????BB?BDDDDDDDGFFEGGIIHHIIIIIHHHHIHCCFFDEEEHEHFFEH5AFHHIHIHIHGGHHHHHHHFHHFHHHHHHGEG@EGEGGEGGGGCEGGEGGGGEGGACECGGGGGGGGEGGCCEGG?CCCEGC088)0.?EGG?EC*::C*:??<8.48?C:?C808.8CEE#############################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:18209:2060 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCACGTAGGCGGCTCAGCAAGTCAGGGGTGAAATCCCGGGGCTCAACCCCGGAACTGCCCTTGAAACTGCTAAGCTAGAATCTTGGAGAGGCGAGTGGAATTCCGAGTGTAGAGGGGAAATTCGTAGATATTCGGAAGAACACCAGGGGCGAAGGCGACCCCCTGGACAAGCATTGACGCTGAGGGGGGAAAGCGGGGGGGGCAAAAG
-+
-?????BB?BDDDDDDDECEEFFHHHHAHFHHHHHHHHCCHHH=@DEEHFHFCGHHB)?ECGHHH?DHHHHHCCCFFHHHFEEEEEEEEEEEEEB)>EDACEECEECEEECEE:*0A:AEAECA:0::ACE??E?.8'4.88?EC*00:08).0:*00?)..8AAAAA*0)0::?::?0A8)?C:?A#################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:13824:2095 1:N:0:TCCACAGGAGT
-TACGTAGGGGGCTAGCGTTGTCCGGAATCATTGGGCGTAAAGCGCGTGTAGGCGGCCCGGTAAGTCCGCTGTGAAAGTCGGGGGCTCAACCCTCGAAAGCCGGGGGATACTGTCGGGCTAGAGTACGGAAGAGGCGAGTGGAATTCCTGGTGTAGCGGTGAAATGCGCAGATATCAGGAGGAACACCCATTGCGAAGGCAGCTCGCTGGGACGTTACTGAGGCTGAGACCGGAAAGGGGGGGGGGCAAAAG
-+
-??A??BBADDDDDDBDFEEFFFHHHHHFHHHIHHFHHCCHHFHDCCDEEHHFIHAHHHHH@EFFDFFEBDEDEFFECBBEEEED?28CCFFECE;EF8?ECD;'488?EEFCE:A>>?>EECEE::A8E8.8?8).'.'08AEE*?:*::*001:?CE5AEEHFHIHIFHHHHHHHHHFHHFHHHHHHGGGGGEEGGGGGDEGGGGGGGGGGGGGCE>AEGEGGGGEEECEGEE1:??CEC08>.88CEEECG*:C?CC:?0.4.4CE?CECC?)4?CC:*11?:?)CCEGG).9*1:?8<2<CFHHGDCFDH>CDHAEFEHIEFFGGHHHHHHHFH=CFFHHHHEHG8DEEGEGGGGGDEEEEGEEGGGCGGEEECCACCEGGGCEE::?CE0?CCEGE'.<'..4CEGEGGEEEE*::C>20>?C?*1:C..'8:??*:*?*0)??9CEG8?*1*8'4.44?58<28?C#############################################
-@MISEQ03:64:000000000-A2H3D:1:1101:12555:2129 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTCGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACGAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACGGAAACTGACACTGAGGTGCGAAAGCGTGGGGACCAACCG
-+
-????ABBADDDDDEDDGGGGGGIIHHIIIIIHIIHHHFFHHHFHHHHH>CDHAEFHFGHHFHHHHHHHHHFHHFHFFHHHHHGBEEAD;DGGGGEGGGCGCEEEGEGGGCE>>>CEDGDGE:C:CGGG:?C??EE08<)0?ECEGEGCCECEEGGGGG08CECE?CE8)4?CC:*:*:0989*9CEC8C*:?C'842.8'.4.2?E9?*:?'.8).::::?CC:*110*0C8C<8??C#############
-@MISEQ03:64:000000000-A2H3D:1:1101:13627:2170 1:N:0:TCCACAGGAGT
-GACAGAGGGTGCAAACGTTGTTCGGAATTACTGGGCATAAAGAGCACGTAGGTGGTCTGCTAAGTCACGTGTGAAATCCCCCGGCTCAACCGGGGAATTGCGCGTGATACTGGCCGGCTCGAGGTGGGTAGGGGGGAGCGGAACTCCAGGGGGAGCGGGGAAATGCGTAGATATCTGGAGGAACACCGGGGGCGAAAGCGGCTCACGGGACCCAATCTGACACTGAGGGGCGAAAGCTAGGGTGGCAAACG
-+
-?????BB?DDDDDDDDEFFFFFHHHHHIHIIHIIFHCEHIIHBFHIHHAAFH5CF@FHHHGHIIGHHHHFHIHIIIHIIIHHHHHHHHHHFHHHFFEFEFEDBE<>BBEEFECECE?D'..2AD)8A>40?AED''''.4>AC**1?).2'888D'52<>D8A:A82'.*:*.'?>E)AA####################################
-@MISEQ03:64:000000000-A2H3D:1:1101:11781:2223 1:N:0:TCCACAGGAGT
-TACGTAGGGCGCAAGCGTTATCCGGAATTATTGGGCGTAAAGAGCTCGTAGGCGGTTTGTCGCGTCTGCCGTGAAAGTCCGGGGCTCAACTCCGGATCTGCGGTGGGTACGGGCAGACTAGAGTGATGTAGGGGAGATTGGAATTCCTGGTGTAGCGGGGAAATGCGCAGATATCAGGAGGAACACCGATGGCGAAGGCAGGTCTCTGGGCATTAACTGACGCTGAGGAGCGAAAGCAGGGGGGGCGAACG
-+
-???A?BB?DDDDDDDDEEECFFHHHHHIHHHIIIHHHECEHFCFHGGH>CFEFEHHHHHFFDFHCDEFFHHEBFFFF?BBEEEEEEEFFFBEEEEAEDEFEDD.8A8.ACEDDD;AEFFFFEF:*1:?ACCFFD88'08:2448DE?E?8:*:*1A***0*:AA*?AEEEEE?#########################
-@MISEQ03:64:000000000-A2H3D:1:1101:17996:2254 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGGGAAATGCGTAGATATAGGAAGGAACACCAGGGGCGAAGGCGACCACCGGGCCTGAAACTGACACTGAGGGGGGAAAGCGGGGGGGGAAAACG
-+
-?????BB?DDDDDDDDGGGGGGIHHHHIIIIHHHFFH>CHFHGHHHEHCCCE5AFEHIHHHHHHHHHHHHHHHHHHHHHHHHGGEEGGEGEGGGEGEGGGCGGGGGGGECGEECGAECGGEEEC**CE?C::CCC.8<)08?CCC:CCCEC?CC?:8>'4.1C:8082CCGG*:*:0C8?EC*0C89.?############################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:13712:2276 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGGGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGGGGGAAAGCGGGGGGGGAAAACG
-+
-?????BBADDDDDDDDGGEGGGIHHHHIIIIIIIIIHCCHHDCECHEHCDEH-AFEHIHIHHIHHHHHHHHHHHFFFHHHHHGEGEDDEEDDDGGGGGEGGGGGEEEGEEGEGGGGGGGCEGEGCEGG:C::CEE)88.8?EGGG:C?:?:C??:*52'.888:CEE).2CCGE*C??:C.?EGGGGC9*118>>.4>C''.8'.42AAECEFE:*0:AAC?D'..8C?:?A)).0001*11::??8A**?A################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:11958:2304 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGGGGAATTTCCTGTGTAGCGGGGAAATGCGTAGATATAGGAAGGAACACCAGGGGCGAAGGCGACCACCGGGACTGAAACTGACACTGAGGGGCGAAAGCGTGGGGGGCAAACG
-+
-????ABBADDDDDDDDEEEEFFHHHHHIFHHIIIHFEECEFGDECECE5>C:55EEHIHIFGHFGHHHHHFHFFHHFHHHHHFBFEEDEEFFFFEFFFEFEFABEEFFFEEBEFFEFF=::AE*:AEE0?:?CFE8A>'.'.8AC?ECE)848?0**::AAC???EEE)*0)084'48<'8'882DCH5AECFHHHFHHHHHHHHHHHGFHHCFHHHHHEEEDEDEED@EEEEEEEEEEEEEEEEE;;BEEE?EEEEEE?*?CA?EE::?8'.''..?CEE*::/:?A:C?E??82?CCEEEE))4?EEEEA:?*80?AEEC#################################################################
-"""
-
-# For reference. Data used to make the 'joined_reads' reference string.
-reverse_reads = """@MISEQ03:64:000000000-A2H3D:1:1101:14358:1530 2:N:0:TCCACAGGAGT
-ACGGACTACAAGGGTTTCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCCAGGTTGAGCCCGGGGATTTCACATCCAACTTAACAACCCACATACCCGCCTTTTCGCCCAGGTAATCC
-+
-?????@@BDDBDDDBBCFFCFFHIIIIIIIIFGHHHHEHHHIIIHHHHHFHIIHIGHHIDGGHHHHIIIIICEFHIHHCDEHHHHHHFHHCFHDF?FHHFHHHFFDFFFDEDDD..=DDDE@>'.8::A?###############################################
-@MISEQ03:64:000000000-A2H3D:1:1101:14206:1564 2:N:0:TCCACAGGAGT
-ACGGACTACAGGGGTTTCTAATCCTGTTTGCTCCCCACGCTTTCGTGCATGAGCGTCAGTGTTAACCCAGGGGGCTGCCTTCGCCATTGGTATTCCTCCACATCTCTACGCATTTCACTGCTACACGTGGAATTCTACCCCCCTCTGCTACACTCTAGCCTTGTAGTTTCAAACGCAGTTCCCAGGTTGAGCCCGGGGCTTTCACATCTGCCTTACAAAACCGCCTGCGCACGCTTTACGCCCCGTAATTC
-+
-?????@@BDDBDDD?@CFFFFFHHHHHFFHHHHHHHHHHH@FFHEDFFH@FHBGCDHHHBFHHHHHHHEHHHHDCCEFFDFFFEE:=?FF?DFDFDFFF==BEE=DBDDEEEEEB,4??EE@EEE,3,3*3,?:?*0ACCEDD88:***?*0:*0***0*?C?00:AE:?EE:*A8'.?:CAA?A80*0*??AA88;28;C##################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:14943:1619 2:N:0:TCCACAGGAGT
-ACGGACTACAGGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCAAGGTTGAGCCCGGGGCTTTCACATCCAACTTACAAAACCACCTACCCGACCTTTACGCCCAGAAATTC
-+
-?????@@BDDDDDD?AFFFFFFIIHHIHIIHIIIIHIHHHHHHHHHHHHHHHHHHIHHHIIHHIHIIIIII?EFEGHHHHHIIHHDHHFD@FFEHFHFHFHFHFFFFFFFFEEEEFFFDEBACFFCECFCHCFHH=CGHHDFH=E?ACDEHHCCFFGHHDHH@CBEFHHCHHHF,5@?DF)4CHEDHHHFFFGBCCDDFGGHHHHEHHHHH5AE+C*>==+EDHHDEFCFCDF3@.D=,CFH=,@,4DFFE:=DDDDEB:)1:1;;?B;BE;??,?EE;AEE??**0*/:0??:***:?E*:8?A*:CEE#################################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:12964:1852 2:N:0:TCCACAGGAGT
-ACGGACTACTCGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCAACCACCCTCTACCATACTCTAGCTTGTAAGTTTTGAATGCAGTTCCAAGGTTGAGCCCGGGGCTTTCACACCCAACTTAACAACCCACCTACGCGGCATTTACGCCCACTACTTC
-+
-?????@=BBBB9?=55AACCC?ECFFFHB>FFHGFHFHHHHHHHHHHHHFHHHGGGHHHGGHHHHHHDDFEGH;EBCEHD+AFE@C+@F=.7D+@CDCFFHHFFFD?DF@E+=:BDDB;D=@BE?BCE*,33,,?,3;;:?).0**::***0/*/0A??:*:****00/**8*0?AE:?AAC**0):??C#############################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:17245:1906 2:N:0:TCCACAGGAGT
-ACGGACTACAGGGGTTTCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCCAGGTTGAGCCCGGGGCTTTCAAATCCAACTTAACAAACAACCAACCGGCGCTTTACGCCCAGTAATTC
-+
-?????@@BDDDDBDABEFFFFFHHHHHHHHGGHGHHHHHHEH@FEHEEHHHFHHH=EGHHHHDGHHHHFHHGGHHHCCEDEHHHHHHHHHDFHHF=DBDFHFD?BB.BF;@DDDD.=DD*>6)@==ABAACBB5=B,=,88A)???:E*::::??*:**1**8??CCCEE8A:A::AAACAC??A)1:0**1*)48;'42A?EA**1?*1*0::??:ACEF##############################
-@MISEQ03:64:000000000-A2H3D:1:1101:18171:1983 2:N:0:TCCACAGGAGT
-ACGGACTACCGGGGTTTCTAATCCTGTTCGCTCCCCACGCTTTCGCGCCTGAGCGTCAGGTAAGGCCCAGAGATCCGCCTTCGCCACCGGTGTTCCTCCTGATATCTGCGCATTTCACCGCTACACCAGGAATTCCGATCTCCCCTACATACCTCTAGCCGGGCAGTATCGGATGCAGACCCGAGGTTGAGCCCCGGGATTTCACATCGGCTTACCAAAGCGCCCGGCGCCCCCTTTACGCCCCAGAAACC
-+
-?????@@BDBDDDD=BCFFFFFIIIIHHFEHHHHIHIHHHEFCGDEHHHEFFEGC>EEHI?EHHGHHHHFH+C=,,?FHDDHFEE@EFE=1;A;EECCE==BEB,BBC=@@24;:CEAA8?CC*??:0?;*1?AE?CE*10:0*1:CAA*;22;2A#####################################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:14225:2009 2:N:0:TCCACAGGAGT
-ACGGACTACAGGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCCAGGTTGAGCCCGGGGCTTTCACATCCAACTTAACAAACAACCACGCCGCGCTTTAGCCCAGGTAATTC
-+
-?????@@BDDDDDD??CFFFFFHIHHHHIIIIHIIHIHHHHHIHHHHHHFFHHIHHHIHHHHHIIHIHIIIFFFEGHHEDEHHHHDHHHHCFFDFFHHHHHHFFFFFFF@EDEED=DDEED@EBFCEEEFECCCEEEFBD>8:?################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:16656:2052 2:N:0:TCCACAGGAGT
-ACGGACTACCCGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCCCCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCAAGGTTGAGCCCGGGGCTTTCACACCCAACTTAACAAACCACCTACGCGCGCTTTACGCCCAGCATTTC
-+
-?????@@BDDDDDD<@CFFFFFIHHFHHFHHHHHHHIHHHHHFHCEHHHHIIFHHAFHHHFFHIIHHIIIHGHFEH8A:*:::?E?*::A::?AE8AEFEEEC?A:CE?AEA:EF*008:?EF*:C)8;D228A0:??:*.8A8):*:*1::CE##############################
-@MISEQ03:64:000000000-A2H3D:1:1101:18209:2060 2:N:0:TCCACAGGAGT
-ACGGACTACTAGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGCGTCAATACTTGTCCAGCGAGTCCCCTTCGCCACTGGTGTTCTTCGGAATATCTACGAATTTCACCTCTACACCCGGAATTCCACTCCCCCTTCCAAGATTCCAGCTTAGCAGTTTCAAGGGCAGTTCCGGGGTTGGCACCCGGGATTTCACCCCTGCCTTGCTCAACCCCCCACGGGGCCTTTACCCCCAGCATTCC
-+
-=9<=9<7<@@@@@@<@A8A>C>8E>-8AE;C99CEEECC>>EECE@CCDE,C@E++5>E-A=E-C@@=@5@C>CGDEHCA:DFGHHEEEEFFHHHHHHDHED7=C?;BC=?C,==*3.84?EC?88A8A:A?*8?###############################################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:11781:2223 2:N:0:TCCACAGGAGT
-ACGGACTACTGGGGTATCTAATCCTGTTCGCTCCCCATGCTTTCGCTCCTCAGCGTCAGTTAATGCCCAGAGACCTGCCTTCGCCATCGGTGTTCCTCCTGATATCTGCGCATTTCACCGCTACACCAGGAATTCCAATCTCCCCTACATCACTCTAGTCTGCCCGTACCCACCGCAGATCCGGAGTTGAGCCCCGGACTTTCACGGCAGACGCGCAAACCGCCCACAGAGCTCTTTCCCCCCAAAAATCC
-+
-?????@@BDDDDDDBDCFFFFFHHHHHHHHHHHEHEHDFHHHHHHEDEEHHHFHHHHEHHHHHFGHHHHDD;EFFHCFECAGFEEE+@E@3?E:DFFFHBDHC?BBDFFE8;=DD,,=DEE<@),==?B*44=,=,4**0*0:CA*A?::*0::?0AC:CE*?:*8.4AE?*8?)'82;*?0?####################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:17996:2254 2:N:0:TCCACAGGAGT
-ACGGACTACCAGGGTTTCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCCAGGTGGAGCCCGGGGCTTTACAATCAAACTTAACAAACCCCCTACGCGCGCTTTAGCCCCACAATTTC
-+
-?9???@@BBDDDDDBBEE=BECEEEE,B=?CBACE)*0**?C?*:*0:*:?:A:??**::?E**80::::??:CAC:C8C################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:13712:2276 2:N:0:TCCACAGGAGT
-ACGGACTACTGGGGTTTCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGAAGTTCCAAGGTTAAGCCGGGGGCTTTCACATCCAACTAACCAAACCACTAACCGCCGCTTTAGGCCCAGCAATTC
-+
-?????@@BDDDDDDBDEFFFFFHFHHHIFFHIHIIHHEHHHHFHHHEHCFHHDFGGHIIHIHFGHHHGFHF-AEEGHHHHEGFHHHDFHB?FHEHCF?FDDFH??BFFFF=DDEEEFFEDE8>:BECCAEEAECE,ABAACEA*0**?*01?001*::*A**0:*::CE1*8:?**11:*CE#####################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:15819:2301 2:N:0:TCCACAGGAGT
-ACGGACTACCGGGGTTTCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGAAGTTCCCAGGTTGACCCCGGGGCTTTCACAGCAGCCTTAACTCACCCCCTGCCAACCCTTTACTCCCCGAAATTC
-+
-?9???@=BDDDDDD<@CFFFFFHHHBFFHHHFGHHHHHHHEHFGEHHHHEDGD?FCGHHFHHHHHHHHBDF?FHHHFHH@DHHHH+DHHDCFHDFDFBFFDFFEDFEEDEEDEEC=CCEEEBEEFCEFEEFEE?:CEE*8CA800*:E*:AA::***1??*:**1::CF##################################################################################
-@MISEQ03:64:000000000-A2H3D:1:1101:11958:2304 2:N:0:TCCACAGGAGT
-ACGGACTACTGGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCCAGGTTGAGCCCGGGCCTTTAAAATCCAACTTAAAAAACAACTAACCGCCGCTTTCCGCCCAGAAATCC
-+
-?????@@BDBDDD@@BFFFFFFHFHHHHFHHHHHHHHHHHHHHHHHHHHHFHHHHHFGH=CGEH=FHFGHFEFHEHHCEEEHHHDCEFHH.?FDFFHHHHBFHFFHFFFFEEEEEEEEEEB@EEEECE;CC?BCEEEC;;CEA*8:AE**00::C0A::?:*0*AEE?E?*A**:C?*:?:?**0)00::**?8>'8';ACA*0*0C?:?******::??E?CE###########################
-@MISEQ03:64:000000000-A2H3D:1:1101:19110:2311 2:N:0:TCCACAGGAGT
-ACGGACTACCAGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGGGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCCAGGTTAAGCCCGGGGCTTTCCAACCCAACTTAACAAACCACCTACCCCCGCTTTACGCCCAGAAATTC
-+
-?????@=BDDDDDD<5CFFFFFHHHHHF>CGFHHHHHHHEEHFHEHHHHHHHGAFGHHHHH-5AF5AFHHD+5*5CCCDDHFFHEEHFHHBFF:BDD4?=.=DEFFEBEDEBEEECEFFEE<::CEAACE?:A*1:*C88?AE.?:*::**1:**11*01***1?C??:?0?:C:C**1*1::*:8A?10*1?##########################################################
-"""
-
-joined_reads = """@MISEQ03:64:000000000-A2H3D:1:1101:14358:1530 1:N:0:TCCACAGGAGT
-TNCAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAATCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGTGCGAAAGCGTGGGGAGCAAACAGGATTAGAAACCCTTGTAGTCCGT
-+
-?#5???DDDDDDDDEEEEFFHHHHHHHHHHHHHHDCCHHFGDEHEH>CCE5AEEHHHHHHHHHHHHHHHHHFFFFHHHHHHEEADEEEEEEEEEEEEEEEEEEEEEEE?BEEEEEEEEEEEAEEEE0?A:?EFCAC==ECEEFFEFEEFBACEEDD=8CDDDEDFFFDFFHHHFHHFAFDHFCHHFHHHHHHEDCHHIHFECIIIIIHHHHGGDIHHGIHIIHFHHHHHIIIHHHEHHHHGFIIIIIIIIHFFCFFCBBDDDBDDB@@?????
-@MISEQ03:64:000000000-A2H3D:1:1101:14206:1564 1:N:0:TCCACAGGAGT
-TACGTAGGGTGCGAGCGTTAATCGGAATTACTGGGCGTAAAGCGTGCGCAGGCGGTTTTGTAAGTCAGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCGTTTGAAACTACAAGGCTAGAGTGTAGCAGAGGGGGGTAGAATTCCACGTGTAGCAGTGAAATGCGTAGAGATGTGGAGGAATACCAATGGCGAAGGCAGCCCCCTGGGTTAACACTGACGCTCATGCACGAAAGCGTGGGGAGCAAACAGGATTAGAAACCCCTGTAGTCCGT
-+
-?????BB?DDDDDD@DDCEEFFH>EEFHHHHHHGHHHCEEFFDC5EECCCCCCDECEHF;?DFDDFHDDBBDF?CFDCCFEAA@?:;EEEEEEEECBA,BBE?EEAAECA0:?C?:??A:8*:00?0**:8:DDECDD0.?:????:,:?EEEEEE??44BEEEEEDDBD=EEB==FFFDFDFD?FFEE:EEFFFDFFECCDHHHHEHHHHHHHFBHHHDCGBHF@HFFDEHFF@HHHHHHHHHHHFFHHHHHFFFFFC@?DDDBDDB@@?????
-@MISEQ03:64:000000000-A2H3D:1:1101:14943:1619 1:N:0:TCCACAGGAGT
-TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAAGCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGTGCGAAAGCGTGGGGAGCAAACAGGATTAGATACCCCTGTAGTCCGT
-+
-?AAAABBADDDEDEDDGGGGGGIIHHHIIIIIIIHHHCCHHFFEFHHHDCDH5CFHIIHIIIIHHHHHHHHHHHHHHHHHHHGGGEGGGGDDEGEGGGGGGGGGGGGGGEEEGCCGGGGGGEGCEEEECEAECGFEEFEACEEGGGEEEFECE>FFFEFF*?EED;?8AEE08*A?A:?EA;?EEEEE??:CBBE?EEEFEEE?BCE?;CE?=EDEE=EECEFE?C0DD8D4C?CEHDGDDCDE5CCEACFHHHHHHHHFFHHHHHHHHFHHFHHHHHHDEBFEEE@DEEEEEEEEEEEEEEBBCBECEEEEEEEEEEEEEEECACCEEEEEEA00E?EEEBAEEEE?>?CEDDC?B?A:EDEEDEDEFFBFFFDFD@DEEEFHHDDD+HDDECDDEDGFBHHFHFFHHHGCFGEEEEGHHFHHHHHHHHHHHEFEHHGDHHECFCFHFFFFFFC=CDHAEFHFGHHFHHHHHHHHHFHHFHFFHHHHHGBEEAD;DGGGGEGGGCGCEEEGEGGGCEA>>CEDGDGE:C:CGGG:AC??EEA8C::AECEGEGCCECEEGGGGGEBCECE@CEFEDFEFFFFFFFBF@HHHHHHHHHHHHDEHEHHHHFDHIIIHIFHF=IHFHIHIHHGFIHHHHEHFHEHHHHHIIHHHIIIHFHHHFFFFFEDDDDDDDDB@@?????
-@MISEQ03:64:000000000-A2H3D:1:1101:11781:2223 1:N:0:TCCACAGGAGT
-TACGTAGGGCGCAAGCGTTATCCGGAATTATTGGGCGTAAAGAGCTCGTAGGCGGTTTGTCGCGTCTGCCGTGAAAGTCCGGGGCTCAACTCCGGATCTGCGGTGGGTACGGGCAGACTAGAGTGATGTAGGGGAGATTGGAATTCCTGGTGTAGCGGTGAAATGCGCAGATATCAGGAGGAACACCGATGGCGAAGGCAGGTCTCTGGGCATTAACTGACGCTGAGGAGCGAAAGCATGGGGAGCGAACAGGATTAGATACCCCAGTAGTCCGT
-+
-???A?BB?DDDDDDDDEEECFFHHHHHIHHHIIIHHHECEHFCFHGGH>CFEFEHHHHHFFDFHCDEFFHHEBFFFF?BBEEEEEEEFFFBEEEEAEDEFEDD.?EA4ACEDDDECEFFFFEF:*::?ACCFFD8DCH5AECFHHHFHHHHHHHHHHHGFHHCFHHHHHEEEDEDEED@EEEEEEEEEEEEEEEEE?;BEEE?EEEEEE?*?CA?EE:EA?'8C*:1?CEEECAAECA:CEEFFECEEEEEEEBEFFEEEEA??DDB?FFEHHFHEEHFFHDDCCC5*5+DHHFA5FA5-HHHHHGFAGHHHHHHHEHFHEEHHHHHHHFGC>FHHHHHFFFFFC5