From c759c710274319f49b5d716a941138f1e7c1d179 Mon Sep 17 00:00:00 2001
From: Joyjit Daw <jdaw@nvidia.com>
Date: Wed, 27 Nov 2019 19:53:24 -0500
Subject: [PATCH] [docs] update checked in doxygen docs

---
 docs/cpp/aligner_8hpp_source.html             |   2 +-
 docs/cpp/alignment_8hpp_source.html           |  35 +-
 docs/cpp/annotated.html                       |  22 +-
 docs/cpp/batch_8hpp_source.html               | 142 ++---
 ...laragenomics_1_1DirectedGraph-members.html | 102 ++++
 .../classclaragenomics_1_1DirectedGraph.html  | 281 ++++++++++
 ...genomics_1_1DirectedGraph__coll__graph.map |   4 +
 ...genomics_1_1DirectedGraph__coll__graph.md5 |   1 +
 ...genomics_1_1DirectedGraph__coll__graph.png | Bin 0 -> 4698 bytes
 ...omics_1_1DirectedGraph__inherit__graph.map |   4 +
 ...omics_1_1DirectedGraph__inherit__graph.md5 |   1 +
 ...omics_1_1DirectedGraph__inherit__graph.png | Bin 0 -> 4698 bytes
 .../classclaragenomics_1_1Graph-members.html  | 100 ++++
 docs/cpp/classclaragenomics_1_1Graph.html     | 495 ++++++++++++++++++
 ...claragenomics_1_1Graph__inherit__graph.map |   5 +
 ...claragenomics_1_1Graph__inherit__graph.md5 |   1 +
 ...claragenomics_1_1Graph__inherit__graph.png | Bin 0 -> 8581 bytes
 ...ragenomics_1_1UndirectedGraph-members.html | 102 ++++
 ...classclaragenomics_1_1UndirectedGraph.html | 281 ++++++++++
 ...nomics_1_1UndirectedGraph__coll__graph.map |   4 +
 ...nomics_1_1UndirectedGraph__coll__graph.md5 |   1 +
 ...nomics_1_1UndirectedGraph__coll__graph.png | Bin 0 -> 5287 bytes
 ...ics_1_1UndirectedGraph__inherit__graph.map |   4 +
 ...ics_1_1UndirectedGraph__inherit__graph.md5 |   1 +
 ...ics_1_1UndirectedGraph__inherit__graph.png | Bin 0 -> 5287 bytes
 ...ics_1_1cudaaligner_1_1Aligner-members.html |   2 +-
 ...aragenomics_1_1cudaaligner_1_1Aligner.html |   2 +-
 ...s_1_1cudaaligner_1_1Alignment-members.html |   3 +-
 ...agenomics_1_1cudaaligner_1_1Alignment.html |   6 +-
 ...nomics_1_1cudamapper_1_1Index-members.html |  22 +-
 ...sclaragenomics_1_1cudamapper_1_1Index.html | 259 ++++-----
 ...mics_1_1cudamapper_1_1Matcher-members.html |  87 +++
 ...laragenomics_1_1cudamapper_1_1Matcher.html | 187 +++++++
 ...s_1_1cudamapper_1_1Overlapper-members.html |   4 +-
 ...agenomics_1_1cudamapper_1_1Overlapper.html |   8 +-
 ...ics_1_1cudamapper_1_1Sequence-members.html |   2 +-
 ...aragenomics_1_1cudamapper_1_1Sequence.html |   2 +-
 ..._1cudamapper_1_1SketchElement-members.html |   2 +-
 ...nomics_1_1cudamapper_1_1SketchElement.html |   2 +-
 ...agenomics_1_1cudapoa_1_1Batch-members.html |  11 +-
 ...lassclaragenomics_1_1cudapoa_1_1Batch.html |  54 +-
 ...genomics_1_1io_1_1FastaParser-members.html |   2 +-
 ...assclaragenomics_1_1io_1_1FastaParser.html |   2 +-
 ...ics_1_1scoped__device__switch-members.html |   2 +-
 ...aragenomics_1_1scoped__device__switch.html |   2 +-
 docs/cpp/classes.html                         |  61 ++-
 docs/cpp/cudaaligner_8hpp_source.html         |   2 +-
 docs/cpp/cudamapper_8hpp_source.html          |   2 +-
 docs/cpp/cudapoa_8hpp_source.html             |   2 +-
 docs/cpp/cudautils_8hpp.html                  |  19 +-
 docs/cpp/cudautils_8hpp__incl.map             |   8 +
 docs/cpp/cudautils_8hpp__incl.md5             |   1 +
 docs/cpp/cudautils_8hpp__incl.png             | Bin 0 -> 19634 bytes
 docs/cpp/cudautils_8hpp_source.html           | 185 ++++---
 docs/cpp/cudaversions_8hpp_source.html        |   2 +-
 docs/cpp/dir_000009_000005.html               |  77 +++
 docs/cpp/dir_000010_000005.html               |  77 +++
 docs/cpp/dir_000011_000005.html               |  77 +++
 docs/cpp/dir_000012_000005.html               |  77 +++
 .../dir_00faf102fbd78ece25aa2d8f2597f59b.html |   2 +-
 .../dir_147746a3e1d59bf3271a44362df8a4c9.html |   2 +-
 .../dir_1f71e23d64293220a8931e396f64ac18.html |   2 +-
 .../dir_2312589fb962dec58b1579fafe6a300a.html |   2 +-
 .../dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html |   2 +-
 .../dir_46ada5e69ffe047ce1b425fcb02bc946.html |   2 +-
 .../dir_496653a55fb037d863eb64e0cef0e330.html |   2 +-
 .../dir_5b3882c99f9a196a3d557147d3c04ffd.html |   2 +-
 .../dir_5d9177f36fbce0c085b11d352d248d8a.html |   2 +-
 .../dir_5e4218589a49834876e69d5129e12742.html |   2 +-
 .../dir_657c9b9511f57ce884717ee8b069b43d.html |  13 +-
 ...r_657c9b9511f57ce884717ee8b069b43d_dep.map |   6 +
 ...r_657c9b9511f57ce884717ee8b069b43d_dep.md5 |   1 +
 ...r_657c9b9511f57ce884717ee8b069b43d_dep.png | Bin 0 -> 3950 bytes
 .../dir_85effdddc426fd82e3610be0948fd413.html |  14 +-
 ...r_85effdddc426fd82e3610be0948fd413_dep.map |   7 +
 ...r_85effdddc426fd82e3610be0948fd413_dep.md5 |   1 +
 ...r_85effdddc426fd82e3610be0948fd413_dep.png | Bin 0 -> 3995 bytes
 .../dir_8613eb7afdfdd11650d28f82119ab8e9.html |   2 +-
 .../dir_899653196ec72b3f195a12edb53c5821.html |   2 +-
 .../dir_8d2f594888f36d792a9b4a212d391f7f.html |   2 +-
 .../dir_8e216217187728c84aa14a4942da12a2.html |  14 +-
 ...r_8e216217187728c84aa14a4942da12a2_dep.map |   7 +
 ...r_8e216217187728c84aa14a4942da12a2_dep.md5 |   1 +
 ...r_8e216217187728c84aa14a4942da12a2_dep.png | Bin 0 -> 4438 bytes
 .../dir_9d5ac01351caa32cb63ccb42b8477d37.html |   2 +-
 .../dir_bc4a239385bd2ceeb0f261c69ca3e796.html |   2 +-
 .../dir_bdd9a5d540de89e9fe90efdfc6973a4f.html |  14 +-
 ...r_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map |   7 +
 ...r_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5 |   1 +
 ...r_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png | Bin 0 -> 3187 bytes
 .../dir_cbd0fd5fcc23422502de88d4fe6e7386.html |  14 +-
 ...r_cbd0fd5fcc23422502de88d4fe6e7386_dep.map |   7 +
 ...r_cbd0fd5fcc23422502de88d4fe6e7386_dep.md5 |   1 +
 ...r_cbd0fd5fcc23422502de88d4fe6e7386_dep.png | Bin 0 -> 4451 bytes
 .../dir_e25067817972d6e3bb7efd580b3302c4.html |   2 +-
 .../dir_e48b4a17d37f1148862a6ed3f83bdb40.html |   2 +-
 .../dir_eb42830a1028b9a58498a5b4f93061b6.html |   2 +-
 .../dir_f76c88603f4782e2554e1f696f75813e.html |   2 +-
 .../dir_fd0b9fd7ef60505b59d31114acc22533.html |   2 +-
 docs/cpp/fasta__parser_8hpp_source.html       |   4 +-
 docs/cpp/files.html                           |  44 +-
 docs/cpp/functions.html                       | 129 ++++-
 docs/cpp/functions_enum.html                  |   2 +-
 docs/cpp/functions_func.html                  | 102 +++-
 docs/cpp/functions_type.html                  |  84 +++
 docs/cpp/functions_vars.html                  |  30 +-
 docs/cpp/genomeutils_8hpp_source.html         |   2 +-
 docs/cpp/globals.html                         |   5 +-
 docs/cpp/globals_defs.html                    |   5 +-
 docs/cpp/graph_8hpp_source.html               | 313 +++++++++++
 docs/cpp/graph_legend.html                    | 137 +++++
 docs/cpp/graph_legend.md5                     |   1 +
 docs/cpp/graph_legend.png                     | Bin 0 -> 19465 bytes
 docs/cpp/group__cudaaligner.html              |   2 +-
 docs/cpp/group__cudamapper.html               |  28 +-
 docs/cpp/group__cudapoa.html                  |   2 +-
 docs/cpp/group__cudautils.html                |  48 +-
 docs/cpp/group__logging.html                  |   2 +-
 docs/cpp/hierarchy.html                       | 102 ++++
 docs/cpp/index.html                           |  58 +-
 docs/cpp/index_8hpp_source.html               | 131 +++--
 docs/cpp/inherit_graph_0.map                  |   3 +
 docs/cpp/inherit_graph_0.md5                  |   1 +
 docs/cpp/inherit_graph_0.png                  | Bin 0 -> 2368 bytes
 docs/cpp/inherit_graph_1.map                  |   3 +
 docs/cpp/inherit_graph_1.md5                  |   1 +
 docs/cpp/inherit_graph_1.png                  | Bin 0 -> 2514 bytes
 docs/cpp/inherit_graph_10.map                 |   3 +
 docs/cpp/inherit_graph_10.md5                 |   1 +
 docs/cpp/inherit_graph_10.png                 | Bin 0 -> 2259 bytes
 docs/cpp/inherit_graph_11.map                 |   3 +
 docs/cpp/inherit_graph_11.md5                 |   1 +
 docs/cpp/inherit_graph_11.png                 | Bin 0 -> 2314 bytes
 docs/cpp/inherit_graph_12.map                 |   5 +
 docs/cpp/inherit_graph_12.md5                 |   1 +
 docs/cpp/inherit_graph_12.png                 | Bin 0 -> 8481 bytes
 docs/cpp/inherit_graph_13.map                 |   3 +
 docs/cpp/inherit_graph_13.md5                 |   1 +
 docs/cpp/inherit_graph_13.png                 | Bin 0 -> 2240 bytes
 docs/cpp/inherit_graph_14.map                 |   3 +
 docs/cpp/inherit_graph_14.md5                 |   1 +
 docs/cpp/inherit_graph_14.png                 | Bin 0 -> 2498 bytes
 docs/cpp/inherit_graph_15.map                 |   3 +
 docs/cpp/inherit_graph_15.md5                 |   1 +
 docs/cpp/inherit_graph_15.png                 | Bin 0 -> 1946 bytes
 docs/cpp/inherit_graph_16.map                 |   3 +
 docs/cpp/inherit_graph_16.md5                 |   1 +
 docs/cpp/inherit_graph_16.png                 | Bin 0 -> 2681 bytes
 docs/cpp/inherit_graph_2.map                  |   3 +
 docs/cpp/inherit_graph_2.md5                  |   1 +
 docs/cpp/inherit_graph_2.png                  | Bin 0 -> 2320 bytes
 docs/cpp/inherit_graph_3.map                  |   3 +
 docs/cpp/inherit_graph_3.md5                  |   1 +
 docs/cpp/inherit_graph_3.png                  | Bin 0 -> 2752 bytes
 docs/cpp/inherit_graph_4.map                  |   3 +
 docs/cpp/inherit_graph_4.md5                  |   1 +
 docs/cpp/inherit_graph_4.png                  | Bin 0 -> 2212 bytes
 docs/cpp/inherit_graph_5.map                  |   3 +
 docs/cpp/inherit_graph_5.md5                  |   1 +
 docs/cpp/inherit_graph_5.png                  | Bin 0 -> 2352 bytes
 docs/cpp/inherit_graph_6.map                  |   3 +
 docs/cpp/inherit_graph_6.md5                  |   1 +
 docs/cpp/inherit_graph_6.png                  | Bin 0 -> 2442 bytes
 docs/cpp/inherit_graph_7.map                  |   3 +
 docs/cpp/inherit_graph_7.md5                  |   1 +
 docs/cpp/inherit_graph_7.png                  | Bin 0 -> 2440 bytes
 docs/cpp/inherit_graph_8.map                  |   3 +
 docs/cpp/inherit_graph_8.md5                  |   1 +
 docs/cpp/inherit_graph_8.png                  | Bin 0 -> 2454 bytes
 docs/cpp/inherit_graph_9.map                  |   3 +
 docs/cpp/inherit_graph_9.md5                  |   1 +
 docs/cpp/inherit_graph_9.png                  | Bin 0 -> 2629 bytes
 docs/cpp/inherits.html                        | 168 ++++++
 docs/cpp/logging_8hpp.html                    |  21 +-
 docs/cpp/logging_8hpp__dep__incl.map          |   4 +
 docs/cpp/logging_8hpp__dep__incl.md5          |   1 +
 docs/cpp/logging_8hpp__dep__incl.png          | Bin 0 -> 6117 bytes
 docs/cpp/logging_8hpp__incl.map               |   5 +
 docs/cpp/logging_8hpp__incl.md5               |   1 +
 docs/cpp/logging_8hpp__incl.png               | Bin 0 -> 8783 bytes
 docs/cpp/logging_8hpp_source.html             |   2 +-
 docs/cpp/matcher_8hpp_source.html             | 123 +++++
 docs/cpp/mathutils_8hpp_source.html           |   2 +-
 docs/cpp/menudata.js                          |   7 +
 docs/cpp/modules.html                         |   2 +-
 docs/cpp/overlapper_8hpp_source.html          |  62 ++-
 docs/cpp/search/all_0.js                      |  21 +-
 docs/cpp/search/all_1.js                      |   6 +-
 docs/cpp/search/all_10.js                     |  12 +-
 docs/cpp/search/all_11.js                     |   4 +-
 docs/cpp/search/all_12.js                     |   9 +-
 docs/cpp/search/all_13.html                   |  30 ++
 docs/cpp/search/all_13.js                     |  13 +
 docs/cpp/search/all_2.js                      |  53 +-
 docs/cpp/search/all_3.js                      |  10 +-
 docs/cpp/search/all_4.js                      |   7 +-
 docs/cpp/search/all_5.js                      |  13 +-
 docs/cpp/search/all_6.js                      |  38 +-
 docs/cpp/search/all_7.js                      |   8 +-
 docs/cpp/search/all_8.js                      |   6 +-
 docs/cpp/search/all_9.js                      |   5 +-
 docs/cpp/search/all_a.js                      |   9 +-
 docs/cpp/search/all_b.js                      |   9 +-
 docs/cpp/search/all_c.js                      |   7 +-
 docs/cpp/search/all_d.js                      |  12 +-
 docs/cpp/search/all_e.js                      |  19 +-
 docs/cpp/search/all_f.js                      |  22 +-
 docs/cpp/search/classes_0.js                  |   8 +-
 docs/cpp/search/classes_1.js                  |   2 +-
 docs/cpp/search/classes_2.js                  |   2 +-
 docs/cpp/search/classes_3.js                  |   3 +-
 docs/cpp/search/classes_4.js                  |   3 +-
 docs/cpp/search/classes_5.js                  |   3 +-
 docs/cpp/search/classes_6.js                  |   2 +-
 docs/cpp/search/classes_7.js                  |   4 +-
 docs/cpp/search/classes_8.html                |  30 ++
 docs/cpp/search/classes_8.js                  |   5 +
 docs/cpp/search/classes_9.html                |  30 ++
 docs/cpp/search/classes_9.js                  |   4 +
 docs/cpp/search/classes_a.html                |  30 ++
 docs/cpp/search/classes_a.js                  |   6 +
 docs/cpp/search/classes_b.html                |  30 ++
 docs/cpp/search/classes_b.js                  |   4 +
 docs/cpp/search/enums_0.js                    |   4 +-
 docs/cpp/search/enums_1.js                    |   2 +-
 docs/cpp/search/enums_2.js                    |   2 +-
 docs/cpp/search/enums_3.js                    |   2 +-
 docs/cpp/search/enums_4.js                    |   2 +-
 docs/cpp/search/enumvalues_0.js               |   4 +-
 docs/cpp/search/enumvalues_1.js               |   2 +-
 docs/cpp/search/files_0.js                    |   2 +-
 docs/cpp/search/files_1.js                    |   2 +-
 docs/cpp/search/functions_0.js                |  12 +-
 docs/cpp/search/functions_1.js                |   2 +-
 docs/cpp/search/functions_2.js                |  11 +-
 docs/cpp/search/functions_3.js                |   7 +-
 docs/cpp/search/functions_4.js                |   3 +-
 docs/cpp/search/functions_5.js                |  18 +-
 docs/cpp/search/functions_6.js                |  21 +-
 docs/cpp/search/functions_7.js                |   4 +-
 docs/cpp/search/functions_8.js                |   3 +-
 docs/cpp/search/functions_9.js                |   6 +-
 docs/cpp/search/functions_a.js                |   9 +-
 docs/cpp/search/functions_b.js                |   6 +-
 docs/cpp/search/functions_c.js                |  15 +-
 docs/cpp/search/functions_d.html              |  30 ++
 docs/cpp/search/functions_d.js                |   8 +
 docs/cpp/search/functions_e.html              |  30 ++
 docs/cpp/search/functions_e.js                |   5 +
 docs/cpp/search/functions_f.html              |  30 ++
 docs/cpp/search/functions_f.js                |  13 +
 docs/cpp/search/groups_0.js                   |   6 +-
 docs/cpp/search/groups_1.js                   |   4 +-
 docs/cpp/search/pages_0.js                    |   2 +-
 docs/cpp/search/searchdata.js                 |  10 +-
 docs/cpp/search/typedefs_0.js                 |   3 +-
 docs/cpp/search/typedefs_1.js                 |   2 +-
 docs/cpp/search/typedefs_2.html               |  30 ++
 docs/cpp/search/typedefs_2.js                 |   4 +
 docs/cpp/search/typedefs_3.html               |  30 ++
 docs/cpp/search/typedefs_3.js                 |   4 +
 docs/cpp/search/variables_0.js                |   2 +-
 docs/cpp/search/variables_1.js                |   2 +-
 docs/cpp/search/variables_2.js                |   2 +-
 docs/cpp/search/variables_3.js                |   4 +-
 docs/cpp/search/variables_4.js                |   2 +-
 docs/cpp/search/variables_5.js                |   7 +-
 docs/cpp/search/variables_6.js                |   5 +-
 docs/cpp/search/variables_7.js                |   4 +-
 docs/cpp/search/variables_8.js                |  12 +-
 docs/cpp/search/variables_9.js                |   2 +-
 docs/cpp/search/variables_a.html              |  30 ++
 docs/cpp/search/variables_a.js                |   4 +
 docs/cpp/search/variables_b.html              |  30 ++
 docs/cpp/search/variables_b.js                |   9 +
 docs/cpp/search/variables_c.html              |  30 ++
 docs/cpp/search/variables_c.js                |   4 +
 docs/cpp/sequence_8hpp_source.html            |   2 +-
 .../signed__integer__utils_8hpp_source.html   |   2 +-
 docs/cpp/sketch__element_8hpp_source.html     |   4 +-
 docs/cpp/stringutils_8hpp_source.html         |   2 +-
 ...ructclaragenomics_1_1PairHash-members.html |  85 +++
 docs/cpp/structclaragenomics_1_1PairHash.html | 100 ++++
 ...omics_1_1cudamapper_1_1Anchor-members.html |   2 +-
 ...claragenomics_1_1cudamapper_1_1Anchor.html |   2 +-
 ...s_1_1cudamapper_1_1ArrayBlock-members.html |   2 +-
 ...agenomics_1_1cudamapper_1_1ArrayBlock.html |   2 +-
 ...mics_1_1cudamapper_1_1Overlap-members.html |  29 +-
 ...laragenomics_1_1cudamapper_1_1Overlap.html |  22 +-
 ...agenomics_1_1cudapoa_1_1Entry-members.html |   2 +-
 ...ructclaragenomics_1_1cudapoa_1_1Entry.html |   2 +-
 ...nomics_1_1io_1_1FastaSequence-members.html |   2 +-
 ...tclaragenomics_1_1io_1_1FastaSequence.html |   2 +-
 docs/cpp/types_8hpp_source.html               |  21 +-
 294 files changed, 5019 insertions(+), 928 deletions(-)
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph-members.html
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph.html
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.map
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.md5
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.png
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.map
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.md5
 create mode 100644 docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.png
 create mode 100644 docs/cpp/classclaragenomics_1_1Graph-members.html
 create mode 100644 docs/cpp/classclaragenomics_1_1Graph.html
 create mode 100644 docs/cpp/classclaragenomics_1_1Graph__inherit__graph.map
 create mode 100644 docs/cpp/classclaragenomics_1_1Graph__inherit__graph.md5
 create mode 100644 docs/cpp/classclaragenomics_1_1Graph__inherit__graph.png
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph-members.html
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph.html
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.map
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.md5
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.png
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.map
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.md5
 create mode 100644 docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.png
 create mode 100644 docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher-members.html
 create mode 100644 docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher.html
 create mode 100644 docs/cpp/cudautils_8hpp__incl.map
 create mode 100644 docs/cpp/cudautils_8hpp__incl.md5
 create mode 100644 docs/cpp/cudautils_8hpp__incl.png
 create mode 100644 docs/cpp/dir_000009_000005.html
 create mode 100644 docs/cpp/dir_000010_000005.html
 create mode 100644 docs/cpp/dir_000011_000005.html
 create mode 100644 docs/cpp/dir_000012_000005.html
 create mode 100644 docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.map
 create mode 100644 docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.md5
 create mode 100644 docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.png
 create mode 100644 docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.map
 create mode 100644 docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.md5
 create mode 100644 docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.png
 create mode 100644 docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.map
 create mode 100644 docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.md5
 create mode 100644 docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.png
 create mode 100644 docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map
 create mode 100644 docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5
 create mode 100644 docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png
 create mode 100644 docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.map
 create mode 100644 docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.md5
 create mode 100644 docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.png
 create mode 100644 docs/cpp/functions_type.html
 create mode 100644 docs/cpp/graph_8hpp_source.html
 create mode 100644 docs/cpp/graph_legend.html
 create mode 100644 docs/cpp/graph_legend.md5
 create mode 100644 docs/cpp/graph_legend.png
 create mode 100644 docs/cpp/hierarchy.html
 create mode 100644 docs/cpp/inherit_graph_0.map
 create mode 100644 docs/cpp/inherit_graph_0.md5
 create mode 100644 docs/cpp/inherit_graph_0.png
 create mode 100644 docs/cpp/inherit_graph_1.map
 create mode 100644 docs/cpp/inherit_graph_1.md5
 create mode 100644 docs/cpp/inherit_graph_1.png
 create mode 100644 docs/cpp/inherit_graph_10.map
 create mode 100644 docs/cpp/inherit_graph_10.md5
 create mode 100644 docs/cpp/inherit_graph_10.png
 create mode 100644 docs/cpp/inherit_graph_11.map
 create mode 100644 docs/cpp/inherit_graph_11.md5
 create mode 100644 docs/cpp/inherit_graph_11.png
 create mode 100644 docs/cpp/inherit_graph_12.map
 create mode 100644 docs/cpp/inherit_graph_12.md5
 create mode 100644 docs/cpp/inherit_graph_12.png
 create mode 100644 docs/cpp/inherit_graph_13.map
 create mode 100644 docs/cpp/inherit_graph_13.md5
 create mode 100644 docs/cpp/inherit_graph_13.png
 create mode 100644 docs/cpp/inherit_graph_14.map
 create mode 100644 docs/cpp/inherit_graph_14.md5
 create mode 100644 docs/cpp/inherit_graph_14.png
 create mode 100644 docs/cpp/inherit_graph_15.map
 create mode 100644 docs/cpp/inherit_graph_15.md5
 create mode 100644 docs/cpp/inherit_graph_15.png
 create mode 100644 docs/cpp/inherit_graph_16.map
 create mode 100644 docs/cpp/inherit_graph_16.md5
 create mode 100644 docs/cpp/inherit_graph_16.png
 create mode 100644 docs/cpp/inherit_graph_2.map
 create mode 100644 docs/cpp/inherit_graph_2.md5
 create mode 100644 docs/cpp/inherit_graph_2.png
 create mode 100644 docs/cpp/inherit_graph_3.map
 create mode 100644 docs/cpp/inherit_graph_3.md5
 create mode 100644 docs/cpp/inherit_graph_3.png
 create mode 100644 docs/cpp/inherit_graph_4.map
 create mode 100644 docs/cpp/inherit_graph_4.md5
 create mode 100644 docs/cpp/inherit_graph_4.png
 create mode 100644 docs/cpp/inherit_graph_5.map
 create mode 100644 docs/cpp/inherit_graph_5.md5
 create mode 100644 docs/cpp/inherit_graph_5.png
 create mode 100644 docs/cpp/inherit_graph_6.map
 create mode 100644 docs/cpp/inherit_graph_6.md5
 create mode 100644 docs/cpp/inherit_graph_6.png
 create mode 100644 docs/cpp/inherit_graph_7.map
 create mode 100644 docs/cpp/inherit_graph_7.md5
 create mode 100644 docs/cpp/inherit_graph_7.png
 create mode 100644 docs/cpp/inherit_graph_8.map
 create mode 100644 docs/cpp/inherit_graph_8.md5
 create mode 100644 docs/cpp/inherit_graph_8.png
 create mode 100644 docs/cpp/inherit_graph_9.map
 create mode 100644 docs/cpp/inherit_graph_9.md5
 create mode 100644 docs/cpp/inherit_graph_9.png
 create mode 100644 docs/cpp/inherits.html
 create mode 100644 docs/cpp/logging_8hpp__dep__incl.map
 create mode 100644 docs/cpp/logging_8hpp__dep__incl.md5
 create mode 100644 docs/cpp/logging_8hpp__dep__incl.png
 create mode 100644 docs/cpp/logging_8hpp__incl.map
 create mode 100644 docs/cpp/logging_8hpp__incl.md5
 create mode 100644 docs/cpp/logging_8hpp__incl.png
 create mode 100644 docs/cpp/matcher_8hpp_source.html
 create mode 100644 docs/cpp/search/all_13.html
 create mode 100644 docs/cpp/search/all_13.js
 create mode 100644 docs/cpp/search/classes_8.html
 create mode 100644 docs/cpp/search/classes_8.js
 create mode 100644 docs/cpp/search/classes_9.html
 create mode 100644 docs/cpp/search/classes_9.js
 create mode 100644 docs/cpp/search/classes_a.html
 create mode 100644 docs/cpp/search/classes_a.js
 create mode 100644 docs/cpp/search/classes_b.html
 create mode 100644 docs/cpp/search/classes_b.js
 create mode 100644 docs/cpp/search/functions_d.html
 create mode 100644 docs/cpp/search/functions_d.js
 create mode 100644 docs/cpp/search/functions_e.html
 create mode 100644 docs/cpp/search/functions_e.js
 create mode 100644 docs/cpp/search/functions_f.html
 create mode 100644 docs/cpp/search/functions_f.js
 create mode 100644 docs/cpp/search/typedefs_2.html
 create mode 100644 docs/cpp/search/typedefs_2.js
 create mode 100644 docs/cpp/search/typedefs_3.html
 create mode 100644 docs/cpp/search/typedefs_3.js
 create mode 100644 docs/cpp/search/variables_a.html
 create mode 100644 docs/cpp/search/variables_a.js
 create mode 100644 docs/cpp/search/variables_b.html
 create mode 100644 docs/cpp/search/variables_b.js
 create mode 100644 docs/cpp/search/variables_c.html
 create mode 100644 docs/cpp/search/variables_c.js
 create mode 100644 docs/cpp/structclaragenomics_1_1PairHash-members.html
 create mode 100644 docs/cpp/structclaragenomics_1_1PairHash.html

diff --git a/docs/cpp/aligner_8hpp_source.html b/docs/cpp/aligner_8hpp_source.html
index 45cdf5434..fc9179bc9 100644
--- a/docs/cpp/aligner_8hpp_source.html
+++ b/docs/cpp/aligner_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/alignment_8hpp_source.html b/docs/cpp/alignment_8hpp_source.html
index 619916825..891be90e1 100644
--- a/docs/cpp/alignment_8hpp_source.html
+++ b/docs/cpp/alignment_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -99,23 +99,25 @@
 <div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">   34</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">Alignment</a></div>
 <div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;{</div>
 <div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780">get_query_sequence</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8">~Alignment</a>() = <span class="keywordflow">default</span>;</div>
 <div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
-<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4a61cdee74c32930f49cb878fc17db57">get_target_sequence</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780">get_query_sequence</a>() <span class="keyword">const</span> = 0;</div>
 <div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
-<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="keyword">virtual</span> std::string <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876">convert_to_cigar</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
-<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudaaligner.html#gafcccbe51c86f9772ccf837fc433f518b">AlignmentType</a> <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab22457c02ac00ec205dcd5a75b253881">get_alignment_type</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160; </div>
-<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudaaligner.html#ga7d6424e11f69650b1d4eabef0cf4f602">StatusType</a> <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78">get_status</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div>
-<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;AlignmentState&gt;&amp; <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70">get_alignment</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
-<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudaaligner.html#ga228dcdd4bf0cf40c64786cce6b045c40">FormattedAlignment</a> <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c">format_alignment</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;};</div>
-<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
-<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;} <span class="comment">// namespace cudaaligner</span></div>
-<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4a61cdee74c32930f49cb878fc17db57">get_target_sequence</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keyword">virtual</span> std::string <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876">convert_to_cigar</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudaaligner.html#gafcccbe51c86f9772ccf837fc433f518b">AlignmentType</a> <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab22457c02ac00ec205dcd5a75b253881">get_alignment_type</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudaaligner.html#ga7d6424e11f69650b1d4eabef0cf4f602">StatusType</a> <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78">get_status</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;AlignmentState&gt;&amp; <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70">get_alignment</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudaaligner.html#ga228dcdd4bf0cf40c64786cce6b045c40">FormattedAlignment</a> <a class="code" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c">format_alignment</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;};</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;} <span class="comment">// namespace cudaaligner</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
 </div><!-- fragment --></div><!-- contents -->
 <div class="ttc" id="aclassclaragenomics_1_1cudaaligner_1_1Alignment_html_a7665f284b7929998357c89461e444f78"><div class="ttname"><a href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78">claragenomics::cudaaligner::Alignment::get_status</a></div><div class="ttdeci">virtual StatusType get_status() const =0</div><div class="ttdoc">Return status of alignment.</div></div>
 <div class="ttc" id="agroup__cudaaligner_html_ga228dcdd4bf0cf40c64786cce6b045c40"><div class="ttname"><a href="group__cudaaligner.html#ga228dcdd4bf0cf40c64786cce6b045c40">claragenomics::cudaaligner::FormattedAlignment</a></div><div class="ttdeci">std::pair&lt; std::string, std::string &gt; FormattedAlignment</div><div class="ttdef"><b>Definition:</b> alignment.hpp:31</div></div>
@@ -124,6 +126,7 @@
 <div class="ttc" id="aclassclaragenomics_1_1cudaaligner_1_1Alignment_html_a5139f26517193e077000dcddfbc15f70"><div class="ttname"><a href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70">claragenomics::cudaaligner::Alignment::get_alignment</a></div><div class="ttdeci">virtual const std::vector&lt; AlignmentState &gt; &amp; get_alignment() const =0</div><div class="ttdoc">Get the alignment between sequences.</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudaaligner_1_1Alignment_html_aeb4a583f6fbc643c93170797ca45a876"><div class="ttname"><a href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876">claragenomics::cudaaligner::Alignment::convert_to_cigar</a></div><div class="ttdeci">virtual std::string convert_to_cigar() const =0</div><div class="ttdoc">Converts an alignment to CIGAR format. The is a reduced implementation of the CIGAR standard supporti...</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudaaligner_1_1Alignment_html"><div class="ttname"><a href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">claragenomics::cudaaligner::Alignment</a></div><div class="ttdoc">Alignment - Object encapsulating an alignment between 2 string.</div><div class="ttdef"><b>Definition:</b> alignment.hpp:34</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudaaligner_1_1Alignment_html_a6479df67f21d643782abfed873218ea8"><div class="ttname"><a href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8">claragenomics::cudaaligner::Alignment::~Alignment</a></div><div class="ttdeci">virtual ~Alignment()=default</div><div class="ttdoc">Virtual destructor.</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudaaligner_1_1Alignment_html_ab29dceafccd3cb0a2e87023c5d48a780"><div class="ttname"><a href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780">claragenomics::cudaaligner::Alignment::get_query_sequence</a></div><div class="ttdeci">virtual const std::string &amp; get_query_sequence() const =0</div><div class="ttdoc">Returns query sequence.</div></div>
 <div class="ttc" id="agroup__cudaaligner_html_gafcccbe51c86f9772ccf837fc433f518b"><div class="ttname"><a href="group__cudaaligner.html#gafcccbe51c86f9772ccf837fc433f518b">claragenomics::cudaaligner::AlignmentType</a></div><div class="ttdeci">AlignmentType</div><div class="ttdoc">AlignmentType - Enum for storing type of alignment.</div><div class="ttdef"><b>Definition:</b> cudaaligner.hpp:36</div></div>
 <div class="ttc" id="agroup__cudaaligner_html_ga7d6424e11f69650b1d4eabef0cf4f602"><div class="ttname"><a href="group__cudaaligner.html#ga7d6424e11f69650b1d4eabef0cf4f602">claragenomics::cudaaligner::StatusType</a></div><div class="ttdeci">StatusType</div><div class="ttdoc">CUDA Aligner error type.</div><div class="ttdef"><b>Definition:</b> cudaaligner.hpp:25</div></div>
diff --git a/docs/cpp/annotated.html b/docs/cpp/annotated.html
index 8185be30c..aded9d268 100644
--- a/docs/cpp/annotated.html
+++ b/docs/cpp/annotated.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -67,7 +67,7 @@
 </div><!--header-->
 <div class="contents">
 <div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
 <tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>claragenomics</b></td><td class="desc"></td></tr>
 <tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>cudaaligner</b></td><td class="desc"></td></tr>
 <tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html" target="_self">Aligner</a></td><td class="desc"></td></tr>
@@ -75,19 +75,23 @@
 <tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>cudamapper</b></td><td class="desc"></td></tr>
 <tr id="row_0_1_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html" target="_self">Anchor</a></td><td class="desc"></td></tr>
 <tr id="row_0_1_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html" target="_self">ArrayBlock</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_2_" class="arrow" onclick="toggleFolder('0_1_2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" target="_self">Index</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a> - manages mapping of (k,w)-kmer-representation and all its occurences </td></tr>
-<tr id="row_0_1_2_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html" target="_self">RepresentationToSketchElements</a></td><td class="desc"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html" title="RepresentationToSketchElements - representation, pointer to section of data arrays with sketch elemen...">RepresentationToSketchElements</a> - representation, pointer to section of data arrays with sketch elements with that representation and a given read_id, and a pointer to section of data arrays with sketch elements with that representation and all read_ids </td></tr>
-<tr id="row_0_1_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html" target="_self">Overlap</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html" target="_self">Overlapper</a></td><td class="desc"></td></tr>
-<tr id="row_0_1_5_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html" target="_self">Sequence</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html" title="Sequence - represents an individual read (name, DNA nucleotides etc)">Sequence</a> - represents an individual read (name, DNA nucleotides etc) </td></tr>
-<tr id="row_0_1_6_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html" target="_self">SketchElement</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html" title="SketchElement - Contains integer representation, position, direction and read id of a kmer.">SketchElement</a> - Contains integer representation, position, direction and read id of a kmer </td></tr>
+<tr id="row_0_1_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" target="_self">Index</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a> - manages mapping of (k,w)-kmer-representation and all its occurences </td></tr>
+<tr id="row_0_1_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" target="_self">Matcher</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher - base matcher.">Matcher</a> - base matcher </td></tr>
+<tr id="row_0_1_4_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html" target="_self">Overlap</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_5_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html" target="_self">Overlapper</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_6_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html" target="_self">Sequence</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html" title="Sequence - represents an individual read (name, DNA nucleotides etc)">Sequence</a> - represents an individual read (name, DNA nucleotides etc) </td></tr>
+<tr id="row_0_1_7_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html" target="_self">SketchElement</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html" title="SketchElement - Contains integer representation, position, direction and read id of a kmer.">SketchElement</a> - Contains integer representation, position, direction and read id of a kmer </td></tr>
 <tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>cudapoa</b></td><td class="desc"></td></tr>
 <tr id="row_0_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html" target="_self">Batch</a></td><td class="desc"></td></tr>
 <tr id="row_0_2_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudapoa_1_1Entry.html" target="_self">Entry</a></td><td class="desc">A structure to represent a sequence entry </td></tr>
 <tr id="row_0_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_3_" class="arrow" onclick="toggleFolder('0_3_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>io</b></td><td class="desc"></td></tr>
 <tr id="row_0_3_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html" target="_self">FastaParser</a></td><td class="desc"></td></tr>
 <tr id="row_0_3_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html" target="_self">FastaSequence</a></td><td class="desc">A structure to hold details of a single FASTA entry </td></tr>
-<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1scoped__device__switch.html" target="_self">scoped_device_switch</a></td><td class="desc">A class to switch the CUDA device for the current scope using RAII </td></tr>
+<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1DirectedGraph.html" target="_self">DirectedGraph</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure.">DirectedGraph</a> Object representing a directed graph structure </td></tr>
+<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1Graph.html" target="_self">Graph</a></td><td class="desc">Object representing a generic graph structure </td></tr>
+<tr id="row_0_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1PairHash.html" target="_self">PairHash</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1scoped__device__switch.html" target="_self">scoped_device_switch</a></td><td class="desc">A class to switch the CUDA device for the current scope using RAII </td></tr>
+<tr id="row_0_8_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1UndirectedGraph.html" target="_self">UndirectedGraph</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure.">UndirectedGraph</a> Object representing an undirected graph structure </td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
diff --git a/docs/cpp/batch_8hpp_source.html b/docs/cpp/batch_8hpp_source.html
index 83ed4674b..993ca639a 100644
--- a/docs/cpp/batch_8hpp_source.html
+++ b/docs/cpp/batch_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -84,84 +84,90 @@
 <div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
 <div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;claragenomics/cudapoa/cudapoa.hpp&gt;</span></div>
 <div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
-<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
-<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
-<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
-<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
-<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;cuda_runtime_api.h&gt;</span></div>
-<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
-<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
-<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;{</div>
-<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
-<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span>cudapoa</div>
-<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;{</div>
-<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
-<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
-<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html">   32</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html">Entry</a></div>
-<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;{</div>
-<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">   35</a></span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">seq</a>;</div>
-<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277">   37</a></span>&#160;    <span class="keyword">const</span> int8_t* <a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277">weights</a>;</div>
-<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712">   39</a></span>&#160;    int32_t <a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712">length</a>;</div>
-<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;};</div>
-<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div>
-<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">   43</a></span>&#160;<span class="keyword">typedef</span> std::vector&lt;Entry&gt; <a class="code" href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">Group</a>;</div>
-<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
-<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudapoa_1_1Batch.html">   47</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html">Batch</a></div>
-<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;{</div>
-<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1">~Batch</a>() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160; </div>
-<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0">add_poa_group</a>(std::vector&lt;StatusType&gt;&amp; per_seq_status,</div>
-<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;                                     <span class="keyword">const</span> <a class="code" href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">Group</a>&amp; poa_group) = 0;</div>
-<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
-<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc">get_total_poas</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
-<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09">generate_poa</a>() = 0;</div>
-<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160; </div>
-<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0">get_consensus</a>(std::vector&lt;std::string&gt;&amp; consensus,</div>
-<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                                     std::vector&lt;std::vector&lt;uint16_t&gt;&gt;&amp; coverage,</div>
-<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;                                     std::vector&lt;claragenomics::cudapoa::StatusType&gt;&amp; output_status) = 0;</div>
-<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
-<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">get_msa</a>(std::vector&lt;std::vector&lt;std::string&gt;&gt;&amp; msa,</div>
-<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;                               std::vector&lt;StatusType&gt;&amp; output_status) = 0;</div>
-<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
-<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec">batch_id</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
-<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae">reset</a>() = 0;</div>
-<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;};</div>
-<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160; </div>
-<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;std::unique_ptr&lt;Batch&gt; <a class="code" href="group__cudapoa.html#ga81951b681c27354e2dbe7933a9f168f3">create_batch</a>(int32_t max_sequences_per_poa,</div>
-<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;                                    int32_t device_id,</div>
-<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;                                    cudaStream_t stream,</div>
-<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;                                    <span class="keywordtype">size_t</span> max_mem,</div>
-<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                                    int8_t output_mask,</div>
-<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;                                    int16_t gap_score,</div>
-<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;                                    int16_t mismatch_score,</div>
-<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                                    int16_t match_score,</div>
-<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;                                    <span class="keywordtype">bool</span> cuda_banded_alignment);</div>
-<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160; </div>
-<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160; </div>
-<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;} <span class="comment">// namespace cudapoa</span></div>
-<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
-<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;claragenomics/utils/graph.hpp&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;cuda_runtime_api.h&gt;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;{</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">namespace </span>cudapoa</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html">   34</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html">Entry</a></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;{</div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">   37</a></span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">seq</a>;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277">   39</a></span>&#160;    <span class="keyword">const</span> int8_t* <a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277">weights</a>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712">   41</a></span>&#160;    int32_t <a class="code" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712">length</a>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">   45</a></span>&#160;<span class="keyword">typedef</span> std::vector&lt;Entry&gt; <a class="code" href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">Group</a>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudapoa_1_1Batch.html">   49</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html">Batch</a></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;{</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1">~Batch</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0">add_poa_group</a>(std::vector&lt;StatusType&gt;&amp; per_seq_status,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;                                     <span class="keyword">const</span> <a class="code" href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">Group</a>&amp; poa_group) = 0;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc">get_total_poas</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09">generate_poa</a>() = 0;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0">get_consensus</a>(std::vector&lt;std::string&gt;&amp; consensus,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                                     std::vector&lt;std::vector&lt;uint16_t&gt;&gt;&amp; coverage,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                                     std::vector&lt;claragenomics::cudapoa::StatusType&gt;&amp; output_status) = 0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">get_msa</a>(std::vector&lt;std::vector&lt;std::string&gt;&gt;&amp; msa,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;                               std::vector&lt;StatusType&gt;&amp; output_status) = 0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16">get_graphs</a>(std::vector&lt;DirectedGraph&gt;&amp; graphs,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;                            std::vector&lt;StatusType&gt;&amp; output_status) = 0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keyword">virtual</span> int32_t <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec">batch_id</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160; </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae">reset</a>() = 0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;};</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160; </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;std::unique_ptr&lt;Batch&gt; <a class="code" href="group__cudapoa.html#ga81951b681c27354e2dbe7933a9f168f3">create_batch</a>(int32_t max_sequences_per_poa,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                                    int32_t device_id,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                                    cudaStream_t stream,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;                                    <span class="keywordtype">size_t</span> max_mem,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;                                    int8_t output_mask,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;                                    int16_t gap_score,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;                                    int16_t mismatch_score,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;                                    int16_t match_score,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;                                    <span class="keywordtype">bool</span> cuda_banded_alignment);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;} <span class="comment">// namespace cudapoa</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160; </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
 </div><!-- fragment --></div><!-- contents -->
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_ab70c94f0a2b161abd8fce03f487c2db1"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1">claragenomics::cudapoa::Batch::~Batch</a></div><div class="ttdeci">virtual ~Batch()=default</div><div class="ttdoc">CudapoaBatch has a custom dtor, so declare ~Batch virtual and give it a default implementation.</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_ab807c4b01c2cddcdebb32952df13c0ec"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec">claragenomics::cudapoa::Batch::batch_id</a></div><div class="ttdeci">virtual int32_t batch_id() const =0</div><div class="ttdoc">Return batch ID.</div></div>
 <div class="ttc" id="agroup__cudapoa_html_ga81951b681c27354e2dbe7933a9f168f3"><div class="ttname"><a href="group__cudapoa.html#ga81951b681c27354e2dbe7933a9f168f3">claragenomics::cudapoa::create_batch</a></div><div class="ttdeci">std::unique_ptr&lt; Batch &gt; create_batch(int32_t max_sequences_per_poa, int32_t device_id, cudaStream_t stream, size_t max_mem, int8_t output_mask, int16_t gap_score, int16_t mismatch_score, int16_t match_score, bool cuda_banded_alignment)</div><div class="ttdoc">Creates a new CUDA Batch object.</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html_ab8564c38982af7716c70b06d029fb277"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277">claragenomics::cudapoa::Entry::weights</a></div><div class="ttdeci">const int8_t * weights</div><div class="ttdoc">Pointer to array of weight per base in sequence.</div><div class="ttdef"><b>Definition:</b> batch.hpp:37</div></div>
+<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html_ab8564c38982af7716c70b06d029fb277"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277">claragenomics::cudapoa::Entry::weights</a></div><div class="ttdeci">const int8_t * weights</div><div class="ttdoc">Pointer to array of weight per base in sequence.</div><div class="ttdef"><b>Definition:</b> batch.hpp:39</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_a7387b746531d4e8ac1e5806ac2824f09"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09">claragenomics::cudapoa::Batch::generate_poa</a></div><div class="ttdeci">virtual void generate_poa()=0</div><div class="ttdoc">Run partial order alignment algorithm over all POAs.</div></div>
 <div class="ttc" id="agroup__cudapoa_html_ga8ece5291074f6e07073b797d34ec24d0"><div class="ttname"><a href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">claragenomics::cudapoa::StatusType</a></div><div class="ttdeci">StatusType</div><div class="ttdoc">CUDA POA error type.</div><div class="ttdef"><b>Definition:</b> cudapoa.hpp:22</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_ab39956c82d5d5a2d8df1b1695e15d9d2"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">claragenomics::cudapoa::Batch::get_msa</a></div><div class="ttdeci">virtual StatusType get_msa(std::vector&lt; std::vector&lt; std::string &gt;&gt; &amp;msa, std::vector&lt; StatusType &gt; &amp;output_status)=0</div><div class="ttdoc">Get the multiple sequence alignments for each POA.</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_a8f2f44e7b4d7f51d8ba68323841dcdf0"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0">claragenomics::cudapoa::Batch::add_poa_group</a></div><div class="ttdeci">virtual StatusType add_poa_group(std::vector&lt; StatusType &gt; &amp;per_seq_status, const Group &amp;poa_group)=0</div><div class="ttdoc">Add a new group to the batch to run POA algorithm on. Based on the constraints of the batch,...</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_af2b27869811283b869700c181a75cfdc"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc">claragenomics::cudapoa::Batch::get_total_poas</a></div><div class="ttdeci">virtual int32_t get_total_poas() const =0</div><div class="ttdoc">Get total number of partial order alignments in batch.</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html_a4ada5ced9af7930c95d7a49fb5ecdac4"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">claragenomics::cudapoa::Entry::seq</a></div><div class="ttdeci">const char * seq</div><div class="ttdoc">Pointer to string representing sequence.</div><div class="ttdef"><b>Definition:</b> batch.hpp:35</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></div><div class="ttdef"><b>Definition:</b> batch.hpp:47</div></div>
+<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html_a4ada5ced9af7930c95d7a49fb5ecdac4"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">claragenomics::cudapoa::Entry::seq</a></div><div class="ttdeci">const char * seq</div><div class="ttdoc">Pointer to string representing sequence.</div><div class="ttdef"><b>Definition:</b> batch.hpp:37</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></div><div class="ttdef"><b>Definition:</b> batch.hpp:49</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_aa8de262cb7c43d7219f7064bb700e7ae"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae">claragenomics::cudapoa::Batch::reset</a></div><div class="ttdeci">virtual void reset()=0</div><div class="ttdoc">Reset batch. Must do before re-using batch.</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html">claragenomics::cudapoa::Entry</a></div><div class="ttdoc">A structure to represent a sequence entry.</div><div class="ttdef"><b>Definition:</b> batch.hpp:32</div></div>
+<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html">claragenomics::cudapoa::Entry</a></div><div class="ttdoc">A structure to represent a sequence entry.</div><div class="ttdef"><b>Definition:</b> batch.hpp:34</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_a3224d1595caa5950c34708f4b7d64fe0"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0">claragenomics::cudapoa::Batch::get_consensus</a></div><div class="ttdeci">virtual StatusType get_consensus(std::vector&lt; std::string &gt; &amp;consensus, std::vector&lt; std::vector&lt; uint16_t &gt;&gt; &amp;coverage, std::vector&lt; claragenomics::cudapoa::StatusType &gt; &amp;output_status)=0</div><div class="ttdoc">Get the consensus for each POA.</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html_a2211688d275c808bf9b4f85336db6712"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712">claragenomics::cudapoa::Entry::length</a></div><div class="ttdeci">int32_t length</div><div class="ttdoc">Length of sequence.</div><div class="ttdef"><b>Definition:</b> batch.hpp:39</div></div>
-<div class="ttc" id="agroup__cudapoa_html_ga6b301a3a6ac7edccc403ec75e7497d32"><div class="ttname"><a href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">claragenomics::cudapoa::Group</a></div><div class="ttdeci">std::vector&lt; Entry &gt; Group</div><div class="ttdoc">A type defining the set and order of Entry's in which a POA is processed.</div><div class="ttdef"><b>Definition:</b> batch.hpp:43</div></div>
+<div class="ttc" id="astructclaragenomics_1_1cudapoa_1_1Entry_html_a2211688d275c808bf9b4f85336db6712"><div class="ttname"><a href="structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712">claragenomics::cudapoa::Entry::length</a></div><div class="ttdeci">int32_t length</div><div class="ttdoc">Length of sequence.</div><div class="ttdef"><b>Definition:</b> batch.hpp:41</div></div>
+<div class="ttc" id="agroup__cudapoa_html_ga6b301a3a6ac7edccc403ec75e7497d32"><div class="ttname"><a href="group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32">claragenomics::cudapoa::Group</a></div><div class="ttdeci">std::vector&lt; Entry &gt; Group</div><div class="ttdoc">A type defining the set and order of Entry's in which a POA is processed.</div><div class="ttdef"><b>Definition:</b> batch.hpp:45</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudapoa_1_1Batch_html_a0949cca1e89a40d759b0ca371512bb16"><div class="ttname"><a href="classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16">claragenomics::cudapoa::Batch::get_graphs</a></div><div class="ttdeci">virtual void get_graphs(std::vector&lt; DirectedGraph &gt; &amp;graphs, std::vector&lt; StatusType &gt; &amp;output_status)=0</div><div class="ttdoc">Get the graph representation for each POA.</div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph-members.html b/docs/cpp/classclaragenomics_1_1DirectedGraph-members.html
new file mode 100644
index 000000000..43e9f66cf
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1DirectedGraph-members.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">DirectedGraph</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">claragenomics::DirectedGraph Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classclaragenomics_1_1DirectedGraph.html">claragenomics::DirectedGraph</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">add_edge</a>(node_id_t node_id_from, node_id_t node_id_to, edge_weight_t weight=0)</td><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">claragenomics::DirectedGraph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a>(edge_t edge)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">claragenomics::DirectedGraph</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">claragenomics::DirectedGraph</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a>(std::ostringstream &amp;dot_str, const std::string &amp;node_separator) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">empty_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">get_adjacent_nodes</a>(node_id_t node) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">get_edges</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">get_node_ids</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">get_node_label</a>(node_id_t node) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">claragenomics::DirectedGraph</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a>(std::ostringstream &amp;dot_str) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">serialize_to_dot</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">claragenomics::DirectedGraph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">set_node_label</a>(node_id_t node, const std::string &amp;label)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a>(edge_t edge)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph.html b/docs/cpp/classclaragenomics_1_1DirectedGraph.html
new file mode 100644
index 000000000..1c3e97641
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1DirectedGraph.html
@@ -0,0 +1,281 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: claragenomics::DirectedGraph Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">DirectedGraph</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classclaragenomics_1_1DirectedGraph-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">claragenomics::DirectedGraph Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a class="el" href="classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure.">DirectedGraph</a> Object representing a directed graph structure.  
+ <a href="classclaragenomics_1_1DirectedGraph.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="graph_8hpp_source.html">graph.hpp</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for claragenomics::DirectedGraph:</div>
+<div class="dyncontent">
+<div class="center"><img src="classclaragenomics_1_1DirectedGraph__inherit__graph.png" border="0" usemap="#claragenomics_1_1DirectedGraph_inherit__map" alt="Inheritance graph"/></div>
+<map name="claragenomics_1_1DirectedGraph_inherit__map" id="claragenomics_1_1DirectedGraph_inherit__map">
+<area shape="rect" title="DirectedGraph Object representing a directed graph structure." alt="" coords="5,80,204,107"/>
+<area shape="rect" href="classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="30,5,179,32"/>
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for claragenomics::DirectedGraph:</div>
+<div class="dyncontent">
+<div class="center"><img src="classclaragenomics_1_1DirectedGraph__coll__graph.png" border="0" usemap="#claragenomics_1_1DirectedGraph_coll__map" alt="Collaboration graph"/></div>
+<map name="claragenomics_1_1DirectedGraph_coll__map" id="claragenomics_1_1DirectedGraph_coll__map">
+<area shape="rect" title="DirectedGraph Object representing a directed graph structure." alt="" coords="5,80,204,107"/>
+<area shape="rect" href="classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="30,5,179,32"/>
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a0f9734799fc19b94b0621c956ce5508d"><td class="memItemLeft" align="right" valign="top"><a id="a0f9734799fc19b94b0621c956ce5508d"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> = int32_t</td></tr>
+<tr class="memdesc:a0f9734799fc19b94b0621c956ce5508d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for node ID. <br /></td></tr>
+<tr class="separator:a0f9734799fc19b94b0621c956ce5508d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5388bf7676b6e35a6e62c034e2993b5"><td class="memItemLeft" align="right" valign="top"><a id="ad5388bf7676b6e35a6e62c034e2993b5"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> = int32_t</td></tr>
+<tr class="memdesc:ad5388bf7676b6e35a6e62c034e2993b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tpyedef for edge weight. <br /></td></tr>
+<tr class="separator:ad5388bf7676b6e35a6e62c034e2993b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3892123fce03f805e54ce0076e6b68dc"><td class="memItemLeft" align="right" valign="top"><a id="a3892123fce03f805e54ce0076e6b68dc"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> = std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;</td></tr>
+<tr class="memdesc:a3892123fce03f805e54ce0076e6b68dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for edge. <br /></td></tr>
+<tr class="separator:a3892123fce03f805e54ce0076e6b68dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_types_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:a0f9734799fc19b94b0621c956ce5508d inherit pub_types_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a0f9734799fc19b94b0621c956ce5508d"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> = int32_t</td></tr>
+<tr class="memdesc:a0f9734799fc19b94b0621c956ce5508d inherit pub_types_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for node ID. <br /></td></tr>
+<tr class="separator:a0f9734799fc19b94b0621c956ce5508d inherit pub_types_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5388bf7676b6e35a6e62c034e2993b5 inherit pub_types_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="ad5388bf7676b6e35a6e62c034e2993b5"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> = int32_t</td></tr>
+<tr class="memdesc:ad5388bf7676b6e35a6e62c034e2993b5 inherit pub_types_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tpyedef for edge weight. <br /></td></tr>
+<tr class="separator:ad5388bf7676b6e35a6e62c034e2993b5 inherit pub_types_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3892123fce03f805e54ce0076e6b68dc inherit pub_types_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a3892123fce03f805e54ce0076e6b68dc"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> = std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;</td></tr>
+<tr class="memdesc:a3892123fce03f805e54ce0076e6b68dc inherit pub_types_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for edge. <br /></td></tr>
+<tr class="separator:a3892123fce03f805e54ce0076e6b68dc inherit pub_types_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a85c21aed5db9c7d81cb6003841410371"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">add_edge</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_from, <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_to, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> weight=0)</td></tr>
+<tr class="memdesc:a85c21aed5db9c7d81cb6003841410371"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add directed edges to graph.  <a href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">More...</a><br /></td></tr>
+<tr class="separator:a85c21aed5db9c7d81cb6003841410371"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7844605760f22a2a60e27c23178497b3"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">serialize_to_dot</a> () const</td></tr>
+<tr class="memdesc:a7844605760f22a2a60e27c23178497b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize graph structure to dot format.  <a href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">More...</a><br /></td></tr>
+<tr class="separator:a7844605760f22a2a60e27c23178497b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:ab52b2707de415931f1990ee338b29eeb inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">get_adjacent_nodes</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node) const</td></tr>
+<tr class="memdesc:ab52b2707de415931f1990ee338b29eeb inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a list of adjacent nodes to a given node.  <a href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">More...</a><br /></td></tr>
+<tr class="separator:ab52b2707de415931f1990ee338b29eeb inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b51bca4b58c9922b375c983415ec0c8 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">get_node_ids</a> () const</td></tr>
+<tr class="memdesc:a1b51bca4b58c9922b375c983415ec0c8 inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">List all node IDs in the graph.  <a href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">More...</a><br /></td></tr>
+<tr class="separator:a1b51bca4b58c9922b375c983415ec0c8 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac96335c01273c0dd74d2628e7bf38794 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">get_edges</a> () const</td></tr>
+<tr class="memdesc:ac96335c01273c0dd74d2628e7bf38794 inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a list of all edges in the graph.  <a href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">More...</a><br /></td></tr>
+<tr class="separator:ac96335c01273c0dd74d2628e7bf38794 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9861d50dbee863befed15eb8daacff3d inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">set_node_label</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node, const std::string &amp;label)</td></tr>
+<tr class="memdesc:a9861d50dbee863befed15eb8daacff3d inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add string labels to a node ID.  <a href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">More...</a><br /></td></tr>
+<tr class="separator:a9861d50dbee863befed15eb8daacff3d inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47bd2f14a355fbbd801846b0af305389 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">get_node_label</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node) const</td></tr>
+<tr class="memdesc:a47bd2f14a355fbbd801846b0af305389 inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the label associated with a node.  <a href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">More...</a><br /></td></tr>
+<tr class="separator:a47bd2f14a355fbbd801846b0af305389 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_methods_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:a1df5a4be1fc2f71130436e9f718e85ac inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</td></tr>
+<tr class="memdesc:a1df5a4be1fc2f71130436e9f718e85ac inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if a directed edge exists in the grph.  <a href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">More...</a><br /></td></tr>
+<tr class="separator:a1df5a4be1fc2f71130436e9f718e85ac inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0043ec8f35f7491c06915c887d31ea77 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</td></tr>
+<tr class="memdesc:a0043ec8f35f7491c06915c887d31ea77 inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update the adjacent nodes based on edge information.  <a href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">More...</a><br /></td></tr>
+<tr class="separator:a0043ec8f35f7491c06915c887d31ea77 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95ef438f6035c2240bf277645ad27cb9 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a> (std::ostringstream &amp;dot_str) const</td></tr>
+<tr class="memdesc:a95ef438f6035c2240bf277645ad27cb9 inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize node labels to dot format.  <a href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">More...</a><br /></td></tr>
+<tr class="separator:a95ef438f6035c2240bf277645ad27cb9 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88dda0ee0cffa26a188a041593d2fcd5 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a> (std::ostringstream &amp;dot_str, const std::string &amp;node_separator) const</td></tr>
+<tr class="memdesc:a88dda0ee0cffa26a188a041593d2fcd5 inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize edges to dot format.  <a href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">More...</a><br /></td></tr>
+<tr class="separator:a88dda0ee0cffa26a188a041593d2fcd5 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:a8b53264154b5caed266385a007e33404 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a8b53264154b5caed266385a007e33404"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a></td></tr>
+<tr class="memdesc:a8b53264154b5caed266385a007e33404 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">List of adjacent nodes per node ID. <br /></td></tr>
+<tr class="separator:a8b53264154b5caed266385a007e33404 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4089c636086324cae1f2a2bde56c8b33 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a4089c636086324cae1f2a2bde56c8b33"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a>, <a class="el" href="structclaragenomics_1_1PairHash.html">PairHash</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a></td></tr>
+<tr class="memdesc:a4089c636086324cae1f2a2bde56c8b33 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">All edges in the graph. <br /></td></tr>
+<tr class="separator:a4089c636086324cae1f2a2bde56c8b33 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5da2769d7e5bebd1d74c4899e3aad2c5 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a5da2769d7e5bebd1d74c4899e3aad2c5"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a></td></tr>
+<tr class="memdesc:a5da2769d7e5bebd1d74c4899e3aad2c5 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Label per node. <br /></td></tr>
+<tr class="separator:a5da2769d7e5bebd1d74c4899e3aad2c5 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada271fc17a3a6e86f5dcc78c4caa729c inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="ada271fc17a3a6e86f5dcc78c4caa729c"></a>
+const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">empty_</a></td></tr>
+<tr class="memdesc:ada271fc17a3a6e86f5dcc78c4caa729c inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">An empty list representing no connectivity. <br /></td></tr>
+<tr class="separator:ada271fc17a3a6e86f5dcc78c4caa729c inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure.">DirectedGraph</a> Object representing a directed graph structure. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a85c21aed5db9c7d81cb6003841410371"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85c21aed5db9c7d81cb6003841410371">&#9670;&nbsp;</a></span>add_edge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claragenomics::DirectedGraph::add_edge </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&#160;</td>
+          <td class="paramname"><em>node_id_from</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&#160;</td>
+          <td class="paramname"><em>node_id_to</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a>&#160;</td>
+          <td class="paramname"><em>weight</em> = <code>0</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Add directed edges to graph. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">node_id_from</td><td>Source node ID </td></tr>
+    <tr><td class="paramname">node_id_to</td><td>Sink node ID </td></tr>
+    <tr><td class="paramname">weight</td><td>Edge weight </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a7844605760f22a2a60e27c23178497b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7844605760f22a2a60e27c23178497b3">&#9670;&nbsp;</a></span>serialize_to_dot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string claragenomics::DirectedGraph::serialize_to_dot </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Serialize graph structure to dot format. </p>
+<dl class="section return"><dt>Returns</dt><dd>A string encoding the graph in dot format </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>common/utils/include/claragenomics/utils/<a class="el" href="graph_8hpp_source.html">graph.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.map b/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.map
new file mode 100644
index 000000000..f0cfa4d3a
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="claragenomics::DirectedGraph" name="claragenomics::DirectedGraph">
+<area shape="rect" id="node1" title="DirectedGraph Object representing a directed graph structure." alt="" coords="5,80,204,107"/>
+<area shape="rect" id="node2" href="$classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="30,5,179,32"/>
+</map>
diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.md5 b/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.md5
new file mode 100644
index 000000000..f8c8b3245
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.md5
@@ -0,0 +1 @@
+75b00b7fb3baa399f98a7e6459588258
\ No newline at end of file
diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.png b/docs/cpp/classclaragenomics_1_1DirectedGraph__coll__graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..922f9e312e8b127dc830e91068e617baa0b59229
GIT binary patch
literal 4698
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
D<M3Qg

literal 0
HcmV?d00001

diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.map b/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.map
new file mode 100644
index 000000000..f0cfa4d3a
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="claragenomics::DirectedGraph" name="claragenomics::DirectedGraph">
+<area shape="rect" id="node1" title="DirectedGraph Object representing a directed graph structure." alt="" coords="5,80,204,107"/>
+<area shape="rect" id="node2" href="$classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="30,5,179,32"/>
+</map>
diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.md5 b/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.md5
new file mode 100644
index 000000000..f8c8b3245
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.md5
@@ -0,0 +1 @@
+75b00b7fb3baa399f98a7e6459588258
\ No newline at end of file
diff --git a/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.png b/docs/cpp/classclaragenomics_1_1DirectedGraph__inherit__graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..922f9e312e8b127dc830e91068e617baa0b59229
GIT binary patch
literal 4698
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
D<M3Qg

literal 0
HcmV?d00001

diff --git a/docs/cpp/classclaragenomics_1_1Graph-members.html b/docs/cpp/classclaragenomics_1_1Graph-members.html
new file mode 100644
index 000000000..89939512a
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1Graph-members.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1Graph.html">Graph</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">claragenomics::Graph Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a>(edge_t edge)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a>(std::ostringstream &amp;dot_str, const std::string &amp;node_separator) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">empty_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">get_adjacent_nodes</a>(node_id_t node) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">get_edges</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">get_node_ids</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">get_node_label</a>(node_id_t node) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a>(std::ostringstream &amp;dot_str) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">set_node_label</a>(node_id_t node, const std::string &amp;label)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a>(edge_t edge)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1Graph.html b/docs/cpp/classclaragenomics_1_1Graph.html
new file mode 100644
index 000000000..7f2ad7619
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1Graph.html
@@ -0,0 +1,495 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: claragenomics::Graph Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1Graph.html">Graph</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-attribs">Protected Attributes</a> &#124;
+<a href="classclaragenomics_1_1Graph-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">claragenomics::Graph Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Object representing a generic graph structure.  
+ <a href="classclaragenomics_1_1Graph.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="graph_8hpp_source.html">graph.hpp</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for claragenomics::Graph:</div>
+<div class="dyncontent">
+<div class="center"><img src="classclaragenomics_1_1Graph__inherit__graph.png" border="0" usemap="#claragenomics_1_1Graph_inherit__map" alt="Inheritance graph"/></div>
+<map name="claragenomics_1_1Graph_inherit__map" id="claragenomics_1_1Graph_inherit__map">
+<area shape="rect" title="Object representing a generic graph structure." alt="" coords="135,5,285,32"/>
+<area shape="rect" href="classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure." alt="" coords="5,87,204,114"/>
+<area shape="rect" href="classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="228,80,405,121"/>
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a0f9734799fc19b94b0621c956ce5508d"><td class="memItemLeft" align="right" valign="top"><a id="a0f9734799fc19b94b0621c956ce5508d"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> = int32_t</td></tr>
+<tr class="memdesc:a0f9734799fc19b94b0621c956ce5508d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for node ID. <br /></td></tr>
+<tr class="separator:a0f9734799fc19b94b0621c956ce5508d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5388bf7676b6e35a6e62c034e2993b5"><td class="memItemLeft" align="right" valign="top"><a id="ad5388bf7676b6e35a6e62c034e2993b5"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> = int32_t</td></tr>
+<tr class="memdesc:ad5388bf7676b6e35a6e62c034e2993b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tpyedef for edge weight. <br /></td></tr>
+<tr class="separator:ad5388bf7676b6e35a6e62c034e2993b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3892123fce03f805e54ce0076e6b68dc"><td class="memItemLeft" align="right" valign="top"><a id="a3892123fce03f805e54ce0076e6b68dc"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> = std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;</td></tr>
+<tr class="memdesc:a3892123fce03f805e54ce0076e6b68dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for edge. <br /></td></tr>
+<tr class="separator:a3892123fce03f805e54ce0076e6b68dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab52b2707de415931f1990ee338b29eeb"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">get_adjacent_nodes</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node) const</td></tr>
+<tr class="memdesc:ab52b2707de415931f1990ee338b29eeb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a list of adjacent nodes to a given node.  <a href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">More...</a><br /></td></tr>
+<tr class="separator:ab52b2707de415931f1990ee338b29eeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b51bca4b58c9922b375c983415ec0c8"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">get_node_ids</a> () const</td></tr>
+<tr class="memdesc:a1b51bca4b58c9922b375c983415ec0c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">List all node IDs in the graph.  <a href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">More...</a><br /></td></tr>
+<tr class="separator:a1b51bca4b58c9922b375c983415ec0c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac96335c01273c0dd74d2628e7bf38794"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">get_edges</a> () const</td></tr>
+<tr class="memdesc:ac96335c01273c0dd74d2628e7bf38794"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a list of all edges in the graph.  <a href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">More...</a><br /></td></tr>
+<tr class="separator:ac96335c01273c0dd74d2628e7bf38794"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9861d50dbee863befed15eb8daacff3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">set_node_label</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node, const std::string &amp;label)</td></tr>
+<tr class="memdesc:a9861d50dbee863befed15eb8daacff3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add string labels to a node ID.  <a href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">More...</a><br /></td></tr>
+<tr class="separator:a9861d50dbee863befed15eb8daacff3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47bd2f14a355fbbd801846b0af305389"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">get_node_label</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node) const</td></tr>
+<tr class="memdesc:a47bd2f14a355fbbd801846b0af305389"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the label associated with a node.  <a href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">More...</a><br /></td></tr>
+<tr class="separator:a47bd2f14a355fbbd801846b0af305389"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a1df5a4be1fc2f71130436e9f718e85ac"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</td></tr>
+<tr class="memdesc:a1df5a4be1fc2f71130436e9f718e85ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if a directed edge exists in the grph.  <a href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">More...</a><br /></td></tr>
+<tr class="separator:a1df5a4be1fc2f71130436e9f718e85ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0043ec8f35f7491c06915c887d31ea77"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</td></tr>
+<tr class="memdesc:a0043ec8f35f7491c06915c887d31ea77"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update the adjacent nodes based on edge information.  <a href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">More...</a><br /></td></tr>
+<tr class="separator:a0043ec8f35f7491c06915c887d31ea77"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95ef438f6035c2240bf277645ad27cb9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a> (std::ostringstream &amp;dot_str) const</td></tr>
+<tr class="memdesc:a95ef438f6035c2240bf277645ad27cb9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize node labels to dot format.  <a href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">More...</a><br /></td></tr>
+<tr class="separator:a95ef438f6035c2240bf277645ad27cb9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88dda0ee0cffa26a188a041593d2fcd5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a> (std::ostringstream &amp;dot_str, const std::string &amp;node_separator) const</td></tr>
+<tr class="memdesc:a88dda0ee0cffa26a188a041593d2fcd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize edges to dot format.  <a href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">More...</a><br /></td></tr>
+<tr class="separator:a88dda0ee0cffa26a188a041593d2fcd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:a8b53264154b5caed266385a007e33404"><td class="memItemLeft" align="right" valign="top"><a id="a8b53264154b5caed266385a007e33404"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a></td></tr>
+<tr class="memdesc:a8b53264154b5caed266385a007e33404"><td class="mdescLeft">&#160;</td><td class="mdescRight">List of adjacent nodes per node ID. <br /></td></tr>
+<tr class="separator:a8b53264154b5caed266385a007e33404"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4089c636086324cae1f2a2bde56c8b33"><td class="memItemLeft" align="right" valign="top"><a id="a4089c636086324cae1f2a2bde56c8b33"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a>, <a class="el" href="structclaragenomics_1_1PairHash.html">PairHash</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a></td></tr>
+<tr class="memdesc:a4089c636086324cae1f2a2bde56c8b33"><td class="mdescLeft">&#160;</td><td class="mdescRight">All edges in the graph. <br /></td></tr>
+<tr class="separator:a4089c636086324cae1f2a2bde56c8b33"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5da2769d7e5bebd1d74c4899e3aad2c5"><td class="memItemLeft" align="right" valign="top"><a id="a5da2769d7e5bebd1d74c4899e3aad2c5"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a></td></tr>
+<tr class="memdesc:a5da2769d7e5bebd1d74c4899e3aad2c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Label per node. <br /></td></tr>
+<tr class="separator:a5da2769d7e5bebd1d74c4899e3aad2c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada271fc17a3a6e86f5dcc78c4caa729c"><td class="memItemLeft" align="right" valign="top"><a id="ada271fc17a3a6e86f5dcc78c4caa729c"></a>
+const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">empty_</a></td></tr>
+<tr class="memdesc:ada271fc17a3a6e86f5dcc78c4caa729c"><td class="mdescLeft">&#160;</td><td class="mdescRight">An empty list representing no connectivity. <br /></td></tr>
+<tr class="separator:ada271fc17a3a6e86f5dcc78c4caa729c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Object representing a generic graph structure. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a1df5a4be1fc2f71130436e9f718e85ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1df5a4be1fc2f71130436e9f718e85ac">&#9670;&nbsp;</a></span>directed_edge_exists()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool claragenomics::Graph::directed_edge_exists </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>&#160;</td>
+          <td class="paramname"><em>edge</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check if a directed edge exists in the grph. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">edge</td><td>A directed edge </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Boolean result of check </dd></dl>
+
+</div>
+</div>
+<a id="a88dda0ee0cffa26a188a041593d2fcd5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a88dda0ee0cffa26a188a041593d2fcd5">&#9670;&nbsp;</a></span>edges_to_dot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claragenomics::Graph::edges_to_dot </td>
+          <td>(</td>
+          <td class="paramtype">std::ostringstream &amp;&#160;</td>
+          <td class="paramname"><em>dot_str</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>node_separator</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Serialize edges to dot format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dot_str</td><td>Output string stream to serialize labels to </td></tr>
+    <tr><td class="paramname">node_separator</td><td>DOT delimiter for edge description </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ab52b2707de415931f1990ee338b29eeb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab52b2707de415931f1990ee338b29eeb">&#9670;&nbsp;</a></span>get_adjacent_nodes()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::vector&lt;<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&gt;&amp; claragenomics::Graph::get_adjacent_nodes </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&#160;</td>
+          <td class="paramname"><em>node</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a list of adjacent nodes to a given node. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">node</td><td>Node for which adjacent nodes are requested </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Vector of adjacent node IDs </dd></dl>
+
+</div>
+</div>
+<a id="ac96335c01273c0dd74d2628e7bf38794"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac96335c01273c0dd74d2628e7bf38794">&#9670;&nbsp;</a></span>get_edges()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::vector&lt;std::pair&lt;<a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a>&gt; &gt; claragenomics::Graph::get_edges </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get a list of all edges in the graph. </p>
+<dl class="section return"><dt>Returns</dt><dd>A vector of edges </dd></dl>
+
+</div>
+</div>
+<a id="a1b51bca4b58c9922b375c983415ec0c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b51bca4b58c9922b375c983415ec0c8">&#9670;&nbsp;</a></span>get_node_ids()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">const std::vector&lt;<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&gt; claragenomics::Graph::get_node_ids </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>List all node IDs in the graph. </p>
+<dl class="section return"><dt>Returns</dt><dd>A vector of node IDs </dd></dl>
+
+</div>
+</div>
+<a id="a47bd2f14a355fbbd801846b0af305389"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47bd2f14a355fbbd801846b0af305389">&#9670;&nbsp;</a></span>get_node_label()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string claragenomics::Graph::get_node_label </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&#160;</td>
+          <td class="paramname"><em>node</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the label associated with a node. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">node</td><td>node ID for label query </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>String label for associated node. Returns empty string if </dd></dl>
+
+</div>
+</div>
+<a id="a95ef438f6035c2240bf277645ad27cb9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a95ef438f6035c2240bf277645ad27cb9">&#9670;&nbsp;</a></span>node_labels_to_dot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claragenomics::Graph::node_labels_to_dot </td>
+          <td>(</td>
+          <td class="paramtype">std::ostringstream &amp;&#160;</td>
+          <td class="paramname"><em>dot_str</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Serialize node labels to dot format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dot_str</td><td>Output string stream to serialize labels to </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a9861d50dbee863befed15eb8daacff3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9861d50dbee863befed15eb8daacff3d">&#9670;&nbsp;</a></span>set_node_label()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claragenomics::Graph::set_node_label </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&#160;</td>
+          <td class="paramname"><em>node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>label</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Add string labels to a node ID. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">node</td><td>ID of node </td></tr>
+    <tr><td class="paramname">label</td><td>Label to attach to that node ID </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a0043ec8f35f7491c06915c887d31ea77"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0043ec8f35f7491c06915c887d31ea77">&#9670;&nbsp;</a></span>update_adject_nodes()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claragenomics::Graph::update_adject_nodes </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>&#160;</td>
+          <td class="paramname"><em>edge</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Update the adjacent nodes based on edge information. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">edge</td><td>A directed edge </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>common/utils/include/claragenomics/utils/<a class="el" href="graph_8hpp_source.html">graph.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.map b/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.map
new file mode 100644
index 000000000..a982617b9
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.map
@@ -0,0 +1,5 @@
+<map id="claragenomics::Graph" name="claragenomics::Graph">
+<area shape="rect" id="node1" title="Object representing a generic graph structure." alt="" coords="135,5,285,32"/>
+<area shape="rect" id="node2" href="$classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure." alt="" coords="5,87,204,114"/>
+<area shape="rect" id="node3" href="$classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="228,80,405,121"/>
+</map>
diff --git a/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.md5 b/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.md5
new file mode 100644
index 000000000..161328256
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.md5
@@ -0,0 +1 @@
+759ed00b884dfe4b2aa77767bf2b7b33
\ No newline at end of file
diff --git a/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.png b/docs/cpp/classclaragenomics_1_1Graph__inherit__graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f33aeacec83a955fdebc764b43ce2c03e5c5c37
GIT binary patch
literal 8581
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph-members.html b/docs/cpp/classclaragenomics_1_1UndirectedGraph-members.html
new file mode 100644
index 000000000..72c61f567
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1UndirectedGraph-members.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">UndirectedGraph</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">claragenomics::UndirectedGraph Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classclaragenomics_1_1UndirectedGraph.html">claragenomics::UndirectedGraph</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">add_edge</a>(node_id_t node_id_from, node_id_t node_id_to, edge_weight_t weight=0)</td><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">claragenomics::UndirectedGraph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a>(edge_t edge)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">claragenomics::UndirectedGraph</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">claragenomics::UndirectedGraph</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a>(std::ostringstream &amp;dot_str, const std::string &amp;node_separator) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">empty_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">get_adjacent_nodes</a>(node_id_t node) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">get_edges</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">get_node_ids</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">get_node_label</a>(node_id_t node) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> typedef</td><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">claragenomics::UndirectedGraph</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a></td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a>(std::ostringstream &amp;dot_str) const</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">serialize_to_dot</a>() const</td><td class="entry"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">claragenomics::UndirectedGraph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">set_node_label</a>(node_id_t node, const std::string &amp;label)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a>(edge_t edge)</td><td class="entry"><a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph.html b/docs/cpp/classclaragenomics_1_1UndirectedGraph.html
new file mode 100644
index 000000000..c7432833d
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1UndirectedGraph.html
@@ -0,0 +1,281 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: claragenomics::UndirectedGraph Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">UndirectedGraph</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classclaragenomics_1_1UndirectedGraph-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">claragenomics::UndirectedGraph Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a class="el" href="classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure.">UndirectedGraph</a> Object representing an undirected graph structure.  
+ <a href="classclaragenomics_1_1UndirectedGraph.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="graph_8hpp_source.html">graph.hpp</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for claragenomics::UndirectedGraph:</div>
+<div class="dyncontent">
+<div class="center"><img src="classclaragenomics_1_1UndirectedGraph__inherit__graph.png" border="0" usemap="#claragenomics_1_1UndirectedGraph_inherit__map" alt="Inheritance graph"/></div>
+<map name="claragenomics_1_1UndirectedGraph_inherit__map" id="claragenomics_1_1UndirectedGraph_inherit__map">
+<area shape="rect" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="5,80,183,121"/>
+<area shape="rect" href="classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="19,5,169,32"/>
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<div class="dynheader">
+Collaboration diagram for claragenomics::UndirectedGraph:</div>
+<div class="dyncontent">
+<div class="center"><img src="classclaragenomics_1_1UndirectedGraph__coll__graph.png" border="0" usemap="#claragenomics_1_1UndirectedGraph_coll__map" alt="Collaboration graph"/></div>
+<map name="claragenomics_1_1UndirectedGraph_coll__map" id="claragenomics_1_1UndirectedGraph_coll__map">
+<area shape="rect" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="5,80,183,121"/>
+<area shape="rect" href="classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="19,5,169,32"/>
+</map>
+<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a0f9734799fc19b94b0621c956ce5508d"><td class="memItemLeft" align="right" valign="top"><a id="a0f9734799fc19b94b0621c956ce5508d"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> = int32_t</td></tr>
+<tr class="memdesc:a0f9734799fc19b94b0621c956ce5508d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for node ID. <br /></td></tr>
+<tr class="separator:a0f9734799fc19b94b0621c956ce5508d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5388bf7676b6e35a6e62c034e2993b5"><td class="memItemLeft" align="right" valign="top"><a id="ad5388bf7676b6e35a6e62c034e2993b5"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> = int32_t</td></tr>
+<tr class="memdesc:ad5388bf7676b6e35a6e62c034e2993b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tpyedef for edge weight. <br /></td></tr>
+<tr class="separator:ad5388bf7676b6e35a6e62c034e2993b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3892123fce03f805e54ce0076e6b68dc"><td class="memItemLeft" align="right" valign="top"><a id="a3892123fce03f805e54ce0076e6b68dc"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> = std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;</td></tr>
+<tr class="memdesc:a3892123fce03f805e54ce0076e6b68dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for edge. <br /></td></tr>
+<tr class="separator:a3892123fce03f805e54ce0076e6b68dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_types_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:a0f9734799fc19b94b0621c956ce5508d inherit pub_types_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a0f9734799fc19b94b0621c956ce5508d"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> = int32_t</td></tr>
+<tr class="memdesc:a0f9734799fc19b94b0621c956ce5508d inherit pub_types_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for node ID. <br /></td></tr>
+<tr class="separator:a0f9734799fc19b94b0621c956ce5508d inherit pub_types_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5388bf7676b6e35a6e62c034e2993b5 inherit pub_types_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="ad5388bf7676b6e35a6e62c034e2993b5"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> = int32_t</td></tr>
+<tr class="memdesc:ad5388bf7676b6e35a6e62c034e2993b5 inherit pub_types_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tpyedef for edge weight. <br /></td></tr>
+<tr class="separator:ad5388bf7676b6e35a6e62c034e2993b5 inherit pub_types_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3892123fce03f805e54ce0076e6b68dc inherit pub_types_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a3892123fce03f805e54ce0076e6b68dc"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> = std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;</td></tr>
+<tr class="memdesc:a3892123fce03f805e54ce0076e6b68dc inherit pub_types_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typedef for edge. <br /></td></tr>
+<tr class="separator:a3892123fce03f805e54ce0076e6b68dc inherit pub_types_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a47c5ee6b9616ab24222526f4dcd1fb04"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">add_edge</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_from, <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_to, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> weight=0)</td></tr>
+<tr class="memdesc:a47c5ee6b9616ab24222526f4dcd1fb04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add undirected edges to graph.  <a href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">More...</a><br /></td></tr>
+<tr class="separator:a47c5ee6b9616ab24222526f4dcd1fb04"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64b119c6ca6049b081ddde7db3c87e3f"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">serialize_to_dot</a> () const</td></tr>
+<tr class="memdesc:a64b119c6ca6049b081ddde7db3c87e3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize graph structure to dot format.  <a href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">More...</a><br /></td></tr>
+<tr class="separator:a64b119c6ca6049b081ddde7db3c87e3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:ab52b2707de415931f1990ee338b29eeb inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">get_adjacent_nodes</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node) const</td></tr>
+<tr class="memdesc:ab52b2707de415931f1990ee338b29eeb inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a list of adjacent nodes to a given node.  <a href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">More...</a><br /></td></tr>
+<tr class="separator:ab52b2707de415931f1990ee338b29eeb inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b51bca4b58c9922b375c983415ec0c8 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">get_node_ids</a> () const</td></tr>
+<tr class="memdesc:a1b51bca4b58c9922b375c983415ec0c8 inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">List all node IDs in the graph.  <a href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">More...</a><br /></td></tr>
+<tr class="separator:a1b51bca4b58c9922b375c983415ec0c8 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac96335c01273c0dd74d2628e7bf38794 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::pair&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">get_edges</a> () const</td></tr>
+<tr class="memdesc:ac96335c01273c0dd74d2628e7bf38794 inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a list of all edges in the graph.  <a href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">More...</a><br /></td></tr>
+<tr class="separator:ac96335c01273c0dd74d2628e7bf38794 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9861d50dbee863befed15eb8daacff3d inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">set_node_label</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node, const std::string &amp;label)</td></tr>
+<tr class="memdesc:a9861d50dbee863befed15eb8daacff3d inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add string labels to a node ID.  <a href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">More...</a><br /></td></tr>
+<tr class="separator:a9861d50dbee863befed15eb8daacff3d inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47bd2f14a355fbbd801846b0af305389 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">get_node_label</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node) const</td></tr>
+<tr class="memdesc:a47bd2f14a355fbbd801846b0af305389 inherit pub_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the label associated with a node.  <a href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">More...</a><br /></td></tr>
+<tr class="separator:a47bd2f14a355fbbd801846b0af305389 inherit pub_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_methods_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:a1df5a4be1fc2f71130436e9f718e85ac inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</td></tr>
+<tr class="memdesc:a1df5a4be1fc2f71130436e9f718e85ac inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if a directed edge exists in the grph.  <a href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">More...</a><br /></td></tr>
+<tr class="separator:a1df5a4be1fc2f71130436e9f718e85ac inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0043ec8f35f7491c06915c887d31ea77 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a> (<a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</td></tr>
+<tr class="memdesc:a0043ec8f35f7491c06915c887d31ea77 inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update the adjacent nodes based on edge information.  <a href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">More...</a><br /></td></tr>
+<tr class="separator:a0043ec8f35f7491c06915c887d31ea77 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95ef438f6035c2240bf277645ad27cb9 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a> (std::ostringstream &amp;dot_str) const</td></tr>
+<tr class="memdesc:a95ef438f6035c2240bf277645ad27cb9 inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize node labels to dot format.  <a href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">More...</a><br /></td></tr>
+<tr class="separator:a95ef438f6035c2240bf277645ad27cb9 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88dda0ee0cffa26a188a041593d2fcd5 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a> (std::ostringstream &amp;dot_str, const std::string &amp;node_separator) const</td></tr>
+<tr class="memdesc:a88dda0ee0cffa26a188a041593d2fcd5 inherit pro_methods_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialize edges to dot format.  <a href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">More...</a><br /></td></tr>
+<tr class="separator:a88dda0ee0cffa26a188a041593d2fcd5 inherit pro_methods_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_classclaragenomics_1_1Graph"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classclaragenomics_1_1Graph')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></td></tr>
+<tr class="memitem:a8b53264154b5caed266385a007e33404 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a8b53264154b5caed266385a007e33404"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a></td></tr>
+<tr class="memdesc:a8b53264154b5caed266385a007e33404 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">List of adjacent nodes per node ID. <br /></td></tr>
+<tr class="separator:a8b53264154b5caed266385a007e33404 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4089c636086324cae1f2a2bde56c8b33 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a4089c636086324cae1f2a2bde56c8b33"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>, <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a>, <a class="el" href="structclaragenomics_1_1PairHash.html">PairHash</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a></td></tr>
+<tr class="memdesc:a4089c636086324cae1f2a2bde56c8b33 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">All edges in the graph. <br /></td></tr>
+<tr class="separator:a4089c636086324cae1f2a2bde56c8b33 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5da2769d7e5bebd1d74c4899e3aad2c5 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="a5da2769d7e5bebd1d74c4899e3aad2c5"></a>
+std::unordered_map&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>, std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a></td></tr>
+<tr class="memdesc:a5da2769d7e5bebd1d74c4899e3aad2c5 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">Label per node. <br /></td></tr>
+<tr class="separator:a5da2769d7e5bebd1d74c4899e3aad2c5 inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada271fc17a3a6e86f5dcc78c4caa729c inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memItemLeft" align="right" valign="top"><a id="ada271fc17a3a6e86f5dcc78c4caa729c"></a>
+const std::vector&lt; <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">empty_</a></td></tr>
+<tr class="memdesc:ada271fc17a3a6e86f5dcc78c4caa729c inherit pro_attribs_classclaragenomics_1_1Graph"><td class="mdescLeft">&#160;</td><td class="mdescRight">An empty list representing no connectivity. <br /></td></tr>
+<tr class="separator:ada271fc17a3a6e86f5dcc78c4caa729c inherit pro_attribs_classclaragenomics_1_1Graph"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure.">UndirectedGraph</a> Object representing an undirected graph structure. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a47c5ee6b9616ab24222526f4dcd1fb04"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47c5ee6b9616ab24222526f4dcd1fb04">&#9670;&nbsp;</a></span>add_edge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void claragenomics::UndirectedGraph::add_edge </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&#160;</td>
+          <td class="paramname"><em>node_id_from</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a>&#160;</td>
+          <td class="paramname"><em>node_id_to</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a>&#160;</td>
+          <td class="paramname"><em>weight</em> = <code>0</code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Add undirected edges to graph. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">node_id_from</td><td>Source node ID </td></tr>
+    <tr><td class="paramname">node_id_to</td><td>Sink node ID </td></tr>
+    <tr><td class="paramname">weight</td><td>Edge weight </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="a64b119c6ca6049b081ddde7db3c87e3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64b119c6ca6049b081ddde7db3c87e3f">&#9670;&nbsp;</a></span>serialize_to_dot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">std::string claragenomics::UndirectedGraph::serialize_to_dot </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Serialize graph structure to dot format. </p>
+<dl class="section return"><dt>Returns</dt><dd>A string encoding the graph in dot format </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>common/utils/include/claragenomics/utils/<a class="el" href="graph_8hpp_source.html">graph.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.map b/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.map
new file mode 100644
index 000000000..f27955edd
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.map
@@ -0,0 +1,4 @@
+<map id="claragenomics::UndirectedGraph" name="claragenomics::UndirectedGraph">
+<area shape="rect" id="node1" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="5,80,183,121"/>
+<area shape="rect" id="node2" href="$classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="19,5,169,32"/>
+</map>
diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.md5 b/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.md5
new file mode 100644
index 000000000..fd5fe8789
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.md5
@@ -0,0 +1 @@
+231e338a015fafc64ac6e3abbe9559e0
\ No newline at end of file
diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.png b/docs/cpp/classclaragenomics_1_1UndirectedGraph__coll__graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..59685bd65f059088fe66a3117adb60f71c86c339
GIT binary patch
literal 5287
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.map b/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.map
new file mode 100644
index 000000000..f27955edd
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.map
@@ -0,0 +1,4 @@
+<map id="claragenomics::UndirectedGraph" name="claragenomics::UndirectedGraph">
+<area shape="rect" id="node1" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="5,80,183,121"/>
+<area shape="rect" id="node2" href="$classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="19,5,169,32"/>
+</map>
diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.md5 b/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.md5
new file mode 100644
index 000000000..fd5fe8789
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.md5
@@ -0,0 +1 @@
+231e338a015fafc64ac6e3abbe9559e0
\ No newline at end of file
diff --git a/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.png b/docs/cpp/classclaragenomics_1_1UndirectedGraph__inherit__graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..59685bd65f059088fe66a3117adb60f71c86c339
GIT binary patch
literal 5287
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner-members.html b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner-members.html
index adcb158df..084523f35 100644
--- a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner-members.html
+++ b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner.html b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner.html
index 9776b2059..7e015e945 100644
--- a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner.html
+++ b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Aligner.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment-members.html b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment-members.html
index 415df54d1..9c6b2c9ec 100644
--- a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment-members.html
+++ b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -80,6 +80,7 @@
   <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780">get_query_sequence</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">claragenomics::cudaaligner::Alignment</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78">get_status</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">claragenomics::cudaaligner::Alignment</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4a61cdee74c32930f49cb878fc17db57">get_target_sequence</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">claragenomics::cudaaligner::Alignment</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8">~Alignment</a>()=default</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">claragenomics::cudaaligner::Alignment</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment.html b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment.html
index 19ada95e8..f10e53258 100644
--- a/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment.html
+++ b/docs/cpp/classclaragenomics_1_1cudaaligner_1_1Alignment.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -81,6 +81,10 @@
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
+<tr class="memitem:a6479df67f21d643782abfed873218ea8"><td class="memItemLeft" align="right" valign="top"><a id="a6479df67f21d643782abfed873218ea8"></a>
+virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8">~Alignment</a> ()=default</td></tr>
+<tr class="memdesc:a6479df67f21d643782abfed873218ea8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
+<tr class="separator:a6479df67f21d643782abfed873218ea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab29dceafccd3cb0a2e87023c5d48a780"><td class="memItemLeft" align="right" valign="top"><a id="ab29dceafccd3cb0a2e87023c5d48a780"></a>
 virtual const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780">get_query_sequence</a> () const =0</td></tr>
 <tr class="memdesc:ab29dceafccd3cb0a2e87023c5d48a780"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns query sequence. <br /></td></tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index-members.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index-members.html
index 750db639c..250699f7b 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index-members.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -73,19 +73,17 @@
 
 <p>This is the complete list of members for <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afc23f3e71c65dc9ed5a9e49cf26ba645">create_index</a>(const std::vector&lt; io::FastaParser * &gt; &amp;parsers, const std::uint64_t kmer_size, const std::uint64_t window_size, const std::vector&lt; std::pair&lt; std::uint64_t, std::uint64_t &gt;&gt; &amp;ranges)</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a">create_index</a>()</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b">directions_of_reads</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf">create_index</a>(const io::FastaParser &amp;parser, const read_id_t first_read_id, const read_id_t past_the_last_read_id, const std::uint64_t kmer_size, const std::uint64_t window_size, const bool hash_representations=true)</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd">directions_of_reads</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff">first_occurrence_of_representations</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">maximum_kmer_size</a>()</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152">maximum_representation</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824">minimum_representation</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937">number_of_reads</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306">positions_in_reads</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277">reached_end_of_input</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24">read_id_and_representation_to_sketch_elements</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e">read_id_to_read_length</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0">read_id_to_read_name</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5">read_ids</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183">positions_in_reads</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4">read_id_to_read_length</a>(const read_id_t read_id) const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd">read_id_to_read_name</a>(const read_id_t read_id) const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401">read_ids</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80">representations</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a">unique_representations</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">~Index</a>()=default</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index.html
index 5bb11076e..29c69d972 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Index.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -67,7 +67,6 @@
 </div><!-- top -->
 <div class="header">
   <div class="summary">
-<a href="#nested-classes">Classes</a> &#124;
 <a href="#pub-methods">Public Member Functions</a> &#124;
 <a href="#pub-static-methods">Static Public Member Functions</a> &#124;
 <a href="classclaragenomics_1_1cudamapper_1_1Index-members.html">List of all members</a>  </div>
@@ -81,66 +80,54 @@
 
 <p><code>#include &lt;<a class="el" href="index_8hpp_source.html">index.hpp</a>&gt;</code></p>
 <table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Classes</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html">RepresentationToSketchElements</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html" title="RepresentationToSketchElements - representation, pointer to section of data arrays with sketch elemen...">RepresentationToSketchElements</a> - representation, pointer to section of data arrays with sketch elements with that representation and a given read_id, and a pointer to section of data arrays with sketch elements with that representation and all read_ids.  <a href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
 <tr class="memitem:afcaccc9f9526d9c66280eca17ff3a4ac"><td class="memItemLeft" align="right" valign="top"><a id="afcaccc9f9526d9c66280eca17ff3a4ac"></a>
 virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">~Index</a> ()=default</td></tr>
-<tr class="memdesc:afcaccc9f9526d9c66280eca17ff3a4ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor for <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a>. <br /></td></tr>
+<tr class="memdesc:afcaccc9f9526d9c66280eca17ff3a4ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
 <tr class="separator:afcaccc9f9526d9c66280eca17ff3a4ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5c75f11d1683e4f863f14a4088a36306"><td class="memItemLeft" align="right" valign="top">virtual const std::vector&lt; position_in_read_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306">positions_in_reads</a> () const =0</td></tr>
-<tr class="memdesc:a5c75f11d1683e4f863f14a4088a36306"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array of starting positions of sketch elements in their reads  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306">More...</a><br /></td></tr>
-<tr class="separator:a5c75f11d1683e4f863f14a4088a36306"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aac33d8d2aa72bb227326a35f5b452de5"><td class="memItemLeft" align="right" valign="top">virtual const std::vector&lt; read_id_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5">read_ids</a> () const =0</td></tr>
-<tr class="memdesc:aac33d8d2aa72bb227326a35f5b452de5"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array of reads ids for sketch elements  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5">More...</a><br /></td></tr>
-<tr class="separator:aac33d8d2aa72bb227326a35f5b452de5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a407a2466e8740a0f78a3ce876b87352b"><td class="memItemLeft" align="right" valign="top">virtual const std::vector&lt; <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a">SketchElement::DirectionOfRepresentation</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b">directions_of_reads</a> () const =0</td></tr>
-<tr class="memdesc:a407a2466e8740a0f78a3ce876b87352b"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array of directions in which sketch elements were read  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b">More...</a><br /></td></tr>
-<tr class="separator:a407a2466e8740a0f78a3ce876b87352b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a876d5e82f9fc36f481854f7d84e5fc80"><td class="memItemLeft" align="right" valign="top">virtual const thrust::device_vector&lt; representation_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80">representations</a> () const =0</td></tr>
+<tr class="memdesc:a876d5e82f9fc36f481854f7d84e5fc80"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array of representations of sketch elements  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80">More...</a><br /></td></tr>
+<tr class="separator:a876d5e82f9fc36f481854f7d84e5fc80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cfe03b47850170ec64d61d2dbef0401"><td class="memItemLeft" align="right" valign="top">virtual const thrust::device_vector&lt; read_id_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401">read_ids</a> () const =0</td></tr>
+<tr class="memdesc:a5cfe03b47850170ec64d61d2dbef0401"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array of reads ids for sketch elements  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401">More...</a><br /></td></tr>
+<tr class="separator:a5cfe03b47850170ec64d61d2dbef0401"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66e5d024befc410221610f454eff7183"><td class="memItemLeft" align="right" valign="top">virtual const thrust::device_vector&lt; position_in_read_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183">positions_in_reads</a> () const =0</td></tr>
+<tr class="memdesc:a66e5d024befc410221610f454eff7183"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array of starting positions of sketch elements in their reads  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183">More...</a><br /></td></tr>
+<tr class="separator:a66e5d024befc410221610f454eff7183"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5824f352fd89f69c9acc14430a3aa6cd"><td class="memItemLeft" align="right" valign="top">virtual const thrust::device_vector&lt; <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a">SketchElement::DirectionOfRepresentation</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd">directions_of_reads</a> () const =0</td></tr>
+<tr class="memdesc:a5824f352fd89f69c9acc14430a3aa6cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array of directions in which sketch elements were read  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd">More...</a><br /></td></tr>
+<tr class="separator:a5824f352fd89f69c9acc14430a3aa6cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac59d309eeb226592a96622fec2b307fd"><td class="memItemLeft" align="right" valign="top">virtual const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd">read_id_to_read_name</a> (const read_id_t read_id) const =0</td></tr>
+<tr class="memdesc:ac59d309eeb226592a96622fec2b307fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns read name of read with the given read_id  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd">More...</a><br /></td></tr>
+<tr class="separator:ac59d309eeb226592a96622fec2b307fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af44999c8852d5915d585c55a1a95c74a"><td class="memItemLeft" align="right" valign="top">virtual const thrust::device_vector&lt; representation_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a">unique_representations</a> () const =0</td></tr>
+<tr class="memdesc:af44999c8852d5915d585c55a1a95c74a"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns an array where each representation is recorder only once, sorted by representation  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a">More...</a><br /></td></tr>
+<tr class="separator:af44999c8852d5915d585c55a1a95c74a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af4f69a9003fedb9ca11665d5faa43bff"><td class="memItemLeft" align="right" valign="top">virtual const thrust::device_vector&lt; std::uint32_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff">first_occurrence_of_representations</a> () const =0</td></tr>
+<tr class="memdesc:af4f69a9003fedb9ca11665d5faa43bff"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns first occurrence of corresponding representation from <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a" title="returns an array where each representation is recorder only once, sorted by representation">unique_representations()</a> in data arrays  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff">More...</a><br /></td></tr>
+<tr class="separator:af4f69a9003fedb9ca11665d5faa43bff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59186cdd6dbfd21baeb07e80bd4354d4"><td class="memItemLeft" align="right" valign="top">virtual const std::uint32_t &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4">read_id_to_read_length</a> (const read_id_t read_id) const =0</td></tr>
+<tr class="memdesc:a59186cdd6dbfd21baeb07e80bd4354d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns read length for the read with the gived read_id  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4">More...</a><br /></td></tr>
+<tr class="separator:a59186cdd6dbfd21baeb07e80bd4354d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ac9e936ae3809c82894a22a5ddb6bb937"><td class="memItemLeft" align="right" valign="top">virtual std::uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937">number_of_reads</a> () const =0</td></tr>
 <tr class="memdesc:ac9e936ae3809c82894a22a5ddb6bb937"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns number of reads in input data  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937">More...</a><br /></td></tr>
 <tr class="separator:ac9e936ae3809c82894a22a5ddb6bb937"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aec3176ac2d5e425b25dec14f411cbfe0"><td class="memItemLeft" align="right" valign="top">virtual const std::vector&lt; std::string &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0">read_id_to_read_name</a> () const =0</td></tr>
-<tr class="memdesc:aec3176ac2d5e425b25dec14f411cbfe0"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns mapping of internal read id that goes from 0 to number_of_reads-1 to actual read name from the input  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0">More...</a><br /></td></tr>
-<tr class="separator:aec3176ac2d5e425b25dec14f411cbfe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af03421436f827e88316c74b0b3af200e"><td class="memItemLeft" align="right" valign="top">virtual const std::vector&lt; std::uint32_t &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e">read_id_to_read_length</a> () const =0</td></tr>
-<tr class="memdesc:af03421436f827e88316c74b0b3af200e"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns mapping of internal read id that goes from 0 to read lengths for that read  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e">More...</a><br /></td></tr>
-<tr class="separator:af03421436f827e88316c74b0b3af200e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac5036778efd3c83f5bf048174a8ab824"><td class="memItemLeft" align="right" valign="top">virtual std::uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824">minimum_representation</a> () const =0</td></tr>
-<tr class="memdesc:ac5036778efd3c83f5bf048174a8ab824"><td class="mdescLeft">&#160;</td><td class="mdescRight">minimum possible representation  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824">More...</a><br /></td></tr>
-<tr class="separator:ac5036778efd3c83f5bf048174a8ab824"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a69fd1882260a7c55a45fe5e2a092b152"><td class="memItemLeft" align="right" valign="top">virtual std::uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152">maximum_representation</a> () const =0</td></tr>
-<tr class="memdesc:a69fd1882260a7c55a45fe5e2a092b152"><td class="mdescLeft">&#160;</td><td class="mdescRight">maximum possible representation  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152">More...</a><br /></td></tr>
-<tr class="separator:a69fd1882260a7c55a45fe5e2a092b152"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af8ad540ff0a2a244a35ae846ec745c24"><td class="memItemLeft" align="right" valign="top">virtual const std::vector&lt; std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html">RepresentationToSketchElements</a> &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24">read_id_and_representation_to_sketch_elements</a> () const =0</td></tr>
-<tr class="memdesc:af8ad540ff0a2a244a35ae846ec745c24"><td class="mdescLeft">&#160;</td><td class="mdescRight">For each read_id (outer vector) returns a vector in which each element contains a representation from that read, pointer to section of data arrays with sketch elements with that representation and that read_id, and pointer to section of data arrays with skecth elements with that representation and all read_ids. There elements are sorted by representation in increasing order.  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24">More...</a><br /></td></tr>
-<tr class="separator:af8ad540ff0a2a244a35ae846ec745c24"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4e5b3cf1c41146635ce9d51bbdfe2277"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277">reached_end_of_input</a> () const =0</td></tr>
-<tr class="memdesc:a4e5b3cf1c41146635ce9d51bbdfe2277"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns whether there are any more reads to process in the reads file (e.g FASTA file)  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277">More...</a><br /></td></tr>
-<tr class="separator:a4e5b3cf1c41146635ce9d51bbdfe2277"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
-<tr class="memitem:afc23f3e71c65dc9ed5a9e49cf26ba645"><td class="memItemLeft" align="right" valign="top">static std::unique_ptr&lt; <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afc23f3e71c65dc9ed5a9e49cf26ba645">create_index</a> (const std::vector&lt; <a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html">io::FastaParser</a> * &gt; &amp;parsers, const std::uint64_t kmer_size, const std::uint64_t window_size, const std::vector&lt; std::pair&lt; std::uint64_t, std::uint64_t &gt;&gt; &amp;ranges)</td></tr>
-<tr class="memdesc:afc23f3e71c65dc9ed5a9e49cf26ba645"><td class="mdescLeft">&#160;</td><td class="mdescRight">generates a mapping of (k,w)-kmer-representation to all of its occurrences for one or more sequences  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#afc23f3e71c65dc9ed5a9e49cf26ba645">More...</a><br /></td></tr>
-<tr class="separator:afc23f3e71c65dc9ed5a9e49cf26ba645"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acb29a3ba1a493f706a3ec25bc290b30a"><td class="memItemLeft" align="right" valign="top">static std::unique_ptr&lt; <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a">create_index</a> ()</td></tr>
-<tr class="memdesc:acb29a3ba1a493f706a3ec25bc290b30a"><td class="mdescLeft">&#160;</td><td class="mdescRight">creates an empty <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a>  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a">More...</a><br /></td></tr>
-<tr class="separator:acb29a3ba1a493f706a3ec25bc290b30a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:af9247d4b637615bf5912acc57b27b919"><td class="memItemLeft" align="right" valign="top">static uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">maximum_kmer_size</a> ()</td></tr>
-<tr class="memdesc:af9247d4b637615bf5912acc57b27b919"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the maximum kmer length allowable. This is just the size of the representation in bits divided by two (since 2 bits are required to represent a DNA nucleotide).  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">More...</a><br /></td></tr>
+<tr class="memdesc:af9247d4b637615bf5912acc57b27b919"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the maximum kmer length allowable.  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">More...</a><br /></td></tr>
 <tr class="separator:af9247d4b637615bf5912acc57b27b919"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47c3cb89daa4076243dd5977acfb7ccf"><td class="memItemLeft" align="right" valign="top">static std::unique_ptr&lt; <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf">create_index</a> (const <a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html">io::FastaParser</a> &amp;parser, const read_id_t first_read_id, const read_id_t past_the_last_read_id, const std::uint64_t kmer_size, const std::uint64_t window_size, const bool hash_representations=true)</td></tr>
+<tr class="memdesc:a47c3cb89daa4076243dd5977acfb7ccf"><td class="mdescLeft">&#160;</td><td class="mdescRight">generates a mapping of (k,w)-kmer-representation to all of its occurrences for one or more sequences  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf">More...</a><br /></td></tr>
+<tr class="separator:a47c3cb89daa4076243dd5977acfb7ccf"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a> - manages mapping of (k,w)-kmer-representation and all its occurences. </p>
 </div><h2 class="groupheader">Member Function Documentation</h2>
-<a id="acb29a3ba1a493f706a3ec25bc290b30a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acb29a3ba1a493f706a3ec25bc290b30a">&#9670;&nbsp;</a></span>create_index() <span class="overload">[1/2]</span></h2>
+<a id="a47c3cb89daa4076243dd5977acfb7ccf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a47c3cb89daa4076243dd5977acfb7ccf">&#9670;&nbsp;</a></span>create_index()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -151,36 +138,20 @@ <h2 class="memtitle"><span class="permalink"><a href="#acb29a3ba1a493f706a3ec25b
         <tr>
           <td class="memname">static std::unique_ptr&lt;<a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a>&gt; claragenomics::cudamapper::Index::create_index </td>
           <td>(</td>
-          <td class="paramname"></td><td>)</td>
+          <td class="paramtype">const <a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html">io::FastaParser</a> &amp;&#160;</td>
+          <td class="paramname"><em>parser</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
           <td></td>
+          <td class="paramtype">const read_id_t&#160;</td>
+          <td class="paramname"><em>first_read_id</em>, </td>
         </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">static</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>creates an empty <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a> </p>
-<dl class="section return"><dt>Returns</dt><dd>empty instacne of <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a> </dd></dl>
-
-</div>
-</div>
-<a id="afc23f3e71c65dc9ed5a9e49cf26ba645"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afc23f3e71c65dc9ed5a9e49cf26ba645">&#9670;&nbsp;</a></span>create_index() <span class="overload">[2/2]</span></h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
         <tr>
-          <td class="memname">static std::unique_ptr&lt;<a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a>&gt; claragenomics::cudamapper::Index::create_index </td>
-          <td>(</td>
-          <td class="paramtype">const std::vector&lt; <a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html">io::FastaParser</a> * &gt; &amp;&#160;</td>
-          <td class="paramname"><em>parsers</em>, </td>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const read_id_t&#160;</td>
+          <td class="paramname"><em>past_the_last_read_id</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
@@ -197,8 +168,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#afc23f3e71c65dc9ed5a9e49c
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const std::vector&lt; std::pair&lt; std::uint64_t, std::uint64_t &gt;&gt; &amp;&#160;</td>
-          <td class="paramname"><em>ranges</em>&#160;</td>
+          <td class="paramtype">const bool&#160;</td>
+          <td class="paramname"><em>hash_representations</em> = <code>true</code>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -216,10 +187,12 @@ <h2 class="memtitle"><span class="permalink"><a href="#afc23f3e71c65dc9ed5a9e49c
 <p>generates a mapping of (k,w)-kmer-representation to all of its occurrences for one or more sequences </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">parsers</td><td>Vector of parsers for each element in ranges. Size of this vector must match size of ranges. </td></tr>
+    <tr><td class="paramname">parser</td><td>parser for the whole input file (part that goes into this index is determined by first_read_id and past_the_last_read_id) </td></tr>
+    <tr><td class="paramname">first_read_id</td><td>read_id of the first read to the included in this index </td></tr>
+    <tr><td class="paramname">past_the_last_read_id</td><td>read_id+1 of the last read to be included in this index </td></tr>
     <tr><td class="paramname">kmer_size</td><td>k - the kmer length </td></tr>
-    <tr><td class="paramname">window_size</td><td>w - the length of the sliding window used to find sketch elements </td></tr>
-    <tr><td class="paramname">ranges</td><td>- the ranges of reads in the query file to use for mapping, index by their position (e.g in the FASTA file) </td></tr>
+    <tr><td class="paramname">window_size</td><td>w - the length of the sliding window used to find sketch elements (i.e. the number of adjacent kmers in a window, adjacent = shifted by one basepair) </td></tr>
+    <tr><td class="paramname">hash_representations</td><td>- if true, hash kmer representations </td></tr>
   </table>
   </dd>
 </dl>
@@ -227,8 +200,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#afc23f3e71c65dc9ed5a9e49c
 
 </div>
 </div>
-<a id="a407a2466e8740a0f78a3ce876b87352b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a407a2466e8740a0f78a3ce876b87352b">&#9670;&nbsp;</a></span>directions_of_reads()</h2>
+<a id="a5824f352fd89f69c9acc14430a3aa6cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5824f352fd89f69c9acc14430a3aa6cd">&#9670;&nbsp;</a></span>directions_of_reads()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -237,7 +210,7 @@ <h2 class="memtitle"><span class="permalink"><a href="#a407a2466e8740a0f78a3ce87
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual const std::vector&lt;<a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a">SketchElement::DirectionOfRepresentation</a>&gt;&amp; claragenomics::cudamapper::Index::directions_of_reads </td>
+          <td class="memname">virtual const thrust::device_vector&lt;<a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a">SketchElement::DirectionOfRepresentation</a>&gt;&amp; claragenomics::cudamapper::Index::directions_of_reads </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -255,36 +228,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#a407a2466e8740a0f78a3ce87
 
 </div>
 </div>
-<a id="af9247d4b637615bf5912acc57b27b919"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af9247d4b637615bf5912acc57b27b919">&#9670;&nbsp;</a></span>maximum_kmer_size()</h2>
-
-<div class="memitem">
-<div class="memproto">
-<table class="mlabels">
-  <tr>
-  <td class="mlabels-left">
-      <table class="memname">
-        <tr>
-          <td class="memname">static uint64_t claragenomics::cudamapper::Index::maximum_kmer_size </td>
-          <td>(</td>
-          <td class="paramname"></td><td>)</td>
-          <td></td>
-        </tr>
-      </table>
-  </td>
-  <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
-  </tr>
-</table>
-</div><div class="memdoc">
-
-<p>Return the maximum kmer length allowable. This is just the size of the representation in bits divided by two (since 2 bits are required to represent a DNA nucleotide). </p>
-<dl class="section return"><dt>Returns</dt><dd>Return the maximum kmer length allowable </dd></dl>
-
-</div>
-</div>
-<a id="a69fd1882260a7c55a45fe5e2a092b152"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a69fd1882260a7c55a45fe5e2a092b152">&#9670;&nbsp;</a></span>maximum_representation()</h2>
+<a id="af4f69a9003fedb9ca11665d5faa43bff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af4f69a9003fedb9ca11665d5faa43bff">&#9670;&nbsp;</a></span>first_occurrence_of_representations()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -293,7 +238,7 @@ <h2 class="memtitle"><span class="permalink"><a href="#a69fd1882260a7c55a45fe5e2
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual std::uint64_t claragenomics::cudamapper::Index::maximum_representation </td>
+          <td class="memname">virtual const thrust::device_vector&lt;std::uint32_t&gt;&amp; claragenomics::cudamapper::Index::first_occurrence_of_representations </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -306,13 +251,13 @@ <h2 class="memtitle"><span class="permalink"><a href="#a69fd1882260a7c55a45fe5e2
 </table>
 </div><div class="memdoc">
 
-<p>maximum possible representation </p>
-<dl class="section return"><dt>Returns</dt><dd>the largest possible representation </dd></dl>
+<p>returns first occurrence of corresponding representation from <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a" title="returns an array where each representation is recorder only once, sorted by representation">unique_representations()</a> in data arrays </p>
+<dl class="section return"><dt>Returns</dt><dd>first occurrence of corresponding representation from <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a" title="returns an array where each representation is recorder only once, sorted by representation">unique_representations()</a> in data arrays </dd></dl>
 
 </div>
 </div>
-<a id="ac5036778efd3c83f5bf048174a8ab824"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac5036778efd3c83f5bf048174a8ab824">&#9670;&nbsp;</a></span>minimum_representation()</h2>
+<a id="af9247d4b637615bf5912acc57b27b919"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9247d4b637615bf5912acc57b27b919">&#9670;&nbsp;</a></span>maximum_kmer_size()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -321,21 +266,21 @@ <h2 class="memtitle"><span class="permalink"><a href="#ac5036778efd3c83f5bf04817
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual std::uint64_t claragenomics::cudamapper::Index::minimum_representation </td>
+          <td class="memname">static uint64_t claragenomics::cudamapper::Index::maximum_kmer_size </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
-          <td> const</td>
+          <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>minimum possible representation </p>
-<dl class="section return"><dt>Returns</dt><dd>the smallest possible representation </dd></dl>
+<p>Return the maximum kmer length allowable. </p>
+<dl class="section return"><dt>Returns</dt><dd>Return the maximum kmer length allowable </dd></dl>
 
 </div>
 </div>
@@ -367,8 +312,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#ac9e936ae3809c82894a22a5d
 
 </div>
 </div>
-<a id="a5c75f11d1683e4f863f14a4088a36306"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5c75f11d1683e4f863f14a4088a36306">&#9670;&nbsp;</a></span>positions_in_reads()</h2>
+<a id="a66e5d024befc410221610f454eff7183"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a66e5d024befc410221610f454eff7183">&#9670;&nbsp;</a></span>positions_in_reads()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -377,7 +322,7 @@ <h2 class="memtitle"><span class="permalink"><a href="#a5c75f11d1683e4f863f14a40
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual const std::vector&lt;position_in_read_t&gt;&amp; claragenomics::cudamapper::Index::positions_in_reads </td>
+          <td class="memname">virtual const thrust::device_vector&lt;position_in_read_t&gt;&amp; claragenomics::cudamapper::Index::positions_in_reads </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -395,8 +340,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#a5c75f11d1683e4f863f14a40
 
 </div>
 </div>
-<a id="a4e5b3cf1c41146635ce9d51bbdfe2277"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4e5b3cf1c41146635ce9d51bbdfe2277">&#9670;&nbsp;</a></span>reached_end_of_input()</h2>
+<a id="a59186cdd6dbfd21baeb07e80bd4354d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59186cdd6dbfd21baeb07e80bd4354d4">&#9670;&nbsp;</a></span>read_id_to_read_length()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -405,9 +350,10 @@ <h2 class="memtitle"><span class="permalink"><a href="#a4e5b3cf1c41146635ce9d51b
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual bool claragenomics::cudamapper::Index::reached_end_of_input </td>
+          <td class="memname">virtual const std::uint32_t&amp; claragenomics::cudamapper::Index::read_id_to_read_length </td>
           <td>(</td>
-          <td class="paramname"></td><td>)</td>
+          <td class="paramtype">const read_id_t&#160;</td>
+          <td class="paramname"><em>read_id</em></td><td>)</td>
           <td> const</td>
         </tr>
       </table>
@@ -418,13 +364,19 @@ <h2 class="memtitle"><span class="permalink"><a href="#a4e5b3cf1c41146635ce9d51b
 </table>
 </div><div class="memdoc">
 
-<p>Returns whether there are any more reads to process in the reads file (e.g FASTA file) </p>
-<dl class="section return"><dt>Returns</dt><dd>Returns whether there are any more reads to process in the reads file (e.g FASTA file) </dd></dl>
+<p>returns read length for the read with the gived read_id </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">read_id</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>read length for the read with the gived read_id </dd></dl>
 
 </div>
 </div>
-<a id="af8ad540ff0a2a244a35ae846ec745c24"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af8ad540ff0a2a244a35ae846ec745c24">&#9670;&nbsp;</a></span>read_id_and_representation_to_sketch_elements()</h2>
+<a id="ac59d309eeb226592a96622fec2b307fd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac59d309eeb226592a96622fec2b307fd">&#9670;&nbsp;</a></span>read_id_to_read_name()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -433,9 +385,10 @@ <h2 class="memtitle"><span class="permalink"><a href="#af8ad540ff0a2a244a35ae846
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual const std::vector&lt;std::vector&lt;<a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html">RepresentationToSketchElements</a>&gt; &gt;&amp; claragenomics::cudamapper::Index::read_id_and_representation_to_sketch_elements </td>
+          <td class="memname">virtual const std::string&amp; claragenomics::cudamapper::Index::read_id_to_read_name </td>
           <td>(</td>
-          <td class="paramname"></td><td>)</td>
+          <td class="paramtype">const read_id_t&#160;</td>
+          <td class="paramname"><em>read_id</em></td><td>)</td>
           <td> const</td>
         </tr>
       </table>
@@ -446,13 +399,19 @@ <h2 class="memtitle"><span class="permalink"><a href="#af8ad540ff0a2a244a35ae846
 </table>
 </div><div class="memdoc">
 
-<p>For each read_id (outer vector) returns a vector in which each element contains a representation from that read, pointer to section of data arrays with sketch elements with that representation and that read_id, and pointer to section of data arrays with skecth elements with that representation and all read_ids. There elements are sorted by representation in increasing order. </p>
-<dl class="section return"><dt>Returns</dt><dd>the mapping </dd></dl>
+<p>returns read name of read with the given read_id </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">read_id</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>read name of read with the given read_id </dd></dl>
 
 </div>
 </div>
-<a id="af03421436f827e88316c74b0b3af200e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af03421436f827e88316c74b0b3af200e">&#9670;&nbsp;</a></span>read_id_to_read_length()</h2>
+<a id="a5cfe03b47850170ec64d61d2dbef0401"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5cfe03b47850170ec64d61d2dbef0401">&#9670;&nbsp;</a></span>read_ids()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -461,7 +420,7 @@ <h2 class="memtitle"><span class="permalink"><a href="#af03421436f827e88316c74b0
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual const std::vector&lt;std::uint32_t&gt;&amp; claragenomics::cudamapper::Index::read_id_to_read_length </td>
+          <td class="memname">virtual const thrust::device_vector&lt;read_id_t&gt;&amp; claragenomics::cudamapper::Index::read_ids </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -474,13 +433,13 @@ <h2 class="memtitle"><span class="permalink"><a href="#af03421436f827e88316c74b0
 </table>
 </div><div class="memdoc">
 
-<p>returns mapping of internal read id that goes from 0 to read lengths for that read </p>
-<dl class="section return"><dt>Returns</dt><dd>mapping of internal read id that goes from 0 to read lengths for that read </dd></dl>
+<p>returns an array of reads ids for sketch elements </p>
+<dl class="section return"><dt>Returns</dt><dd>an array of reads ids for sketch elements </dd></dl>
 
 </div>
 </div>
-<a id="aec3176ac2d5e425b25dec14f411cbfe0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aec3176ac2d5e425b25dec14f411cbfe0">&#9670;&nbsp;</a></span>read_id_to_read_name()</h2>
+<a id="a876d5e82f9fc36f481854f7d84e5fc80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a876d5e82f9fc36f481854f7d84e5fc80">&#9670;&nbsp;</a></span>representations()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -489,7 +448,7 @@ <h2 class="memtitle"><span class="permalink"><a href="#aec3176ac2d5e425b25dec14f
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual const std::vector&lt;std::string&gt;&amp; claragenomics::cudamapper::Index::read_id_to_read_name </td>
+          <td class="memname">virtual const thrust::device_vector&lt;representation_t&gt;&amp; claragenomics::cudamapper::Index::representations </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -502,13 +461,13 @@ <h2 class="memtitle"><span class="permalink"><a href="#aec3176ac2d5e425b25dec14f
 </table>
 </div><div class="memdoc">
 
-<p>returns mapping of internal read id that goes from 0 to number_of_reads-1 to actual read name from the input </p>
-<dl class="section return"><dt>Returns</dt><dd>mapping of internal read id that goes from 0 to number_of_reads-1 to actual read name from the input </dd></dl>
+<p>returns an array of representations of sketch elements </p>
+<dl class="section return"><dt>Returns</dt><dd>an array of representations of sketch elements </dd></dl>
 
 </div>
 </div>
-<a id="aac33d8d2aa72bb227326a35f5b452de5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aac33d8d2aa72bb227326a35f5b452de5">&#9670;&nbsp;</a></span>read_ids()</h2>
+<a id="af44999c8852d5915d585c55a1a95c74a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af44999c8852d5915d585c55a1a95c74a">&#9670;&nbsp;</a></span>unique_representations()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -517,7 +476,7 @@ <h2 class="memtitle"><span class="permalink"><a href="#aac33d8d2aa72bb227326a35f
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">virtual const std::vector&lt;read_id_t&gt;&amp; claragenomics::cudamapper::Index::read_ids </td>
+          <td class="memname">virtual const thrust::device_vector&lt;representation_t&gt;&amp; claragenomics::cudamapper::Index::unique_representations </td>
           <td>(</td>
           <td class="paramname"></td><td>)</td>
           <td> const</td>
@@ -530,8 +489,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#aac33d8d2aa72bb227326a35f
 </table>
 </div><div class="memdoc">
 
-<p>returns an array of reads ids for sketch elements </p>
-<dl class="section return"><dt>Returns</dt><dd>an array of reads ids for sketch elements </dd></dl>
+<p>returns an array where each representation is recorder only once, sorted by representation </p>
+<dl class="section return"><dt>Returns</dt><dd>an array where each representation is recorder only once, sorted by representation </dd></dl>
 
 </div>
 </div>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher-members.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher-members.html
new file mode 100644
index 000000000..b0718b292
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><b>cudamapper</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">Matcher</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">claragenomics::cudamapper::Matcher Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">claragenomics::cudamapper::Matcher</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2">anchors</a>()=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">claragenomics::cudamapper::Matcher</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752">create_matcher</a>(const Index &amp;query_index, const Index &amp;target_index)</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">claragenomics::cudamapper::Matcher</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab">~Matcher</a>()=default</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">claragenomics::cudamapper::Matcher</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher.html
new file mode 100644
index 000000000..9d082f2da
--- /dev/null
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Matcher.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: claragenomics::cudamapper::Matcher Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><b>cudamapper</b></li><li class="navelem"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">Matcher</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classclaragenomics_1_1cudamapper_1_1Matcher-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">claragenomics::cudamapper::Matcher Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span><div class="ingroups"><a class="el" href="group__cudamapper.html">CUDA mapper package</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher - base matcher.">Matcher</a> - base matcher.  
+ <a href="classclaragenomics_1_1cudamapper_1_1Matcher.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="matcher_8hpp_source.html">matcher.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac2f70fb6b1876d0fa81fd8c0189191ab"><td class="memItemLeft" align="right" valign="top"><a id="ac2f70fb6b1876d0fa81fd8c0189191ab"></a>
+virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab">~Matcher</a> ()=default</td></tr>
+<tr class="memdesc:ac2f70fb6b1876d0fa81fd8c0189191ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
+<tr class="separator:ac2f70fb6b1876d0fa81fd8c0189191ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3de5ba06b0c7ef0329caf71ae98f2d2"><td class="memItemLeft" align="right" valign="top">virtual thrust::device_vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2">anchors</a> ()=0</td></tr>
+<tr class="memdesc:ac3de5ba06b0c7ef0329caf71ae98f2d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns anchors  <a href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2">More...</a><br /></td></tr>
+<tr class="separator:ac3de5ba06b0c7ef0329caf71ae98f2d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:ae65a1507ddf1bf2aa046fc0eacfea752"><td class="memItemLeft" align="right" valign="top">static std::unique_ptr&lt; <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">Matcher</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752">create_matcher</a> (const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;query_index, const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;target_index)</td></tr>
+<tr class="memdesc:ae65a1507ddf1bf2aa046fc0eacfea752"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher - base matcher.">Matcher</a> object.  <a href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752">More...</a><br /></td></tr>
+<tr class="separator:ae65a1507ddf1bf2aa046fc0eacfea752"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher - base matcher.">Matcher</a> - base matcher. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="ac3de5ba06b0c7ef0329caf71ae98f2d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3de5ba06b0c7ef0329caf71ae98f2d2">&#9670;&nbsp;</a></span>anchors()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual thrust::device_vector&lt;<a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a>&gt;&amp; claragenomics::cudamapper::Matcher::anchors </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>returns anchors </p>
+<dl class="section return"><dt>Returns</dt><dd>anchors </dd></dl>
+
+</div>
+</div>
+<a id="ae65a1507ddf1bf2aa046fc0eacfea752"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae65a1507ddf1bf2aa046fc0eacfea752">&#9670;&nbsp;</a></span>create_matcher()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static std::unique_ptr&lt;<a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">Matcher</a>&gt; claragenomics::cudamapper::Matcher::create_matcher </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;&#160;</td>
+          <td class="paramname"><em>query_index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;&#160;</td>
+          <td class="paramname"><em>target_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Creates a <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher - base matcher.">Matcher</a> object. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">query_index</td><td></td></tr>
+    <tr><td class="paramname">target_index</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>matcher </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>cudamapper/include/claragenomics/cudamapper/<a class="el" href="matcher_8hpp_source.html">matcher.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper-members.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper-members.html
index 361454711..df3d62f78 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper-members.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -74,7 +74,7 @@
 <p>This is the complete list of members for <a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a>, including all inherited members.</p>
 <table class="directory">
   <tr class="even"><td class="entry"><a class="el" href="group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c">filter_overlaps</a>(std::vector&lt; Overlap &gt; &amp;filtered_overlaps, const std::vector&lt; Overlap &gt; &amp;overlaps, size_t min_residues=5, size_t min_overlap_len=0)</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">get_overlaps</a>(std::vector&lt; Overlap &gt; &amp;overlaps, std::vector&lt; Anchor &gt; &amp;anchors, const Index &amp;index)=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">get_overlaps</a>(std::vector&lt; Overlap &gt; &amp;overlaps, thrust::device_vector&lt; Anchor &gt; &amp;anchors, const Index &amp;index_query, const Index &amp;index_target)=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371">print_paf</a>(const std::vector&lt; Overlap &gt; &amp;overlaps)</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
   <tr><td class="entry"><a class="el" href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">~Overlapper</a>()=default</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper.html
index b2889915a..611664ac8 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Overlapper.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -83,9 +83,9 @@
 virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">~Overlapper</a> ()=default</td></tr>
 <tr class="memdesc:ga569c8855bdf9806d3747b26fc7e98975"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor for <a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">Overlapper</a>. <br /></td></tr>
 <tr class="separator:ga569c8855bdf9806d3747b26fc7e98975"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5498f3d8b5eff6481c67fdf0a049c300"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">get_overlaps</a> (std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> &gt; &amp;overlaps, std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> &gt; &amp;anchors, const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;index)=0</td></tr>
-<tr class="memdesc:ga5498f3d8b5eff6481c67fdf0a049c300"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns overlaps for a set of reads  <a href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">More...</a><br /></td></tr>
-<tr class="separator:ga5498f3d8b5eff6481c67fdf0a049c300"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0e3be4a9442dfb2b7952fb473e591a3"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">get_overlaps</a> (std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> &gt; &amp;overlaps, thrust::device_vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> &gt; &amp;anchors, const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;index_query, const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;index_target)=0</td></tr>
+<tr class="memdesc:gab0e3be4a9442dfb2b7952fb473e591a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns overlaps for a set of reads  <a href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">More...</a><br /></td></tr>
+<tr class="separator:gab0e3be4a9442dfb2b7952fb473e591a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence-members.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence-members.html
index 60a802ef0..991665443 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence-members.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence.html
index facead973..980e29eb6 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1Sequence.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement-members.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement-members.html
index 22ea95fef..7e81dd0b7 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement-members.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement.html b/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement.html
index b831ba40d..4f321f3a9 100644
--- a/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement.html
+++ b/docs/cpp/classclaragenomics_1_1cudamapper_1_1SketchElement.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch-members.html b/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch-members.html
index c315c6f47..1ffb79841 100644
--- a/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch-members.html
+++ b/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -77,10 +77,11 @@
   <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec">batch_id</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09">generate_poa</a>()=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0">get_consensus</a>(std::vector&lt; std::string &gt; &amp;consensus, std::vector&lt; std::vector&lt; uint16_t &gt;&gt; &amp;coverage, std::vector&lt; claragenomics::cudapoa::StatusType &gt; &amp;output_status)=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">get_msa</a>(std::vector&lt; std::vector&lt; std::string &gt;&gt; &amp;msa, std::vector&lt; StatusType &gt; &amp;output_status)=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc">get_total_poas</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae">reset</a>()=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1">~Batch</a>()=default</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16">get_graphs</a>(std::vector&lt; DirectedGraph &gt; &amp;graphs, std::vector&lt; StatusType &gt; &amp;output_status)=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">get_msa</a>(std::vector&lt; std::vector&lt; std::string &gt;&gt; &amp;msa, std::vector&lt; StatusType &gt; &amp;output_status)=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc">get_total_poas</a>() const =0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae">reset</a>()=0</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1">~Batch</a>()=default</td><td class="entry"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">claragenomics::cudapoa::Batch</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch.html b/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch.html
index b0e0595f9..fc9e8c852 100644
--- a/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch.html
+++ b/docs/cpp/classclaragenomics_1_1cudapoa_1_1Batch.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -98,6 +98,9 @@
 <tr class="memitem:ab39956c82d5d5a2d8df1b1695e15d9d2"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">get_msa</a> (std::vector&lt; std::vector&lt; std::string &gt;&gt; &amp;msa, std::vector&lt; <a class="el" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> &gt; &amp;output_status)=0</td></tr>
 <tr class="memdesc:ab39956c82d5d5a2d8df1b1695e15d9d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the multiple sequence alignments for each POA.  <a href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">More...</a><br /></td></tr>
 <tr class="separator:ab39956c82d5d5a2d8df1b1695e15d9d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0949cca1e89a40d759b0ca371512bb16"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16">get_graphs</a> (std::vector&lt; <a class="el" href="classclaragenomics_1_1DirectedGraph.html">DirectedGraph</a> &gt; &amp;graphs, std::vector&lt; <a class="el" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> &gt; &amp;output_status)=0</td></tr>
+<tr class="memdesc:a0949cca1e89a40d759b0ca371512bb16"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the graph representation for each POA.  <a href="classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16">More...</a><br /></td></tr>
+<tr class="separator:a0949cca1e89a40d759b0ca371512bb16"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab807c4b01c2cddcdebb32952df13c0ec"><td class="memItemLeft" align="right" valign="top">virtual int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec">batch_id</a> () const =0</td></tr>
 <tr class="memdesc:ab807c4b01c2cddcdebb32952df13c0ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return batch ID.  <a href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec">More...</a><br /></td></tr>
 <tr class="separator:ab807c4b01c2cddcdebb32952df13c0ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -228,6 +231,52 @@ <h2 class="memtitle"><span class="permalink"><a href="#a3224d1595caa5950c34708f4
   <table class="params">
     <tr><td class="paramname">consensus</td><td>Reference to vector where consensus strings will be returned </td></tr>
     <tr><td class="paramname">coverage</td><td>Reference to vector where coverage of each base in each consensus string is returned </td></tr>
+    <tr><td class="paramname">output_status</td><td>Reference to vector where the errors during kernel execution is captured</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Status indicating whether consensus generation is available for this batch. </dd></dl>
+
+</div>
+</div>
+<a id="a0949cca1e89a40d759b0ca371512bb16"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0949cca1e89a40d759b0ca371512bb16">&#9670;&nbsp;</a></span>get_graphs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual void claragenomics::cudapoa::Batch::get_graphs </td>
+          <td>(</td>
+          <td class="paramtype">std::vector&lt; <a class="el" href="classclaragenomics_1_1DirectedGraph.html">DirectedGraph</a> &gt; &amp;&#160;</td>
+          <td class="paramname"><em>graphs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">std::vector&lt; <a class="el" href="group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0">StatusType</a> &gt; &amp;&#160;</td>
+          <td class="paramname"><em>output_status</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the graph representation for each POA. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">graphs</td><td>Reference to a vector where directed graph of each poa is returned. </td></tr>
     <tr><td class="paramname">output_status</td><td>Reference to vector where the errors during kernel execution is captured </td></tr>
   </table>
   </dd>
@@ -273,10 +322,11 @@ <h2 class="memtitle"><span class="permalink"><a href="#ab39956c82d5d5a2d8df1b169
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">msa</td><td>Reference to vector where msa strings of each poa is returned </td></tr>
-    <tr><td class="paramname">output_status</td><td>Reference to vector where the errors during kernel execution is captured </td></tr>
+    <tr><td class="paramname">output_status</td><td>Reference to vector where the errors during kernel execution is captured</td></tr>
   </table>
   </dd>
 </dl>
+<dl class="section return"><dt>Returns</dt><dd>Status indicating whether MSA generation is available for this batch. </dd></dl>
 
 </div>
 </div>
diff --git a/docs/cpp/classclaragenomics_1_1io_1_1FastaParser-members.html b/docs/cpp/classclaragenomics_1_1io_1_1FastaParser-members.html
index eca4b0dbd..2a2559097 100644
--- a/docs/cpp/classclaragenomics_1_1io_1_1FastaParser-members.html
+++ b/docs/cpp/classclaragenomics_1_1io_1_1FastaParser-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1io_1_1FastaParser.html b/docs/cpp/classclaragenomics_1_1io_1_1FastaParser.html
index 814f390de..bb994c688 100644
--- a/docs/cpp/classclaragenomics_1_1io_1_1FastaParser.html
+++ b/docs/cpp/classclaragenomics_1_1io_1_1FastaParser.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1scoped__device__switch-members.html b/docs/cpp/classclaragenomics_1_1scoped__device__switch-members.html
index b0de9d603..dbe44b53e 100644
--- a/docs/cpp/classclaragenomics_1_1scoped__device__switch-members.html
+++ b/docs/cpp/classclaragenomics_1_1scoped__device__switch-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classclaragenomics_1_1scoped__device__switch.html b/docs/cpp/classclaragenomics_1_1scoped__device__switch.html
index 49adc7a48..786d63ac5 100644
--- a/docs/cpp/classclaragenomics_1_1scoped__device__switch.html
+++ b/docs/cpp/classclaragenomics_1_1scoped__device__switch.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/classes.html b/docs/cpp/classes.html
index 497bc127f..e600ef8ec 100644
--- a/docs/cpp/classes.html
+++ b/docs/cpp/classes.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -66,51 +66,64 @@
 <div class="title">Class Index</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_f">f</a>&#160;|&#160;<a class="qindex" href="#letter_i">i</a>&#160;|&#160;<a class="qindex" href="#letter_o">o</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a></div>
+<div class="qindex"><a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_d">d</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_f">f</a>&#160;|&#160;<a class="qindex" href="#letter_g">g</a>&#160;|&#160;<a class="qindex" href="#letter_i">i</a>&#160;|&#160;<a class="qindex" href="#letter_m">m</a>&#160;|&#160;<a class="qindex" href="#letter_o">o</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a>&#160;|&#160;<a class="qindex" href="#letter_u">u</a></div>
 <table class="classindex">
 <tr><td rowspan="2" valign="bottom"><a name="letter_a"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;a&#160;&#160;</div></td></tr></table>
 </td>
-<td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;e&#160;&#160;</div></td></tr></table>
+<td rowspan="2" valign="bottom"><a name="letter_d"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;d&#160;&#160;</div></td></tr></table>
 </td>
-<td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;i&#160;&#160;</div></td></tr></table>
+<td valign="top"><a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html">FastaSequence</a> (claragenomics::io)&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_o"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;o&#160;&#160;</div></td></tr></table>
 </td>
-<td rowspan="2" valign="bottom"><a name="letter_r"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;r&#160;&#160;</div></td></tr></table>
+<td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html">Sequence</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+</tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_g"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;g&#160;&#160;</div></td></tr></table>
 </td>
 <td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html">SketchElement</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
 </tr>
-<tr><td></td></tr>
 <tr><td valign="top"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html">Aligner</a> (claragenomics::cudaaligner)&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="classclaragenomics_1_1DirectedGraph.html">DirectedGraph</a> (claragenomics)&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_u"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;u&#160;&#160;</div></td></tr></table>
+</td>
+</tr>
+<tr><td valign="top"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">Alignment</a> (claragenomics::cudaaligner)&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;e&#160;&#160;</div></td></tr></table>
+</td>
+<td valign="top"><a class="el" href="classclaragenomics_1_1Graph.html">Graph</a> (claragenomics)&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">Overlapper</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+<td rowspan="2" valign="bottom"><a name="letter_i"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;i&#160;&#160;</div></td></tr></table>
+</td>
+<td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
+</td>
+<td valign="top"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html">UndirectedGraph</a> (claragenomics)&#160;&#160;&#160;</td>
+</tr>
+<tr><td valign="top"><a class="el" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html">ArrayBlock</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
 <td valign="top"><a class="el" href="structclaragenomics_1_1cudapoa_1_1Entry.html">Entry</a> (claragenomics::cudapoa)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html">Index::RepresentationToSketchElements</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
 <td></td></tr>
-<tr><td valign="top"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html">Alignment</a> (claragenomics::cudaaligner)&#160;&#160;&#160;</td>
+<tr><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;b&#160;&#160;</div></td></tr></table>
+</td>
 <td rowspan="2" valign="bottom"><a name="letter_f"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;f&#160;&#160;</div></td></tr></table>
 </td>
-<td rowspan="2" valign="bottom"><a name="letter_o"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;o&#160;&#160;</div></td></tr></table>
+<td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="structclaragenomics_1_1PairHash.html">PairHash</a> (claragenomics)&#160;&#160;&#160;</td>
+<td></td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_m"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;m&#160;&#160;</div></td></tr></table>
 </td>
 <td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;s&#160;&#160;</div></td></tr></table>
 </td>
 <td></td></tr>
-<tr><td valign="top"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
-<td></td></tr>
-<tr><td valign="top"><a class="el" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html">ArrayBlock</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+<tr><td valign="top"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">Batch</a> (claragenomics::cudapoa)&#160;&#160;&#160;</td>
 <td valign="top"><a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html">FastaParser</a> (claragenomics::io)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a> (claragenomics)&#160;&#160;&#160;</td>
 <td></td></tr>
-<tr><td rowspan="2" valign="bottom"><a name="letter_b"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;b&#160;&#160;</div></td></tr></table>
-</td>
-<td valign="top"><a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html">FastaSequence</a> (claragenomics::io)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">Overlapper</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
-<td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html">Sequence</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+<tr><td></td><td></td><td valign="top"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">Matcher</a> (claragenomics::cudamapper)&#160;&#160;&#160;</td>
+<td valign="top"><a class="el" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a> (claragenomics)&#160;&#160;&#160;</td>
 <td></td></tr>
-<tr><td></td><td></td><td></td><td></td></tr>
-<tr><td valign="top"><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html">Batch</a> (claragenomics::cudapoa)&#160;&#160;&#160;</td>
-<td></td><td></td><td></td><td></td></tr>
 <tr><td></td><td></td><td></td><td></td><td></td></tr>
 </table>
-<div class="qindex"><a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_f">f</a>&#160;|&#160;<a class="qindex" href="#letter_i">i</a>&#160;|&#160;<a class="qindex" href="#letter_o">o</a>&#160;|&#160;<a class="qindex" href="#letter_r">r</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a></div>
+<div class="qindex"><a class="qindex" href="#letter_a">a</a>&#160;|&#160;<a class="qindex" href="#letter_b">b</a>&#160;|&#160;<a class="qindex" href="#letter_d">d</a>&#160;|&#160;<a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_f">f</a>&#160;|&#160;<a class="qindex" href="#letter_g">g</a>&#160;|&#160;<a class="qindex" href="#letter_i">i</a>&#160;|&#160;<a class="qindex" href="#letter_m">m</a>&#160;|&#160;<a class="qindex" href="#letter_o">o</a>&#160;|&#160;<a class="qindex" href="#letter_p">p</a>&#160;|&#160;<a class="qindex" href="#letter_s">s</a>&#160;|&#160;<a class="qindex" href="#letter_u">u</a></div>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/cpp/cudaaligner_8hpp_source.html b/docs/cpp/cudaaligner_8hpp_source.html
index 14e716e98..4f1571e65 100644
--- a/docs/cpp/cudaaligner_8hpp_source.html
+++ b/docs/cpp/cudaaligner_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/cudamapper_8hpp_source.html b/docs/cpp/cudamapper_8hpp_source.html
index b68c73eae..a8016611a 100644
--- a/docs/cpp/cudamapper_8hpp_source.html
+++ b/docs/cpp/cudamapper_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/cudapoa_8hpp_source.html b/docs/cpp/cudapoa_8hpp_source.html
index ba1371f74..0807baedd 100644
--- a/docs/cpp/cudapoa_8hpp_source.html
+++ b/docs/cpp/cudapoa_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/cudautils_8hpp.html b/docs/cpp/cudautils_8hpp.html
index ba7d7f0e8..577d5b511 100644
--- a/docs/cpp/cudautils_8hpp.html
+++ b/docs/cpp/cudautils_8hpp.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -68,6 +68,7 @@
 <div class="header">
   <div class="summary">
 <a href="#nested-classes">Classes</a> &#124;
+<a href="#define-members">Macros</a> &#124;
 <a href="#func-members">Functions</a>  </div>
   <div class="headertitle">
 <div class="title">cudautils.hpp File Reference</div>  </div>
@@ -77,6 +78,19 @@
 <code>#include &lt;<a class="el" href="logging_8hpp_source.html">claragenomics/logging/logging.hpp</a>&gt;</code><br />
 <code>#include &lt;cuda_runtime_api.h&gt;</code><br />
 <code>#include &lt;cassert&gt;</code><br />
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for cudautils.hpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="cudautils_8hpp__incl.png" border="0" usemap="#common_2utils_2include_2claragenomics_2utils_2cudautils_8hpp" alt=""/></div>
+<map name="common_2utils_2include_2claragenomics_2utils_2cudautils_8hpp" id="common_2utils_2include_2claragenomics_2utils_2cudautils_8hpp">
+<area shape="rect" title=" " alt="" coords="196,5,341,61"/>
+<area shape="rect" href="cudaversions_8hpp_source.html" title=" " alt="" coords="5,199,140,240"/>
+<area shape="rect" href="logging_8hpp.html" title=" " alt="" coords="111,109,261,151"/>
+<area shape="rect" title=" " alt="" coords="285,117,420,143"/>
+<area shape="rect" title=" " alt="" coords="444,117,509,143"/>
+<area shape="rect" title=" " alt="" coords="164,206,277,233"/>
+</map>
+</div>
 </div>
 <p><a href="cudautils_8hpp_source.html">Go to the source code of this file.</a></p>
 <table class="memberdecls">
@@ -88,6 +102,9 @@
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
 Macros</h2></td></tr>
+<tr class="memitem:gaded61355db08f1d76bc24edc008d4224"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudautils.html#gaded61355db08f1d76bc24edc008d4224">CGA_NVTX_RANGE</a>(varname,  label)</td></tr>
+<tr class="memdesc:gaded61355db08f1d76bc24edc008d4224"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dummy implementation for CGA_NVTX_RANGE macro.  <a href="group__cudautils.html#gaded61355db08f1d76bc24edc008d4224">More...</a><br /></td></tr>
+<tr class="separator:gaded61355db08f1d76bc24edc008d4224"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr><td colspan="2"><div class="groupHeader"></div></td></tr>
 <tr class="memitem:ga161535c48fe399e086ac6277b527fb41"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">CGA_CU_CHECK_ERR</a>(ans)</td></tr>
 <tr class="memdesc:ga161535c48fe399e086ac6277b527fb41"><td class="mdescLeft">&#160;</td><td class="mdescRight">Log on CUDA error in enclosed expression.  <a href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">More...</a><br /></td></tr>
diff --git a/docs/cpp/cudautils_8hpp__incl.map b/docs/cpp/cudautils_8hpp__incl.map
new file mode 100644
index 000000000..f7d93a93f
--- /dev/null
+++ b/docs/cpp/cudautils_8hpp__incl.map
@@ -0,0 +1,8 @@
+<map id="common/utils/include/claragenomics/utils/cudautils.hpp" name="common/utils/include/claragenomics/utils/cudautils.hpp">
+<area shape="rect" id="node1" title=" " alt="" coords="196,5,341,61"/>
+<area shape="rect" id="node2" href="$cudaversions_8hpp_source.html" title=" " alt="" coords="5,199,140,240"/>
+<area shape="rect" id="node3" href="$logging_8hpp.html" title=" " alt="" coords="111,109,261,151"/>
+<area shape="rect" id="node5" title=" " alt="" coords="285,117,420,143"/>
+<area shape="rect" id="node6" title=" " alt="" coords="444,117,509,143"/>
+<area shape="rect" id="node4" title=" " alt="" coords="164,206,277,233"/>
+</map>
diff --git a/docs/cpp/cudautils_8hpp__incl.md5 b/docs/cpp/cudautils_8hpp__incl.md5
new file mode 100644
index 000000000..051c7c1c0
--- /dev/null
+++ b/docs/cpp/cudautils_8hpp__incl.md5
@@ -0,0 +1 @@
+4c96432e96c641d42ae6418698812910
\ No newline at end of file
diff --git a/docs/cpp/cudautils_8hpp__incl.png b/docs/cpp/cudautils_8hpp__incl.png
new file mode 100644
index 0000000000000000000000000000000000000000..b132071df987ad93bd375ba3c418692639a444cb
GIT binary patch
literal 19634
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/cudautils_8hpp_source.html b/docs/cpp/cudautils_8hpp_source.html
index ce53c5d3f..6d2044caf 100644
--- a/docs/cpp/cudautils_8hpp_source.html
+++ b/docs/cpp/cudautils_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -88,89 +88,112 @@
 <div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;cuda_runtime_api.h&gt;</span></div>
 <div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div>
 <div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
-<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
-<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">   27</a></span>&#160;<span class="preprocessor">#define CGA_CU_CHECK_ERR(ans)                                            \</span></div>
-<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">    {                                                                    \</span></div>
-<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">        claragenomics::cudautils::gpu_assert((ans), __FILE__, __LINE__); \</span></div>
-<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">    }</span></div>
-<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
-<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
-<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
-<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;{</div>
-<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
-<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">namespace </span>cudautils</div>
-<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;{</div>
-<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
-<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">   46</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">gpu_assert</a>(cudaError_t code, <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line)</div>
-<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;{</div>
-<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#ifdef CGA_DEVICE_SYNCHRONIZE</span></div>
-<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="comment">// This device synchronize forces the most recent CUDA call to fully</span></div>
-<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="comment">// complete, increasing the chance of catching the CUDA error near the</span></div>
-<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="comment">// offending function. Only run if existing code is success to avoid</span></div>
-<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">// potentially overwriting previous error code.</span></div>
-<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keywordflow">if</span> (code == cudaSuccess)</div>
-<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    {</div>
-<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        code = cudaDeviceSynchronize();</div>
-<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    }</div>
-<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
-<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordflow">if</span> (code != cudaSuccess)</div>
-<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    {</div>
-<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        std::string err = <span class="stringliteral">&quot;GPU Error:: &quot;</span> +</div>
-<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;                          std::string(cudaGetErrorString(code)) +</div>
-<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;                          <span class="stringliteral">&quot; &quot;</span> + std::string(file) +</div>
-<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;                          <span class="stringliteral">&quot; &quot;</span> + std::to_string(line);</div>
-<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        <a class="code" href="group__logging.html#gacd5f9588e4976ef45d2ddece37b78003">CGA_LOG_ERROR</a>(<span class="stringliteral">&quot;{}\n&quot;</span>, err);</div>
-<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        <span class="comment">// In Debug mode, this assert will cause a debugger trap</span></div>
-<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="comment">// which is beneficial when debugging errors.</span></div>
-<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        assert(<span class="keyword">false</span>);</div>
-<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        std::abort();</div>
-<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    }</div>
-<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;}</div>
-<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
-<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IntType, <span class="keywordtype">int</span>32_t boundary&gt;</div>
-<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;__host__ __device__ __forceinline__</div>
-<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    IntType</div>
-<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca">   82</a></span>&#160;    <a class="code" href="cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca">align</a>(<span class="keyword">const</span> IntType&amp; value)</div>
-<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;{</div>
-<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    static_assert((boundary &amp; (boundary - 1)) == 0, <span class="stringliteral">&quot;Boundary for align must be power of 2&quot;</span>);</div>
-<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <span class="keywordflow">return</span> (value + boundary) &amp; ~(boundary - 1);</div>
-<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;}</div>
-<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160; </div>
-<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;} <span class="comment">// namespace cudautils</span></div>
-<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
-<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1scoped__device__switch.html">   95</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a></div>
-<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;{</div>
-<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650">  101</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650">scoped_device_switch</a>(int32_t device_id)</div>
-<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    {</div>
-<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        <a class="code" href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">CGA_CU_CHECK_ERR</a>(cudaGetDevice(&amp;device_id_before_));</div>
-<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        <a class="code" href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">CGA_CU_CHECK_ERR</a>(cudaSetDevice(device_id));</div>
-<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    }</div>
-<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
-<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125">  108</a></span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125">~scoped_device_switch</a>()</div>
-<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    {</div>
-<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        cudaSetDevice(device_id_before_);</div>
-<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    }</div>
-<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
-<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a>()                            = <span class="keyword">delete</span>;</div>
-<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a>(<a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
-<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a>&amp; operator=(<a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
-<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div>
-<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="keyword">private</span>:</div>
-<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    int32_t device_id_before_;</div>
-<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;};</div>
-<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160; </div>
-<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef CGA_PROFILING</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;nvToolsExt.h&gt;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif // CGA_PROFILING</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">   31</a></span>&#160;<span class="preprocessor">#define CGA_CU_CHECK_ERR(ans)                                            \</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">    {                                                                    \</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">        claragenomics::cudautils::gpu_assert((ans), __FILE__, __LINE__); \</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">    }</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;{</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">namespace </span>cudautils</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;{</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">   50</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">gpu_assert</a>(cudaError_t code, <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;{</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#ifdef CGA_DEVICE_SYNCHRONIZE</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="comment">// This device synchronize forces the most recent CUDA call to fully</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="comment">// complete, increasing the chance of catching the CUDA error near the</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="comment">// offending function. Only run if existing code is success to avoid</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="comment">// potentially overwriting previous error code.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="keywordflow">if</span> (code == cudaSuccess)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        code = cudaDeviceSynchronize();</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="keywordflow">if</span> (code != cudaSuccess)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        std::string err = <span class="stringliteral">&quot;GPU Error:: &quot;</span> +</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;                          std::string(cudaGetErrorString(code)) +</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;                          <span class="stringliteral">&quot; &quot;</span> + std::string(file) +</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;                          <span class="stringliteral">&quot; &quot;</span> + std::to_string(line);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        <a class="code" href="group__logging.html#gacd5f9588e4976ef45d2ddece37b78003">CGA_LOG_ERROR</a>(<span class="stringliteral">&quot;{}\n&quot;</span>, err);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        <span class="comment">// In Debug mode, this assert will cause a debugger trap</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        <span class="comment">// which is beneficial when debugging errors.</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        assert(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;        std::abort();</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;}</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> IntType, <span class="keywordtype">int</span>32_t boundary&gt;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;__host__ __device__ __forceinline__</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    IntType</div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca">   86</a></span>&#160;    <a class="code" href="cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca">align</a>(<span class="keyword">const</span> IntType&amp; value)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;{</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    static_assert((boundary &amp; (boundary - 1)) == 0, <span class="stringliteral">&quot;Boundary for align must be power of 2&quot;</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keywordflow">return</span> (value + boundary) &amp; ~(boundary - 1);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;}</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor">#ifdef CGA_PROFILING</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#define CGA_NVTX_RANGE(varname, label) ::claragenomics::cudautils::nvtx_range varname(label)</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="keyword">class </span>nvtx_range</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;{</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="keyword">explicit</span> nvtx_range(<span class="keywordtype">char</span> <span class="keyword">const</span>* name)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        nvtxRangePush(name);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    ~nvtx_range()</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        nvtxRangePop();</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;};</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="preprocessor">#define CGA_NVTX_RANGE(varname, label)</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="preprocessor">#endif // CGA_PROFILING</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;} <span class="comment">// namespace cudautils</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1scoped__device__switch.html">  130</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;{</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650">  136</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650">scoped_device_switch</a>(int32_t device_id)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <a class="code" href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">CGA_CU_CHECK_ERR</a>(cudaGetDevice(&amp;device_id_before_));</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <a class="code" href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">CGA_CU_CHECK_ERR</a>(cudaSetDevice(device_id));</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125">  143</a></span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125">~scoped_device_switch</a>()</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        cudaSetDevice(device_id_before_);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a>()                            = <span class="keyword">delete</span>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a>(<a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a>&amp; operator=(<a class="code" href="classclaragenomics_1_1scoped__device__switch.html">scoped_device_switch</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160; </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    int32_t device_id_before_;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;};</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
 </div><!-- fragment --></div><!-- contents -->
-<div class="ttc" id="agroup__cudautils_html_ga161535c48fe399e086ac6277b527fb41"><div class="ttname"><a href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">CGA_CU_CHECK_ERR</a></div><div class="ttdeci">#define CGA_CU_CHECK_ERR(ans)</div><div class="ttdoc">Log on CUDA error in enclosed expression.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:27</div></div>
+<div class="ttc" id="agroup__cudautils_html_ga161535c48fe399e086ac6277b527fb41"><div class="ttname"><a href="group__cudautils.html#ga161535c48fe399e086ac6277b527fb41">CGA_CU_CHECK_ERR</a></div><div class="ttdeci">#define CGA_CU_CHECK_ERR(ans)</div><div class="ttdoc">Log on CUDA error in enclosed expression.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:31</div></div>
 <div class="ttc" id="agroup__logging_html_gacd5f9588e4976ef45d2ddece37b78003"><div class="ttname"><a href="group__logging.html#gacd5f9588e4976ef45d2ddece37b78003">CGA_LOG_ERROR</a></div><div class="ttdeci">#define CGA_LOG_ERROR(...)</div><div class="ttdoc">Log at error level.</div><div class="ttdef"><b>Definition:</b> logging.hpp:164</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1scoped__device__switch_html_a41381ff64aeb0750803a315020a13650"><div class="ttname"><a href="classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650">claragenomics::scoped_device_switch::scoped_device_switch</a></div><div class="ttdeci">scoped_device_switch(int32_t device_id)</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:101</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1scoped__device__switch_html_ad17a140b9fc9badff82487e685013125"><div class="ttname"><a href="classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125">claragenomics::scoped_device_switch::~scoped_device_switch</a></div><div class="ttdeci">~scoped_device_switch()</div><div class="ttdoc">Destructor switches back to original device ID.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:108</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1scoped__device__switch_html"><div class="ttname"><a href="classclaragenomics_1_1scoped__device__switch.html">claragenomics::scoped_device_switch</a></div><div class="ttdoc">A class to switch the CUDA device for the current scope using RAII.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:95</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1scoped__device__switch_html_a41381ff64aeb0750803a315020a13650"><div class="ttname"><a href="classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650">claragenomics::scoped_device_switch::scoped_device_switch</a></div><div class="ttdeci">scoped_device_switch(int32_t device_id)</div><div class="ttdoc">Constructor.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:136</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1scoped__device__switch_html_ad17a140b9fc9badff82487e685013125"><div class="ttname"><a href="classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125">claragenomics::scoped_device_switch::~scoped_device_switch</a></div><div class="ttdeci">~scoped_device_switch()</div><div class="ttdoc">Destructor switches back to original device ID.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:143</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1scoped__device__switch_html"><div class="ttname"><a href="classclaragenomics_1_1scoped__device__switch.html">claragenomics::scoped_device_switch</a></div><div class="ttdoc">A class to switch the CUDA device for the current scope using RAII.</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:130</div></div>
 <div class="ttc" id="alogging_8hpp_html"><div class="ttname"><a href="logging_8hpp.html">logging.hpp</a></div></div>
-<div class="ttc" id="agroup__cudautils_html_ga3769a812992df47886894f48f26edf6f"><div class="ttname"><a href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">claragenomics::cudautils::gpu_assert</a></div><div class="ttdeci">void gpu_assert(cudaError_t code, const char *file, int line)</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:46</div></div>
-<div class="ttc" id="acudautils_8hpp_html_a9ace0fde2c5420f52b40ca77276943ca"><div class="ttname"><a href="cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca">claragenomics::cudautils::align</a></div><div class="ttdeci">__host__ __device__ __forceinline__ IntType align(const IntType &amp;value)</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:82</div></div>
+<div class="ttc" id="agroup__cudautils_html_ga3769a812992df47886894f48f26edf6f"><div class="ttname"><a href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">claragenomics::cudautils::gpu_assert</a></div><div class="ttdeci">void gpu_assert(cudaError_t code, const char *file, int line)</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:50</div></div>
+<div class="ttc" id="acudautils_8hpp_html_a9ace0fde2c5420f52b40ca77276943ca"><div class="ttname"><a href="cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca">claragenomics::cudautils::align</a></div><div class="ttdeci">__host__ __device__ __forceinline__ IntType align(const IntType &amp;value)</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:86</div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
diff --git a/docs/cpp/cudaversions_8hpp_source.html b/docs/cpp/cudaversions_8hpp_source.html
index ca86ee6f0..3edcf906e 100644
--- a/docs/cpp/cudaversions_8hpp_source.html
+++ b/docs/cpp/cudaversions_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_000009_000005.html b/docs/cpp/dir_000009_000005.html
new file mode 100644
index 000000000..da5c38bb0
--- /dev/null
+++ b/docs/cpp/dir_000009_000005.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: common/utils -&gt; logging Relation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html">common</a></li><li class="navelem"><a class="el" href="dir_85effdddc426fd82e3610be0948fd413.html">utils</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="contents">
+<h3>utils &rarr; logging Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in common/utils</th><th class="dirtab">Includes file in common/logging</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html">include</a>&#160;/&#160;<a class="el" href="dir_8e216217187728c84aa14a4942da12a2.html">claragenomics</a>&#160;/&#160;<a class="el" href="dir_657c9b9511f57ce884717ee8b069b43d.html">utils</a>&#160;/&#160;<a class="el" href="cudautils_8hpp.html">cudautils.hpp</a></td><td class="dirtab"><a class="el" href="dir_147746a3e1d59bf3271a44362df8a4c9.html">include</a>&#160;/&#160;<a class="el" href="dir_eb42830a1028b9a58498a5b4f93061b6.html">claragenomics</a>&#160;/&#160;<a class="el" href="dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html">logging</a>&#160;/&#160;<a class="el" href="logging_8hpp.html">logging.hpp</a></td></tr></table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/dir_000010_000005.html b/docs/cpp/dir_000010_000005.html
new file mode 100644
index 000000000..652c4bc05
--- /dev/null
+++ b/docs/cpp/dir_000010_000005.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: common/utils/include -&gt; logging Relation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html">common</a></li><li class="navelem"><a class="el" href="dir_85effdddc426fd82e3610be0948fd413.html">utils</a></li><li class="navelem"><a class="el" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="contents">
+<h3>include &rarr; logging Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in common/utils/include</th><th class="dirtab">Includes file in common/logging</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="dir_8e216217187728c84aa14a4942da12a2.html">claragenomics</a>&#160;/&#160;<a class="el" href="dir_657c9b9511f57ce884717ee8b069b43d.html">utils</a>&#160;/&#160;<a class="el" href="cudautils_8hpp.html">cudautils.hpp</a></td><td class="dirtab"><a class="el" href="dir_147746a3e1d59bf3271a44362df8a4c9.html">include</a>&#160;/&#160;<a class="el" href="dir_eb42830a1028b9a58498a5b4f93061b6.html">claragenomics</a>&#160;/&#160;<a class="el" href="dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html">logging</a>&#160;/&#160;<a class="el" href="logging_8hpp.html">logging.hpp</a></td></tr></table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/dir_000011_000005.html b/docs/cpp/dir_000011_000005.html
new file mode 100644
index 000000000..f0ca65f1a
--- /dev/null
+++ b/docs/cpp/dir_000011_000005.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: common/utils/include/claragenomics -&gt; logging Relation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html">common</a></li><li class="navelem"><a class="el" href="dir_85effdddc426fd82e3610be0948fd413.html">utils</a></li><li class="navelem"><a class="el" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html">include</a></li><li class="navelem"><a class="el" href="dir_8e216217187728c84aa14a4942da12a2.html">claragenomics</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="contents">
+<h3>claragenomics &rarr; logging Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in common/utils/include/claragenomics</th><th class="dirtab">Includes file in common/logging</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="dir_657c9b9511f57ce884717ee8b069b43d.html">utils</a>&#160;/&#160;<a class="el" href="cudautils_8hpp.html">cudautils.hpp</a></td><td class="dirtab"><a class="el" href="dir_147746a3e1d59bf3271a44362df8a4c9.html">include</a>&#160;/&#160;<a class="el" href="dir_eb42830a1028b9a58498a5b4f93061b6.html">claragenomics</a>&#160;/&#160;<a class="el" href="dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html">logging</a>&#160;/&#160;<a class="el" href="logging_8hpp.html">logging.hpp</a></td></tr></table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/dir_000012_000005.html b/docs/cpp/dir_000012_000005.html
new file mode 100644
index 000000000..c4786a2f3
--- /dev/null
+++ b/docs/cpp/dir_000012_000005.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: common/utils/include/claragenomics/utils -&gt; logging Relation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html">common</a></li><li class="navelem"><a class="el" href="dir_85effdddc426fd82e3610be0948fd413.html">utils</a></li><li class="navelem"><a class="el" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html">include</a></li><li class="navelem"><a class="el" href="dir_8e216217187728c84aa14a4942da12a2.html">claragenomics</a></li><li class="navelem"><a class="el" href="dir_657c9b9511f57ce884717ee8b069b43d.html">utils</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="contents">
+<h3>utils &rarr; logging Relation</h3><table class="dirtab"><tr class="dirtab"><th class="dirtab">File in common/utils/include/claragenomics/utils</th><th class="dirtab">Includes file in common/logging</th></tr><tr class="dirtab"><td class="dirtab"><a class="el" href="cudautils_8hpp.html">cudautils.hpp</a></td><td class="dirtab"><a class="el" href="dir_147746a3e1d59bf3271a44362df8a4c9.html">include</a>&#160;/&#160;<a class="el" href="dir_eb42830a1028b9a58498a5b4f93061b6.html">claragenomics</a>&#160;/&#160;<a class="el" href="dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html">logging</a>&#160;/&#160;<a class="el" href="logging_8hpp.html">logging.hpp</a></td></tr></table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/dir_00faf102fbd78ece25aa2d8f2597f59b.html b/docs/cpp/dir_00faf102fbd78ece25aa2d8f2597f59b.html
index 17386de03..b8afb1951 100644
--- a/docs/cpp/dir_00faf102fbd78ece25aa2d8f2597f59b.html
+++ b/docs/cpp/dir_00faf102fbd78ece25aa2d8f2597f59b.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_147746a3e1d59bf3271a44362df8a4c9.html b/docs/cpp/dir_147746a3e1d59bf3271a44362df8a4c9.html
index b18d969d0..3cba5faaa 100644
--- a/docs/cpp/dir_147746a3e1d59bf3271a44362df8a4c9.html
+++ b/docs/cpp/dir_147746a3e1d59bf3271a44362df8a4c9.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_1f71e23d64293220a8931e396f64ac18.html b/docs/cpp/dir_1f71e23d64293220a8931e396f64ac18.html
index 379a5f2e4..131905df8 100644
--- a/docs/cpp/dir_1f71e23d64293220a8931e396f64ac18.html
+++ b/docs/cpp/dir_1f71e23d64293220a8931e396f64ac18.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_2312589fb962dec58b1579fafe6a300a.html b/docs/cpp/dir_2312589fb962dec58b1579fafe6a300a.html
index d3d48e52a..e03eb3e06 100644
--- a/docs/cpp/dir_2312589fb962dec58b1579fafe6a300a.html
+++ b/docs/cpp/dir_2312589fb962dec58b1579fafe6a300a.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html b/docs/cpp/dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html
index 8ee5a918a..543b5c4f4 100644
--- a/docs/cpp/dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html
+++ b/docs/cpp/dir_2e08afdf66b3501ebb3a28ee9bd47f5a.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_46ada5e69ffe047ce1b425fcb02bc946.html b/docs/cpp/dir_46ada5e69ffe047ce1b425fcb02bc946.html
index 22dcf41d5..e5ac81b45 100644
--- a/docs/cpp/dir_46ada5e69ffe047ce1b425fcb02bc946.html
+++ b/docs/cpp/dir_46ada5e69ffe047ce1b425fcb02bc946.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_496653a55fb037d863eb64e0cef0e330.html b/docs/cpp/dir_496653a55fb037d863eb64e0cef0e330.html
index 10be13d7d..9d103b7ef 100644
--- a/docs/cpp/dir_496653a55fb037d863eb64e0cef0e330.html
+++ b/docs/cpp/dir_496653a55fb037d863eb64e0cef0e330.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_5b3882c99f9a196a3d557147d3c04ffd.html b/docs/cpp/dir_5b3882c99f9a196a3d557147d3c04ffd.html
index ba0784a92..fcaf419b6 100644
--- a/docs/cpp/dir_5b3882c99f9a196a3d557147d3c04ffd.html
+++ b/docs/cpp/dir_5b3882c99f9a196a3d557147d3c04ffd.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_5d9177f36fbce0c085b11d352d248d8a.html b/docs/cpp/dir_5d9177f36fbce0c085b11d352d248d8a.html
index ce77d06f6..87d557558 100644
--- a/docs/cpp/dir_5d9177f36fbce0c085b11d352d248d8a.html
+++ b/docs/cpp/dir_5d9177f36fbce0c085b11d352d248d8a.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_5e4218589a49834876e69d5129e12742.html b/docs/cpp/dir_5e4218589a49834876e69d5129e12742.html
index 463201154..3b718dc3f 100644
--- a/docs/cpp/dir_5e4218589a49834876e69d5129e12742.html
+++ b/docs/cpp/dir_5e4218589a49834876e69d5129e12742.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d.html b/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d.html
index 4c1f4bd61..cc1651ced 100644
--- a/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d.html
+++ b/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -70,6 +70,17 @@
 <div class="title">utils Directory Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Directory dependency graph for utils:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_657c9b9511f57ce884717ee8b069b43d_dep.png" border="0" usemap="#dir__657c9b9511f57ce884717ee8b069b43d__dep" alt="common/utils/include/claragenomics/utils"/></div>
+<map name="dir__657c9b9511f57ce884717ee8b069b43d__dep" id="dir__657c9b9511f57ce884717ee8b069b43d__dep">
+<area shape="rect" href="dir_657c9b9511f57ce884717ee8b069b43d.html" title="utils" alt="" coords="33,52,105,100"/>
+<area shape="rect" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="33,148,105,196"/>
+<area shape="rect" href="dir_000012_000005.html" title="1" alt="" coords="74,122,82,137"/>
+<area shape="rect" href="dir_8e216217187728c84aa14a4942da12a2.html" title="claragenomics" alt="" coords="16,16,123,111"/>
+</map>
+</div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
 Files</h2></td></tr>
diff --git a/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.map b/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.map
new file mode 100644
index 000000000..b914cfef5
--- /dev/null
+++ b/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.map
@@ -0,0 +1,6 @@
+<map id="common/utils/include/claragenomics/utils" name="common/utils/include/claragenomics/utils">
+<area shape="rect" id="node1" href="dir_657c9b9511f57ce884717ee8b069b43d.html" title="utils" alt="" coords="33,52,105,100"/>
+<area shape="rect" id="node2" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="33,148,105,196"/>
+<area shape="rect" id="edge1-headlabel" href="dir_000012_000005.html" title="1" alt="" coords="74,122,82,137"/>
+<area shape="rect" id="clust1" href="dir_8e216217187728c84aa14a4942da12a2.html" title="claragenomics" alt="" coords="16,16,123,111"/>
+</map>
diff --git a/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.md5 b/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.md5
new file mode 100644
index 000000000..0bf1b463c
--- /dev/null
+++ b/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.md5
@@ -0,0 +1 @@
+c2c8a254264b11236a057fb01a2d070f
\ No newline at end of file
diff --git a/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.png b/docs/cpp/dir_657c9b9511f57ce884717ee8b069b43d_dep.png
new file mode 100644
index 0000000000000000000000000000000000000000..627c9277f0710f42ce752674ef1304c5866f1552
GIT binary patch
literal 3950
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
Lv@odFbB*~2?51MO

literal 0
HcmV?d00001

diff --git a/docs/cpp/dir_85effdddc426fd82e3610be0948fd413.html b/docs/cpp/dir_85effdddc426fd82e3610be0948fd413.html
index 083352174..2bb9680b2 100644
--- a/docs/cpp/dir_85effdddc426fd82e3610be0948fd413.html
+++ b/docs/cpp/dir_85effdddc426fd82e3610be0948fd413.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -70,6 +70,18 @@
 <div class="title">utils Directory Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Directory dependency graph for utils:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_85effdddc426fd82e3610be0948fd413_dep.png" border="0" usemap="#dir__85effdddc426fd82e3610be0948fd413__dep" alt="common/utils"/></div>
+<map name="dir__85effdddc426fd82e3610be0948fd413__dep" id="dir__85effdddc426fd82e3610be0948fd413__dep">
+<area shape="rect" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html" title="include" alt="" coords="37,63,109,111"/>
+<area shape="rect" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="37,159,109,207"/>
+<area shape="rect" href="dir_000010_000005.html" title="1" alt="" coords="78,133,86,147"/>
+<area shape="rect" href="dir_85effdddc426fd82e3610be0948fd413.html" alt="" coords="27,52,216,121"/>
+<area shape="rect" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html" title="common" alt="" coords="16,16,227,132"/>
+</map>
+</div>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.map b/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.map
new file mode 100644
index 000000000..d4fe0f33a
--- /dev/null
+++ b/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.map
@@ -0,0 +1,7 @@
+<map id="common/utils" name="common/utils">
+<area shape="rect" id="node2" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html" title="include" alt="" coords="37,63,109,111"/>
+<area shape="rect" id="node3" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="37,159,109,207"/>
+<area shape="rect" id="edge1-headlabel" href="dir_000010_000005.html" title="1" alt="" coords="78,133,86,147"/>
+<area shape="rect" id="clust2" href="dir_85effdddc426fd82e3610be0948fd413.html" alt="" coords="27,52,216,121"/>
+<area shape="rect" id="clust1" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html" title="common" alt="" coords="16,16,227,132"/>
+</map>
diff --git a/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.md5 b/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.md5
new file mode 100644
index 000000000..a31c98d1e
--- /dev/null
+++ b/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.md5
@@ -0,0 +1 @@
+8fc4f704e36e3f96e35b86d681f21064
\ No newline at end of file
diff --git a/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.png b/docs/cpp/dir_85effdddc426fd82e3610be0948fd413_dep.png
new file mode 100644
index 0000000000000000000000000000000000000000..42e2b624dba68bf74e0e61706e45ecb7481e6fb6
GIT binary patch
literal 3995
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
Hd-Q(*eoKww

literal 0
HcmV?d00001

diff --git a/docs/cpp/dir_8613eb7afdfdd11650d28f82119ab8e9.html b/docs/cpp/dir_8613eb7afdfdd11650d28f82119ab8e9.html
index 3071b930d..c158aadf3 100644
--- a/docs/cpp/dir_8613eb7afdfdd11650d28f82119ab8e9.html
+++ b/docs/cpp/dir_8613eb7afdfdd11650d28f82119ab8e9.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_899653196ec72b3f195a12edb53c5821.html b/docs/cpp/dir_899653196ec72b3f195a12edb53c5821.html
index a0fd2b34c..bf1fb061d 100644
--- a/docs/cpp/dir_899653196ec72b3f195a12edb53c5821.html
+++ b/docs/cpp/dir_899653196ec72b3f195a12edb53c5821.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_8d2f594888f36d792a9b4a212d391f7f.html b/docs/cpp/dir_8d2f594888f36d792a9b4a212d391f7f.html
index b556dcc95..fc92d65dc 100644
--- a/docs/cpp/dir_8d2f594888f36d792a9b4a212d391f7f.html
+++ b/docs/cpp/dir_8d2f594888f36d792a9b4a212d391f7f.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_8e216217187728c84aa14a4942da12a2.html b/docs/cpp/dir_8e216217187728c84aa14a4942da12a2.html
index ef2dccb33..b5a7fcc2e 100644
--- a/docs/cpp/dir_8e216217187728c84aa14a4942da12a2.html
+++ b/docs/cpp/dir_8e216217187728c84aa14a4942da12a2.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -70,6 +70,18 @@
 <div class="title">claragenomics Directory Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Directory dependency graph for claragenomics:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_8e216217187728c84aa14a4942da12a2_dep.png" border="0" usemap="#dir__8e216217187728c84aa14a4942da12a2__dep" alt="common/utils/include/claragenomics"/></div>
+<map name="dir__8e216217187728c84aa14a4942da12a2__dep" id="dir__8e216217187728c84aa14a4942da12a2__dep">
+<area shape="rect" href="dir_657c9b9511f57ce884717ee8b069b43d.html" title="utils" alt="" coords="37,63,109,111"/>
+<area shape="rect" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="37,159,109,207"/>
+<area shape="rect" href="dir_000012_000005.html" title="1" alt="" coords="78,133,86,147"/>
+<area shape="rect" href="dir_8e216217187728c84aa14a4942da12a2.html" alt="" coords="27,52,251,121"/>
+<area shape="rect" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html" title="include" alt="" coords="16,16,261,132"/>
+</map>
+</div>
 <table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
 Directories</h2></td></tr>
diff --git a/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.map b/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.map
new file mode 100644
index 000000000..e77cf2fbb
--- /dev/null
+++ b/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.map
@@ -0,0 +1,7 @@
+<map id="common/utils/include/claragenomics" name="common/utils/include/claragenomics">
+<area shape="rect" id="node2" href="dir_657c9b9511f57ce884717ee8b069b43d.html" title="utils" alt="" coords="37,63,109,111"/>
+<area shape="rect" id="node3" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="37,159,109,207"/>
+<area shape="rect" id="edge1-headlabel" href="dir_000012_000005.html" title="1" alt="" coords="78,133,86,147"/>
+<area shape="rect" id="clust2" href="dir_8e216217187728c84aa14a4942da12a2.html" alt="" coords="27,52,251,121"/>
+<area shape="rect" id="clust1" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html" title="include" alt="" coords="16,16,261,132"/>
+</map>
diff --git a/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.md5 b/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.md5
new file mode 100644
index 000000000..5a5e18a85
--- /dev/null
+++ b/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.md5
@@ -0,0 +1 @@
+c37380b92d77e75e28149d23d8f3e363
\ No newline at end of file
diff --git a/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.png b/docs/cpp/dir_8e216217187728c84aa14a4942da12a2_dep.png
new file mode 100644
index 0000000000000000000000000000000000000000..8b172e89269191b46c61d351a5e0c8dc975a3307
GIT binary patch
literal 4438
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
ZNMsCN6nrzx4``Ht)ReX1#fs*y{{t5~#O?q9

literal 0
HcmV?d00001

diff --git a/docs/cpp/dir_9d5ac01351caa32cb63ccb42b8477d37.html b/docs/cpp/dir_9d5ac01351caa32cb63ccb42b8477d37.html
index 5807c57de..930b6574c 100644
--- a/docs/cpp/dir_9d5ac01351caa32cb63ccb42b8477d37.html
+++ b/docs/cpp/dir_9d5ac01351caa32cb63ccb42b8477d37.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_bc4a239385bd2ceeb0f261c69ca3e796.html b/docs/cpp/dir_bc4a239385bd2ceeb0f261c69ca3e796.html
index 05d7667fe..d2530ac05 100644
--- a/docs/cpp/dir_bc4a239385bd2ceeb0f261c69ca3e796.html
+++ b/docs/cpp/dir_bc4a239385bd2ceeb0f261c69ca3e796.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html b/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html
index 8929c4a23..2582d680b 100644
--- a/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html
+++ b/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -70,6 +70,18 @@
 <div class="title">common Directory Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Directory dependency graph for common:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png" border="0" usemap="#dir__bdd9a5d540de89e9fe90efdfc6973a4f__dep" alt="common"/></div>
+<map name="dir__bdd9a5d540de89e9fe90efdfc6973a4f__dep" id="dir__bdd9a5d540de89e9fe90efdfc6973a4f__dep">
+<area shape="rect" href="dir_e48b4a17d37f1148862a6ed3f83bdb40.html" title="io" alt="" coords="123,27,195,75"/>
+<area shape="rect" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="27,123,99,171"/>
+<area shape="rect" href="dir_85effdddc426fd82e3610be0948fd413.html" title="utils" alt="" coords="27,27,99,75"/>
+<area shape="rect" href="dir_000009_000005.html" title="1" alt="" coords="67,97,75,111"/>
+<area shape="rect" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html" alt="" coords="16,16,301,181"/>
+</map>
+</div>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map b/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map
new file mode 100644
index 000000000..736d7cda9
--- /dev/null
+++ b/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.map
@@ -0,0 +1,7 @@
+<map id="common" name="common">
+<area shape="rect" id="node2" href="dir_e48b4a17d37f1148862a6ed3f83bdb40.html" title="io" alt="" coords="123,27,195,75"/>
+<area shape="rect" id="node3" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="27,123,99,171"/>
+<area shape="rect" id="node4" href="dir_85effdddc426fd82e3610be0948fd413.html" title="utils" alt="" coords="27,27,99,75"/>
+<area shape="rect" id="edge1-headlabel" href="dir_000009_000005.html" title="1" alt="" coords="67,97,75,111"/>
+<area shape="rect" id="clust1" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html" alt="" coords="16,16,301,181"/>
+</map>
diff --git a/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5 b/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5
new file mode 100644
index 000000000..864aed3de
--- /dev/null
+++ b/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.md5
@@ -0,0 +1 @@
+d70a586e2dfe03ef872066075319ab98
\ No newline at end of file
diff --git a/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png b/docs/cpp/dir_bdd9a5d540de89e9fe90efdfc6973a4f_dep.png
new file mode 100644
index 0000000000000000000000000000000000000000..50fd0f30acf417d3b877de108c4f756bae1f4a7d
GIT binary patch
literal 3187
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
N-7v8-CSSSz@LzsCc%%RT

literal 0
HcmV?d00001

diff --git a/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386.html b/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386.html
index c60ed944b..7127678d4 100644
--- a/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386.html
+++ b/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -70,6 +70,18 @@
 <div class="title">include Directory Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
+<div class="dynheader">
+Directory dependency graph for include:</div>
+<div class="dyncontent">
+<div class="center"><img src="dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.png" border="0" usemap="#dir__cbd0fd5fcc23422502de88d4fe6e7386__dep" alt="common/utils/include"/></div>
+<map name="dir__cbd0fd5fcc23422502de88d4fe6e7386__dep" id="dir__cbd0fd5fcc23422502de88d4fe6e7386__dep">
+<area shape="rect" href="dir_8e216217187728c84aa14a4942da12a2.html" title="claragenomics" alt="" coords="37,63,144,111"/>
+<area shape="rect" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="55,159,127,207"/>
+<area shape="rect" href="dir_000011_000005.html" title="1" alt="" coords="95,133,103,147"/>
+<area shape="rect" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html" alt="" coords="27,52,251,121"/>
+<area shape="rect" href="dir_85effdddc426fd82e3610be0948fd413.html" title="utils" alt="" coords="16,16,261,132"/>
+</map>
+</div>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.map b/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.map
new file mode 100644
index 000000000..583a12865
--- /dev/null
+++ b/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.map
@@ -0,0 +1,7 @@
+<map id="common/utils/include" name="common/utils/include">
+<area shape="rect" id="node2" href="dir_8e216217187728c84aa14a4942da12a2.html" title="claragenomics" alt="" coords="37,63,144,111"/>
+<area shape="rect" id="node3" href="dir_fd0b9fd7ef60505b59d31114acc22533.html" title="logging" alt="" coords="55,159,127,207"/>
+<area shape="rect" id="edge1-headlabel" href="dir_000011_000005.html" title="1" alt="" coords="95,133,103,147"/>
+<area shape="rect" id="clust2" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html" alt="" coords="27,52,251,121"/>
+<area shape="rect" id="clust1" href="dir_85effdddc426fd82e3610be0948fd413.html" title="utils" alt="" coords="16,16,261,132"/>
+</map>
diff --git a/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.md5 b/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.md5
new file mode 100644
index 000000000..7a08ffae1
--- /dev/null
+++ b/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.md5
@@ -0,0 +1 @@
+e4a825842085fdd71ca983d21ae13190
\ No newline at end of file
diff --git a/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.png b/docs/cpp/dir_cbd0fd5fcc23422502de88d4fe6e7386_dep.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2e6f6b6e9b6ffa75b68bbe0cd1ac67956a2875b
GIT binary patch
literal 4451
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
R#;yrKSKCml3jXld{{XWd!#4l`

literal 0
HcmV?d00001

diff --git a/docs/cpp/dir_e25067817972d6e3bb7efd580b3302c4.html b/docs/cpp/dir_e25067817972d6e3bb7efd580b3302c4.html
index a8631a601..3be552773 100644
--- a/docs/cpp/dir_e25067817972d6e3bb7efd580b3302c4.html
+++ b/docs/cpp/dir_e25067817972d6e3bb7efd580b3302c4.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_e48b4a17d37f1148862a6ed3f83bdb40.html b/docs/cpp/dir_e48b4a17d37f1148862a6ed3f83bdb40.html
index 8bba1aeb3..7167dc710 100644
--- a/docs/cpp/dir_e48b4a17d37f1148862a6ed3f83bdb40.html
+++ b/docs/cpp/dir_e48b4a17d37f1148862a6ed3f83bdb40.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_eb42830a1028b9a58498a5b4f93061b6.html b/docs/cpp/dir_eb42830a1028b9a58498a5b4f93061b6.html
index a324f6f72..6ffb9142b 100644
--- a/docs/cpp/dir_eb42830a1028b9a58498a5b4f93061b6.html
+++ b/docs/cpp/dir_eb42830a1028b9a58498a5b4f93061b6.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_f76c88603f4782e2554e1f696f75813e.html b/docs/cpp/dir_f76c88603f4782e2554e1f696f75813e.html
index 52e71ec1c..2364189ee 100644
--- a/docs/cpp/dir_f76c88603f4782e2554e1f696f75813e.html
+++ b/docs/cpp/dir_f76c88603f4782e2554e1f696f75813e.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/dir_fd0b9fd7ef60505b59d31114acc22533.html b/docs/cpp/dir_fd0b9fd7ef60505b59d31114acc22533.html
index 155f7d6f6..442a1ae71 100644
--- a/docs/cpp/dir_fd0b9fd7ef60505b59d31114acc22533.html
+++ b/docs/cpp/dir_fd0b9fd7ef60505b59d31114acc22533.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/fasta__parser_8hpp_source.html b/docs/cpp/fasta__parser_8hpp_source.html
index 34695c45f..71b9b84ea 100644
--- a/docs/cpp/fasta__parser_8hpp_source.html
+++ b/docs/cpp/fasta__parser_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -110,7 +110,7 @@
 <div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;std::unique_ptr&lt;FastaParser&gt; create_fasta_parser(<span class="keyword">const</span> std::string&amp; fasta_file);</div>
 <div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160; </div>
 <div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;} <span class="comment">// namespace io</span></div>
-<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;} <span class="comment">// namespace claragenomicsi</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
 </div><!-- fragment --></div><!-- contents -->
 <div class="ttc" id="astructclaragenomics_1_1io_1_1FastaSequence_html"><div class="ttname"><a href="structclaragenomics_1_1io_1_1FastaSequence.html">claragenomics::io::FastaSequence</a></div><div class="ttdoc">A structure to hold details of a single FASTA entry.</div><div class="ttdef"><b>Definition:</b> fasta_parser.hpp:21</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1io_1_1FastaParser_html_a213af5341107ea254176add6dd1dfd2d"><div class="ttname"><a href="classclaragenomics_1_1io_1_1FastaParser.html#a213af5341107ea254176add6dd1dfd2d">claragenomics::io::FastaParser::~FastaParser</a></div><div class="ttdeci">virtual ~FastaParser()=default</div><div class="ttdoc">FastaParser implementations can have custom destructors, so delcare the abstract dtor as default.</div></div>
diff --git a/docs/cpp/files.html b/docs/cpp/files.html
index 2bfbdbe72..b21fd2c5b 100644
--- a/docs/cpp/files.html
+++ b/docs/cpp/files.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -86,26 +86,28 @@
 <tr id="row_0_2_0_0_0_0_"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="cudautils_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="cudautils_8hpp.html" target="_self">cudautils.hpp</a></td><td class="desc"></td></tr>
 <tr id="row_0_2_0_0_0_1_" class="even"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="cudaversions_8hpp_source.html"><span class="icondoc"></span></a><b>cudaversions.hpp</b></td><td class="desc"></td></tr>
 <tr id="row_0_2_0_0_0_2_"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="genomeutils_8hpp_source.html"><span class="icondoc"></span></a><b>genomeutils.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_0_2_0_0_0_3_" class="even"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="mathutils_8hpp_source.html"><span class="icondoc"></span></a><b>mathutils.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_0_2_0_0_0_4_"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="signed__integer__utils_8hpp_source.html"><span class="icondoc"></span></a><b>signed_integer_utils.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_0_2_0_0_0_5_" class="even"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="stringutils_8hpp_source.html"><span class="icondoc"></span></a><b>stringutils.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_1_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</span><a class="el" href="dir_bc4a239385bd2ceeb0f261c69ca3e796.html" target="_self">cudaaligner</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_0_" class="arrow" onclick="toggleFolder('1_0_')">&#9660;</span><span id="img_1_0_" class="iconfopen" onclick="toggleFolder('1_0_')">&#160;</span><a class="el" href="dir_5b3882c99f9a196a3d557147d3c04ffd.html" target="_self">include</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_0_" class="arrow" onclick="toggleFolder('1_0_0_')">&#9660;</span><span id="img_1_0_0_" class="iconfopen" onclick="toggleFolder('1_0_0_')">&#160;</span><a class="el" href="dir_e25067817972d6e3bb7efd580b3302c4.html" target="_self">claragenomics</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_0_0_" class="arrow" onclick="toggleFolder('1_0_0_0_')">&#9660;</span><span id="img_1_0_0_0_" class="iconfopen" onclick="toggleFolder('1_0_0_0_')">&#160;</span><a class="el" href="dir_899653196ec72b3f195a12edb53c5821.html" target="_self">cudaaligner</a></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_0_0_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="aligner_8hpp_source.html"><span class="icondoc"></span></a><b>aligner.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_0_1_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="alignment_8hpp_source.html"><span class="icondoc"></span></a><b>alignment.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_1_0_0_0_2_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="cudaaligner_8hpp_source.html"><span class="icondoc"></span></a><b>cudaaligner.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span id="img_2_" class="iconfopen" onclick="toggleFolder('2_')">&#160;</span><a class="el" href="dir_2312589fb962dec58b1579fafe6a300a.html" target="_self">cudamapper</a></td><td class="desc"></td></tr>
-<tr id="row_2_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_0_" class="arrow" onclick="toggleFolder('2_0_')">&#9660;</span><span id="img_2_0_" class="iconfopen" onclick="toggleFolder('2_0_')">&#160;</span><a class="el" href="dir_46ada5e69ffe047ce1b425fcb02bc946.html" target="_self">include</a></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_2_0_0_" class="arrow" onclick="toggleFolder('2_0_0_')">&#9660;</span><span id="img_2_0_0_" class="iconfopen" onclick="toggleFolder('2_0_0_')">&#160;</span><a class="el" href="dir_00faf102fbd78ece25aa2d8f2597f59b.html" target="_self">claragenomics</a></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_2_0_0_0_" class="arrow" onclick="toggleFolder('2_0_0_0_')">&#9660;</span><span id="img_2_0_0_0_" class="iconfopen" onclick="toggleFolder('2_0_0_0_')">&#160;</span><a class="el" href="dir_5d9177f36fbce0c085b11d352d248d8a.html" target="_self">cudamapper</a></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_0_0_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="cudamapper_8hpp_source.html"><span class="icondoc"></span></a><b>cudamapper.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_0_1_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="index_8hpp_source.html"><span class="icondoc"></span></a><b>index.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_0_2_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="overlapper_8hpp_source.html"><span class="icondoc"></span></a><b>overlapper.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_0_3_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="sequence_8hpp_source.html"><span class="icondoc"></span></a><b>sequence.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_0_4_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="sketch__element_8hpp_source.html"><span class="icondoc"></span></a><b>sketch_element.hpp</b></td><td class="desc"></td></tr>
-<tr id="row_2_0_0_0_5_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="types_8hpp_source.html"><span class="icondoc"></span></a><b>types.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_0_0_3_" class="even"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="graph_8hpp_source.html"><span class="icondoc"></span></a><b>graph.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_0_0_4_"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="mathutils_8hpp_source.html"><span class="icondoc"></span></a><b>mathutils.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_0_0_5_" class="even"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="signed__integer__utils_8hpp_source.html"><span class="icondoc"></span></a><b>signed_integer_utils.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_0_0_6_"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><a href="stringutils_8hpp_source.html"><span class="icondoc"></span></a><b>stringutils.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</span><a class="el" href="dir_bc4a239385bd2ceeb0f261c69ca3e796.html" target="_self">cudaaligner</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_0_" class="arrow" onclick="toggleFolder('1_0_')">&#9660;</span><span id="img_1_0_" class="iconfopen" onclick="toggleFolder('1_0_')">&#160;</span><a class="el" href="dir_5b3882c99f9a196a3d557147d3c04ffd.html" target="_self">include</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_0_" class="arrow" onclick="toggleFolder('1_0_0_')">&#9660;</span><span id="img_1_0_0_" class="iconfopen" onclick="toggleFolder('1_0_0_')">&#160;</span><a class="el" href="dir_e25067817972d6e3bb7efd580b3302c4.html" target="_self">claragenomics</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_0_0_" class="arrow" onclick="toggleFolder('1_0_0_0_')">&#9660;</span><span id="img_1_0_0_0_" class="iconfopen" onclick="toggleFolder('1_0_0_0_')">&#160;</span><a class="el" href="dir_899653196ec72b3f195a12edb53c5821.html" target="_self">cudaaligner</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_0_0_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="aligner_8hpp_source.html"><span class="icondoc"></span></a><b>aligner.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_0_1_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="alignment_8hpp_source.html"><span class="icondoc"></span></a><b>alignment.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_0_2_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="cudaaligner_8hpp_source.html"><span class="icondoc"></span></a><b>cudaaligner.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span id="img_2_" class="iconfopen" onclick="toggleFolder('2_')">&#160;</span><a class="el" href="dir_2312589fb962dec58b1579fafe6a300a.html" target="_self">cudamapper</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_0_" class="arrow" onclick="toggleFolder('2_0_')">&#9660;</span><span id="img_2_0_" class="iconfopen" onclick="toggleFolder('2_0_')">&#160;</span><a class="el" href="dir_46ada5e69ffe047ce1b425fcb02bc946.html" target="_self">include</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_2_0_0_" class="arrow" onclick="toggleFolder('2_0_0_')">&#9660;</span><span id="img_2_0_0_" class="iconfopen" onclick="toggleFolder('2_0_0_')">&#160;</span><a class="el" href="dir_00faf102fbd78ece25aa2d8f2597f59b.html" target="_self">claragenomics</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_2_0_0_0_" class="arrow" onclick="toggleFolder('2_0_0_0_')">&#9660;</span><span id="img_2_0_0_0_" class="iconfopen" onclick="toggleFolder('2_0_0_0_')">&#160;</span><a class="el" href="dir_5d9177f36fbce0c085b11d352d248d8a.html" target="_self">cudamapper</a></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_0_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="cudamapper_8hpp_source.html"><span class="icondoc"></span></a><b>cudamapper.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_1_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="index_8hpp_source.html"><span class="icondoc"></span></a><b>index.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_2_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="matcher_8hpp_source.html"><span class="icondoc"></span></a><b>matcher.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_3_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="overlapper_8hpp_source.html"><span class="icondoc"></span></a><b>overlapper.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_4_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="sequence_8hpp_source.html"><span class="icondoc"></span></a><b>sequence.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_5_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="sketch__element_8hpp_source.html"><span class="icondoc"></span></a><b>sketch_element.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_0_0_6_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a href="types_8hpp_source.html"><span class="icondoc"></span></a><b>types.hpp</b></td><td class="desc"></td></tr>
 <tr id="row_3_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">&#9660;</span><span id="img_3_" class="iconfopen" onclick="toggleFolder('3_')">&#160;</span><a class="el" href="dir_8d2f594888f36d792a9b4a212d391f7f.html" target="_self">cudapoa</a></td><td class="desc"></td></tr>
 <tr id="row_3_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_3_0_" class="arrow" onclick="toggleFolder('3_0_')">&#9660;</span><span id="img_3_0_" class="iconfopen" onclick="toggleFolder('3_0_')">&#160;</span><a class="el" href="dir_8613eb7afdfdd11650d28f82119ab8e9.html" target="_self">include</a></td><td class="desc"></td></tr>
 <tr id="row_3_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_3_0_0_" class="arrow" onclick="toggleFolder('3_0_0_')">&#9660;</span><span id="img_3_0_0_" class="iconfopen" onclick="toggleFolder('3_0_0_')">&#160;</span><a class="el" href="dir_1f71e23d64293220a8931e396f64ac18.html" target="_self">claragenomics</a></td><td class="desc"></td></tr>
diff --git a/docs/cpp/functions.html b/docs/cpp/functions.html
index e9f7dd0d0..cbd0bc573 100644
--- a/docs/cpp/functions.html
+++ b/docs/cpp/functions.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -68,15 +68,25 @@ <h3><a id="index_a"></a>- a -</h3><ul>
 <li>add_alignment()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#adc32085da2b5681f0045d05c43a35f92">claragenomics::cudaaligner::Aligner</a>
 </li>
+<li>add_edge()
+: <a class="el" href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">claragenomics::DirectedGraph</a>
+, <a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">claragenomics::UndirectedGraph</a>
+</li>
 <li>add_poa_group()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0">claragenomics::cudapoa::Batch</a>
 </li>
+<li>adjacent_nodes_
+: <a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">claragenomics::Graph</a>
+</li>
 <li>align_all()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#a8b3c20782b9eaa4c2219fb7ff51772db">claragenomics::cudaaligner::Aligner</a>
 </li>
 <li>Anchor()
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html#af4dc10f114030a8e3a53f3bad3cd20b2">claragenomics::cudamapper::Anchor</a>
 </li>
+<li>anchors()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2">claragenomics::cudamapper::Matcher</a>
+</li>
 </ul>
 
 
@@ -91,11 +101,17 @@ <h3><a id="index_b"></a>- b -</h3><ul>
 
 
 <h3><a id="index_c"></a>- c -</h3><ul>
+<li>cigar_
+: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54">claragenomics::cudamapper::Overlap</a>
+</li>
 <li>convert_to_cigar()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876">claragenomics::cudaaligner::Alignment</a>
 </li>
 <li>create_index()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afc23f3e71c65dc9ed5a9e49cf26ba645">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf">claragenomics::cudamapper::Index</a>
+</li>
+<li>create_matcher()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752">claragenomics::cudamapper::Matcher</a>
 </li>
 <li>create_sequence()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html#a3e4a8fe41b71b13362433360b20115ed">claragenomics::cudamapper::Sequence</a>
@@ -107,6 +123,9 @@ <h3><a id="index_d"></a>- d -</h3><ul>
 <li>data()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html#a45c1a69a18ea6f6fd7a45bad6862bbca">claragenomics::cudamapper::Sequence</a>
 </li>
+<li>directed_edge_exists()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">claragenomics::Graph</a>
+</li>
 <li>direction()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#af4b53bc09f5816c3b81fef1c1abf3fc6">claragenomics::cudamapper::SketchElement</a>
 </li>
@@ -114,7 +133,26 @@ <h3><a id="index_d"></a>- d -</h3><ul>
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a">claragenomics::cudamapper::SketchElement</a>
 </li>
 <li>directions_of_reads()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd">claragenomics::cudamapper::Index</a>
+</li>
+</ul>
+
+
+<h3><a id="index_e"></a>- e -</h3><ul>
+<li>edge_t
+: <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">claragenomics::Graph</a>
+</li>
+<li>edge_weight_t
+: <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">claragenomics::Graph</a>
+</li>
+<li>edges_
+: <a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">claragenomics::Graph</a>
+</li>
+<li>edges_to_dot()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">claragenomics::Graph</a>
+</li>
+<li>empty_
+: <a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">claragenomics::Graph</a>
 </li>
 </ul>
 
@@ -126,6 +164,9 @@ <h3><a id="index_f"></a>- f -</h3><ul>
 <li>first_element_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a3fca81e893b35e0648977b00f21b7e7e">claragenomics::cudamapper::ArrayBlock</a>
 </li>
+<li>first_occurrence_of_representations()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff">claragenomics::cudamapper::Index</a>
+</li>
 <li>format_alignment()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c">claragenomics::cudaaligner::Alignment</a>
 </li>
@@ -136,6 +177,9 @@ <h3><a id="index_g"></a>- g -</h3><ul>
 <li>generate_poa()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09">claragenomics::cudapoa::Batch</a>
 </li>
+<li>get_adjacent_nodes()
+: <a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">claragenomics::Graph</a>
+</li>
 <li>get_alignment()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70">claragenomics::cudaaligner::Alignment</a>
 </li>
@@ -148,14 +192,26 @@ <h3><a id="index_g"></a>- g -</h3><ul>
 <li>get_consensus()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0">claragenomics::cudapoa::Batch</a>
 </li>
+<li>get_edges()
+: <a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">claragenomics::Graph</a>
+</li>
+<li>get_graphs()
+: <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16">claragenomics::cudapoa::Batch</a>
+</li>
 <li>get_msa()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">claragenomics::cudapoa::Batch</a>
 </li>
+<li>get_node_ids()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">claragenomics::Graph</a>
+</li>
+<li>get_node_label()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">claragenomics::Graph</a>
+</li>
 <li>get_num_seqences()
 : <a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html#a04f6deee5108374fa485487e06e759e5">claragenomics::io::FastaParser</a>
 </li>
 <li>get_overlaps()
-: <a class="el" href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">claragenomics::cudamapper::Overlapper</a>
+: <a class="el" href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">claragenomics::cudamapper::Overlapper</a>
 </li>
 <li>get_query_sequence()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780">claragenomics::cudaaligner::Alignment</a>
@@ -189,12 +245,6 @@ <h3><a id="index_m"></a>- m -</h3><ul>
 <li>maximum_kmer_size()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">claragenomics::cudamapper::Index</a>
 </li>
-<li>maximum_representation()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152">claragenomics::cudamapper::Index</a>
-</li>
-<li>minimum_representation()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824">claragenomics::cudamapper::Index</a>
-</li>
 </ul>
 
 
@@ -203,6 +253,15 @@ <h3><a id="index_n"></a>- n -</h3><ul>
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html#ab9663611f0d6c691e40228c5a08cf0e2">claragenomics::cudamapper::Sequence</a>
 , <a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html#aea0664ca6e856203c4b954b519183bec">claragenomics::io::FastaSequence</a>
 </li>
+<li>node_id_t
+: <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">claragenomics::Graph</a>
+</li>
+<li>node_labels_
+: <a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">claragenomics::Graph</a>
+</li>
+<li>node_labels_to_dot()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">claragenomics::Graph</a>
+</li>
 <li>num_residues_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d">claragenomics::cudamapper::Overlap</a>
 </li>
@@ -213,6 +272,9 @@ <h3><a id="index_n"></a>- n -</h3><ul>
 
 
 <h3><a id="index_o"></a>- o -</h3><ul>
+<li>operator()()
+: <a class="el" href="structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61">claragenomics::PairHash</a>
+</li>
 <li>overlap_complete
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360">claragenomics::cudamapper::Overlap</a>
 </li>
@@ -224,7 +286,7 @@ <h3><a id="index_p"></a>- p -</h3><ul>
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#a0ddea36eed82ea3a9d1fa7ace61051bc">claragenomics::cudamapper::SketchElement</a>
 </li>
 <li>positions_in_reads()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183">claragenomics::cudamapper::Index</a>
 </li>
 <li>print_paf()
 : <a class="el" href="group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371">claragenomics::cudamapper::Overlapper</a>
@@ -247,7 +309,7 @@ <h3><a id="index_q"></a>- q -</h3><ul>
 , <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>query_read_name_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df">claragenomics::cudamapper::Overlap</a>
+: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>query_start_position_in_read_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e">claragenomics::cudamapper::Overlap</a>
@@ -256,23 +318,17 @@ <h3><a id="index_q"></a>- q -</h3><ul>
 
 
 <h3><a id="index_r"></a>- r -</h3><ul>
-<li>reached_end_of_input()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277">claragenomics::cudamapper::Index</a>
-</li>
 <li>read_id()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#af5f2e8fc8df725b336833930baf3cd39">claragenomics::cudamapper::SketchElement</a>
 </li>
-<li>read_id_and_representation_to_sketch_elements()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24">claragenomics::cudamapper::Index</a>
-</li>
 <li>read_id_to_read_length()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4">claragenomics::cudamapper::Index</a>
 </li>
 <li>read_id_to_read_name()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd">claragenomics::cudamapper::Index</a>
 </li>
 <li>read_ids()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401">claragenomics::cudamapper::Index</a>
 </li>
 <li>relative_strand
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">claragenomics::cudamapper::Overlap</a>
@@ -280,8 +336,8 @@ <h3><a id="index_r"></a>- r -</h3><ul>
 <li>representation()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#abb3c8927594ba5f077c4443c229e0730">claragenomics::cudamapper::SketchElement</a>
 </li>
-<li>representation_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a839754dc6ed7d150ae06abf377e39c62">claragenomics::cudamapper::Index::RepresentationToSketchElements</a>
+<li>representations()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80">claragenomics::cudamapper::Index</a>
 </li>
 <li>reset()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#a9f7f056a269c32c909a9bfb7132ba439">claragenomics::cudaaligner::Aligner</a>
@@ -298,11 +354,12 @@ <h3><a id="index_s"></a>- s -</h3><ul>
 : <a class="el" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">claragenomics::cudapoa::Entry</a>
 , <a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html#a9ac5e894fc08745c47b326a7038aa488">claragenomics::io::FastaSequence</a>
 </li>
-<li>sketch_elements_for_representation_and_all_read_ids_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a604d5227c7fe6412e982fb31a1fee549">claragenomics::cudamapper::Index::RepresentationToSketchElements</a>
+<li>serialize_to_dot()
+: <a class="el" href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">claragenomics::DirectedGraph</a>
+, <a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">claragenomics::UndirectedGraph</a>
 </li>
-<li>sketch_elements_for_representation_and_read_id_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a84ff4998d9fec875845a20272d209b30">claragenomics::cudamapper::Index::RepresentationToSketchElements</a>
+<li>set_node_label()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">claragenomics::Graph</a>
 </li>
 <li>sync_alignments()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#ac929b7ba836dfac74d8975f652563482">claragenomics::cudaaligner::Aligner</a>
@@ -325,7 +382,7 @@ <h3><a id="index_t"></a>- t -</h3><ul>
 , <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>target_read_name_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c">claragenomics::cudamapper::Overlap</a>
+: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>target_start_position_in_read_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c">claragenomics::cudamapper::Overlap</a>
@@ -333,6 +390,16 @@ <h3><a id="index_t"></a>- t -</h3><ul>
 </ul>
 
 
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>unique_representations()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a">claragenomics::cudamapper::Index</a>
+</li>
+<li>update_adject_nodes()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">claragenomics::Graph</a>
+</li>
+</ul>
+
+
 <h3><a id="index_w"></a>- w -</h3><ul>
 <li>weights
 : <a class="el" href="structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277">claragenomics::cudapoa::Entry</a>
@@ -344,6 +411,9 @@ <h3><a id="index__7E"></a>- ~ -</h3><ul>
 <li>~Aligner()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#aaae329eae2ed3e364db643163755e987">claragenomics::cudaaligner::Aligner</a>
 </li>
+<li>~Alignment()
+: <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8">claragenomics::cudaaligner::Alignment</a>
+</li>
 <li>~Batch()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1">claragenomics::cudapoa::Batch</a>
 </li>
@@ -353,6 +423,9 @@ <h3><a id="index__7E"></a>- ~ -</h3><ul>
 <li>~Index()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">claragenomics::cudamapper::Index</a>
 </li>
+<li>~Matcher()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab">claragenomics::cudamapper::Matcher</a>
+</li>
 <li>~Overlapper()
 : <a class="el" href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">claragenomics::cudamapper::Overlapper</a>
 </li>
diff --git a/docs/cpp/functions_enum.html b/docs/cpp/functions_enum.html
index 607870943..cee4d5e43 100644
--- a/docs/cpp/functions_enum.html
+++ b/docs/cpp/functions_enum.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/functions_func.html b/docs/cpp/functions_func.html
index 6f4552df0..455fcf75e 100644
--- a/docs/cpp/functions_func.html
+++ b/docs/cpp/functions_func.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -68,6 +68,10 @@ <h3><a id="index_a"></a>- a -</h3><ul>
 <li>add_alignment()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#adc32085da2b5681f0045d05c43a35f92">claragenomics::cudaaligner::Aligner</a>
 </li>
+<li>add_edge()
+: <a class="el" href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">claragenomics::DirectedGraph</a>
+, <a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">claragenomics::UndirectedGraph</a>
+</li>
 <li>add_poa_group()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0">claragenomics::cudapoa::Batch</a>
 </li>
@@ -77,6 +81,9 @@ <h3><a id="index_a"></a>- a -</h3><ul>
 <li>Anchor()
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html#af4dc10f114030a8e3a53f3bad3cd20b2">claragenomics::cudamapper::Anchor</a>
 </li>
+<li>anchors()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2">claragenomics::cudamapper::Matcher</a>
+</li>
 </ul>
 
 
@@ -92,7 +99,10 @@ <h3><a id="index_c"></a>- c -</h3><ul>
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876">claragenomics::cudaaligner::Alignment</a>
 </li>
 <li>create_index()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afc23f3e71c65dc9ed5a9e49cf26ba645">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf">claragenomics::cudamapper::Index</a>
+</li>
+<li>create_matcher()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752">claragenomics::cudamapper::Matcher</a>
 </li>
 <li>create_sequence()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html#a3e4a8fe41b71b13362433360b20115ed">claragenomics::cudamapper::Sequence</a>
@@ -104,11 +114,21 @@ <h3><a id="index_d"></a>- d -</h3><ul>
 <li>data()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html#a45c1a69a18ea6f6fd7a45bad6862bbca">claragenomics::cudamapper::Sequence</a>
 </li>
+<li>directed_edge_exists()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">claragenomics::Graph</a>
+</li>
 <li>direction()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#af4b53bc09f5816c3b81fef1c1abf3fc6">claragenomics::cudamapper::SketchElement</a>
 </li>
 <li>directions_of_reads()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd">claragenomics::cudamapper::Index</a>
+</li>
+</ul>
+
+
+<h3><a id="index_e"></a>- e -</h3><ul>
+<li>edges_to_dot()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">claragenomics::Graph</a>
 </li>
 </ul>
 
@@ -117,6 +137,9 @@ <h3><a id="index_f"></a>- f -</h3><ul>
 <li>filter_overlaps()
 : <a class="el" href="group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c">claragenomics::cudamapper::Overlapper</a>
 </li>
+<li>first_occurrence_of_representations()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff">claragenomics::cudamapper::Index</a>
+</li>
 <li>format_alignment()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c">claragenomics::cudaaligner::Alignment</a>
 </li>
@@ -127,6 +150,9 @@ <h3><a id="index_g"></a>- g -</h3><ul>
 <li>generate_poa()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09">claragenomics::cudapoa::Batch</a>
 </li>
+<li>get_adjacent_nodes()
+: <a class="el" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">claragenomics::Graph</a>
+</li>
 <li>get_alignment()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70">claragenomics::cudaaligner::Alignment</a>
 </li>
@@ -139,14 +165,26 @@ <h3><a id="index_g"></a>- g -</h3><ul>
 <li>get_consensus()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0">claragenomics::cudapoa::Batch</a>
 </li>
+<li>get_edges()
+: <a class="el" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">claragenomics::Graph</a>
+</li>
+<li>get_graphs()
+: <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16">claragenomics::cudapoa::Batch</a>
+</li>
 <li>get_msa()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2">claragenomics::cudapoa::Batch</a>
 </li>
+<li>get_node_ids()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">claragenomics::Graph</a>
+</li>
+<li>get_node_label()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">claragenomics::Graph</a>
+</li>
 <li>get_num_seqences()
 : <a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html#a04f6deee5108374fa485487e06e759e5">claragenomics::io::FastaParser</a>
 </li>
 <li>get_overlaps()
-: <a class="el" href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">claragenomics::cudamapper::Overlapper</a>
+: <a class="el" href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">claragenomics::cudamapper::Overlapper</a>
 </li>
 <li>get_query_sequence()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780">claragenomics::cudaaligner::Alignment</a>
@@ -173,12 +211,6 @@ <h3><a id="index_m"></a>- m -</h3><ul>
 <li>maximum_kmer_size()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">claragenomics::cudamapper::Index</a>
 </li>
-<li>maximum_representation()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152">claragenomics::cudamapper::Index</a>
-</li>
-<li>minimum_representation()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824">claragenomics::cudamapper::Index</a>
-</li>
 </ul>
 
 
@@ -186,18 +218,28 @@ <h3><a id="index_n"></a>- n -</h3><ul>
 <li>name()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html#ab9663611f0d6c691e40228c5a08cf0e2">claragenomics::cudamapper::Sequence</a>
 </li>
+<li>node_labels_to_dot()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">claragenomics::Graph</a>
+</li>
 <li>number_of_reads()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937">claragenomics::cudamapper::Index</a>
 </li>
 </ul>
 
 
+<h3><a id="index_o"></a>- o -</h3><ul>
+<li>operator()()
+: <a class="el" href="structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61">claragenomics::PairHash</a>
+</li>
+</ul>
+
+
 <h3><a id="index_p"></a>- p -</h3><ul>
 <li>position_in_read()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#a0ddea36eed82ea3a9d1fa7ace61051bc">claragenomics::cudamapper::SketchElement</a>
 </li>
 <li>positions_in_reads()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183">claragenomics::cudamapper::Index</a>
 </li>
 <li>print_paf()
 : <a class="el" href="group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371">claragenomics::cudamapper::Overlapper</a>
@@ -206,27 +248,24 @@ <h3><a id="index_p"></a>- p -</h3><ul>
 
 
 <h3><a id="index_r"></a>- r -</h3><ul>
-<li>reached_end_of_input()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277">claragenomics::cudamapper::Index</a>
-</li>
 <li>read_id()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#af5f2e8fc8df725b336833930baf3cd39">claragenomics::cudamapper::SketchElement</a>
 </li>
-<li>read_id_and_representation_to_sketch_elements()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24">claragenomics::cudamapper::Index</a>
-</li>
 <li>read_id_to_read_length()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4">claragenomics::cudamapper::Index</a>
 </li>
 <li>read_id_to_read_name()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd">claragenomics::cudamapper::Index</a>
 </li>
 <li>read_ids()
-: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5">claragenomics::cudamapper::Index</a>
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401">claragenomics::cudamapper::Index</a>
 </li>
 <li>representation()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html#abb3c8927594ba5f077c4443c229e0730">claragenomics::cudamapper::SketchElement</a>
 </li>
+<li>representations()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80">claragenomics::cudamapper::Index</a>
+</li>
 <li>reset()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#a9f7f056a269c32c909a9bfb7132ba439">claragenomics::cudaaligner::Aligner</a>
 , <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae">claragenomics::cudapoa::Batch</a>
@@ -238,16 +277,36 @@ <h3><a id="index_s"></a>- s -</h3><ul>
 <li>scoped_device_switch()
 : <a class="el" href="classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650">claragenomics::scoped_device_switch</a>
 </li>
+<li>serialize_to_dot()
+: <a class="el" href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">claragenomics::DirectedGraph</a>
+, <a class="el" href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">claragenomics::UndirectedGraph</a>
+</li>
+<li>set_node_label()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">claragenomics::Graph</a>
+</li>
 <li>sync_alignments()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#ac929b7ba836dfac74d8975f652563482">claragenomics::cudaaligner::Aligner</a>
 </li>
 </ul>
 
 
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>unique_representations()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a">claragenomics::cudamapper::Index</a>
+</li>
+<li>update_adject_nodes()
+: <a class="el" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">claragenomics::Graph</a>
+</li>
+</ul>
+
+
 <h3><a id="index__7E"></a>- ~ -</h3><ul>
 <li>~Aligner()
 : <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html#aaae329eae2ed3e364db643163755e987">claragenomics::cudaaligner::Aligner</a>
 </li>
+<li>~Alignment()
+: <a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8">claragenomics::cudaaligner::Alignment</a>
+</li>
 <li>~Batch()
 : <a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1">claragenomics::cudapoa::Batch</a>
 </li>
@@ -257,6 +316,9 @@ <h3><a id="index__7E"></a>- ~ -</h3><ul>
 <li>~Index()
 : <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">claragenomics::cudamapper::Index</a>
 </li>
+<li>~Matcher()
+: <a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab">claragenomics::cudamapper::Matcher</a>
+</li>
 <li>~Overlapper()
 : <a class="el" href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">claragenomics::cudamapper::Overlapper</a>
 </li>
diff --git a/docs/cpp/functions_type.html b/docs/cpp/functions_type.html
new file mode 100644
index 000000000..71cacd9e1
--- /dev/null
+++ b/docs/cpp/functions_type.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Class Members - Typedefs</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>edge_t
+: <a class="el" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">claragenomics::Graph</a>
+</li>
+<li>edge_weight_t
+: <a class="el" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">claragenomics::Graph</a>
+</li>
+<li>node_id_t
+: <a class="el" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">claragenomics::Graph</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/functions_vars.html b/docs/cpp/functions_vars.html
index cbfede032..a4fcce3f5 100644
--- a/docs/cpp/functions_vars.html
+++ b/docs/cpp/functions_vars.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -63,9 +63,21 @@
 
 <div class="contents">
 &#160;<ul>
+<li>adjacent_nodes_
+: <a class="el" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">claragenomics::Graph</a>
+</li>
 <li>block_size_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a33ff27afee2ddb07e6fbdda0ff1de229">claragenomics::cudamapper::ArrayBlock</a>
 </li>
+<li>cigar_
+: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54">claragenomics::cudamapper::Overlap</a>
+</li>
+<li>edges_
+: <a class="el" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">claragenomics::Graph</a>
+</li>
+<li>empty_
+: <a class="el" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">claragenomics::Graph</a>
+</li>
 <li>first_element_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a3fca81e893b35e0648977b00f21b7e7e">claragenomics::cudamapper::ArrayBlock</a>
 </li>
@@ -75,6 +87,9 @@
 <li>name
 : <a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html#aea0664ca6e856203c4b954b519183bec">claragenomics::io::FastaSequence</a>
 </li>
+<li>node_labels_
+: <a class="el" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">claragenomics::Graph</a>
+</li>
 <li>num_residues_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d">claragenomics::cudamapper::Overlap</a>
 </li>
@@ -95,7 +110,7 @@
 , <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>query_read_name_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df">claragenomics::cudamapper::Overlap</a>
+: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>query_start_position_in_read_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e">claragenomics::cudamapper::Overlap</a>
@@ -103,19 +118,10 @@
 <li>relative_strand
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">claragenomics::cudamapper::Overlap</a>
 </li>
-<li>representation_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a839754dc6ed7d150ae06abf377e39c62">claragenomics::cudamapper::Index::RepresentationToSketchElements</a>
-</li>
 <li>seq
 : <a class="el" href="structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4">claragenomics::cudapoa::Entry</a>
 , <a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html#a9ac5e894fc08745c47b326a7038aa488">claragenomics::io::FastaSequence</a>
 </li>
-<li>sketch_elements_for_representation_and_all_read_ids_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a604d5227c7fe6412e982fb31a1fee549">claragenomics::cudamapper::Index::RepresentationToSketchElements</a>
-</li>
-<li>sketch_elements_for_representation_and_read_id_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a84ff4998d9fec875845a20272d209b30">claragenomics::cudamapper::Index::RepresentationToSketchElements</a>
-</li>
 <li>target_end_position_in_read_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797">claragenomics::cudamapper::Overlap</a>
 </li>
@@ -130,7 +136,7 @@
 , <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>target_read_name_
-: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c">claragenomics::cudamapper::Overlap</a>
+: <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca">claragenomics::cudamapper::Overlap</a>
 </li>
 <li>target_start_position_in_read_
 : <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c">claragenomics::cudamapper::Overlap</a>
diff --git a/docs/cpp/genomeutils_8hpp_source.html b/docs/cpp/genomeutils_8hpp_source.html
index cf9a1c7f5..155efee94 100644
--- a/docs/cpp/genomeutils_8hpp_source.html
+++ b/docs/cpp/genomeutils_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/globals.html b/docs/cpp/globals.html
index e7df97139..7d3b47373 100644
--- a/docs/cpp/globals.html
+++ b/docs/cpp/globals.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -102,6 +102,9 @@
 <li>CGA_LOG_WARN
 : <a class="el" href="group__logging.html#gaa97f13dd6ae075b35ca3f01a667d9d83">logging.hpp</a>
 </li>
+<li>CGA_NVTX_RANGE
+: <a class="el" href="group__cudautils.html#gaded61355db08f1d76bc24edc008d4224">cudautils.hpp</a>
+</li>
 <li>SPDLOG_ACTIVE_LEVEL
 : <a class="el" href="group__logging.html#gae4fda6f71f35120e2ff48157fca961b5">logging.hpp</a>
 </li>
diff --git a/docs/cpp/globals_defs.html b/docs/cpp/globals_defs.html
index ba0529e1a..db866f537 100644
--- a/docs/cpp/globals_defs.html
+++ b/docs/cpp/globals_defs.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -102,6 +102,9 @@
 <li>CGA_LOG_WARN
 : <a class="el" href="group__logging.html#gaa97f13dd6ae075b35ca3f01a667d9d83">logging.hpp</a>
 </li>
+<li>CGA_NVTX_RANGE
+: <a class="el" href="group__cudautils.html#gaded61355db08f1d76bc24edc008d4224">cudautils.hpp</a>
+</li>
 <li>SPDLOG_ACTIVE_LEVEL
 : <a class="el" href="group__logging.html#gae4fda6f71f35120e2ff48157fca961b5">logging.hpp</a>
 </li>
diff --git a/docs/cpp/graph_8hpp_source.html b/docs/cpp/graph_8hpp_source.html
new file mode 100644
index 000000000..39a2615f4
--- /dev/null
+++ b/docs/cpp/graph_8hpp_source.html
@@ -0,0 +1,313 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: common/utils/include/claragenomics/utils/graph.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html">common</a></li><li class="navelem"><a class="el" href="dir_85effdddc426fd82e3610be0948fd413.html">utils</a></li><li class="navelem"><a class="el" href="dir_cbd0fd5fcc23422502de88d4fe6e7386.html">include</a></li><li class="navelem"><a class="el" href="dir_8e216217187728c84aa14a4942da12a2.html">claragenomics</a></li><li class="navelem"><a class="el" href="dir_657c9b9511f57ce884717ee8b069b43d.html">utils</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">graph.hpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2019, NVIDIA CORPORATION.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* NVIDIA CORPORATION and its licensors retain all intellectual property</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* and proprietary rights in and to this software, related documentation</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* and any modifications thereto.  Any use, reproduction, disclosure or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">* distribution of this software and related documentation without an express</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* license agreement from NVIDIA CORPORATION is strictly prohibited.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;unordered_set&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;{</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1PairHash.html">   27</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structclaragenomics_1_1PairHash.html">PairHash</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">class</span> T1, <span class="keyword">class</span> T2&gt;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61">   32</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61">operator()</a>(<span class="keyword">const</span> std::pair&lt;T1, T2&gt;&amp; pair)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;        <span class="keywordtype">size_t</span> hash_1 = std::hash&lt;T1&gt;()(pair.first);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;        <span class="keywordtype">size_t</span> hash_2 = std::hash&lt;T2&gt;()(pair.second);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        <span class="keywordflow">return</span> hash_1 ^ hash_2;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    }</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;};</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html">   41</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1Graph.html">Graph</a></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;{</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">   45</a></span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> = int32_t;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">   47</a></span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> = int32_t;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">   49</a></span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> = std::pair&lt;node_id_t, node_id_t&gt;;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">   55</a></span>&#160;    <span class="keyword">const</span> std::vector&lt;node_id_t&gt;&amp; <a class="code" href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">get_adjacent_nodes</a>(<a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <span class="keyword">auto</span> iter = <a class="code" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a>.find(node);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <span class="keywordflow">if</span> (iter != <a class="code" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a>.end())</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;            <span class="keywordflow">return</span> iter-&gt;second;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;            <span class="keywordflow">return</span> <a class="code" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">Graph::empty_</a>;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">   71</a></span>&#160;    <span class="keyword">const</span> std::vector&lt;node_id_t&gt; <a class="code" href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">get_node_ids</a>()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;        std::vector&lt;node_id_t&gt; nodes;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : <a class="code" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a>)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;            nodes.push_back(iter.first);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        <span class="keywordflow">return</span> nodes;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">   85</a></span>&#160;    <span class="keyword">const</span> std::vector&lt;std::pair&lt;edge_t, edge_weight_t&gt;&gt; <a class="code" href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">get_edges</a>()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;        <span class="keywordflow">return</span> {begin(<a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>), end(<a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>)};</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">   94</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">set_node_label</a>(<a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node, <span class="keyword">const</span> std::string&amp; label)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        <a class="code" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a>.insert({node, label});</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="comment">//          no label is associated or node ID doesn&#39;t exist.</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">  104</a></span>&#160;    std::string <a class="code" href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">get_node_label</a>(<a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <span class="keyword">auto</span> found_node = <a class="code" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a>.find(node);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        <span class="keywordflow">if</span> (found_node != <a class="code" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a>.end())</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;            <span class="keywordflow">return</span> found_node-&gt;second;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;            <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    }</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">  122</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a>(<a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>.find(edge) != <a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>.end();</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">  130</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a>(<a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a> edge)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        <span class="keyword">auto</span> find_node = <a class="code" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a>.find(edge.first);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        <span class="keywordflow">if</span> (find_node == <a class="code" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a>.end())</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;            <a class="code" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a>.insert({edge.first, {edge.second}});</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;            find_node-&gt;second.push_back(edge.second);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">  146</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a>(std::ostringstream&amp; dot_str)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : <a class="code" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a>)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;            dot_str &lt;&lt; iter.first &lt;&lt; <span class="stringliteral">&quot; [label=\&quot;&quot;</span> &lt;&lt; iter.second &lt;&lt; <span class="stringliteral">&quot;\&quot;];\n&quot;</span>;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160; </div>
+<div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">  158</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a>(std::ostringstream&amp; dot_str, <span class="keyword">const</span> std::string&amp; node_separator)<span class="keyword"> const</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter : <a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;            <span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>&amp; edge          = iter.first;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            <span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a>&amp; weight = iter.second;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;            dot_str &lt;&lt; edge.first &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; node_separator &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; edge.second;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;            dot_str &lt;&lt; <span class="stringliteral">&quot; [label=\&quot;&quot;</span> &lt;&lt; weight &lt;&lt; <span class="stringliteral">&quot;\&quot;];\n&quot;</span>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160; </div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">  170</a></span>&#160;    std::unordered_map&lt;node_id_t, std::vector&lt;node_id_t&gt;&gt; <a class="code" href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">adjacent_nodes_</a>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160; </div>
+<div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">  173</a></span>&#160;    std::unordered_map&lt;edge_t, edge_weight_t, PairHash&gt; <a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">  176</a></span>&#160;    std::unordered_map&lt;node_id_t, std::string&gt; <a class="code" href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">node_labels_</a>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160; </div>
+<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">  179</a></span>&#160;    <span class="keyword">const</span> std::vector&lt;node_id_t&gt; <a class="code" href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">empty_</a>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;};</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160; </div>
+<div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1DirectedGraph.html">  183</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1DirectedGraph.html">DirectedGraph</a> : <span class="keyword">public</span> <a class="code" href="classclaragenomics_1_1Graph.html">Graph</a></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;{</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">Graph::node_id_t</a>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">Graph::edge_weight_t</a>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">Graph::edge_t</a>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
+<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">  198</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">add_edge</a>(<a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_from, <a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_to, <a class="code" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> weight = 0)</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <span class="keyword">auto</span> edge = <a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>(node_id_from, node_id_to);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a>(edge))</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;            <a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>.insert({edge, weight});</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;            <a class="code" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a>(edge);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160; </div>
+<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">  211</a></span>&#160;    std::string <a class="code" href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">serialize_to_dot</a>()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;        std::ostringstream dot_str;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        dot_str &lt;&lt; <span class="stringliteral">&quot;digraph g {\n&quot;</span>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160; </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="comment">// Get nodel labels, if any.</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        <a class="code" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a>(dot_str);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="comment">// Get edges.</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <a class="code" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a>(dot_str, <span class="stringliteral">&quot;-&gt;&quot;</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160; </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        dot_str &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        <span class="keywordflow">return</span> dot_str.str();</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;};</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160; </div>
+<div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1UndirectedGraph.html">  228</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1UndirectedGraph.html">UndirectedGraph</a> : <span class="keyword">public</span> <a class="code" href="classclaragenomics_1_1Graph.html">Graph</a></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;{</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">Graph::node_id_t</a>;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">Graph::edge_weight_t</a>;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    <span class="keyword">using</span> <a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">Graph::edge_t</a>;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160; </div>
+<div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">  243</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">add_edge</a>(<a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_from, <a class="code" href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">node_id_t</a> node_id_to, <a class="code" href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">edge_weight_t</a> weight = 0)</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keyword">auto</span> edge          = <a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>(node_id_from, node_id_to);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        <span class="keyword">auto</span> edge_reversed = <a class="code" href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">edge_t</a>(node_id_to, node_id_from);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a>(edge) &amp;&amp; !<a class="code" href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">directed_edge_exists</a>(edge_reversed))</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;            <a class="code" href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">edges_</a>.insert({edge, weight});</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            <a class="code" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a>(edge);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;            <a class="code" href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">update_adject_nodes</a>(edge_reversed);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160; </div>
+<div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">  258</a></span>&#160;    std::string <a class="code" href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">serialize_to_dot</a>()<span class="keyword"> const</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="keyword">    </span>{</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        std::ostringstream dot_str;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        dot_str &lt;&lt; <span class="stringliteral">&quot;graph g {\n&quot;</span>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160; </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        <span class="comment">// Get nodel labels, if any.</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;        <a class="code" href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">node_labels_to_dot</a>(dot_str);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160; </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        <span class="comment">// Get edges.</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <a class="code" href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">edges_to_dot</a>(dot_str, <span class="stringliteral">&quot;--&quot;</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160; </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        dot_str &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        <span class="keywordflow">return</span> dot_str.str();</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;};</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="astructclaragenomics_1_1PairHash_html_a46da7ce33ff4cf8a586a0c54b6be1e61"><div class="ttname"><a href="structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61">claragenomics::PairHash::operator()</a></div><div class="ttdeci">size_t operator()(const std::pair&lt; T1, T2 &gt; &amp;pair) const</div><div class="ttdoc">Operator overload to define hash function.</div><div class="ttdef"><b>Definition:</b> graph.hpp:32</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a88dda0ee0cffa26a188a041593d2fcd5"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5">claragenomics::Graph::edges_to_dot</a></div><div class="ttdeci">void edges_to_dot(std::ostringstream &amp;dot_str, const std::string &amp;node_separator) const</div><div class="ttdoc">Serialize edges to dot format.</div><div class="ttdef"><b>Definition:</b> graph.hpp:158</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a1b51bca4b58c9922b375c983415ec0c8"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8">claragenomics::Graph::get_node_ids</a></div><div class="ttdeci">const std::vector&lt; node_id_t &gt; get_node_ids() const</div><div class="ttdoc">List all node IDs in the graph.</div><div class="ttdef"><b>Definition:</b> graph.hpp:71</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a8b53264154b5caed266385a007e33404"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404">claragenomics::Graph::adjacent_nodes_</a></div><div class="ttdeci">std::unordered_map&lt; node_id_t, std::vector&lt; node_id_t &gt; &gt; adjacent_nodes_</div><div class="ttdoc">List of adjacent nodes per node ID.</div><div class="ttdef"><b>Definition:</b> graph.hpp:170</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a4089c636086324cae1f2a2bde56c8b33"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33">claragenomics::Graph::edges_</a></div><div class="ttdeci">std::unordered_map&lt; edge_t, edge_weight_t, PairHash &gt; edges_</div><div class="ttdoc">All edges in the graph.</div><div class="ttdef"><b>Definition:</b> graph.hpp:173</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1DirectedGraph_html_a7844605760f22a2a60e27c23178497b3"><div class="ttname"><a href="classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3">claragenomics::DirectedGraph::serialize_to_dot</a></div><div class="ttdeci">std::string serialize_to_dot() const</div><div class="ttdoc">Serialize graph structure to dot format.</div><div class="ttdef"><b>Definition:</b> graph.hpp:211</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1UndirectedGraph_html_a47c5ee6b9616ab24222526f4dcd1fb04"><div class="ttname"><a href="classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04">claragenomics::UndirectedGraph::add_edge</a></div><div class="ttdeci">void add_edge(node_id_t node_id_from, node_id_t node_id_to, edge_weight_t weight=0)</div><div class="ttdoc">Add undirected edges to graph.</div><div class="ttdef"><b>Definition:</b> graph.hpp:243</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1DirectedGraph_html_a85c21aed5db9c7d81cb6003841410371"><div class="ttname"><a href="classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371">claragenomics::DirectedGraph::add_edge</a></div><div class="ttdeci">void add_edge(node_id_t node_id_from, node_id_t node_id_to, edge_weight_t weight=0)</div><div class="ttdoc">Add directed edges to graph.</div><div class="ttdef"><b>Definition:</b> graph.hpp:198</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a1df5a4be1fc2f71130436e9f718e85ac"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac">claragenomics::Graph::directed_edge_exists</a></div><div class="ttdeci">bool directed_edge_exists(edge_t edge)</div><div class="ttdoc">Check if a directed edge exists in the grph.</div><div class="ttdef"><b>Definition:</b> graph.hpp:122</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_ada271fc17a3a6e86f5dcc78c4caa729c"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c">claragenomics::Graph::empty_</a></div><div class="ttdeci">const std::vector&lt; node_id_t &gt; empty_</div><div class="ttdoc">An empty list representing no connectivity.</div><div class="ttdef"><b>Definition:</b> graph.hpp:179</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a95ef438f6035c2240bf277645ad27cb9"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9">claragenomics::Graph::node_labels_to_dot</a></div><div class="ttdeci">void node_labels_to_dot(std::ostringstream &amp;dot_str) const</div><div class="ttdoc">Serialize node labels to dot format.</div><div class="ttdef"><b>Definition:</b> graph.hpp:146</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a0f9734799fc19b94b0621c956ce5508d"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d">claragenomics::Graph::node_id_t</a></div><div class="ttdeci">int32_t node_id_t</div><div class="ttdoc">Typedef for node ID.</div><div class="ttdef"><b>Definition:</b> graph.hpp:45</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_ab52b2707de415931f1990ee338b29eeb"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb">claragenomics::Graph::get_adjacent_nodes</a></div><div class="ttdeci">const std::vector&lt; node_id_t &gt; &amp; get_adjacent_nodes(node_id_t node) const</div><div class="ttdoc">Get a list of adjacent nodes to a given node.</div><div class="ttdef"><b>Definition:</b> graph.hpp:55</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a47bd2f14a355fbbd801846b0af305389"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389">claragenomics::Graph::get_node_label</a></div><div class="ttdeci">std::string get_node_label(node_id_t node) const</div><div class="ttdoc">Get the label associated with a node.</div><div class="ttdef"><b>Definition:</b> graph.hpp:104</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1UndirectedGraph_html_a64b119c6ca6049b081ddde7db3c87e3f"><div class="ttname"><a href="classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f">claragenomics::UndirectedGraph::serialize_to_dot</a></div><div class="ttdeci">std::string serialize_to_dot() const</div><div class="ttdoc">Serialize graph structure to dot format.</div><div class="ttdef"><b>Definition:</b> graph.hpp:258</div></div>
+<div class="ttc" id="astructclaragenomics_1_1PairHash_html"><div class="ttname"><a href="structclaragenomics_1_1PairHash.html">claragenomics::PairHash</a></div><div class="ttdef"><b>Definition:</b> graph.hpp:27</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a5da2769d7e5bebd1d74c4899e3aad2c5"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5">claragenomics::Graph::node_labels_</a></div><div class="ttdeci">std::unordered_map&lt; node_id_t, std::string &gt; node_labels_</div><div class="ttdoc">Label per node.</div><div class="ttdef"><b>Definition:</b> graph.hpp:176</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a9861d50dbee863befed15eb8daacff3d"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d">claragenomics::Graph::set_node_label</a></div><div class="ttdeci">void set_node_label(node_id_t node, const std::string &amp;label)</div><div class="ttdoc">Add string labels to a node ID.</div><div class="ttdef"><b>Definition:</b> graph.hpp:94</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1DirectedGraph_html"><div class="ttname"><a href="classclaragenomics_1_1DirectedGraph.html">claragenomics::DirectedGraph</a></div><div class="ttdoc">DirectedGraph Object representing a directed graph structure.</div><div class="ttdef"><b>Definition:</b> graph.hpp:183</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html"><div class="ttname"><a href="classclaragenomics_1_1Graph.html">claragenomics::Graph</a></div><div class="ttdoc">Object representing a generic graph structure.</div><div class="ttdef"><b>Definition:</b> graph.hpp:41</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a3892123fce03f805e54ce0076e6b68dc"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc">claragenomics::Graph::edge_t</a></div><div class="ttdeci">std::pair&lt; node_id_t, node_id_t &gt; edge_t</div><div class="ttdoc">Typedef for edge.</div><div class="ttdef"><b>Definition:</b> graph.hpp:49</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_ac96335c01273c0dd74d2628e7bf38794"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794">claragenomics::Graph::get_edges</a></div><div class="ttdeci">const std::vector&lt; std::pair&lt; edge_t, edge_weight_t &gt; &gt; get_edges() const</div><div class="ttdoc">Get a list of all edges in the graph.</div><div class="ttdef"><b>Definition:</b> graph.hpp:85</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_a0043ec8f35f7491c06915c887d31ea77"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77">claragenomics::Graph::update_adject_nodes</a></div><div class="ttdeci">void update_adject_nodes(edge_t edge)</div><div class="ttdoc">Update the adjacent nodes based on edge information.</div><div class="ttdef"><b>Definition:</b> graph.hpp:130</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1Graph_html_ad5388bf7676b6e35a6e62c034e2993b5"><div class="ttname"><a href="classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5">claragenomics::Graph::edge_weight_t</a></div><div class="ttdeci">int32_t edge_weight_t</div><div class="ttdoc">Tpyedef for edge weight.</div><div class="ttdef"><b>Definition:</b> graph.hpp:47</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1UndirectedGraph_html"><div class="ttname"><a href="classclaragenomics_1_1UndirectedGraph.html">claragenomics::UndirectedGraph</a></div><div class="ttdoc">UndirectedGraph Object representing an undirected graph structure.</div><div class="ttdef"><b>Definition:</b> graph.hpp:228</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/graph_legend.html b/docs/cpp/graph_legend.html
new file mode 100644
index 000000000..b9f463dfd
--- /dev/null
+++ b/docs/cpp/graph_legend.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Graph Legend</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Graph Legend</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
+<p>Consider the following example: </p><div class="fragment"><div class="line">/*! Invisible class because of truncation */</div>
+<div class="line">class Invisible { };</div>
+<div class="line"> </div>
+<div class="line">/*! Truncated class, inheritance relation is hidden */</div>
+<div class="line">class Truncated : public Invisible { };</div>
+<div class="line"> </div>
+<div class="line">/* Class not documented with doxygen comments */</div>
+<div class="line">class Undocumented { };</div>
+<div class="line"> </div>
+<div class="line">/*! Class that is inherited using public inheritance */</div>
+<div class="line">class PublicBase : public Truncated { };</div>
+<div class="line"> </div>
+<div class="line">/*! A template class */</div>
+<div class="line">template&lt;class T&gt; class Templ { };</div>
+<div class="line"> </div>
+<div class="line">/*! Class that is inherited using protected inheritance */</div>
+<div class="line">class ProtectedBase { };</div>
+<div class="line"> </div>
+<div class="line">/*! Class that is inherited using private inheritance */</div>
+<div class="line">class PrivateBase { };</div>
+<div class="line"> </div>
+<div class="line">/*! Class that is used by the Inherited class */</div>
+<div class="line">class Used { };</div>
+<div class="line"> </div>
+<div class="line">/*! Super class that inherits a number of other classes */</div>
+<div class="line">class Inherited : public PublicBase,</div>
+<div class="line">                  protected ProtectedBase,</div>
+<div class="line">                  private PrivateBase,</div>
+<div class="line">                  public Undocumented,</div>
+<div class="line">                  public Templ&lt;int&gt;</div>
+<div class="line">{</div>
+<div class="line">  private:</div>
+<div class="line">    Used *m_usedClass;</div>
+<div class="line">};</div>
+</div><!-- fragment --><p> This will result in the following graph:</p>
+<center><img src="graph_legend.png" alt="" class="inline"/></center><p>The boxes in the above graph have the following meaning: </p>
+<ul>
+<li>
+A filled gray box represents the struct or class for which the graph is generated. </li>
+<li>
+A box with a black border denotes a documented struct or class. </li>
+<li>
+A box with a gray border denotes an undocumented struct or class. </li>
+<li>
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
+</ul>
+<p>The arrows have the following meaning: </p>
+<ul>
+<li>
+A dark blue arrow is used to visualize a public inheritance relation between two classes. </li>
+<li>
+A dark green arrow is used for protected inheritance. </li>
+<li>
+A dark red arrow is used for private inheritance. </li>
+<li>
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible. </li>
+<li>
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance. </li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/graph_legend.md5 b/docs/cpp/graph_legend.md5
new file mode 100644
index 000000000..3b4f8ab28
--- /dev/null
+++ b/docs/cpp/graph_legend.md5
@@ -0,0 +1 @@
+2779a1676ca72f29ac6dddfb5b5a4bb2
\ No newline at end of file
diff --git a/docs/cpp/graph_legend.png b/docs/cpp/graph_legend.png
new file mode 100644
index 0000000000000000000000000000000000000000..81788d8b778e11ebf43d6a041820fcaf7ec9a65e
GIT binary patch
literal 19465
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%0Av4SqcN@e|5`jp~UDrU|Bek
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
Lu6{1-oD!M<uL~4O

literal 0
HcmV?d00001

diff --git a/docs/cpp/group__cudaaligner.html b/docs/cpp/group__cudaaligner.html
index 41b8c4e4e..ee30b7512 100644
--- a/docs/cpp/group__cudaaligner.html
+++ b/docs/cpp/group__cudaaligner.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/group__cudamapper.html b/docs/cpp/group__cudamapper.html
index fb9e4b318..18793c243 100644
--- a/docs/cpp/group__cudamapper.html
+++ b/docs/cpp/group__cudamapper.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -78,6 +78,9 @@
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a> - manages mapping of (k,w)-kmer-representation and all its occurences.  <a href="classclaragenomics_1_1cudamapper_1_1Index.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">claragenomics::cudamapper::Matcher</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher - base matcher.">Matcher</a> - base matcher.  <a href="classclaragenomics_1_1cudamapper_1_1Matcher.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html">claragenomics::cudamapper::Sequence</a></td></tr>
@@ -93,9 +96,9 @@
 virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">claragenomics::cudamapper::Overlapper::~Overlapper</a> ()=default</td></tr>
 <tr class="memdesc:ga569c8855bdf9806d3747b26fc7e98975"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor for <a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">Overlapper</a>. <br /></td></tr>
 <tr class="separator:ga569c8855bdf9806d3747b26fc7e98975"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5498f3d8b5eff6481c67fdf0a049c300"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">claragenomics::cudamapper::Overlapper::get_overlaps</a> (std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> &gt; &amp;overlaps, std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> &gt; &amp;anchors, const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;index)=0</td></tr>
-<tr class="memdesc:ga5498f3d8b5eff6481c67fdf0a049c300"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns overlaps for a set of reads  <a href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">More...</a><br /></td></tr>
-<tr class="separator:ga5498f3d8b5eff6481c67fdf0a049c300"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0e3be4a9442dfb2b7952fb473e591a3"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">claragenomics::cudamapper::Overlapper::get_overlaps</a> (std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> &gt; &amp;overlaps, thrust::device_vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> &gt; &amp;anchors, const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;index_query, const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;index_target)=0</td></tr>
+<tr class="memdesc:gab0e3be4a9442dfb2b7952fb473e591a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns overlaps for a set of reads  <a href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">More...</a><br /></td></tr>
+<tr class="separator:gab0e3be4a9442dfb2b7952fb473e591a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ga54fedd97206ad1691f7b9d9966d01371"><td class="memItemLeft" align="right" valign="top"><a id="ga54fedd97206ad1691f7b9d9966d01371"></a>
 static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371">claragenomics::cudamapper::Overlapper::print_paf</a> (const std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> &gt; &amp;overlaps)</td></tr>
 <tr class="memdesc:ga54fedd97206ad1691f7b9d9966d01371"><td class="mdescLeft">&#160;</td><td class="mdescRight">prints overlaps to stdout in <a href="https://github.com/lh3/miniasm/blob/master/PAF.md">PAF format</a> <br /></td></tr>
@@ -166,8 +169,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#ga3e5732f34489315ec8d1ef8
 
 </div>
 </div>
-<a id="ga5498f3d8b5eff6481c67fdf0a049c300"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ga5498f3d8b5eff6481c67fdf0a049c300">&#9670;&nbsp;</a></span>get_overlaps()</h2>
+<a id="gab0e3be4a9442dfb2b7952fb473e591a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab0e3be4a9442dfb2b7952fb473e591a3">&#9670;&nbsp;</a></span>get_overlaps()</h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -184,14 +187,20 @@ <h2 class="memtitle"><span class="permalink"><a href="#ga5498f3d8b5eff6481c67fdf
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">std::vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> &gt; &amp;&#160;</td>
+          <td class="paramtype">thrust::device_vector&lt; <a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html">Anchor</a> &gt; &amp;&#160;</td>
           <td class="paramname"><em>anchors</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;&#160;</td>
-          <td class="paramname"><em>index</em>&#160;</td>
+          <td class="paramname"><em>index_query</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a> &amp;&#160;</td>
+          <td class="paramname"><em>index_target</em>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -211,7 +220,8 @@ <h2 class="memtitle"><span class="permalink"><a href="#ga5498f3d8b5eff6481c67fdf
   <table class="params">
     <tr><td class="paramname">overlaps</td><td>Output vector into which generated overlaps will be placed </td></tr>
     <tr><td class="paramname">anchors</td><td>vector of anchor objects. Does not need to be ordered </td></tr>
-    <tr><td class="paramname">index</td><td>representation index for reads </td></tr>
+    <tr><td class="paramname">index_query</td><td>representation index for reads </td></tr>
+    <tr><td class="paramname">index_target</td><td></td></tr>
   </table>
   </dd>
 </dl>
diff --git a/docs/cpp/group__cudapoa.html b/docs/cpp/group__cudapoa.html
index 8b4c8ffba..b10a9615c 100644
--- a/docs/cpp/group__cudapoa.html
+++ b/docs/cpp/group__cudapoa.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/group__cudautils.html b/docs/cpp/group__cudautils.html
index 1323a016c..b9d2c2d3c 100644
--- a/docs/cpp/group__cudautils.html
+++ b/docs/cpp/group__cudautils.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -63,12 +63,19 @@
 
 <div class="header">
   <div class="summary">
+<a href="#define-members">Macros</a> &#124;
 <a href="#func-members">Functions</a>  </div>
   <div class="headertitle">
 <div class="title">Internal CUDA utilities package</div>  </div>
 </div><!--header-->
 <div class="contents">
 <table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gaded61355db08f1d76bc24edc008d4224"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudautils.html#gaded61355db08f1d76bc24edc008d4224">CGA_NVTX_RANGE</a>(varname,  label)</td></tr>
+<tr class="memdesc:gaded61355db08f1d76bc24edc008d4224"><td class="mdescLeft">&#160;</td><td class="mdescRight">Dummy implementation for CGA_NVTX_RANGE macro.  <a href="group__cudautils.html#gaded61355db08f1d76bc24edc008d4224">More...</a><br /></td></tr>
+<tr class="separator:gaded61355db08f1d76bc24edc008d4224"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
 Functions</h2></td></tr>
 <tr class="memitem:ga3769a812992df47886894f48f26edf6f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">claragenomics::cudautils::gpu_assert</a> (cudaError_t code, const char *file, int line)</td></tr>
@@ -100,6 +107,43 @@ <h2 class="memtitle"><span class="permalink"><a href="#ga161535c48fe399e086ac627
 </div><!-- fragment -->
 <p>Log on CUDA error in enclosed expression. </p>
 
+</div>
+</div>
+<a id="gaded61355db08f1d76bc24edc008d4224"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaded61355db08f1d76bc24edc008d4224">&#9670;&nbsp;</a></span>CGA_NVTX_RANGE</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define CGA_NVTX_RANGE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">varname, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">label&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Dummy implementation for CGA_NVTX_RANGE macro. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">varname</td><td>Unused variable </td></tr>
+    <tr><td class="paramname">label</td><td>Unused variable </td></tr>
+  </table>
+  </dd>
+</dl>
+
 </div>
 </div>
 <h2 class="groupheader">Function Documentation</h2>
@@ -155,7 +199,7 @@ <h2 class="memtitle"><span class="permalink"><a href="#ga3769a812992df47886894f4
 </div>
 </div>
 </div><!-- contents -->
-<div class="ttc" id="agroup__cudautils_html_ga3769a812992df47886894f48f26edf6f"><div class="ttname"><a href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">claragenomics::cudautils::gpu_assert</a></div><div class="ttdeci">void gpu_assert(cudaError_t code, const char *file, int line)</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:46</div></div>
+<div class="ttc" id="agroup__cudautils_html_ga3769a812992df47886894f48f26edf6f"><div class="ttname"><a href="group__cudautils.html#ga3769a812992df47886894f48f26edf6f">claragenomics::cudautils::gpu_assert</a></div><div class="ttdeci">void gpu_assert(cudaError_t code, const char *file, int line)</div><div class="ttdef"><b>Definition:</b> cudautils.hpp:50</div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
diff --git a/docs/cpp/group__logging.html b/docs/cpp/group__logging.html
index 68ed2c5d6..7e4eb975e 100644
--- a/docs/cpp/group__logging.html
+++ b/docs/cpp/group__logging.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/hierarchy.html b/docs/cpp/hierarchy.html
new file mode 100644
index 000000000..60d1819eb
--- /dev/null
+++ b/docs/cpp/hierarchy.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Hierarchy</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">
+<p><a href="inherits.html">Go to the graphical class hierarchy</a></p>
+This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html" target="_self">claragenomics::cudaaligner::Aligner</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html" target="_self">claragenomics::cudaaligner::Alignment</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html" title="Alignment - Object encapsulating an alignment between 2 string.">Alignment</a> - Object encapsulating an alignment between 2 string </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1Anchor.html" target="_self">claragenomics::cudamapper::Anchor</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html" target="_self">claragenomics::cudamapper::ArrayBlock</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudapoa_1_1Batch.html" target="_self">claragenomics::cudapoa::Batch</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudapoa_1_1Entry.html" target="_self">claragenomics::cudapoa::Entry</a></td><td class="desc">A structure to represent a sequence entry </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1io_1_1FastaParser.html" target="_self">claragenomics::io::FastaParser</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1io_1_1FastaSequence.html" target="_self">claragenomics::io::FastaSequence</a></td><td class="desc">A structure to hold details of a single FASTA entry </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_8_" class="arrow" onclick="toggleFolder('8_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1Graph.html" target="_self">claragenomics::Graph</a></td><td class="desc">Object representing a generic graph structure </td></tr>
+<tr id="row_8_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1DirectedGraph.html" target="_self">claragenomics::DirectedGraph</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure.">DirectedGraph</a> Object representing a directed graph structure </td></tr>
+<tr id="row_8_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1UndirectedGraph.html" target="_self">claragenomics::UndirectedGraph</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure.">UndirectedGraph</a> Object representing an undirected graph structure </td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" target="_self">claragenomics::cudamapper::Index</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index - manages mapping of (k,w)-kmer-representation and all its occurences.">Index</a> - manages mapping of (k,w)-kmer-representation and all its occurences </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" target="_self">claragenomics::cudamapper::Matcher</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher - base matcher.">Matcher</a> - base matcher </td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html" target="_self">claragenomics::cudamapper::Overlap</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html" target="_self">claragenomics::cudamapper::Overlapper</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structclaragenomics_1_1PairHash.html" target="_self">claragenomics::PairHash</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1scoped__device__switch.html" target="_self">claragenomics::scoped_device_switch</a></td><td class="desc">A class to switch the CUDA device for the current scope using RAII </td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html" target="_self">claragenomics::cudamapper::Sequence</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1Sequence.html" title="Sequence - represents an individual read (name, DNA nucleotides etc)">Sequence</a> - represents an individual read (name, DNA nucleotides etc) </td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html" target="_self">claragenomics::cudamapper::SketchElement</a></td><td class="desc"><a class="el" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html" title="SketchElement - Contains integer representation, position, direction and read id of a kmer.">SketchElement</a> - Contains integer representation, position, direction and read id of a kmer </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/index.html b/docs/cpp/index.html
index 00bc52878..43a6f8149 100644
--- a/docs/cpp/index.html
+++ b/docs/cpp/index.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -79,10 +79,28 @@ <h2><a class="anchor" id="autotoc_md2"></a>
 <h2><a class="anchor" id="autotoc_md3"></a>
 cudaaligner</h2>
 <p>The <code>cudaaligner</code> package provides GPU-accelerated global alignment.</p>
-<h1><a class="anchor" id="autotoc_md4"></a>
+<h2><a class="anchor" id="autotoc_md4"></a>
+cudamapper</h2>
+<p><b>Note</b> cudamapper is still in pre-alpha stage and should be considered experimental.</p>
+<p>The <code>cudamapper</code> package provides minimizer-based GPU-accelerated approximate mapping. <code>cudamapper</code> outputs mappings in the PAF format and is currently optimised for all-vs-all long read (ONT, Pacific Biosciences) sequences.</p>
+<p>To run all-vs all overlaps use the following command:</p>
+<p><code>cudamapper in.fasta in.fasta</code></p>
+<p>A query fasta can be mapped to a reference as follows:</p>
+<p><code>cudamapper query.fasta target.fasta</code></p>
+<h3><a class="anchor" id="autotoc_md5"></a>
+cudamapper usage information</h3>
+<p>To access more information about running cudamapper, run <code>cudamapper --help</code>.</p>
+<h1><a class="anchor" id="autotoc_md6"></a>
 Clone Clara Genomics Analysis</h1>
+<h2><a class="anchor" id="autotoc_md7"></a>
+Latest released version</h2>
+<p>This will clone the repo to the <code>master</code> branch, which contains code for latest released version and hot-fixes.</p>
+<div class="fragment"><div class="line">git clone --recursive -b master git@github.com:clara-genomics/ClaraGenomicsAnalysis.git</div>
+</div><!-- fragment --><h2><a class="anchor" id="autotoc_md8"></a>
+Latest development version</h2>
+<p>This will clone the repo to the default branch, which is set to be the latest development branch. This branch is subject to change frequently as features and bug fixes are pushed.</p>
 <div class="fragment"><div class="line">git clone --recursive git@github.com:clara-genomics/ClaraGenomicsAnalysis.git</div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md5"></a>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md9"></a>
 System Requirements</h1>
 <p>Minimum requirements -</p>
 <ol type="1">
@@ -92,45 +110,46 @@ <h1><a class="anchor" id="autotoc_md4"></a>
 <li>Python 3.6.7+</li>
 <li>htslib 1.9+ (<a href="https://github.com/samtools/htslib,">https://github.com/samtools/htslib,</a> also requires <code>zlib1g-dev</code>, <code>libbz2-dev</code> and <code>liblzma-dev</code> to be installed on Ubuntu)</li>
 </ol>
-<h1><a class="anchor" id="autotoc_md6"></a>
+<h1><a class="anchor" id="autotoc_md10"></a>
 Clara Genomics Analysis Setup</h1>
-<h2><a class="anchor" id="autotoc_md7"></a>
+<h2><a class="anchor" id="autotoc_md11"></a>
 Build</h2>
 <p>To build Clara Genomics Analysis -</p>
 <div class="fragment"><div class="line">mkdir build</div>
 <div class="line">cd build</div>
 <div class="line">cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install</div>
 <div class="line">make -j install</div>
-</div><!-- fragment --><h2><a class="anchor" id="autotoc_md8"></a>
+</div><!-- fragment --><h2><a class="anchor" id="autotoc_md12"></a>
 Install</h2>
 <p>To install the SDK -</p>
 <div class="fragment"><div class="line">make install</div>
-</div><!-- fragment --><h2><a class="anchor" id="autotoc_md9"></a>
+</div><!-- fragment --><h2><a class="anchor" id="autotoc_md13"></a>
 Package generation</h2>
 <p>Package generation puts the libraries, headers and binaries built by the <code>make</code> command above into a <code>.deb</code>/<code>.rpm</code> for portability and easy installation. The package generation itself doesn't guarantee any cross-platform compatibility.</p>
 <p>It is recommended that a separate build and packaging be performed for each distribution and CUDA version that needs to be supported.</p>
 <p>The type of package (deb vs rpm) is determined automatically based on the platform the code is being run on. To generate a package for the SDK -</p>
 <div class="fragment"><div class="line">make package</div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md10"></a>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md14"></a>
 Enable Unit Tests</h1>
 <p>To enable unit tests, add <code>-Dcga_enable_tests=ON</code> to the <code>cmake</code> command in the build step.</p>
 <p>This builds GTest based unit tests for all applicable modules, and installs them under <code>${CMAKE_INSTALL_PREFIX}/tests</code>. These tests are standalone binaries and can be executed directly. e.g.</p>
 <div class="fragment"><div class="line">cd $INSTALL_DIR</div>
 <div class="line">./tests/cudapoatests</div>
-</div><!-- fragment --><h1><a class="anchor" id="autotoc_md11"></a>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md15"></a>
 Enable Benchmarks</h1>
 <p>To enable benchmarks, add <code>-Dcga_enable_benchmarks=ON</code> to the <code>cmake</code> command in the build step.</p>
 <p>This builds Google Benchmark based microbenchmarks for applicable modules. The built benchmarks are installed under <code>${CMAKE_INSTALL_PREFIX}/benchmarks/&lt;module&gt;</code> and can be run directly.</p>
 <p>e.g. </p><div class="fragment"><div class="line">#INSTALL_DIR/benchmarks/cudapoa/multibatch</div>
 </div><!-- fragment --><p>A description of each of the benchmarks is present in a README under the module's benchmark folder.</p>
-<h1><a class="anchor" id="autotoc_md12"></a>
+<h1><a class="anchor" id="autotoc_md16"></a>
 Enable Doc Generation</h1>
-<p>To enable document generation for Clara Genomics Analysis, please install <code>Doxygen</code> on your system. Once <code>Doxygen</code> has been installed, run the following to build documents.</p>
+<p>To enable document generation for Clara Genomics Analysis, please install <code>Doxygen</code> on your system. Once<code>Doxygen</code> has been installed, run the following to build documents.</p>
 <div class="fragment"><div class="line">make docs</div>
 </div><!-- fragment --><p>Docs are also generated as part of the default <code>all</code> target when <code>Doxygen</code> is available on the system.</p>
-<h1><a class="anchor" id="autotoc_md13"></a>
+<p>To disable documentation generation add <code>-Dcga_generate_docs=OFF</code> to the <code>cmake</code> command in the <a href="#build">build step</a>.</p>
+<h1><a class="anchor" id="autotoc_md17"></a>
 Code Formatting</h1>
-<h2><a class="anchor" id="autotoc_md14"></a>
+<h2><a class="anchor" id="autotoc_md18"></a>
 C++ / CUDA</h2>
 <p>Clara Genomics Analysis makes use of <code>clang-format</code> to format it's source and header files. To make use of auto-formatting, <code>clang-format</code> would have to be installed from the LLVM package (for latest builds, best to refer to <a href="http://releases.llvm.org/download.html">http://releases.llvm.org/download.html</a>).</p>
 <p>Once <code>clang-format</code> has been installed, make sure the binary is in your path.</p>
@@ -139,10 +158,21 @@ <h2><a class="anchor" id="autotoc_md14"></a>
 <div class="fragment"><div class="line">make format</div>
 </div><!-- fragment --><p>To check if files are correct formatted, run the following in your build directory.</p>
 <div class="fragment"><div class="line">make check-format</div>
-</div><!-- fragment --><h2><a class="anchor" id="autotoc_md15"></a>
+</div><!-- fragment --><h2><a class="anchor" id="autotoc_md19"></a>
 Python</h2>
 <p>Clara Genomics Analysis follows the PEP-8 style guidelines for all its Python code. The automated CI system for Clara Genomics Analysis run <code>flake8</code> to check the style.</p>
 <p>To run style check manually, simply run the following from the top level folder. </p><div class="fragment"><div class="line">flake8 pyclaragenomics/</div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md20"></a>
+Running CI Tests Locally</h1>
+<p>Please note, your git repository will be mounted to the container, any untracked files will be removed from it. Before executing the CI locally, stash or add them to the index.</p>
+<p>Requirements:</p><ol type="1">
+<li>docker (<a href="https://docs.docker.com/install/linux/docker-ce/ubuntu/">https://docs.docker.com/install/linux/docker-ce/ubuntu/</a>)</li>
+<li>nvidia-docker (<a href="https://github.com/NVIDIA/nvidia-docker">https://github.com/NVIDIA/nvidia-docker</a>)</li>
+<li>nvidia-container-runtime (<a href="https://github.com/NVIDIA/nvidia-container-runtime">https://github.com/NVIDIA/nvidia-container-runtime</a>)</li>
+</ol>
+<p>Run the following command to execute the CI build steps inside a container locally: </p><div class="fragment"><div class="line">bash ci/local/build.sh -r &lt;ClaraGenomicsAnalysis repo path&gt;</div>
+</div><!-- fragment --><p> ci/local/build.sh script was adapted from <a href="https://github.com/rapidsai/cudf/tree/branch-0.11/ci/local">rapidsai/cudf</a></p>
+<p>The default docker image is <b>clara-genomics-base:cuda10.0-ubuntu16.04-gcc5-py3.7</b>. Other images from <a href="https://hub.docker.com/r/gpuci/clara-genomics-base/tags">gpuci/clara-genomics-base</a> repository can be used instead, by using -i argument </p><div class="fragment"><div class="line">bash ci/local/build.sh -r &lt;ClaraGenomicsAnalysis repo path&gt; -i gpuci/clara-genomics-base:cuda10.0-ubuntu18.04-gcc7-py3.6</div>
 </div><!-- fragment --> </div></div><!-- PageDoc -->
 </div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/cpp/index_8hpp_source.html b/docs/cpp/index_8hpp_source.html
index fb97627b0..0b60a83c4 100644
--- a/docs/cpp/index_8hpp_source.html
+++ b/docs/cpp/index_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -85,83 +85,74 @@
 <div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
 <div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
 <div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
-<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;claragenomics/cudamapper/sketch_element.hpp&quot;</span></div>
-<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;claragenomics/cudamapper/types.hpp&quot;</span></div>
-<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;claragenomics/io/fasta_parser.hpp&quot;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;claragenomics/cudamapper/sketch_element.hpp&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;claragenomics/cudamapper/types.hpp&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;claragenomics/io/fasta_parser.hpp&gt;</span></div>
 <div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
-<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
-<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;{</div>
-<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
-<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">namespace </span>cudamapper</div>
-<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;{</div>
-<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
-<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudamapper_1_1Index.html">   29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a></div>
-<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;{</div>
-<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html">   33</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html">RepresentationToSketchElements</a></div>
-<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    {</div>
-<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a839754dc6ed7d150ae06abf377e39c62">   36</a></span>&#160;        representation_t <a class="code" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a839754dc6ed7d150ae06abf377e39c62">representation_</a>;</div>
-<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a84ff4998d9fec875845a20272d209b30">   38</a></span>&#160;        <a class="code" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html">ArrayBlock</a> <a class="code" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a84ff4998d9fec875845a20272d209b30">sketch_elements_for_representation_and_read_id_</a>;</div>
-<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a604d5227c7fe6412e982fb31a1fee549">   40</a></span>&#160;        <a class="code" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html">ArrayBlock</a> <a class="code" href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a604d5227c7fe6412e982fb31a1fee549">sketch_elements_for_representation_and_all_read_ids_</a>;</div>
-<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    };</div>
-<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
-<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">~Index</a>() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
-<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;position_in_read_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306">positions_in_reads</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
-<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;read_id_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5">read_ids</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
-<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;SketchElement::DirectionOfRepresentation&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b">directions_of_reads</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;thrust/device_vector.h&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;{</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span>cudamapper</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;{</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudamapper_1_1Index.html">   31</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;{</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">~Index</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> thrust::device_vector&lt;representation_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80">representations</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> thrust::device_vector&lt;read_id_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401">read_ids</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> thrust::device_vector&lt;position_in_read_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183">positions_in_reads</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> thrust::device_vector&lt;SketchElement::DirectionOfRepresentation&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd">directions_of_reads</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::string&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd">read_id_to_read_name</a>(<span class="keyword">const</span> read_id_t read_id) <span class="keyword">const</span> = 0;</div>
 <div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
-<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keyword">virtual</span> std::uint64_t <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937">number_of_reads</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> thrust::device_vector&lt;representation_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a">unique_representations</a>() <span class="keyword">const</span> = 0;</div>
 <div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
-<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0">read_id_to_read_name</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> thrust::device_vector&lt;std::uint32_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff">first_occurrence_of_representations</a>() <span class="keyword">const</span> = 0;</div>
 <div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
-<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;std::uint32_t&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e">read_id_to_read_length</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
-<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keyword">virtual</span> std::uint64_t <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824">minimum_representation</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
-<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keyword">virtual</span> std::uint64_t <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152">maximum_representation</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160; </div>
-<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector&lt;std::vector&lt;RepresentationToSketchElements&gt;&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24">read_id_and_representation_to_sketch_elements</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">const</span> std::uint32_t&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4">read_id_to_read_length</a>(<span class="keyword">const</span> read_id_t read_id) <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keyword">virtual</span> std::uint64_t <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937">number_of_reads</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">   77</a></span>&#160;    <span class="keyword">static</span> uint64_t <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">maximum_kmer_size</a>()</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">sizeof</span>(representation_t) * 8 / 2;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    }</div>
 <div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
-<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="keyword">static</span> std::unique_ptr&lt;Index&gt;</div>
-<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a">create_index</a>(<span class="keyword">const</span> std::vector&lt;io::FastaParser*&gt;&amp; parsers, <span class="keyword">const</span> std::uint64_t kmer_size, <span class="keyword">const</span> std::uint64_t window_size, <span class="keyword">const</span> std::vector&lt;std::pair&lt;std::uint64_t, std::uint64_t&gt;&gt;&amp; ranges);</div>
-<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; </div>
-<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277">reached_end_of_input</a>() <span class="keyword">const</span> = 0;</div>
-<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div>
-<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keyword">static</span> std::unique_ptr&lt;Index&gt; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a">create_index</a>();</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keyword">static</span> std::unique_ptr&lt;Index&gt;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf">create_index</a>(<span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1io_1_1FastaParser.html">io::FastaParser</a>&amp; parser,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                 <span class="keyword">const</span> read_id_t first_read_id,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;                 <span class="keyword">const</span> read_id_t past_the_last_read_id,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;                 <span class="keyword">const</span> std::uint64_t kmer_size,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;                 <span class="keyword">const</span> std::uint64_t window_size,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;                 <span class="keyword">const</span> <span class="keywordtype">bool</span> hash_representations = <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;};</div>
 <div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
-<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">  103</a></span>&#160;    <span class="keyword">static</span> uint64_t <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">maximum_kmer_size</a>()</div>
-<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    {</div>
-<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">sizeof</span>(representation_t) * 8 / 2;</div>
-<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    }</div>
-<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;};</div>
-<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
-<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div>
-<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;} <span class="comment">// namespace cudamapper</span></div>
-<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
-<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;} <span class="comment">// namespace cudamapper</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160; </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
 </div><!-- fragment --></div><!-- contents -->
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a69fd1882260a7c55a45fe5e2a092b152"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152">claragenomics::cudamapper::Index::maximum_representation</a></div><div class="ttdeci">virtual std::uint64_t maximum_representation() const =0</div><div class="ttdoc">maximum possible representation</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_aac33d8d2aa72bb227326a35f5b452de5"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5">claragenomics::cudamapper::Index::read_ids</a></div><div class="ttdeci">virtual const std::vector&lt; read_id_t &gt; &amp; read_ids() const =0</div><div class="ttdoc">returns an array of reads ids for sketch elements</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements_html_a839754dc6ed7d150ae06abf377e39c62"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a839754dc6ed7d150ae06abf377e39c62">claragenomics::cudamapper::Index::RepresentationToSketchElements::representation_</a></div><div class="ttdeci">representation_t representation_</div><div class="ttdoc">representation</div><div class="ttdef"><b>Definition:</b> index.hpp:36</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_ac5036778efd3c83f5bf048174a8ab824"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824">claragenomics::cudamapper::Index::minimum_representation</a></div><div class="ttdeci">virtual std::uint64_t minimum_representation() const =0</div><div class="ttdoc">minimum possible representation</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements_html_a604d5227c7fe6412e982fb31a1fee549"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a604d5227c7fe6412e982fb31a1fee549">claragenomics::cudamapper::Index::RepresentationToSketchElements::sketch_elements_for_representation_and_all_read_ids_</a></div><div class="ttdeci">ArrayBlock sketch_elements_for_representation_and_all_read_ids_</div><div class="ttdoc">pointer to all sketch elements with that representation in all reads</div><div class="ttdef"><b>Definition:</b> index.hpp:40</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_acb29a3ba1a493f706a3ec25bc290b30a"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a">claragenomics::cudamapper::Index::create_index</a></div><div class="ttdeci">static std::unique_ptr&lt; Index &gt; create_index()</div><div class="ttdoc">creates an empty Index</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></div><div class="ttdoc">Index - manages mapping of (k,w)-kmer-representation and all its occurences.</div><div class="ttdef"><b>Definition:</b> index.hpp:29</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_afcaccc9f9526d9c66280eca17ff3a4ac"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">claragenomics::cudamapper::Index::~Index</a></div><div class="ttdeci">virtual ~Index()=default</div><div class="ttdoc">Virtual destructor for Index.</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a5cfe03b47850170ec64d61d2dbef0401"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401">claragenomics::cudamapper::Index::read_ids</a></div><div class="ttdeci">virtual const thrust::device_vector&lt; read_id_t &gt; &amp; read_ids() const =0</div><div class="ttdoc">returns an array of reads ids for sketch elements</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a876d5e82f9fc36f481854f7d84e5fc80"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80">claragenomics::cudamapper::Index::representations</a></div><div class="ttdeci">virtual const thrust::device_vector&lt; representation_t &gt; &amp; representations() const =0</div><div class="ttdoc">returns an array of representations of sketch elements</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></div><div class="ttdoc">Index - manages mapping of (k,w)-kmer-representation and all its occurences.</div><div class="ttdef"><b>Definition:</b> index.hpp:31</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_afcaccc9f9526d9c66280eca17ff3a4ac"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac">claragenomics::cudamapper::Index::~Index</a></div><div class="ttdeci">virtual ~Index()=default</div><div class="ttdoc">Virtual destructor.</div></div>
 <div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_ac9e936ae3809c82894a22a5ddb6bb937"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937">claragenomics::cudamapper::Index::number_of_reads</a></div><div class="ttdeci">virtual std::uint64_t number_of_reads() const =0</div><div class="ttdoc">returns number of reads in input data</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1ArrayBlock_html"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html">claragenomics::cudamapper::ArrayBlock</a></div><div class="ttdef"><b>Definition:</b> types.hpp:25</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements_html_a84ff4998d9fec875845a20272d209b30"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a84ff4998d9fec875845a20272d209b30">claragenomics::cudamapper::Index::RepresentationToSketchElements::sketch_elements_for_representation_and_read_id_</a></div><div class="ttdeci">ArrayBlock sketch_elements_for_representation_and_read_id_</div><div class="ttdoc">pointer to all sketch elements for that representation in some read (no need to save which one)</div><div class="ttdef"><b>Definition:</b> index.hpp:38</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_af8ad540ff0a2a244a35ae846ec745c24"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24">claragenomics::cudamapper::Index::read_id_and_representation_to_sketch_elements</a></div><div class="ttdeci">virtual const std::vector&lt; std::vector&lt; RepresentationToSketchElements &gt; &gt; &amp; read_id_and_representation_to_sketch_elements() const =0</div><div class="ttdoc">For each read_id (outer vector) returns a vector in which each element contains a representation from...</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_aec3176ac2d5e425b25dec14f411cbfe0"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0">claragenomics::cudamapper::Index::read_id_to_read_name</a></div><div class="ttdeci">virtual const std::vector&lt; std::string &gt; &amp; read_id_to_read_name() const =0</div><div class="ttdoc">returns mapping of internal read id that goes from 0 to number_of_reads-1 to actual read name from th...</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a4e5b3cf1c41146635ce9d51bbdfe2277"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277">claragenomics::cudamapper::Index::reached_end_of_input</a></div><div class="ttdeci">virtual bool reached_end_of_input() const =0</div><div class="ttdoc">Returns whether there are any more reads to process in the reads file (e.g FASTA file)</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_af9247d4b637615bf5912acc57b27b919"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">claragenomics::cudamapper::Index::maximum_kmer_size</a></div><div class="ttdeci">static uint64_t maximum_kmer_size()</div><div class="ttdoc">Return the maximum kmer length allowable. This is just the size of the representation in bits divided...</div><div class="ttdef"><b>Definition:</b> index.hpp:103</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a407a2466e8740a0f78a3ce876b87352b"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b">claragenomics::cudamapper::Index::directions_of_reads</a></div><div class="ttdeci">virtual const std::vector&lt; SketchElement::DirectionOfRepresentation &gt; &amp; directions_of_reads() const =0</div><div class="ttdoc">returns an array of directions in which sketch elements were read</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_af03421436f827e88316c74b0b3af200e"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e">claragenomics::cudamapper::Index::read_id_to_read_length</a></div><div class="ttdeci">virtual const std::vector&lt; std::uint32_t &gt; &amp; read_id_to_read_length() const =0</div><div class="ttdoc">returns mapping of internal read id that goes from 0 to read lengths for that read</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements_html"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html">claragenomics::cudamapper::Index::RepresentationToSketchElements</a></div><div class="ttdoc">RepresentationToSketchElements - representation, pointer to section of data arrays with sketch elemen...</div><div class="ttdef"><b>Definition:</b> index.hpp:33</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a5c75f11d1683e4f863f14a4088a36306"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306">claragenomics::cudamapper::Index::positions_in_reads</a></div><div class="ttdeci">virtual const std::vector&lt; position_in_read_t &gt; &amp; positions_in_reads() const =0</div><div class="ttdoc">returns an array of starting positions of sketch elements in their reads</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a59186cdd6dbfd21baeb07e80bd4354d4"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4">claragenomics::cudamapper::Index::read_id_to_read_length</a></div><div class="ttdeci">virtual const std::uint32_t &amp; read_id_to_read_length(const read_id_t read_id) const =0</div><div class="ttdoc">returns read length for the read with the gived read_id</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1io_1_1FastaParser_html"><div class="ttname"><a href="classclaragenomics_1_1io_1_1FastaParser.html">claragenomics::io::FastaParser</a></div><div class="ttdef"><b>Definition:</b> fasta_parser.hpp:31</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_ac59d309eeb226592a96622fec2b307fd"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd">claragenomics::cudamapper::Index::read_id_to_read_name</a></div><div class="ttdeci">virtual const std::string &amp; read_id_to_read_name(const read_id_t read_id) const =0</div><div class="ttdoc">returns read name of read with the given read_id</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a66e5d024befc410221610f454eff7183"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183">claragenomics::cudamapper::Index::positions_in_reads</a></div><div class="ttdeci">virtual const thrust::device_vector&lt; position_in_read_t &gt; &amp; positions_in_reads() const =0</div><div class="ttdoc">returns an array of starting positions of sketch elements in their reads</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a47c3cb89daa4076243dd5977acfb7ccf"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf">claragenomics::cudamapper::Index::create_index</a></div><div class="ttdeci">static std::unique_ptr&lt; Index &gt; create_index(const io::FastaParser &amp;parser, const read_id_t first_read_id, const read_id_t past_the_last_read_id, const std::uint64_t kmer_size, const std::uint64_t window_size, const bool hash_representations=true)</div><div class="ttdoc">generates a mapping of (k,w)-kmer-representation to all of its occurrences for one or more sequences</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_af9247d4b637615bf5912acc57b27b919"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919">claragenomics::cudamapper::Index::maximum_kmer_size</a></div><div class="ttdeci">static uint64_t maximum_kmer_size()</div><div class="ttdoc">Return the maximum kmer length allowable.</div><div class="ttdef"><b>Definition:</b> index.hpp:77</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_a5824f352fd89f69c9acc14430a3aa6cd"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd">claragenomics::cudamapper::Index::directions_of_reads</a></div><div class="ttdeci">virtual const thrust::device_vector&lt; SketchElement::DirectionOfRepresentation &gt; &amp; directions_of_reads() const =0</div><div class="ttdoc">returns an array of directions in which sketch elements were read</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_af44999c8852d5915d585c55a1a95c74a"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a">claragenomics::cudamapper::Index::unique_representations</a></div><div class="ttdeci">virtual const thrust::device_vector&lt; representation_t &gt; &amp; unique_representations() const =0</div><div class="ttdoc">returns an array where each representation is recorder only once, sorted by representation</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html_af4f69a9003fedb9ca11665d5faa43bff"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff">claragenomics::cudamapper::Index::first_occurrence_of_representations</a></div><div class="ttdeci">virtual const thrust::device_vector&lt; std::uint32_t &gt; &amp; first_occurrence_of_representations() const =0</div><div class="ttdoc">returns first occurrence of corresponding representation from unique_representations() in data arrays</div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
 Generated by &#160;<a href="http://www.doxygen.org/index.html">
diff --git a/docs/cpp/inherit_graph_0.map b/docs/cpp/inherit_graph_0.map
new file mode 100644
index 000000000..3fa168578
--- /dev/null
+++ b/docs/cpp/inherit_graph_0.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudaaligner_1_1Aligner.html" title=" " alt="" coords="5,5,185,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_0.md5 b/docs/cpp/inherit_graph_0.md5
new file mode 100644
index 000000000..be19e0090
--- /dev/null
+++ b/docs/cpp/inherit_graph_0.md5
@@ -0,0 +1 @@
+d4cfcf3a434776db6dda15638ec6b3a6
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_0.png b/docs/cpp/inherit_graph_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d0c9079e922d88f811120ecbe776f1d59f820f1
GIT binary patch
literal 2368
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_1.map b/docs/cpp/inherit_graph_1.map
new file mode 100644
index 000000000..099184cfd
--- /dev/null
+++ b/docs/cpp/inherit_graph_1.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudaaligner_1_1Alignment.html" title="Alignment &#45; Object encapsulating an alignment between 2 string." alt="" coords="5,5,185,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_1.md5 b/docs/cpp/inherit_graph_1.md5
new file mode 100644
index 000000000..4853bba4e
--- /dev/null
+++ b/docs/cpp/inherit_graph_1.md5
@@ -0,0 +1 @@
+39f6f5a43ff95648954f97ac8846f2f3
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_1.png b/docs/cpp/inherit_graph_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2dbde9ca1edd98b9b72714e76811d47c8708071
GIT binary patch
literal 2514
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
Y_&5kXdvEy=yrcmZrdB4USl9di0S+zCi~s-t

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_10.map b/docs/cpp/inherit_graph_10.map
new file mode 100644
index 000000000..dae074076
--- /dev/null
+++ b/docs/cpp/inherit_graph_10.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudapoa_1_1Batch.html" title=" " alt="" coords="5,5,168,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_10.md5 b/docs/cpp/inherit_graph_10.md5
new file mode 100644
index 000000000..ffd21ba85
--- /dev/null
+++ b/docs/cpp/inherit_graph_10.md5
@@ -0,0 +1 @@
+d861bf3c3ab6b5a80ae6732eaae53c2d
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_10.png b/docs/cpp/inherit_graph_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..7cc44a9d038598d97a0726d4ba470e982c31c01c
GIT binary patch
literal 2259
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_11.map b/docs/cpp/inherit_graph_11.map
new file mode 100644
index 000000000..835a7ff41
--- /dev/null
+++ b/docs/cpp/inherit_graph_11.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structclaragenomics_1_1cudapoa_1_1Entry.html" title="A structure to represent a sequence entry." alt="" coords="5,5,168,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_11.md5 b/docs/cpp/inherit_graph_11.md5
new file mode 100644
index 000000000..1842fb536
--- /dev/null
+++ b/docs/cpp/inherit_graph_11.md5
@@ -0,0 +1 @@
+0b87b7dc5dffaac3ee6aa0f143a9c943
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_11.png b/docs/cpp/inherit_graph_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..1199a6e5d5e3a27ebf40de2220972e06d4df54a7
GIT binary patch
literal 2314
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_12.map b/docs/cpp/inherit_graph_12.map
new file mode 100644
index 000000000..98fddb30e
--- /dev/null
+++ b/docs/cpp/inherit_graph_12.map
@@ -0,0 +1,5 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="5,35,155,61"/>
+<area shape="rect" id="node2" href="$classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure." alt="" coords="203,5,401,32"/>
+<area shape="rect" id="node3" href="$classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="213,57,391,98"/>
+</map>
diff --git a/docs/cpp/inherit_graph_12.md5 b/docs/cpp/inherit_graph_12.md5
new file mode 100644
index 000000000..12245bcc8
--- /dev/null
+++ b/docs/cpp/inherit_graph_12.md5
@@ -0,0 +1 @@
+df78fe7419ca6cea3330a45f375b43c2
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_12.png b/docs/cpp/inherit_graph_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1edfa848ea647a17e0f0a533ce5ed760681ea2b
GIT binary patch
literal 8481
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
V5vC>dXa&21$iGm6l}Z`<{ujZmnw$Ut

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_13.map b/docs/cpp/inherit_graph_13.map
new file mode 100644
index 000000000..64ec47196
--- /dev/null
+++ b/docs/cpp/inherit_graph_13.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1io_1_1FastaParser.html" title=" " alt="" coords="5,5,137,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_13.md5 b/docs/cpp/inherit_graph_13.md5
new file mode 100644
index 000000000..616c7ceb8
--- /dev/null
+++ b/docs/cpp/inherit_graph_13.md5
@@ -0,0 +1 @@
+fc7d2d5ca081d1d919b36f143e1e6620
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_13.png b/docs/cpp/inherit_graph_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa53d3b78fc75eb99041e602a478660b2865b529
GIT binary patch
literal 2240
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
M6B|s$MUTjT0sN>tt^fc4

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_14.map b/docs/cpp/inherit_graph_14.map
new file mode 100644
index 000000000..d46145e30
--- /dev/null
+++ b/docs/cpp/inherit_graph_14.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structclaragenomics_1_1io_1_1FastaSequence.html" title="A structure to hold details of a single FASTA entry." alt="" coords="5,5,137,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_14.md5 b/docs/cpp/inherit_graph_14.md5
new file mode 100644
index 000000000..5e070b2a9
--- /dev/null
+++ b/docs/cpp/inherit_graph_14.md5
@@ -0,0 +1 @@
+dfa48ffe247a6785e0a60cde2dd26169
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_14.png b/docs/cpp/inherit_graph_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9da49e572e66f6a0c2b4404ca6c4559c3117ac5
GIT binary patch
literal 2498
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
Fe*wR>)3X2o

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_15.map b/docs/cpp/inherit_graph_15.map
new file mode 100644
index 000000000..60ea6e781
--- /dev/null
+++ b/docs/cpp/inherit_graph_15.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structclaragenomics_1_1PairHash.html" title=" " alt="" coords="5,5,173,32"/>
+</map>
diff --git a/docs/cpp/inherit_graph_15.md5 b/docs/cpp/inherit_graph_15.md5
new file mode 100644
index 000000000..15a15c1fc
--- /dev/null
+++ b/docs/cpp/inherit_graph_15.md5
@@ -0,0 +1 @@
+c690c2b98021df478a811afec5c16efa
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_15.png b/docs/cpp/inherit_graph_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..29c39b39521f46c63ff974e188c6d6eae8628795
GIT binary patch
literal 1946
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_16.map b/docs/cpp/inherit_graph_16.map
new file mode 100644
index 000000000..ed95fabaf
--- /dev/null
+++ b/docs/cpp/inherit_graph_16.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1scoped__device__switch.html" title="A class to switch the CUDA device for the current scope using RAII." alt="" coords="5,5,161,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_16.md5 b/docs/cpp/inherit_graph_16.md5
new file mode 100644
index 000000000..b5f887819
--- /dev/null
+++ b/docs/cpp/inherit_graph_16.md5
@@ -0,0 +1 @@
+095e6ac228c5f51a68359d93e361c4bd
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_16.png b/docs/cpp/inherit_graph_16.png
new file mode 100644
index 0000000000000000000000000000000000000000..9179b174981a8080e5aa950e9ac66601ee499480
GIT binary patch
literal 2681
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
MGi!M1<y+DJ0omR=1^@s6

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_2.map b/docs/cpp/inherit_graph_2.map
new file mode 100644
index 000000000..a217e80cd
--- /dev/null
+++ b/docs/cpp/inherit_graph_2.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structclaragenomics_1_1cudamapper_1_1Anchor.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_2.md5 b/docs/cpp/inherit_graph_2.md5
new file mode 100644
index 000000000..36dd4895e
--- /dev/null
+++ b/docs/cpp/inherit_graph_2.md5
@@ -0,0 +1 @@
+7ffbbe1f2ae2bdf7eac347829ba037c7
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_2.png b/docs/cpp/inherit_graph_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b1f92de53effc9458564d389fb5de56411cbcf2
GIT binary patch
literal 2320
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_3.map b/docs/cpp/inherit_graph_3.map
new file mode 100644
index 000000000..54a021342
--- /dev/null
+++ b/docs/cpp/inherit_graph_3.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structclaragenomics_1_1cudamapper_1_1ArrayBlock.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_3.md5 b/docs/cpp/inherit_graph_3.md5
new file mode 100644
index 000000000..3fe93674c
--- /dev/null
+++ b/docs/cpp/inherit_graph_3.md5
@@ -0,0 +1 @@
+b257301fa451280b47d48a8b3e831b11
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_3.png b/docs/cpp/inherit_graph_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0ac927907694005ff6694f6f694f43fb2f50df8
GIT binary patch
literal 2752
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_4.map b/docs/cpp/inherit_graph_4.map
new file mode 100644
index 000000000..3e7efca2e
--- /dev/null
+++ b/docs/cpp/inherit_graph_4.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudamapper_1_1Index.html" title="Index &#45; manages mapping of (k,w)&#45;kmer&#45;representation and all its occurences." alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_4.md5 b/docs/cpp/inherit_graph_4.md5
new file mode 100644
index 000000000..7553a523a
--- /dev/null
+++ b/docs/cpp/inherit_graph_4.md5
@@ -0,0 +1 @@
+cd5c0a624cc9990bd7f8c0f7d48dae66
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_4.png b/docs/cpp/inherit_graph_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..0bc273ea47f69f7007d0504fad285bad14639afc
GIT binary patch
literal 2212
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_5.map b/docs/cpp/inherit_graph_5.map
new file mode 100644
index 000000000..fe3832790
--- /dev/null
+++ b/docs/cpp/inherit_graph_5.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher &#45; base matcher." alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_5.md5 b/docs/cpp/inherit_graph_5.md5
new file mode 100644
index 000000000..763ffe324
--- /dev/null
+++ b/docs/cpp/inherit_graph_5.md5
@@ -0,0 +1 @@
+2f66a3fa4ad10348768e9fd5e9499bbb
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_5.png b/docs/cpp/inherit_graph_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..c61ab5ac3a75fa43bc7fb872b189170e743d8f18
GIT binary patch
literal 2352
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
S_ql^55MX!C*{aSmAnCtp^lZfd

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_6.map b/docs/cpp/inherit_graph_6.map
new file mode 100644
index 000000000..1a953785c
--- /dev/null
+++ b/docs/cpp/inherit_graph_6.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$structclaragenomics_1_1cudamapper_1_1Overlap.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_6.md5 b/docs/cpp/inherit_graph_6.md5
new file mode 100644
index 000000000..8c8e44cc4
--- /dev/null
+++ b/docs/cpp/inherit_graph_6.md5
@@ -0,0 +1 @@
+5fcb9dcc5d9958713f67e514333f6759
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_6.png b/docs/cpp/inherit_graph_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfdb5a92d021c82730a44ca260a52ffba7cab907
GIT binary patch
literal 2442
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
IM6N<$f)X~3g#Z8m

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_7.map b/docs/cpp/inherit_graph_7.map
new file mode 100644
index 000000000..058e28192
--- /dev/null
+++ b/docs/cpp/inherit_graph_7.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudamapper_1_1Overlapper.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_7.md5 b/docs/cpp/inherit_graph_7.md5
new file mode 100644
index 000000000..52ff51c0d
--- /dev/null
+++ b/docs/cpp/inherit_graph_7.md5
@@ -0,0 +1 @@
+913b868f3cae61eb6cc0d8b11cf850d6
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_7.png b/docs/cpp/inherit_graph_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c15766ec272db1ebe0f9dd1fe5d3f40e75e0981
GIT binary patch
literal 2440
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_8.map b/docs/cpp/inherit_graph_8.map
new file mode 100644
index 000000000..cafa9f1f2
--- /dev/null
+++ b/docs/cpp/inherit_graph_8.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudamapper_1_1Sequence.html" title="Sequence &#45; represents an individual read (name, DNA nucleotides etc)" alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_8.md5 b/docs/cpp/inherit_graph_8.md5
new file mode 100644
index 000000000..4e8f17a43
--- /dev/null
+++ b/docs/cpp/inherit_graph_8.md5
@@ -0,0 +1 @@
+f2060b3cc4b3697ada91964ca65f7c9c
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_8.png b/docs/cpp/inherit_graph_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ef8e9eaf90389b10b918ba737e00c1408373a59
GIT binary patch
literal 2454
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
U!L=TBlmGw#07*qoM6N<$g5oB!EC2ui

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherit_graph_9.map b/docs/cpp/inherit_graph_9.map
new file mode 100644
index 000000000..f339ef8ae
--- /dev/null
+++ b/docs/cpp/inherit_graph_9.map
@@ -0,0 +1,3 @@
+<map id="Graphical Class Hierarchy" name="Graphical Class Hierarchy">
+<area shape="rect" id="node1" href="$classclaragenomics_1_1cudamapper_1_1SketchElement.html" title="SketchElement &#45; Contains integer representation, position, direction and read id of a kmer." alt="" coords="5,5,191,47"/>
+</map>
diff --git a/docs/cpp/inherit_graph_9.md5 b/docs/cpp/inherit_graph_9.md5
new file mode 100644
index 000000000..6e15bc9fe
--- /dev/null
+++ b/docs/cpp/inherit_graph_9.md5
@@ -0,0 +1 @@
+f9193197e9660a8c8b6d39d9c072a1ea
\ No newline at end of file
diff --git a/docs/cpp/inherit_graph_9.png b/docs/cpp/inherit_graph_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb0df69d5ef5aa57668786cb18c4a20727ad6813
GIT binary patch
literal 2629
zcmZWrc{J4B8~;+-x1u5O3S*2>28oh&Ox7XUmx&CaL8VkOwv4Tp>|>gy$gX6G8Ow_z
z%S2<}TP8|m-}mkPcFuc#|NPE9_ul88d(T~-`}usH=dq=Q5kHSO4*&rCCdOzhux|#d
z8W%g*I@tkoV8?+oGeQFgf6B}Hf>Z$D-Znw&+XOzJqdH@R%|#dm`Iq#S*4S-n$vjaI
zc;I8vzv6pdy7r49^^L3Ht)fzYi|4+~wo-eGY=wKv99EHm+eYG(^psiI*@o^(GCVfj
zs4}+X&x4TDFBaT%G<<5$oGG!~oY+t!OfWk~D!d*P)E=mwiUf#RM1`M{fah{}9Jj&A
z>Zi)IM}G{=vY~-N6XmQ|tD*=qQdV1A8wQIW-ks~rwJTCYAX>Gc%*fpAY*evb>KTl4
z0afExg00q5Za!jTS^4NW;b`^SDsJ9~ME^60891v~HkF@LG#HY&`!QnP;|ByUT*XL?
zfTZ{W9CrNRJMP&zpL7iD<e!m}Xy4*unGND<*)@GVy@ryjwKS(<l7X$Qt&L3@nLHG6
zgm-ymrLmN{MdTEWh=|D03Bk_*033n%J3fAOZS87>r}@2m=l<EEc1+C9`YMqx-krd_
zb<k2%I}BV?79){JX6dKhDn{flXP}$tPIL3$YWMc`YOp0}nG+Hc=nOeIIho{--@hO9
zzp}o5{d!|#V`yk7BSG>|u2FowtQA}YobBs7d;WYijV5xUO%TQ)yj+bG%Fqqd(bD?L
zV93K@6QGCJQ`B+00#+d#^WS1)W5dG%@CxV88{f#qlnzkt(A5E`H2G8U>B{FiAx_X^
z3Z(Y@{QTpJcE-?STy6xyMe)tOod=LOx>r}m{QP`*xhkL+7N$G>t;~&xRa%&udV8-r
zcx!ogYh`A7dV6~td<0{1rHAFA>WIZYcPhS#$2*mKm>3#zSh=<^7=nC!BFB%j0q;Wh
zc%(5F770(D>}@W&TU)0ZL)$w#E@gbFx-~QvKvufS4)~6gUn=N34uND}K{L~ga))NL
zwX~F6>NbCUBLDb-gT!4|7CRN`R9snD$dwo2eX*0f<^`F|7`y%Y_3NOZAUqyF(UmC(
zyu^HtUAkzzrhBm4H#oTdqlH%|6G<{vc#<|Hm#I+ivQT{t0PfW6YQz<_K!vzOc#hz!
zXfzvJ+vL=9YHF+ddxW$H0VDLPsvK5+K8zr6<;s<zlB=@$)uDTupPjwEf0L1}NpIi1
z)6vuvmuzZ^5tNS94ckXIh3)UQd8ksU)MPJP+vAyCMj44xx-hLaKN$qUD0cu~U`|cX
z%uGZL%&dV=3Ai9#b%ec<q-Y=e$iCF&2w*wk(Y$GdIj5NwtdrSmOmR`X%ov6Uw@ivK
zg11){pwPqgBkYg#PMz8)cX)F-Q|ECDuHHrJ=u!Q7R7RQrf`m|2O<Cj<6g1+eJ864$
zN_^<_thgeptSkgHc<hVT8Rn=^J3vTzpM^qmi;6xC_Tkfh$}X?1g)EP^)!d!DbN4Rz
z2|=5SV*^F@iAwSSuxZx0y|prVDGqXUy|56@Fu5!Ao_OW=pa3Am6NN_jK3VVeIr%=d
zy3Uh_k8gH%7CqP6+G<^3kxYn*j;{3ka(}epQFL@Puc%T|ttA952{PsxmCD_fo({n&
z1w27<adL2g*xh&SwhrZ`HjOD$n4rV5%}J)`Zn5fgwPaG;Jk-R^Oik6q&GGo@?X?*{
z`<TvgkHA1Np!?gmC+ZKiT-@Dddx~rjbH6;$67hH+AA=`@gLXC%X@-O;dOhoT^DmsK
ziAh^$ryYW{z^WIHYe647%0X=OR#T;5a(bSorXB*irvhX(bMx}9dwLEI4Q*^}=msw8
zAxJWl&CShBCNm)+;lTpS?=wvSiA+?5!cr+oNoBXbzw7MmoS2x%F-nBV%O7kVEq1Od
z0YQ}01L}Y|MYW}==@7685{VWeU8S%wIyuP+z!emFrUKC8xVH{6$zN;k8s+r#4-91G
zt;U+<G&dIR?Q9g;yau5ldEpLJL7^?9r)~8gV2d)ze0JmZZA+PCCRHP`!xJQV=+1fv
zKIBwt+pw>CB17@?X$%H4e*65mizz49SWBE}6e=q*@v^V)8&uZf$_i2F87BV_rvUSh
zsK%eDy+4OCLoNE4=-&+6S@)ald{N=mCBVnW{P<B!LV`AFLVH{YPvk;5*x9xIT*|k2
zA%66zKe*5%7t1~Jg=m9VTUp`d<t=*kN<RY<_Y2ekRMze7)u~VEXAIsyo&DA94{Fa<
zESC9mX?Jh0ueTQi6V6Lkt+(@PR~hXR9StK+PfxeD8se<8EV-gSycKjmrsv47M2cM*
zhNL>z(SpIV?%Y`hg+1Qz=O;3<qN3u#{MQRCeK)LUn%SA4HYRg-=_g~b*qJ~e5F;W|
zQc`;R`WP1rxgVF7f`3eSp|Z~}mb5C*JgIRL3We(JR$=0WmBsjKuzyKOU3U2TLnVeH
zfhohOit#x*I)dn2U0&wl=kI81Q=wqOZ=T^KHd=x)!_e6~GYIt);scvBF*BQ)ovph!
z10jF%yK!Tr>Xs|0h)dV|PiSgtrXyWhU%p)Yd*r0Jc%T*w&e8iJ6Ro2T9smk9olcJv
zMREXdoahK75-BIwl7}mII2{ral0*IW{d;E9Sp3b|%oX|MME;xGPjmWj0l={DeSQ7L
zh6dm>mX0S4C<X%IXc@=4z@?#5S2j{R?pHer2nYGf9&_i}&c*_76iS^M@}rr1vZ=Cw
z;{OKfZ*{{U;j6jy`vCD$a(bmDLi<!CKR<s@Pmha>3+NIp!n&`$y=b}c!Y|dcXRpXf
z*J_iFOy{K~=y9<Dpw|ay*1$jogoFC#;p^+$e;`16xO4dx#s4MLU%B1%#tNCGoghA%
zajW6#2i)7b&^;$u>KP|mYzvM=CO5fysVOS*0*hl!oF7Iq+Swi9d9p$%paJAbH#Qu~
zl~pIwc98~N^uOJRagQzdI1C;>+*({zc1t$R!zzjHYv%ZXf(r&yJRUJNIyGgYv*D{w
z4K~%%)+U+e&7pzt%1ZTYa}nXCd-3rD0>$}6i(p)Z#%nsAG&{B5GM?`PGd&G4!{KC7
z{7&KA-Fu?q3QJ0q;BYt+8Me77T|R8>C{(|mE1R=JUkKE+H*!?)`zocuPqvyGo11$9
zA}T4#(%Jb7i{;|z_;7JlABAHB7FSotSGK^!;dAW+WXgpv){ei|f|OI9x2A*3Iu;x*
z#9Q=_^}<DJsHk`5HC^rrR#R-!YSa!!qLh5V{>aFPu^(z3M3|eKoAHEiQMod;Lq$b}
z#bR~83pi}49Y1@$3y+sScXqroHRoe;?V*MVm6-P(Zid|Z>M>h!qqq;<97-@gzyCKZ
ze^c(y4y&yDUxTr||3<0C-o#?R21Z3t9GY8N{A;k~QIEbqaR1F-O8GCv`d_Yfz#bXf
W{a1T+@D!LA0w$L%&?TsA5&r`2)d30s

literal 0
HcmV?d00001

diff --git a/docs/cpp/inherits.html b/docs/cpp/inherits.html
new file mode 100644
index 000000000..439f861b0
--- /dev/null
+++ b/docs/cpp/inherits.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+  <div class="headertitle">
+<div class="title">Class Hierarchy</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">
+<p><a href="hierarchy.html">Go to the textual class hierarchy</a></p>
+</div><table border="0" cellspacing="10" cellpadding="0">
+<tr><td><img src="inherit_graph_0.png" border="0" usemap="#claragenomics_1_1cudaaligner_1_1Aligner" alt=""/>
+<map name="claragenomics_1_1cudaaligner_1_1Aligner" id="claragenomics_1_1cudaaligner_1_1Aligner">
+<area shape="rect" href="classclaragenomics_1_1cudaaligner_1_1Aligner.html" title=" " alt="" coords="5,5,185,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_1.png" border="0" usemap="#claragenomics_1_1cudaaligner_1_1Alignment" alt=""/>
+<map name="claragenomics_1_1cudaaligner_1_1Alignment" id="claragenomics_1_1cudaaligner_1_1Alignment">
+<area shape="rect" href="classclaragenomics_1_1cudaaligner_1_1Alignment.html" title="Alignment &#45; Object encapsulating an alignment between 2 string." alt="" coords="5,5,185,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_2.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1Anchor" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1Anchor" id="claragenomics_1_1cudamapper_1_1Anchor">
+<area shape="rect" href="structclaragenomics_1_1cudamapper_1_1Anchor.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_3.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1ArrayBlock" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1ArrayBlock" id="claragenomics_1_1cudamapper_1_1ArrayBlock">
+<area shape="rect" href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_4.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1Index" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1Index" id="claragenomics_1_1cudamapper_1_1Index">
+<area shape="rect" href="classclaragenomics_1_1cudamapper_1_1Index.html" title="Index &#45; manages mapping of (k,w)&#45;kmer&#45;representation and all its occurences." alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_5.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1Matcher" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1Matcher" id="claragenomics_1_1cudamapper_1_1Matcher">
+<area shape="rect" href="classclaragenomics_1_1cudamapper_1_1Matcher.html" title="Matcher &#45; base matcher." alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_6.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1Overlap" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1Overlap" id="claragenomics_1_1cudamapper_1_1Overlap">
+<area shape="rect" href="structclaragenomics_1_1cudamapper_1_1Overlap.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_7.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1Overlapper" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1Overlapper" id="claragenomics_1_1cudamapper_1_1Overlapper">
+<area shape="rect" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html" title=" " alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_8.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1Sequence" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1Sequence" id="claragenomics_1_1cudamapper_1_1Sequence">
+<area shape="rect" href="classclaragenomics_1_1cudamapper_1_1Sequence.html" title="Sequence &#45; represents an individual read (name, DNA nucleotides etc)" alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_9.png" border="0" usemap="#claragenomics_1_1cudamapper_1_1SketchElement" alt=""/>
+<map name="claragenomics_1_1cudamapper_1_1SketchElement" id="claragenomics_1_1cudamapper_1_1SketchElement">
+<area shape="rect" href="classclaragenomics_1_1cudamapper_1_1SketchElement.html" title="SketchElement &#45; Contains integer representation, position, direction and read id of a kmer." alt="" coords="5,5,191,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_10.png" border="0" usemap="#claragenomics_1_1cudapoa_1_1Batch" alt=""/>
+<map name="claragenomics_1_1cudapoa_1_1Batch" id="claragenomics_1_1cudapoa_1_1Batch">
+<area shape="rect" href="classclaragenomics_1_1cudapoa_1_1Batch.html" title=" " alt="" coords="5,5,168,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_11.png" border="0" usemap="#claragenomics_1_1cudapoa_1_1Entry" alt=""/>
+<map name="claragenomics_1_1cudapoa_1_1Entry" id="claragenomics_1_1cudapoa_1_1Entry">
+<area shape="rect" href="structclaragenomics_1_1cudapoa_1_1Entry.html" title="A structure to represent a sequence entry." alt="" coords="5,5,168,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_12.png" border="0" usemap="#claragenomics_1_1Graph" alt=""/>
+<map name="claragenomics_1_1Graph" id="claragenomics_1_1Graph">
+<area shape="rect" href="classclaragenomics_1_1Graph.html" title="Object representing a generic graph structure." alt="" coords="5,35,155,61"/>
+<area shape="rect" href="classclaragenomics_1_1DirectedGraph.html" title="DirectedGraph Object representing a directed graph structure." alt="" coords="203,5,401,32"/>
+<area shape="rect" href="classclaragenomics_1_1UndirectedGraph.html" title="UndirectedGraph Object representing an undirected graph structure." alt="" coords="213,57,391,98"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_13.png" border="0" usemap="#claragenomics_1_1io_1_1FastaParser" alt=""/>
+<map name="claragenomics_1_1io_1_1FastaParser" id="claragenomics_1_1io_1_1FastaParser">
+<area shape="rect" href="classclaragenomics_1_1io_1_1FastaParser.html" title=" " alt="" coords="5,5,137,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_14.png" border="0" usemap="#claragenomics_1_1io_1_1FastaSequence" alt=""/>
+<map name="claragenomics_1_1io_1_1FastaSequence" id="claragenomics_1_1io_1_1FastaSequence">
+<area shape="rect" href="structclaragenomics_1_1io_1_1FastaSequence.html" title="A structure to hold details of a single FASTA entry." alt="" coords="5,5,137,47"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_15.png" border="0" usemap="#claragenomics_1_1PairHash" alt=""/>
+<map name="claragenomics_1_1PairHash" id="claragenomics_1_1PairHash">
+<area shape="rect" href="structclaragenomics_1_1PairHash.html" title=" " alt="" coords="5,5,173,32"/>
+</map>
+</td></tr>
+<tr><td><img src="inherit_graph_16.png" border="0" usemap="#claragenomics_1_1scoped__device__switch" alt=""/>
+<map name="claragenomics_1_1scoped__device__switch" id="claragenomics_1_1scoped__device__switch">
+<area shape="rect" href="classclaragenomics_1_1scoped__device__switch.html" title="A class to switch the CUDA device for the current scope using RAII." alt="" coords="5,5,161,47"/>
+</map>
+</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/logging_8hpp.html b/docs/cpp/logging_8hpp.html
index 0d359cd13..a5db7a556 100644
--- a/docs/cpp/logging_8hpp.html
+++ b/docs/cpp/logging_8hpp.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -76,6 +76,25 @@
 <div class="contents">
 <div class="textblock"><code>#include &lt;claragenomics/utils/cudaversions.hpp&gt;</code><br />
 <code>#include &lt;spdlog/spdlog.h&gt;</code><br />
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for logging.hpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="logging_8hpp__incl.png" border="0" usemap="#common_2logging_2include_2claragenomics_2logging_2logging_8hpp" alt=""/></div>
+<map name="common_2logging_2include_2claragenomics_2logging_2logging_8hpp" id="common_2logging_2include_2claragenomics_2logging_2logging_8hpp">
+<area shape="rect" title=" " alt="" coords="65,5,227,61"/>
+<area shape="rect" href="cudaversions_8hpp_source.html" title=" " alt="" coords="5,109,140,151"/>
+<area shape="rect" title=" " alt="" coords="164,117,277,143"/>
+</map>
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="logging_8hpp__dep__incl.png" border="0" usemap="#common_2logging_2include_2claragenomics_2logging_2logging_8hppdep" alt=""/></div>
+<map name="common_2logging_2include_2claragenomics_2logging_2logging_8hppdep" id="common_2logging_2include_2claragenomics_2logging_2logging_8hppdep">
+<area shape="rect" title=" " alt="" coords="5,5,168,61"/>
+<area shape="rect" href="cudautils_8hpp.html" title=" " alt="" coords="14,109,159,165"/>
+</map>
+</div>
 </div>
 <p><a href="logging_8hpp_source.html">Go to the source code of this file.</a></p>
 <table class="memberdecls">
diff --git a/docs/cpp/logging_8hpp__dep__incl.map b/docs/cpp/logging_8hpp__dep__incl.map
new file mode 100644
index 000000000..1745c30a1
--- /dev/null
+++ b/docs/cpp/logging_8hpp__dep__incl.map
@@ -0,0 +1,4 @@
+<map id="common/logging/include/claragenomics/logging/logging.hpp" name="common/logging/include/claragenomics/logging/logging.hpp">
+<area shape="rect" id="node1" title=" " alt="" coords="5,5,168,61"/>
+<area shape="rect" id="node2" href="$cudautils_8hpp.html" title=" " alt="" coords="14,109,159,165"/>
+</map>
diff --git a/docs/cpp/logging_8hpp__dep__incl.md5 b/docs/cpp/logging_8hpp__dep__incl.md5
new file mode 100644
index 000000000..e760268ff
--- /dev/null
+++ b/docs/cpp/logging_8hpp__dep__incl.md5
@@ -0,0 +1 @@
+afa7a8a5a6c1e6f36379fcdd5a44413c
\ No newline at end of file
diff --git a/docs/cpp/logging_8hpp__dep__incl.png b/docs/cpp/logging_8hpp__dep__incl.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ac56ad2c5fc10b6e89946f0fafe8ebc86bdc851
GIT binary patch
literal 6117
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/logging_8hpp__incl.map b/docs/cpp/logging_8hpp__incl.map
new file mode 100644
index 000000000..03d196b46
--- /dev/null
+++ b/docs/cpp/logging_8hpp__incl.map
@@ -0,0 +1,5 @@
+<map id="common/logging/include/claragenomics/logging/logging.hpp" name="common/logging/include/claragenomics/logging/logging.hpp">
+<area shape="rect" id="node1" title=" " alt="" coords="65,5,227,61"/>
+<area shape="rect" id="node2" href="$cudaversions_8hpp_source.html" title=" " alt="" coords="5,109,140,151"/>
+<area shape="rect" id="node3" title=" " alt="" coords="164,117,277,143"/>
+</map>
diff --git a/docs/cpp/logging_8hpp__incl.md5 b/docs/cpp/logging_8hpp__incl.md5
new file mode 100644
index 000000000..fc0a775e8
--- /dev/null
+++ b/docs/cpp/logging_8hpp__incl.md5
@@ -0,0 +1 @@
+3bc6b026420b28c0f90c4bcc632c60cc
\ No newline at end of file
diff --git a/docs/cpp/logging_8hpp__incl.png b/docs/cpp/logging_8hpp__incl.png
new file mode 100644
index 0000000000000000000000000000000000000000..b0ade8b2fc385cab91d951e63a7d2b057d9f64cb
GIT binary patch
literal 8783
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

literal 0
HcmV?d00001

diff --git a/docs/cpp/logging_8hpp_source.html b/docs/cpp/logging_8hpp_source.html
index c23b79e4c..f945a88a2 100644
--- a/docs/cpp/logging_8hpp_source.html
+++ b/docs/cpp/logging_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/matcher_8hpp_source.html b/docs/cpp/matcher_8hpp_source.html
new file mode 100644
index 000000000..4e1ec6c40
--- /dev/null
+++ b/docs/cpp/matcher_8hpp_source.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: cudamapper/include/claragenomics/cudamapper/matcher.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_2312589fb962dec58b1579fafe6a300a.html">cudamapper</a></li><li class="navelem"><a class="el" href="dir_46ada5e69ffe047ce1b425fcb02bc946.html">include</a></li><li class="navelem"><a class="el" href="dir_00faf102fbd78ece25aa2d8f2597f59b.html">claragenomics</a></li><li class="navelem"><a class="el" href="dir_5d9177f36fbce0c085b11d352d248d8a.html">cudamapper</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">matcher.hpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2019, NVIDIA CORPORATION.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* NVIDIA CORPORATION and its licensors retain all intellectual property</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* and proprietary rights in and to this software, related documentation</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* and any modifications thereto.  Any use, reproduction, disclosure or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">* distribution of this software and related documentation without an express</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* license agreement from NVIDIA CORPORATION is strictly prohibited.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;thrust/device_vector.h&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;claragenomics/cudamapper/index.hpp&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;{</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">namespace </span>cudamapper</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;{</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudamapper_1_1Matcher.html">Matcher</a></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;{</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab">~Matcher</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keyword">virtual</span> thrust::device_vector&lt;Anchor&gt;&amp; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2">anchors</a>() = 0;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="keyword">static</span> std::unique_ptr&lt;Matcher&gt; <a class="code" href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752">create_matcher</a>(<span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a>&amp; query_index,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;                                                   <span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a>&amp; target_index);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;} <span class="comment">// namespace cudamapper</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></div><div class="ttdoc">Index - manages mapping of (k,w)-kmer-representation and all its occurences.</div><div class="ttdef"><b>Definition:</b> index.hpp:31</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Matcher_html_ac2f70fb6b1876d0fa81fd8c0189191ab"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab">claragenomics::cudamapper::Matcher::~Matcher</a></div><div class="ttdeci">virtual ~Matcher()=default</div><div class="ttdoc">Virtual destructor.</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Matcher_html_ae65a1507ddf1bf2aa046fc0eacfea752"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752">claragenomics::cudamapper::Matcher::create_matcher</a></div><div class="ttdeci">static std::unique_ptr&lt; Matcher &gt; create_matcher(const Index &amp;query_index, const Index &amp;target_index)</div><div class="ttdoc">Creates a Matcher object.</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Matcher_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Matcher.html">claragenomics::cudamapper::Matcher</a></div><div class="ttdoc">Matcher - base matcher.</div><div class="ttdef"><b>Definition:</b> matcher.hpp:26</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Matcher_html_ac3de5ba06b0c7ef0329caf71ae98f2d2"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2">claragenomics::cudamapper::Matcher::anchors</a></div><div class="ttdeci">virtual thrust::device_vector&lt; Anchor &gt; &amp; anchors()=0</div><div class="ttdoc">returns anchors</div></div>
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/mathutils_8hpp_source.html b/docs/cpp/mathutils_8hpp_source.html
index 624a9fb59..b9b43ab6f 100644
--- a/docs/cpp/mathutils_8hpp_source.html
+++ b/docs/cpp/mathutils_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/menudata.js b/docs/cpp/menudata.js
index 31b184868..76c3d6218 100644
--- a/docs/cpp/menudata.js
+++ b/docs/cpp/menudata.js
@@ -26,12 +26,14 @@ var menudata={children:[
 {text:"Classes",url:"annotated.html",children:[
 {text:"Class List",url:"annotated.html"},
 {text:"Class Index",url:"classes.html"},
+{text:"Class Hierarchy",url:"inherits.html"},
 {text:"Class Members",url:"functions.html",children:[
 {text:"All",url:"functions.html",children:[
 {text:"a",url:"functions.html#index_a"},
 {text:"b",url:"functions.html#index_b"},
 {text:"c",url:"functions.html#index_c"},
 {text:"d",url:"functions.html#index_d"},
+{text:"e",url:"functions.html#index_e"},
 {text:"f",url:"functions.html#index_f"},
 {text:"g",url:"functions.html#index_g"},
 {text:"l",url:"functions.html#index_l"},
@@ -43,6 +45,7 @@ var menudata={children:[
 {text:"r",url:"functions.html#index_r"},
 {text:"s",url:"functions.html#index_s"},
 {text:"t",url:"functions.html#index_t"},
+{text:"u",url:"functions.html#index_u"},
 {text:"w",url:"functions.html#index_w"},
 {text:"~",url:"functions.html#index__7E"}]},
 {text:"Functions",url:"functions_func.html",children:[
@@ -50,15 +53,19 @@ var menudata={children:[
 {text:"b",url:"functions_func.html#index_b"},
 {text:"c",url:"functions_func.html#index_c"},
 {text:"d",url:"functions_func.html#index_d"},
+{text:"e",url:"functions_func.html#index_e"},
 {text:"f",url:"functions_func.html#index_f"},
 {text:"g",url:"functions_func.html#index_g"},
 {text:"m",url:"functions_func.html#index_m"},
 {text:"n",url:"functions_func.html#index_n"},
+{text:"o",url:"functions_func.html#index_o"},
 {text:"p",url:"functions_func.html#index_p"},
 {text:"r",url:"functions_func.html#index_r"},
 {text:"s",url:"functions_func.html#index_s"},
+{text:"u",url:"functions_func.html#index_u"},
 {text:"~",url:"functions_func.html#index__7E"}]},
 {text:"Variables",url:"functions_vars.html"},
+{text:"Typedefs",url:"functions_type.html"},
 {text:"Enumerations",url:"functions_enum.html"}]}]},
 {text:"Files",url:"files.html",children:[
 {text:"File List",url:"files.html"},
diff --git a/docs/cpp/modules.html b/docs/cpp/modules.html
index 48c59a7ce..f1f253e24 100644
--- a/docs/cpp/modules.html
+++ b/docs/cpp/modules.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/overlapper_8hpp_source.html b/docs/cpp/overlapper_8hpp_source.html
index 16fa4f1e8..5aabd26aa 100644
--- a/docs/cpp/overlapper_8hpp_source.html
+++ b/docs/cpp/overlapper_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -82,36 +82,40 @@
 <div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div>
 <div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#pragma once</span></div>
 <div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
-<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &quot;index.hpp&quot;</span></div>
-<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &quot;types.hpp&quot;</span></div>
-<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
-<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
-<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;{</div>
-<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
-<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keyword">namespace </span>cudamapper</div>
-<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;{</div>
-<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
-<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">Overlapper</a></div>
-<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;{</div>
-<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">~Overlapper</a>() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
-<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">get_overlaps</a>(std::vector&lt;Overlap&gt;&amp; overlaps, std::vector&lt;Anchor&gt;&amp; anchors, <span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a>&amp; index) = 0;</div>
-<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
-<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371">print_paf</a>(<span class="keyword">const</span> std::vector&lt;Overlap&gt;&amp; overlaps);</div>
-<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
-<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c">filter_overlaps</a>(std::vector&lt;Overlap&gt;&amp; filtered_overlaps, <span class="keyword">const</span> std::vector&lt;Overlap&gt;&amp; overlaps, <span class="keywordtype">size_t</span> min_residues = 5,</div>
-<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;                                <span class="keywordtype">size_t</span> min_overlap_len = 0);</div>
-<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;};</div>
-<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">//}</span></div>
-<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;} <span class="comment">// namespace cudamapper</span></div>
-<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
-<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;thrust/device_vector.h&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &quot;index.hpp&quot;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &quot;types.hpp&quot;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;{</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">namespace </span>cudamapper</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;{</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">   27</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">Overlapper</a></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keyword">virtual</span> <a class="code" href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">~Overlapper</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">get_overlaps</a>(std::vector&lt;Overlap&gt;&amp; overlaps,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;                              thrust::device_vector&lt;Anchor&gt;&amp; anchors,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;                              <span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a>&amp; index_query,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;                              <span class="keyword">const</span> <a class="code" href="classclaragenomics_1_1cudamapper_1_1Index.html">Index</a>&amp; index_target) = 0;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371">print_paf</a>(<span class="keyword">const</span> std::vector&lt;Overlap&gt;&amp; overlaps);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c">filter_overlaps</a>(std::vector&lt;Overlap&gt;&amp; filtered_overlaps, <span class="keyword">const</span> std::vector&lt;Overlap&gt;&amp; overlaps, <span class="keywordtype">size_t</span> min_residues = 5,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;                                <span class="keywordtype">size_t</span> min_overlap_len = 0);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;};</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">//}</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;} <span class="comment">// namespace cudamapper</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
 </div><!-- fragment --></div><!-- contents -->
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></div><div class="ttdoc">Index - manages mapping of (k,w)-kmer-representation and all its occurences.</div><div class="ttdef"><b>Definition:</b> index.hpp:29</div></div>
-<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Overlapper_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></div><div class="ttdef"><b>Definition:</b> overlapper.hpp:26</div></div>
+<div class="ttc" id="agroup__cudamapper_html_gab0e3be4a9442dfb2b7952fb473e591a3"><div class="ttname"><a href="group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3">claragenomics::cudamapper::Overlapper::get_overlaps</a></div><div class="ttdeci">virtual void get_overlaps(std::vector&lt; Overlap &gt; &amp;overlaps, thrust::device_vector&lt; Anchor &gt; &amp;anchors, const Index &amp;index_query, const Index &amp;index_target)=0</div><div class="ttdoc">returns overlaps for a set of reads</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Index_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Index.html">claragenomics::cudamapper::Index</a></div><div class="ttdoc">Index - manages mapping of (k,w)-kmer-representation and all its occurences.</div><div class="ttdef"><b>Definition:</b> index.hpp:31</div></div>
+<div class="ttc" id="aclassclaragenomics_1_1cudamapper_1_1Overlapper_html"><div class="ttname"><a href="classclaragenomics_1_1cudamapper_1_1Overlapper.html">claragenomics::cudamapper::Overlapper</a></div><div class="ttdef"><b>Definition:</b> overlapper.hpp:27</div></div>
 <div class="ttc" id="agroup__cudamapper_html_ga54fedd97206ad1691f7b9d9966d01371"><div class="ttname"><a href="group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371">claragenomics::cudamapper::Overlapper::print_paf</a></div><div class="ttdeci">static void print_paf(const std::vector&lt; Overlap &gt; &amp;overlaps)</div><div class="ttdoc">prints overlaps to stdout in PAF format</div></div>
-<div class="ttc" id="agroup__cudamapper_html_ga5498f3d8b5eff6481c67fdf0a049c300"><div class="ttname"><a href="group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300">claragenomics::cudamapper::Overlapper::get_overlaps</a></div><div class="ttdeci">virtual void get_overlaps(std::vector&lt; Overlap &gt; &amp;overlaps, std::vector&lt; Anchor &gt; &amp;anchors, const Index &amp;index)=0</div><div class="ttdoc">returns overlaps for a set of reads</div></div>
 <div class="ttc" id="agroup__cudamapper_html_ga3e5732f34489315ec8d1ef8b82ccea5c"><div class="ttname"><a href="group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c">claragenomics::cudamapper::Overlapper::filter_overlaps</a></div><div class="ttdeci">static void filter_overlaps(std::vector&lt; Overlap &gt; &amp;filtered_overlaps, const std::vector&lt; Overlap &gt; &amp;overlaps, size_t min_residues=5, size_t min_overlap_len=0)</div><div class="ttdoc">removes overlaps which are unlikely to be true overlaps</div></div>
 <div class="ttc" id="agroup__cudamapper_html_ga569c8855bdf9806d3747b26fc7e98975"><div class="ttname"><a href="group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975">claragenomics::cudamapper::Overlapper::~Overlapper</a></div><div class="ttdeci">virtual ~Overlapper()=default</div><div class="ttdoc">Virtual destructor for Overlapper.</div></div>
 <!-- start footer part -->
diff --git a/docs/cpp/search/all_0.js b/docs/cpp/search/all_0.js
index a33830e66..3e46cb9be 100644
--- a/docs/cpp/search/all_0.js
+++ b/docs/cpp/search/all_0.js
@@ -1,13 +1,16 @@
 var searchData=
 [
   ['add_5falignment_0',['add_alignment',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#adc32085da2b5681f0045d05c43a35f92',1,'claragenomics::cudaaligner::Aligner']]],
-  ['add_5fpoa_5fgroup_1',['add_poa_group',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0',1,'claragenomics::cudapoa::Batch']]],
-  ['align_2',['align',['../cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca',1,'claragenomics::cudautils']]],
-  ['align_5fall_3',['align_all',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a8b3c20782b9eaa4c2219fb7ff51772db',1,'claragenomics::cudaaligner::Aligner']]],
-  ['aligner_4',['Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html',1,'claragenomics::cudaaligner']]],
-  ['alignment_5',['Alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html',1,'claragenomics::cudaaligner']]],
-  ['alignmentstate_6',['AlignmentState',['../group__cudaaligner.html#ga8ee40da066dcb49eb0516b6a763ec45d',1,'claragenomics::cudaaligner']]],
-  ['alignmenttype_7',['AlignmentType',['../group__cudaaligner.html#gafcccbe51c86f9772ccf837fc433f518b',1,'claragenomics::cudaaligner']]],
-  ['anchor_8',['Anchor',['../structclaragenomics_1_1cudamapper_1_1Anchor.html',1,'claragenomics::cudamapper::Anchor'],['../structclaragenomics_1_1cudamapper_1_1Anchor.html#af4dc10f114030a8e3a53f3bad3cd20b2',1,'claragenomics::cudamapper::Anchor::Anchor()']]],
-  ['arrayblock_9',['ArrayBlock',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html',1,'claragenomics::cudamapper']]]
+  ['add_5fedge_1',['add_edge',['../classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371',1,'claragenomics::DirectedGraph::add_edge()'],['../classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04',1,'claragenomics::UndirectedGraph::add_edge()']]],
+  ['add_5fpoa_5fgroup_2',['add_poa_group',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0',1,'claragenomics::cudapoa::Batch']]],
+  ['adjacent_5fnodes_5f_3',['adjacent_nodes_',['../classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404',1,'claragenomics::Graph']]],
+  ['align_4',['align',['../cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca',1,'claragenomics::cudautils']]],
+  ['align_5fall_5',['align_all',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a8b3c20782b9eaa4c2219fb7ff51772db',1,'claragenomics::cudaaligner::Aligner']]],
+  ['aligner_6',['Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html',1,'claragenomics::cudaaligner']]],
+  ['alignment_7',['Alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html',1,'claragenomics::cudaaligner']]],
+  ['alignmentstate_8',['AlignmentState',['../group__cudaaligner.html#ga8ee40da066dcb49eb0516b6a763ec45d',1,'claragenomics::cudaaligner']]],
+  ['alignmenttype_9',['AlignmentType',['../group__cudaaligner.html#gafcccbe51c86f9772ccf837fc433f518b',1,'claragenomics::cudaaligner']]],
+  ['anchor_10',['Anchor',['../structclaragenomics_1_1cudamapper_1_1Anchor.html',1,'claragenomics::cudamapper::Anchor'],['../structclaragenomics_1_1cudamapper_1_1Anchor.html#af4dc10f114030a8e3a53f3bad3cd20b2',1,'claragenomics::cudamapper::Anchor::Anchor()']]],
+  ['anchors_11',['anchors',['../classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2',1,'claragenomics::cudamapper::Matcher']]],
+  ['arrayblock_12',['ArrayBlock',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html',1,'claragenomics::cudamapper']]]
 ];
diff --git a/docs/cpp/search/all_1.js b/docs/cpp/search/all_1.js
index 9db635e2d..2ff18b5b8 100644
--- a/docs/cpp/search/all_1.js
+++ b/docs/cpp/search/all_1.js
@@ -1,6 +1,6 @@
 var searchData=
 [
-  ['batch_10',['Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html',1,'claragenomics::cudapoa']]],
-  ['batch_5fid_11',['batch_id',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec',1,'claragenomics::cudapoa::Batch']]],
-  ['block_5fsize_5f_12',['block_size_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a33ff27afee2ddb07e6fbdda0ff1de229',1,'claragenomics::cudamapper::ArrayBlock']]]
+  ['batch_13',['Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html',1,'claragenomics::cudapoa']]],
+  ['batch_5fid_14',['batch_id',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec',1,'claragenomics::cudapoa::Batch']]],
+  ['block_5fsize_5f_15',['block_size_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a33ff27afee2ddb07e6fbdda0ff1de229',1,'claragenomics::cudamapper::ArrayBlock']]]
 ];
diff --git a/docs/cpp/search/all_10.js b/docs/cpp/search/all_10.js
index 64d61c741..3019977c1 100644
--- a/docs/cpp/search/all_10.js
+++ b/docs/cpp/search/all_10.js
@@ -1,9 +1,9 @@
 var searchData=
 [
-  ['target_5fend_5fposition_5fin_5fread_5f_113',['target_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797',1,'claragenomics::cudamapper::Overlap']]],
-  ['target_5flength_5f_114',['target_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11',1,'claragenomics::cudamapper::Overlap']]],
-  ['target_5fposition_5fin_5fread_5f_115',['target_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad58b2a619bd71c37c337ed44e45b4d23',1,'claragenomics::cudamapper::Anchor']]],
-  ['target_5fread_5fid_5f_116',['target_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ae9ae1af9e2feaea69ebde6b165966cec',1,'claragenomics::cudamapper::Anchor::target_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032',1,'claragenomics::cudamapper::Overlap::target_read_id_()']]],
-  ['target_5fread_5fname_5f_117',['target_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c',1,'claragenomics::cudamapper::Overlap']]],
-  ['target_5fstart_5fposition_5fin_5fread_5f_118',['target_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c',1,'claragenomics::cudamapper::Overlap']]]
+  ['target_5fend_5fposition_5fin_5fread_5f_134',['target_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797',1,'claragenomics::cudamapper::Overlap']]],
+  ['target_5flength_5f_135',['target_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11',1,'claragenomics::cudamapper::Overlap']]],
+  ['target_5fposition_5fin_5fread_5f_136',['target_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad58b2a619bd71c37c337ed44e45b4d23',1,'claragenomics::cudamapper::Anchor']]],
+  ['target_5fread_5fid_5f_137',['target_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ae9ae1af9e2feaea69ebde6b165966cec',1,'claragenomics::cudamapper::Anchor::target_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032',1,'claragenomics::cudamapper::Overlap::target_read_id_()']]],
+  ['target_5fread_5fname_5f_138',['target_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca',1,'claragenomics::cudamapper::Overlap']]],
+  ['target_5fstart_5fposition_5fin_5fread_5f_139',['target_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c',1,'claragenomics::cudamapper::Overlap']]]
 ];
diff --git a/docs/cpp/search/all_11.js b/docs/cpp/search/all_11.js
index 8693254c2..545ea9513 100644
--- a/docs/cpp/search/all_11.js
+++ b/docs/cpp/search/all_11.js
@@ -1,4 +1,6 @@
 var searchData=
 [
-  ['weights_119',['weights',['../structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277',1,'claragenomics::cudapoa::Entry']]]
+  ['undirectedgraph_140',['UndirectedGraph',['../classclaragenomics_1_1UndirectedGraph.html',1,'claragenomics']]],
+  ['unique_5frepresentations_141',['unique_representations',['../classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a',1,'claragenomics::cudamapper::Index']]],
+  ['update_5fadject_5fnodes_142',['update_adject_nodes',['../classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77',1,'claragenomics::Graph']]]
 ];
diff --git a/docs/cpp/search/all_12.js b/docs/cpp/search/all_12.js
index b117f4436..53ab4afb1 100644
--- a/docs/cpp/search/all_12.js
+++ b/docs/cpp/search/all_12.js
@@ -1,11 +1,4 @@
 var searchData=
 [
-  ['_7ealigner_120',['~Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#aaae329eae2ed3e364db643163755e987',1,'claragenomics::cudaaligner::Aligner']]],
-  ['_7ebatch_121',['~Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1',1,'claragenomics::cudapoa::Batch']]],
-  ['_7efastaparser_122',['~FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html#a213af5341107ea254176add6dd1dfd2d',1,'claragenomics::io::FastaParser']]],
-  ['_7eindex_123',['~Index',['../classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac',1,'claragenomics::cudamapper::Index']]],
-  ['_7eoverlapper_124',['~Overlapper',['../group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975',1,'claragenomics::cudamapper::Overlapper']]],
-  ['_7escoped_5fdevice_5fswitch_125',['~scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125',1,'claragenomics::scoped_device_switch']]],
-  ['_7esequence_126',['~Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a11498adb0025e53f3e397f72decc4e4f',1,'claragenomics::cudamapper::Sequence']]],
-  ['_7esketchelement_127',['~SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#ac62560de124742cb23bc1def0a0b2069',1,'claragenomics::cudamapper::SketchElement']]]
+  ['weights_143',['weights',['../structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277',1,'claragenomics::cudapoa::Entry']]]
 ];
diff --git a/docs/cpp/search/all_13.html b/docs/cpp/search/all_13.html
new file mode 100644
index 000000000..7e5f42a98
--- /dev/null
+++ b/docs/cpp/search/all_13.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_13.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/all_13.js b/docs/cpp/search/all_13.js
new file mode 100644
index 000000000..10b3a257d
--- /dev/null
+++ b/docs/cpp/search/all_13.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['_7ealigner_144',['~Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#aaae329eae2ed3e364db643163755e987',1,'claragenomics::cudaaligner::Aligner']]],
+  ['_7ealignment_145',['~Alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8',1,'claragenomics::cudaaligner::Alignment']]],
+  ['_7ebatch_146',['~Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1',1,'claragenomics::cudapoa::Batch']]],
+  ['_7efastaparser_147',['~FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html#a213af5341107ea254176add6dd1dfd2d',1,'claragenomics::io::FastaParser']]],
+  ['_7eindex_148',['~Index',['../classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac',1,'claragenomics::cudamapper::Index']]],
+  ['_7ematcher_149',['~Matcher',['../classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab',1,'claragenomics::cudamapper::Matcher']]],
+  ['_7eoverlapper_150',['~Overlapper',['../group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975',1,'claragenomics::cudamapper::Overlapper']]],
+  ['_7escoped_5fdevice_5fswitch_151',['~scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125',1,'claragenomics::scoped_device_switch']]],
+  ['_7esequence_152',['~Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a11498adb0025e53f3e397f72decc4e4f',1,'claragenomics::cudamapper::Sequence']]],
+  ['_7esketchelement_153',['~SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#ac62560de124742cb23bc1def0a0b2069',1,'claragenomics::cudamapper::SketchElement']]]
+];
diff --git a/docs/cpp/search/all_2.js b/docs/cpp/search/all_2.js
index bb626074e..ed2ef8f7d 100644
--- a/docs/cpp/search/all_2.js
+++ b/docs/cpp/search/all_2.js
@@ -1,28 +1,31 @@
 var searchData=
 [
-  ['cannot_5fopen_5ffile_13',['cannot_open_file',['../group__logging.html#ggaa716171cacca628efa44969863d3c43baac1f4cf357f10c246b3baf4249a5bf54',1,'claragenomics::logging']]],
-  ['cannot_5fopen_5fstdout_14',['cannot_open_stdout',['../group__logging.html#ggaa716171cacca628efa44969863d3c43bafe21a9d225faf6903e465fdda696c8ee',1,'claragenomics::logging']]],
-  ['cga_5fcu_5fcheck_5ferr_15',['CGA_CU_CHECK_ERR',['../group__cudautils.html#ga161535c48fe399e086ac6277b527fb41',1,'cudautils.hpp']]],
-  ['cga_5flog_5fcritical_16',['CGA_LOG_CRITICAL',['../group__logging.html#ga1c62d5c4d4176bc022cee9d01559252c',1,'logging.hpp']]],
-  ['cga_5flog_5fdebug_17',['CGA_LOG_DEBUG',['../group__logging.html#gaa5ad054c234291111ca2a78bb41946d7',1,'logging.hpp']]],
-  ['cga_5flog_5ferror_18',['CGA_LOG_ERROR',['../group__logging.html#gacd5f9588e4976ef45d2ddece37b78003',1,'logging.hpp']]],
-  ['cga_5flog_5finfo_19',['CGA_LOG_INFO',['../group__logging.html#ga6f79986ffd118b37941ef4d3cc4bd1f7',1,'logging.hpp']]],
-  ['cga_5flog_5flevel_20',['CGA_LOG_LEVEL',['../group__logging.html#ga145fe89628f004a5d5c87ea51de29994',1,'logging.hpp']]],
-  ['cga_5flog_5flevel_5fcritical_21',['cga_log_level_critical',['../group__logging.html#ga5779f5f2d3747c5c3ec30aa4c9342852',1,'logging.hpp']]],
-  ['cga_5flog_5flevel_5fdebug_22',['cga_log_level_debug',['../group__logging.html#ga14a9230fa7689844bc29e62fd7876eb7',1,'logging.hpp']]],
-  ['cga_5flog_5flevel_5ferror_23',['cga_log_level_error',['../group__logging.html#ga917e85b070898893ee342e0812a9fd6c',1,'logging.hpp']]],
-  ['cga_5flog_5flevel_5finfo_24',['cga_log_level_info',['../group__logging.html#ga321f76f905e1c818a10cf1e940abd03a',1,'logging.hpp']]],
-  ['cga_5flog_5flevel_5foff_25',['cga_log_level_off',['../group__logging.html#gad50582aec0df264e95e750f725ce67c7',1,'logging.hpp']]],
-  ['cga_5flog_5flevel_5fwarn_26',['cga_log_level_warn',['../group__logging.html#ga36b5f600259d04034c356f846ae366a6',1,'logging.hpp']]],
-  ['cga_5flog_5fwarn_27',['CGA_LOG_WARN',['../group__logging.html#gaa97f13dd6ae075b35ca3f01a667d9d83',1,'logging.hpp']]],
-  ['convert_5fto_5fcigar_28',['convert_to_cigar',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876',1,'claragenomics::cudaaligner::Alignment']]],
-  ['create_5faligner_29',['create_aligner',['../group__cudaaligner.html#ga07b5416cfe8a05f326cb244f9d596449',1,'claragenomics::cudaaligner']]],
-  ['create_5fbatch_30',['create_batch',['../group__cudapoa.html#ga81951b681c27354e2dbe7933a9f168f3',1,'claragenomics::cudapoa']]],
-  ['create_5findex_31',['create_index',['../classclaragenomics_1_1cudamapper_1_1Index.html#afc23f3e71c65dc9ed5a9e49cf26ba645',1,'claragenomics::cudamapper::Index::create_index(const std::vector&lt; io::FastaParser * &gt; &amp;parsers, const std::uint64_t kmer_size, const std::uint64_t window_size, const std::vector&lt; std::pair&lt; std::uint64_t, std::uint64_t &gt;&gt; &amp;ranges)'],['../classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a',1,'claragenomics::cudamapper::Index::create_index()']]],
-  ['create_5fsequence_32',['create_sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a3e4a8fe41b71b13362433360b20115ed',1,'claragenomics::cudamapper::Sequence::create_sequence(const char *name, uint32_t name_length, const char *data, uint32_t data_length)'],['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a8d3420a4a6442ce58aa70dc94372135c',1,'claragenomics::cudamapper::Sequence::create_sequence(const std::string &amp;name, const std::string &amp;data)']]],
-  ['cuda_20aligner_20package_33',['CUDA Aligner package',['../group__cudaaligner.html',1,'']]],
-  ['cuda_20mapper_20package_34',['CUDA mapper package',['../group__cudamapper.html',1,'']]],
-  ['cuda_20poa_20package_35',['CUDA POA package',['../group__cudapoa.html',1,'']]],
-  ['cudautils_2ehpp_36',['cudautils.hpp',['../cudautils_8hpp.html',1,'']]],
-  ['clara_20genomics_20analysis_37',['Clara Genomics Analysis',['../index.html',1,'']]]
+  ['cannot_5fopen_5ffile_16',['cannot_open_file',['../group__logging.html#ggaa716171cacca628efa44969863d3c43baac1f4cf357f10c246b3baf4249a5bf54',1,'claragenomics::logging']]],
+  ['cannot_5fopen_5fstdout_17',['cannot_open_stdout',['../group__logging.html#ggaa716171cacca628efa44969863d3c43bafe21a9d225faf6903e465fdda696c8ee',1,'claragenomics::logging']]],
+  ['cga_5fcu_5fcheck_5ferr_18',['CGA_CU_CHECK_ERR',['../group__cudautils.html#ga161535c48fe399e086ac6277b527fb41',1,'cudautils.hpp']]],
+  ['cga_5flog_5fcritical_19',['CGA_LOG_CRITICAL',['../group__logging.html#ga1c62d5c4d4176bc022cee9d01559252c',1,'logging.hpp']]],
+  ['cga_5flog_5fdebug_20',['CGA_LOG_DEBUG',['../group__logging.html#gaa5ad054c234291111ca2a78bb41946d7',1,'logging.hpp']]],
+  ['cga_5flog_5ferror_21',['CGA_LOG_ERROR',['../group__logging.html#gacd5f9588e4976ef45d2ddece37b78003',1,'logging.hpp']]],
+  ['cga_5flog_5finfo_22',['CGA_LOG_INFO',['../group__logging.html#ga6f79986ffd118b37941ef4d3cc4bd1f7',1,'logging.hpp']]],
+  ['cga_5flog_5flevel_23',['CGA_LOG_LEVEL',['../group__logging.html#ga145fe89628f004a5d5c87ea51de29994',1,'logging.hpp']]],
+  ['cga_5flog_5flevel_5fcritical_24',['cga_log_level_critical',['../group__logging.html#ga5779f5f2d3747c5c3ec30aa4c9342852',1,'logging.hpp']]],
+  ['cga_5flog_5flevel_5fdebug_25',['cga_log_level_debug',['../group__logging.html#ga14a9230fa7689844bc29e62fd7876eb7',1,'logging.hpp']]],
+  ['cga_5flog_5flevel_5ferror_26',['cga_log_level_error',['../group__logging.html#ga917e85b070898893ee342e0812a9fd6c',1,'logging.hpp']]],
+  ['cga_5flog_5flevel_5finfo_27',['cga_log_level_info',['../group__logging.html#ga321f76f905e1c818a10cf1e940abd03a',1,'logging.hpp']]],
+  ['cga_5flog_5flevel_5foff_28',['cga_log_level_off',['../group__logging.html#gad50582aec0df264e95e750f725ce67c7',1,'logging.hpp']]],
+  ['cga_5flog_5flevel_5fwarn_29',['cga_log_level_warn',['../group__logging.html#ga36b5f600259d04034c356f846ae366a6',1,'logging.hpp']]],
+  ['cga_5flog_5fwarn_30',['CGA_LOG_WARN',['../group__logging.html#gaa97f13dd6ae075b35ca3f01a667d9d83',1,'logging.hpp']]],
+  ['cga_5fnvtx_5frange_31',['CGA_NVTX_RANGE',['../group__cudautils.html#gaded61355db08f1d76bc24edc008d4224',1,'cudautils.hpp']]],
+  ['cigar_5f_32',['cigar_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54',1,'claragenomics::cudamapper::Overlap']]],
+  ['convert_5fto_5fcigar_33',['convert_to_cigar',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876',1,'claragenomics::cudaaligner::Alignment']]],
+  ['create_5faligner_34',['create_aligner',['../group__cudaaligner.html#ga07b5416cfe8a05f326cb244f9d596449',1,'claragenomics::cudaaligner']]],
+  ['create_5fbatch_35',['create_batch',['../group__cudapoa.html#ga81951b681c27354e2dbe7933a9f168f3',1,'claragenomics::cudapoa']]],
+  ['create_5findex_36',['create_index',['../classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf',1,'claragenomics::cudamapper::Index']]],
+  ['create_5fmatcher_37',['create_matcher',['../classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752',1,'claragenomics::cudamapper::Matcher']]],
+  ['create_5fsequence_38',['create_sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a3e4a8fe41b71b13362433360b20115ed',1,'claragenomics::cudamapper::Sequence::create_sequence(const char *name, uint32_t name_length, const char *data, uint32_t data_length)'],['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a8d3420a4a6442ce58aa70dc94372135c',1,'claragenomics::cudamapper::Sequence::create_sequence(const std::string &amp;name, const std::string &amp;data)']]],
+  ['cuda_20aligner_20package_39',['CUDA Aligner package',['../group__cudaaligner.html',1,'']]],
+  ['cuda_20mapper_20package_40',['CUDA mapper package',['../group__cudamapper.html',1,'']]],
+  ['cuda_20poa_20package_41',['CUDA POA package',['../group__cudapoa.html',1,'']]],
+  ['cudautils_2ehpp_42',['cudautils.hpp',['../cudautils_8hpp.html',1,'']]],
+  ['clara_20genomics_20analysis_43',['Clara Genomics Analysis',['../index.html',1,'']]]
 ];
diff --git a/docs/cpp/search/all_3.js b/docs/cpp/search/all_3.js
index 52290e4bb..7383d81b7 100644
--- a/docs/cpp/search/all_3.js
+++ b/docs/cpp/search/all_3.js
@@ -1,7 +1,9 @@
 var searchData=
 [
-  ['data_38',['data',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a45c1a69a18ea6f6fd7a45bad6862bbca',1,'claragenomics::cudamapper::Sequence']]],
-  ['direction_39',['direction',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af4b53bc09f5816c3b81fef1c1abf3fc6',1,'claragenomics::cudamapper::SketchElement']]],
-  ['directionofrepresentation_40',['DirectionOfRepresentation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a',1,'claragenomics::cudamapper::SketchElement']]],
-  ['directions_5fof_5freads_41',['directions_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b',1,'claragenomics::cudamapper::Index']]]
+  ['data_44',['data',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a45c1a69a18ea6f6fd7a45bad6862bbca',1,'claragenomics::cudamapper::Sequence']]],
+  ['directed_5fedge_5fexists_45',['directed_edge_exists',['../classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac',1,'claragenomics::Graph']]],
+  ['directedgraph_46',['DirectedGraph',['../classclaragenomics_1_1DirectedGraph.html',1,'claragenomics']]],
+  ['direction_47',['direction',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af4b53bc09f5816c3b81fef1c1abf3fc6',1,'claragenomics::cudamapper::SketchElement']]],
+  ['directionofrepresentation_48',['DirectionOfRepresentation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a',1,'claragenomics::cudamapper::SketchElement']]],
+  ['directions_5fof_5freads_49',['directions_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd',1,'claragenomics::cudamapper::Index']]]
 ];
diff --git a/docs/cpp/search/all_4.js b/docs/cpp/search/all_4.js
index d5d67de90..a6c515121 100644
--- a/docs/cpp/search/all_4.js
+++ b/docs/cpp/search/all_4.js
@@ -1,4 +1,9 @@
 var searchData=
 [
-  ['entry_42',['Entry',['../structclaragenomics_1_1cudapoa_1_1Entry.html',1,'claragenomics::cudapoa']]]
+  ['edge_5ft_50',['edge_t',['../classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc',1,'claragenomics::Graph']]],
+  ['edge_5fweight_5ft_51',['edge_weight_t',['../classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5',1,'claragenomics::Graph']]],
+  ['edges_5f_52',['edges_',['../classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33',1,'claragenomics::Graph']]],
+  ['edges_5fto_5fdot_53',['edges_to_dot',['../classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5',1,'claragenomics::Graph']]],
+  ['empty_5f_54',['empty_',['../classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c',1,'claragenomics::Graph']]],
+  ['entry_55',['Entry',['../structclaragenomics_1_1cudapoa_1_1Entry.html',1,'claragenomics::cudapoa']]]
 ];
diff --git a/docs/cpp/search/all_5.js b/docs/cpp/search/all_5.js
index 267a5c3ef..a1bda7f36 100644
--- a/docs/cpp/search/all_5.js
+++ b/docs/cpp/search/all_5.js
@@ -1,9 +1,10 @@
 var searchData=
 [
-  ['fastaparser_43',['FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html',1,'claragenomics::io']]],
-  ['fastasequence_44',['FastaSequence',['../structclaragenomics_1_1io_1_1FastaSequence.html',1,'claragenomics::io']]],
-  ['filter_5foverlaps_45',['filter_overlaps',['../group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c',1,'claragenomics::cudamapper::Overlapper']]],
-  ['first_5felement_5f_46',['first_element_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a3fca81e893b35e0648977b00f21b7e7e',1,'claragenomics::cudamapper::ArrayBlock']]],
-  ['format_5falignment_47',['format_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c',1,'claragenomics::cudaaligner::Alignment']]],
-  ['formattedalignment_48',['FormattedAlignment',['../group__cudaaligner.html#ga228dcdd4bf0cf40c64786cce6b045c40',1,'claragenomics::cudaaligner']]]
+  ['fastaparser_56',['FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html',1,'claragenomics::io']]],
+  ['fastasequence_57',['FastaSequence',['../structclaragenomics_1_1io_1_1FastaSequence.html',1,'claragenomics::io']]],
+  ['filter_5foverlaps_58',['filter_overlaps',['../group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c',1,'claragenomics::cudamapper::Overlapper']]],
+  ['first_5felement_5f_59',['first_element_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a3fca81e893b35e0648977b00f21b7e7e',1,'claragenomics::cudamapper::ArrayBlock']]],
+  ['first_5foccurrence_5fof_5frepresentations_60',['first_occurrence_of_representations',['../classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff',1,'claragenomics::cudamapper::Index']]],
+  ['format_5falignment_61',['format_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c',1,'claragenomics::cudaaligner::Alignment']]],
+  ['formattedalignment_62',['FormattedAlignment',['../group__cudaaligner.html#ga228dcdd4bf0cf40c64786cce6b045c40',1,'claragenomics::cudaaligner']]]
 ];
diff --git a/docs/cpp/search/all_6.js b/docs/cpp/search/all_6.js
index 9db1e601e..c75560a80 100644
--- a/docs/cpp/search/all_6.js
+++ b/docs/cpp/search/all_6.js
@@ -1,19 +1,25 @@
 var searchData=
 [
-  ['generate_5fpoa_49',['generate_poa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09',1,'claragenomics::cudapoa::Batch']]],
-  ['get_5falignment_50',['get_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5falignment_5ftype_51',['get_alignment_type',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab22457c02ac00ec205dcd5a75b253881',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5falignments_52',['get_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a1d775f9821ce3ecdcdc67cb07f35a4d8',1,'claragenomics::cudaaligner::Aligner']]],
-  ['get_5fconsensus_53',['get_consensus',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0',1,'claragenomics::cudapoa::Batch']]],
-  ['get_5fmsa_54',['get_msa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2',1,'claragenomics::cudapoa::Batch']]],
-  ['get_5fnum_5fseqences_55',['get_num_seqences',['../classclaragenomics_1_1io_1_1FastaParser.html#a04f6deee5108374fa485487e06e759e5',1,'claragenomics::io::FastaParser']]],
-  ['get_5foverlaps_56',['get_overlaps',['../group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300',1,'claragenomics::cudamapper::Overlapper']]],
-  ['get_5fquery_5fsequence_57',['get_query_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5fsequence_5fby_5fid_58',['get_sequence_by_id',['../classclaragenomics_1_1io_1_1FastaParser.html#a04a44819b81a93711295198492cc3765',1,'claragenomics::io::FastaParser']]],
-  ['get_5fsequence_5fby_5fname_59',['get_sequence_by_name',['../classclaragenomics_1_1io_1_1FastaParser.html#ad37d794106d347d1d360d62db2d31cda',1,'claragenomics::io::FastaParser']]],
-  ['get_5fstatus_60',['get_status',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5ftarget_5fsequence_61',['get_target_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4a61cdee74c32930f49cb878fc17db57',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5ftotal_5fpoas_62',['get_total_poas',['../classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc',1,'claragenomics::cudapoa::Batch']]],
-  ['gpu_5fassert_63',['gpu_assert',['../group__cudautils.html#ga3769a812992df47886894f48f26edf6f',1,'claragenomics::cudautils']]],
-  ['group_64',['Group',['../group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32',1,'claragenomics::cudapoa']]]
+  ['generate_5fpoa_63',['generate_poa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fadjacent_5fnodes_64',['get_adjacent_nodes',['../classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb',1,'claragenomics::Graph']]],
+  ['get_5falignment_65',['get_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5falignment_5ftype_66',['get_alignment_type',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab22457c02ac00ec205dcd5a75b253881',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5falignments_67',['get_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a1d775f9821ce3ecdcdc67cb07f35a4d8',1,'claragenomics::cudaaligner::Aligner']]],
+  ['get_5fconsensus_68',['get_consensus',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fedges_69',['get_edges',['../classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794',1,'claragenomics::Graph']]],
+  ['get_5fgraphs_70',['get_graphs',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fmsa_71',['get_msa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fnode_5fids_72',['get_node_ids',['../classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8',1,'claragenomics::Graph']]],
+  ['get_5fnode_5flabel_73',['get_node_label',['../classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389',1,'claragenomics::Graph']]],
+  ['get_5fnum_5fseqences_74',['get_num_seqences',['../classclaragenomics_1_1io_1_1FastaParser.html#a04f6deee5108374fa485487e06e759e5',1,'claragenomics::io::FastaParser']]],
+  ['get_5foverlaps_75',['get_overlaps',['../group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3',1,'claragenomics::cudamapper::Overlapper']]],
+  ['get_5fquery_5fsequence_76',['get_query_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5fsequence_5fby_5fid_77',['get_sequence_by_id',['../classclaragenomics_1_1io_1_1FastaParser.html#a04a44819b81a93711295198492cc3765',1,'claragenomics::io::FastaParser']]],
+  ['get_5fsequence_5fby_5fname_78',['get_sequence_by_name',['../classclaragenomics_1_1io_1_1FastaParser.html#ad37d794106d347d1d360d62db2d31cda',1,'claragenomics::io::FastaParser']]],
+  ['get_5fstatus_79',['get_status',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5ftarget_5fsequence_80',['get_target_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4a61cdee74c32930f49cb878fc17db57',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5ftotal_5fpoas_81',['get_total_poas',['../classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc',1,'claragenomics::cudapoa::Batch']]],
+  ['gpu_5fassert_82',['gpu_assert',['../group__cudautils.html#ga3769a812992df47886894f48f26edf6f',1,'claragenomics::cudautils']]],
+  ['graph_83',['Graph',['../classclaragenomics_1_1Graph.html',1,'claragenomics']]],
+  ['group_84',['Group',['../group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32',1,'claragenomics::cudapoa']]]
 ];
diff --git a/docs/cpp/search/all_7.js b/docs/cpp/search/all_7.js
index 221562e8e..b4a0e5728 100644
--- a/docs/cpp/search/all_7.js
+++ b/docs/cpp/search/all_7.js
@@ -1,7 +1,7 @@
 var searchData=
 [
-  ['internal_20cuda_20utilities_20package_65',['Internal CUDA utilities package',['../group__cudautils.html',1,'']]],
-  ['index_66',['Index',['../classclaragenomics_1_1cudamapper_1_1Index.html',1,'claragenomics::cudamapper']]],
-  ['init_67',['Init',['../group__logging.html#ga1e6ecad63f4d5d90cc01578f653f6e94',1,'claragenomics::logging::Init()'],['../group__cudapoa.html#ga20324a870a7cad68e1b02dcc1d5b02a1',1,'claragenomics::cudapoa::Init()'],['../group__cudaaligner.html#ga1d5dd3c4f48d7a735cbf6d7b5937d41a',1,'claragenomics::cudaaligner::Init()']]],
-  ['internal_20logging_20package_68',['Internal logging package',['../group__logging.html',1,'']]]
+  ['internal_20cuda_20utilities_20package_85',['Internal CUDA utilities package',['../group__cudautils.html',1,'']]],
+  ['index_86',['Index',['../classclaragenomics_1_1cudamapper_1_1Index.html',1,'claragenomics::cudamapper']]],
+  ['init_87',['Init',['../group__logging.html#ga1e6ecad63f4d5d90cc01578f653f6e94',1,'claragenomics::logging::Init()'],['../group__cudapoa.html#ga20324a870a7cad68e1b02dcc1d5b02a1',1,'claragenomics::cudapoa::Init()'],['../group__cudaaligner.html#ga1d5dd3c4f48d7a735cbf6d7b5937d41a',1,'claragenomics::cudaaligner::Init()']]],
+  ['internal_20logging_20package_88',['Internal logging package',['../group__logging.html',1,'']]]
 ];
diff --git a/docs/cpp/search/all_8.js b/docs/cpp/search/all_8.js
index 4b2ae10e0..cce924c43 100644
--- a/docs/cpp/search/all_8.js
+++ b/docs/cpp/search/all_8.js
@@ -1,6 +1,6 @@
 var searchData=
 [
-  ['length_69',['length',['../structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712',1,'claragenomics::cudapoa::Entry']]],
-  ['logging_2ehpp_70',['logging.hpp',['../logging_8hpp.html',1,'']]],
-  ['loggingstatus_71',['LoggingStatus',['../group__logging.html#gaa716171cacca628efa44969863d3c43b',1,'claragenomics::logging']]]
+  ['length_89',['length',['../structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712',1,'claragenomics::cudapoa::Entry']]],
+  ['logging_2ehpp_90',['logging.hpp',['../logging_8hpp.html',1,'']]],
+  ['loggingstatus_91',['LoggingStatus',['../group__logging.html#gaa716171cacca628efa44969863d3c43b',1,'claragenomics::logging']]]
 ];
diff --git a/docs/cpp/search/all_9.js b/docs/cpp/search/all_9.js
index 357700727..0c013bc6e 100644
--- a/docs/cpp/search/all_9.js
+++ b/docs/cpp/search/all_9.js
@@ -1,6 +1,5 @@
 var searchData=
 [
-  ['maximum_5fkmer_5fsize_72',['maximum_kmer_size',['../classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919',1,'claragenomics::cudamapper::Index']]],
-  ['maximum_5frepresentation_73',['maximum_representation',['../classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152',1,'claragenomics::cudamapper::Index']]],
-  ['minimum_5frepresentation_74',['minimum_representation',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824',1,'claragenomics::cudamapper::Index']]]
+  ['matcher_92',['Matcher',['../classclaragenomics_1_1cudamapper_1_1Matcher.html',1,'claragenomics::cudamapper']]],
+  ['maximum_5fkmer_5fsize_93',['maximum_kmer_size',['../classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919',1,'claragenomics::cudamapper::Index']]]
 ];
diff --git a/docs/cpp/search/all_a.js b/docs/cpp/search/all_a.js
index b369d21c6..be5f6b521 100644
--- a/docs/cpp/search/all_a.js
+++ b/docs/cpp/search/all_a.js
@@ -1,6 +1,9 @@
 var searchData=
 [
-  ['name_75',['name',['../structclaragenomics_1_1io_1_1FastaSequence.html#aea0664ca6e856203c4b954b519183bec',1,'claragenomics::io::FastaSequence::name()'],['../classclaragenomics_1_1cudamapper_1_1Sequence.html#ab9663611f0d6c691e40228c5a08cf0e2',1,'claragenomics::cudamapper::Sequence::name()']]],
-  ['num_5fresidues_5f_76',['num_residues_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d',1,'claragenomics::cudamapper::Overlap']]],
-  ['number_5fof_5freads_77',['number_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937',1,'claragenomics::cudamapper::Index']]]
+  ['name_94',['name',['../structclaragenomics_1_1io_1_1FastaSequence.html#aea0664ca6e856203c4b954b519183bec',1,'claragenomics::io::FastaSequence::name()'],['../classclaragenomics_1_1cudamapper_1_1Sequence.html#ab9663611f0d6c691e40228c5a08cf0e2',1,'claragenomics::cudamapper::Sequence::name()']]],
+  ['node_5fid_5ft_95',['node_id_t',['../classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d',1,'claragenomics::Graph']]],
+  ['node_5flabels_5f_96',['node_labels_',['../classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5',1,'claragenomics::Graph']]],
+  ['node_5flabels_5fto_5fdot_97',['node_labels_to_dot',['../classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9',1,'claragenomics::Graph']]],
+  ['num_5fresidues_5f_98',['num_residues_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d',1,'claragenomics::cudamapper::Overlap']]],
+  ['number_5fof_5freads_99',['number_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937',1,'claragenomics::cudamapper::Index']]]
 ];
diff --git a/docs/cpp/search/all_b.js b/docs/cpp/search/all_b.js
index e52ed0f74..cb25218f2 100644
--- a/docs/cpp/search/all_b.js
+++ b/docs/cpp/search/all_b.js
@@ -1,7 +1,8 @@
 var searchData=
 [
-  ['outputtype_78',['OutputType',['../group__cudapoa.html#ga303d3df3e0053351dc95efab320bd037',1,'claragenomics::cudapoa']]],
-  ['overlap_79',['Overlap',['../structclaragenomics_1_1cudamapper_1_1Overlap.html',1,'claragenomics::cudamapper']]],
-  ['overlap_5fcomplete_80',['overlap_complete',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360',1,'claragenomics::cudamapper::Overlap']]],
-  ['overlapper_81',['Overlapper',['../classclaragenomics_1_1cudamapper_1_1Overlapper.html',1,'claragenomics::cudamapper']]]
+  ['operator_28_29_100',['operator()',['../structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61',1,'claragenomics::PairHash']]],
+  ['outputtype_101',['OutputType',['../group__cudapoa.html#ga303d3df3e0053351dc95efab320bd037',1,'claragenomics::cudapoa']]],
+  ['overlap_102',['Overlap',['../structclaragenomics_1_1cudamapper_1_1Overlap.html',1,'claragenomics::cudamapper']]],
+  ['overlap_5fcomplete_103',['overlap_complete',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360',1,'claragenomics::cudamapper::Overlap']]],
+  ['overlapper_104',['Overlapper',['../classclaragenomics_1_1cudamapper_1_1Overlapper.html',1,'claragenomics::cudamapper']]]
 ];
diff --git a/docs/cpp/search/all_c.js b/docs/cpp/search/all_c.js
index e8ab84e62..873bdb004 100644
--- a/docs/cpp/search/all_c.js
+++ b/docs/cpp/search/all_c.js
@@ -1,6 +1,7 @@
 var searchData=
 [
-  ['position_5fin_5fread_82',['position_in_read',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a0ddea36eed82ea3a9d1fa7ace61051bc',1,'claragenomics::cudamapper::SketchElement']]],
-  ['positions_5fin_5freads_83',['positions_in_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306',1,'claragenomics::cudamapper::Index']]],
-  ['print_5fpaf_84',['print_paf',['../group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371',1,'claragenomics::cudamapper::Overlapper']]]
+  ['pairhash_105',['PairHash',['../structclaragenomics_1_1PairHash.html',1,'claragenomics']]],
+  ['position_5fin_5fread_106',['position_in_read',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a0ddea36eed82ea3a9d1fa7ace61051bc',1,'claragenomics::cudamapper::SketchElement']]],
+  ['positions_5fin_5freads_107',['positions_in_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183',1,'claragenomics::cudamapper::Index']]],
+  ['print_5fpaf_108',['print_paf',['../group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371',1,'claragenomics::cudamapper::Overlapper']]]
 ];
diff --git a/docs/cpp/search/all_d.js b/docs/cpp/search/all_d.js
index 73cd2ce7d..0809b886e 100644
--- a/docs/cpp/search/all_d.js
+++ b/docs/cpp/search/all_d.js
@@ -1,9 +1,9 @@
 var searchData=
 [
-  ['query_5fend_5fposition_5fin_5fread_5f_85',['query_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224',1,'claragenomics::cudamapper::Overlap']]],
-  ['query_5flength_5f_86',['query_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b',1,'claragenomics::cudamapper::Overlap']]],
-  ['query_5fposition_5fin_5fread_5f_87',['query_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad5e41665c86c77044b2ba2c939fdbb86',1,'claragenomics::cudamapper::Anchor']]],
-  ['query_5fread_5fid_5f_88',['query_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#a3c79e476eae0672a9a941e0980b6dcc3',1,'claragenomics::cudamapper::Anchor::query_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc',1,'claragenomics::cudamapper::Overlap::query_read_id_()']]],
-  ['query_5fread_5fname_5f_89',['query_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df',1,'claragenomics::cudamapper::Overlap']]],
-  ['query_5fstart_5fposition_5fin_5fread_5f_90',['query_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e',1,'claragenomics::cudamapper::Overlap']]]
+  ['query_5fend_5fposition_5fin_5fread_5f_109',['query_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224',1,'claragenomics::cudamapper::Overlap']]],
+  ['query_5flength_5f_110',['query_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b',1,'claragenomics::cudamapper::Overlap']]],
+  ['query_5fposition_5fin_5fread_5f_111',['query_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad5e41665c86c77044b2ba2c939fdbb86',1,'claragenomics::cudamapper::Anchor']]],
+  ['query_5fread_5fid_5f_112',['query_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#a3c79e476eae0672a9a941e0980b6dcc3',1,'claragenomics::cudamapper::Anchor::query_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc',1,'claragenomics::cudamapper::Overlap::query_read_id_()']]],
+  ['query_5fread_5fname_5f_113',['query_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057',1,'claragenomics::cudamapper::Overlap']]],
+  ['query_5fstart_5fposition_5fin_5fread_5f_114',['query_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e',1,'claragenomics::cudamapper::Overlap']]]
 ];
diff --git a/docs/cpp/search/all_e.js b/docs/cpp/search/all_e.js
index f2b893991..1450d64e3 100644
--- a/docs/cpp/search/all_e.js
+++ b/docs/cpp/search/all_e.js
@@ -1,14 +1,11 @@
 var searchData=
 [
-  ['reached_5fend_5fof_5finput_91',['reached_end_of_input',['../classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fid_92',['read_id',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af5f2e8fc8df725b336833930baf3cd39',1,'claragenomics::cudamapper::SketchElement']]],
-  ['read_5fid_5fand_5frepresentation_5fto_5fsketch_5felements_93',['read_id_and_representation_to_sketch_elements',['../classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fid_5fto_5fread_5flength_94',['read_id_to_read_length',['../classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fid_5fto_5fread_5fname_95',['read_id_to_read_name',['../classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fids_96',['read_ids',['../classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5',1,'claragenomics::cudamapper::Index']]],
-  ['relative_5fstrand_97',['relative_strand',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7',1,'claragenomics::cudamapper::Overlap']]],
-  ['representation_98',['representation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#abb3c8927594ba5f077c4443c229e0730',1,'claragenomics::cudamapper::SketchElement']]],
-  ['representation_5f_99',['representation_',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a839754dc6ed7d150ae06abf377e39c62',1,'claragenomics::cudamapper::Index::RepresentationToSketchElements']]],
-  ['representationtosketchelements_100',['RepresentationToSketchElements',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html',1,'claragenomics::cudamapper::Index']]],
-  ['reset_101',['reset',['../classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae',1,'claragenomics::cudapoa::Batch::reset()'],['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a9f7f056a269c32c909a9bfb7132ba439',1,'claragenomics::cudaaligner::Aligner::reset()']]]
+  ['read_5fid_115',['read_id',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af5f2e8fc8df725b336833930baf3cd39',1,'claragenomics::cudamapper::SketchElement']]],
+  ['read_5fid_5fto_5fread_5flength_116',['read_id_to_read_length',['../classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4',1,'claragenomics::cudamapper::Index']]],
+  ['read_5fid_5fto_5fread_5fname_117',['read_id_to_read_name',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd',1,'claragenomics::cudamapper::Index']]],
+  ['read_5fids_118',['read_ids',['../classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401',1,'claragenomics::cudamapper::Index']]],
+  ['relative_5fstrand_119',['relative_strand',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7',1,'claragenomics::cudamapper::Overlap']]],
+  ['representation_120',['representation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#abb3c8927594ba5f077c4443c229e0730',1,'claragenomics::cudamapper::SketchElement']]],
+  ['representations_121',['representations',['../classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80',1,'claragenomics::cudamapper::Index']]],
+  ['reset_122',['reset',['../classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae',1,'claragenomics::cudapoa::Batch::reset()'],['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a9f7f056a269c32c909a9bfb7132ba439',1,'claragenomics::cudaaligner::Aligner::reset()']]]
 ];
diff --git a/docs/cpp/search/all_f.js b/docs/cpp/search/all_f.js
index e973fd5c8..157d57a6a 100644
--- a/docs/cpp/search/all_f.js
+++ b/docs/cpp/search/all_f.js
@@ -1,14 +1,14 @@
 var searchData=
 [
-  ['scoped_5fdevice_5fswitch_102',['scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html',1,'claragenomics::scoped_device_switch'],['../classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650',1,'claragenomics::scoped_device_switch::scoped_device_switch()']]],
-  ['seq_103',['seq',['../structclaragenomics_1_1io_1_1FastaSequence.html#a9ac5e894fc08745c47b326a7038aa488',1,'claragenomics::io::FastaSequence::seq()'],['../structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4',1,'claragenomics::cudapoa::Entry::seq()']]],
-  ['sequence_104',['Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html',1,'claragenomics::cudamapper']]],
-  ['setheader_105',['SetHeader',['../group__logging.html#ga848bc3ae40b237ab46ae622aadab26a5',1,'claragenomics::logging']]],
-  ['sketch_5felements_5ffor_5frepresentation_5fand_5fall_5fread_5fids_5f_106',['sketch_elements_for_representation_and_all_read_ids_',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a604d5227c7fe6412e982fb31a1fee549',1,'claragenomics::cudamapper::Index::RepresentationToSketchElements']]],
-  ['sketch_5felements_5ffor_5frepresentation_5fand_5fread_5fid_5f_107',['sketch_elements_for_representation_and_read_id_',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a84ff4998d9fec875845a20272d209b30',1,'claragenomics::cudamapper::Index::RepresentationToSketchElements']]],
-  ['sketchelement_108',['SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html',1,'claragenomics::cudamapper']]],
-  ['spdlog_5factive_5flevel_109',['SPDLOG_ACTIVE_LEVEL',['../group__logging.html#gae4fda6f71f35120e2ff48157fca961b5',1,'logging.hpp']]],
-  ['statustype_110',['StatusType',['../group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0',1,'claragenomics::cudapoa::StatusType()'],['../group__cudaaligner.html#ga7d6424e11f69650b1d4eabef0cf4f602',1,'claragenomics::cudaaligner::StatusType()']]],
-  ['success_111',['success',['../group__logging.html#ggaa716171cacca628efa44969863d3c43ba260ca9dd8a4577fc00b7bd5810298076',1,'claragenomics::logging']]],
-  ['sync_5falignments_112',['sync_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#ac929b7ba836dfac74d8975f652563482',1,'claragenomics::cudaaligner::Aligner']]]
+  ['scoped_5fdevice_5fswitch_123',['scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html',1,'claragenomics::scoped_device_switch'],['../classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650',1,'claragenomics::scoped_device_switch::scoped_device_switch()']]],
+  ['seq_124',['seq',['../structclaragenomics_1_1io_1_1FastaSequence.html#a9ac5e894fc08745c47b326a7038aa488',1,'claragenomics::io::FastaSequence::seq()'],['../structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4',1,'claragenomics::cudapoa::Entry::seq()']]],
+  ['sequence_125',['Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html',1,'claragenomics::cudamapper']]],
+  ['serialize_5fto_5fdot_126',['serialize_to_dot',['../classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3',1,'claragenomics::DirectedGraph::serialize_to_dot()'],['../classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f',1,'claragenomics::UndirectedGraph::serialize_to_dot()']]],
+  ['set_5fnode_5flabel_127',['set_node_label',['../classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d',1,'claragenomics::Graph']]],
+  ['setheader_128',['SetHeader',['../group__logging.html#ga848bc3ae40b237ab46ae622aadab26a5',1,'claragenomics::logging']]],
+  ['sketchelement_129',['SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html',1,'claragenomics::cudamapper']]],
+  ['spdlog_5factive_5flevel_130',['SPDLOG_ACTIVE_LEVEL',['../group__logging.html#gae4fda6f71f35120e2ff48157fca961b5',1,'logging.hpp']]],
+  ['statustype_131',['StatusType',['../group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0',1,'claragenomics::cudapoa::StatusType()'],['../group__cudaaligner.html#ga7d6424e11f69650b1d4eabef0cf4f602',1,'claragenomics::cudaaligner::StatusType()']]],
+  ['success_132',['success',['../group__logging.html#ggaa716171cacca628efa44969863d3c43ba260ca9dd8a4577fc00b7bd5810298076',1,'claragenomics::logging']]],
+  ['sync_5falignments_133',['sync_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#ac929b7ba836dfac74d8975f652563482',1,'claragenomics::cudaaligner::Aligner']]]
 ];
diff --git a/docs/cpp/search/classes_0.js b/docs/cpp/search/classes_0.js
index bcf53d4e5..226fb2da8 100644
--- a/docs/cpp/search/classes_0.js
+++ b/docs/cpp/search/classes_0.js
@@ -1,7 +1,7 @@
 var searchData=
 [
-  ['aligner_128',['Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html',1,'claragenomics::cudaaligner']]],
-  ['alignment_129',['Alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html',1,'claragenomics::cudaaligner']]],
-  ['anchor_130',['Anchor',['../structclaragenomics_1_1cudamapper_1_1Anchor.html',1,'claragenomics::cudamapper']]],
-  ['arrayblock_131',['ArrayBlock',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html',1,'claragenomics::cudamapper']]]
+  ['aligner_154',['Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html',1,'claragenomics::cudaaligner']]],
+  ['alignment_155',['Alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html',1,'claragenomics::cudaaligner']]],
+  ['anchor_156',['Anchor',['../structclaragenomics_1_1cudamapper_1_1Anchor.html',1,'claragenomics::cudamapper']]],
+  ['arrayblock_157',['ArrayBlock',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html',1,'claragenomics::cudamapper']]]
 ];
diff --git a/docs/cpp/search/classes_1.js b/docs/cpp/search/classes_1.js
index 520107a79..f2ef8fd23 100644
--- a/docs/cpp/search/classes_1.js
+++ b/docs/cpp/search/classes_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['batch_132',['Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html',1,'claragenomics::cudapoa']]]
+  ['batch_158',['Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html',1,'claragenomics::cudapoa']]]
 ];
diff --git a/docs/cpp/search/classes_2.js b/docs/cpp/search/classes_2.js
index 4b15ecbe3..1e5cbc07d 100644
--- a/docs/cpp/search/classes_2.js
+++ b/docs/cpp/search/classes_2.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['entry_133',['Entry',['../structclaragenomics_1_1cudapoa_1_1Entry.html',1,'claragenomics::cudapoa']]]
+  ['directedgraph_159',['DirectedGraph',['../classclaragenomics_1_1DirectedGraph.html',1,'claragenomics']]]
 ];
diff --git a/docs/cpp/search/classes_3.js b/docs/cpp/search/classes_3.js
index c0003d6a1..fd41a637c 100644
--- a/docs/cpp/search/classes_3.js
+++ b/docs/cpp/search/classes_3.js
@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['fastaparser_134',['FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html',1,'claragenomics::io']]],
-  ['fastasequence_135',['FastaSequence',['../structclaragenomics_1_1io_1_1FastaSequence.html',1,'claragenomics::io']]]
+  ['entry_160',['Entry',['../structclaragenomics_1_1cudapoa_1_1Entry.html',1,'claragenomics::cudapoa']]]
 ];
diff --git a/docs/cpp/search/classes_4.js b/docs/cpp/search/classes_4.js
index 8490417a7..dbf239728 100644
--- a/docs/cpp/search/classes_4.js
+++ b/docs/cpp/search/classes_4.js
@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['index_136',['Index',['../classclaragenomics_1_1cudamapper_1_1Index.html',1,'claragenomics::cudamapper']]]
+  ['fastaparser_161',['FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html',1,'claragenomics::io']]],
+  ['fastasequence_162',['FastaSequence',['../structclaragenomics_1_1io_1_1FastaSequence.html',1,'claragenomics::io']]]
 ];
diff --git a/docs/cpp/search/classes_5.js b/docs/cpp/search/classes_5.js
index 8c31fed0c..704ab818b 100644
--- a/docs/cpp/search/classes_5.js
+++ b/docs/cpp/search/classes_5.js
@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['overlap_137',['Overlap',['../structclaragenomics_1_1cudamapper_1_1Overlap.html',1,'claragenomics::cudamapper']]],
-  ['overlapper_138',['Overlapper',['../classclaragenomics_1_1cudamapper_1_1Overlapper.html',1,'claragenomics::cudamapper']]]
+  ['graph_163',['Graph',['../classclaragenomics_1_1Graph.html',1,'claragenomics']]]
 ];
diff --git a/docs/cpp/search/classes_6.js b/docs/cpp/search/classes_6.js
index e69f4bc89..e0ebfbb9f 100644
--- a/docs/cpp/search/classes_6.js
+++ b/docs/cpp/search/classes_6.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['representationtosketchelements_139',['RepresentationToSketchElements',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html',1,'claragenomics::cudamapper::Index']]]
+  ['index_164',['Index',['../classclaragenomics_1_1cudamapper_1_1Index.html',1,'claragenomics::cudamapper']]]
 ];
diff --git a/docs/cpp/search/classes_7.js b/docs/cpp/search/classes_7.js
index 9723bd094..31b298982 100644
--- a/docs/cpp/search/classes_7.js
+++ b/docs/cpp/search/classes_7.js
@@ -1,6 +1,4 @@
 var searchData=
 [
-  ['scoped_5fdevice_5fswitch_140',['scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html',1,'claragenomics']]],
-  ['sequence_141',['Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html',1,'claragenomics::cudamapper']]],
-  ['sketchelement_142',['SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html',1,'claragenomics::cudamapper']]]
+  ['matcher_165',['Matcher',['../classclaragenomics_1_1cudamapper_1_1Matcher.html',1,'claragenomics::cudamapper']]]
 ];
diff --git a/docs/cpp/search/classes_8.html b/docs/cpp/search/classes_8.html
new file mode 100644
index 000000000..f2f78e9fc
--- /dev/null
+++ b/docs/cpp/search/classes_8.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/classes_8.js b/docs/cpp/search/classes_8.js
new file mode 100644
index 000000000..e02d6dd52
--- /dev/null
+++ b/docs/cpp/search/classes_8.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['overlap_166',['Overlap',['../structclaragenomics_1_1cudamapper_1_1Overlap.html',1,'claragenomics::cudamapper']]],
+  ['overlapper_167',['Overlapper',['../classclaragenomics_1_1cudamapper_1_1Overlapper.html',1,'claragenomics::cudamapper']]]
+];
diff --git a/docs/cpp/search/classes_9.html b/docs/cpp/search/classes_9.html
new file mode 100644
index 000000000..e4e148f03
--- /dev/null
+++ b/docs/cpp/search/classes_9.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/classes_9.js b/docs/cpp/search/classes_9.js
new file mode 100644
index 000000000..695ad14ec
--- /dev/null
+++ b/docs/cpp/search/classes_9.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['pairhash_168',['PairHash',['../structclaragenomics_1_1PairHash.html',1,'claragenomics']]]
+];
diff --git a/docs/cpp/search/classes_a.html b/docs/cpp/search/classes_a.html
new file mode 100644
index 000000000..157ebcb74
--- /dev/null
+++ b/docs/cpp/search/classes_a.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/classes_a.js b/docs/cpp/search/classes_a.js
new file mode 100644
index 000000000..3d7e125ed
--- /dev/null
+++ b/docs/cpp/search/classes_a.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['scoped_5fdevice_5fswitch_169',['scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html',1,'claragenomics']]],
+  ['sequence_170',['Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html',1,'claragenomics::cudamapper']]],
+  ['sketchelement_171',['SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html',1,'claragenomics::cudamapper']]]
+];
diff --git a/docs/cpp/search/classes_b.html b/docs/cpp/search/classes_b.html
new file mode 100644
index 000000000..02927f786
--- /dev/null
+++ b/docs/cpp/search/classes_b.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/classes_b.js b/docs/cpp/search/classes_b.js
new file mode 100644
index 000000000..d1d7901e3
--- /dev/null
+++ b/docs/cpp/search/classes_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['undirectedgraph_172',['UndirectedGraph',['../classclaragenomics_1_1UndirectedGraph.html',1,'claragenomics']]]
+];
diff --git a/docs/cpp/search/enums_0.js b/docs/cpp/search/enums_0.js
index c4464d68a..7a33c4276 100644
--- a/docs/cpp/search/enums_0.js
+++ b/docs/cpp/search/enums_0.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['alignmentstate_230',['AlignmentState',['../group__cudaaligner.html#ga8ee40da066dcb49eb0516b6a763ec45d',1,'claragenomics::cudaaligner']]],
-  ['alignmenttype_231',['AlignmentType',['../group__cudaaligner.html#gafcccbe51c86f9772ccf837fc433f518b',1,'claragenomics::cudaaligner']]]
+  ['alignmentstate_281',['AlignmentState',['../group__cudaaligner.html#ga8ee40da066dcb49eb0516b6a763ec45d',1,'claragenomics::cudaaligner']]],
+  ['alignmenttype_282',['AlignmentType',['../group__cudaaligner.html#gafcccbe51c86f9772ccf837fc433f518b',1,'claragenomics::cudaaligner']]]
 ];
diff --git a/docs/cpp/search/enums_1.js b/docs/cpp/search/enums_1.js
index ce76c3eae..07f881181 100644
--- a/docs/cpp/search/enums_1.js
+++ b/docs/cpp/search/enums_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['directionofrepresentation_232',['DirectionOfRepresentation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a',1,'claragenomics::cudamapper::SketchElement']]]
+  ['directionofrepresentation_283',['DirectionOfRepresentation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a83beb5c091c4b0bfec99c04b6bc8777a',1,'claragenomics::cudamapper::SketchElement']]]
 ];
diff --git a/docs/cpp/search/enums_2.js b/docs/cpp/search/enums_2.js
index 810980481..9ae414215 100644
--- a/docs/cpp/search/enums_2.js
+++ b/docs/cpp/search/enums_2.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['loggingstatus_233',['LoggingStatus',['../group__logging.html#gaa716171cacca628efa44969863d3c43b',1,'claragenomics::logging']]]
+  ['loggingstatus_284',['LoggingStatus',['../group__logging.html#gaa716171cacca628efa44969863d3c43b',1,'claragenomics::logging']]]
 ];
diff --git a/docs/cpp/search/enums_3.js b/docs/cpp/search/enums_3.js
index 9748501be..9526ea6ef 100644
--- a/docs/cpp/search/enums_3.js
+++ b/docs/cpp/search/enums_3.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['outputtype_234',['OutputType',['../group__cudapoa.html#ga303d3df3e0053351dc95efab320bd037',1,'claragenomics::cudapoa']]]
+  ['outputtype_285',['OutputType',['../group__cudapoa.html#ga303d3df3e0053351dc95efab320bd037',1,'claragenomics::cudapoa']]]
 ];
diff --git a/docs/cpp/search/enums_4.js b/docs/cpp/search/enums_4.js
index 903557404..1640c692a 100644
--- a/docs/cpp/search/enums_4.js
+++ b/docs/cpp/search/enums_4.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['statustype_235',['StatusType',['../group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0',1,'claragenomics::cudapoa::StatusType()'],['../group__cudaaligner.html#ga7d6424e11f69650b1d4eabef0cf4f602',1,'claragenomics::cudaaligner::StatusType()']]]
+  ['statustype_286',['StatusType',['../group__cudapoa.html#ga8ece5291074f6e07073b797d34ec24d0',1,'claragenomics::cudapoa::StatusType()'],['../group__cudaaligner.html#ga7d6424e11f69650b1d4eabef0cf4f602',1,'claragenomics::cudaaligner::StatusType()']]]
 ];
diff --git a/docs/cpp/search/enumvalues_0.js b/docs/cpp/search/enumvalues_0.js
index d223aec35..3758b12e1 100644
--- a/docs/cpp/search/enumvalues_0.js
+++ b/docs/cpp/search/enumvalues_0.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['cannot_5fopen_5ffile_236',['cannot_open_file',['../group__logging.html#ggaa716171cacca628efa44969863d3c43baac1f4cf357f10c246b3baf4249a5bf54',1,'claragenomics::logging']]],
-  ['cannot_5fopen_5fstdout_237',['cannot_open_stdout',['../group__logging.html#ggaa716171cacca628efa44969863d3c43bafe21a9d225faf6903e465fdda696c8ee',1,'claragenomics::logging']]]
+  ['cannot_5fopen_5ffile_287',['cannot_open_file',['../group__logging.html#ggaa716171cacca628efa44969863d3c43baac1f4cf357f10c246b3baf4249a5bf54',1,'claragenomics::logging']]],
+  ['cannot_5fopen_5fstdout_288',['cannot_open_stdout',['../group__logging.html#ggaa716171cacca628efa44969863d3c43bafe21a9d225faf6903e465fdda696c8ee',1,'claragenomics::logging']]]
 ];
diff --git a/docs/cpp/search/enumvalues_1.js b/docs/cpp/search/enumvalues_1.js
index e3eae7bba..86d9ff163 100644
--- a/docs/cpp/search/enumvalues_1.js
+++ b/docs/cpp/search/enumvalues_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['success_238',['success',['../group__logging.html#ggaa716171cacca628efa44969863d3c43ba260ca9dd8a4577fc00b7bd5810298076',1,'claragenomics::logging']]]
+  ['success_289',['success',['../group__logging.html#ggaa716171cacca628efa44969863d3c43ba260ca9dd8a4577fc00b7bd5810298076',1,'claragenomics::logging']]]
 ];
diff --git a/docs/cpp/search/files_0.js b/docs/cpp/search/files_0.js
index 2230ddea7..6ead16f66 100644
--- a/docs/cpp/search/files_0.js
+++ b/docs/cpp/search/files_0.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['cudautils_2ehpp_143',['cudautils.hpp',['../cudautils_8hpp.html',1,'']]]
+  ['cudautils_2ehpp_173',['cudautils.hpp',['../cudautils_8hpp.html',1,'']]]
 ];
diff --git a/docs/cpp/search/files_1.js b/docs/cpp/search/files_1.js
index 73332dd79..79741627a 100644
--- a/docs/cpp/search/files_1.js
+++ b/docs/cpp/search/files_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['logging_2ehpp_144',['logging.hpp',['../logging_8hpp.html',1,'']]]
+  ['logging_2ehpp_174',['logging.hpp',['../logging_8hpp.html',1,'']]]
 ];
diff --git a/docs/cpp/search/functions_0.js b/docs/cpp/search/functions_0.js
index d8ae2dc69..c1e3e821e 100644
--- a/docs/cpp/search/functions_0.js
+++ b/docs/cpp/search/functions_0.js
@@ -1,8 +1,10 @@
 var searchData=
 [
-  ['add_5falignment_145',['add_alignment',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#adc32085da2b5681f0045d05c43a35f92',1,'claragenomics::cudaaligner::Aligner']]],
-  ['add_5fpoa_5fgroup_146',['add_poa_group',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0',1,'claragenomics::cudapoa::Batch']]],
-  ['align_147',['align',['../cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca',1,'claragenomics::cudautils']]],
-  ['align_5fall_148',['align_all',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a8b3c20782b9eaa4c2219fb7ff51772db',1,'claragenomics::cudaaligner::Aligner']]],
-  ['anchor_149',['Anchor',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#af4dc10f114030a8e3a53f3bad3cd20b2',1,'claragenomics::cudamapper::Anchor']]]
+  ['add_5falignment_175',['add_alignment',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#adc32085da2b5681f0045d05c43a35f92',1,'claragenomics::cudaaligner::Aligner']]],
+  ['add_5fedge_176',['add_edge',['../classclaragenomics_1_1DirectedGraph.html#a85c21aed5db9c7d81cb6003841410371',1,'claragenomics::DirectedGraph::add_edge()'],['../classclaragenomics_1_1UndirectedGraph.html#a47c5ee6b9616ab24222526f4dcd1fb04',1,'claragenomics::UndirectedGraph::add_edge()']]],
+  ['add_5fpoa_5fgroup_177',['add_poa_group',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a8f2f44e7b4d7f51d8ba68323841dcdf0',1,'claragenomics::cudapoa::Batch']]],
+  ['align_178',['align',['../cudautils_8hpp.html#a9ace0fde2c5420f52b40ca77276943ca',1,'claragenomics::cudautils']]],
+  ['align_5fall_179',['align_all',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a8b3c20782b9eaa4c2219fb7ff51772db',1,'claragenomics::cudaaligner::Aligner']]],
+  ['anchor_180',['Anchor',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#af4dc10f114030a8e3a53f3bad3cd20b2',1,'claragenomics::cudamapper::Anchor']]],
+  ['anchors_181',['anchors',['../classclaragenomics_1_1cudamapper_1_1Matcher.html#ac3de5ba06b0c7ef0329caf71ae98f2d2',1,'claragenomics::cudamapper::Matcher']]]
 ];
diff --git a/docs/cpp/search/functions_1.js b/docs/cpp/search/functions_1.js
index 5a06e7737..288777d2e 100644
--- a/docs/cpp/search/functions_1.js
+++ b/docs/cpp/search/functions_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['batch_5fid_150',['batch_id',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec',1,'claragenomics::cudapoa::Batch']]]
+  ['batch_5fid_182',['batch_id',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab807c4b01c2cddcdebb32952df13c0ec',1,'claragenomics::cudapoa::Batch']]]
 ];
diff --git a/docs/cpp/search/functions_2.js b/docs/cpp/search/functions_2.js
index 2ec828946..7568afead 100644
--- a/docs/cpp/search/functions_2.js
+++ b/docs/cpp/search/functions_2.js
@@ -1,8 +1,9 @@
 var searchData=
 [
-  ['convert_5fto_5fcigar_151',['convert_to_cigar',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876',1,'claragenomics::cudaaligner::Alignment']]],
-  ['create_5faligner_152',['create_aligner',['../group__cudaaligner.html#ga07b5416cfe8a05f326cb244f9d596449',1,'claragenomics::cudaaligner']]],
-  ['create_5fbatch_153',['create_batch',['../group__cudapoa.html#ga81951b681c27354e2dbe7933a9f168f3',1,'claragenomics::cudapoa']]],
-  ['create_5findex_154',['create_index',['../classclaragenomics_1_1cudamapper_1_1Index.html#afc23f3e71c65dc9ed5a9e49cf26ba645',1,'claragenomics::cudamapper::Index::create_index(const std::vector&lt; io::FastaParser * &gt; &amp;parsers, const std::uint64_t kmer_size, const std::uint64_t window_size, const std::vector&lt; std::pair&lt; std::uint64_t, std::uint64_t &gt;&gt; &amp;ranges)'],['../classclaragenomics_1_1cudamapper_1_1Index.html#acb29a3ba1a493f706a3ec25bc290b30a',1,'claragenomics::cudamapper::Index::create_index()']]],
-  ['create_5fsequence_155',['create_sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a3e4a8fe41b71b13362433360b20115ed',1,'claragenomics::cudamapper::Sequence::create_sequence(const char *name, uint32_t name_length, const char *data, uint32_t data_length)'],['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a8d3420a4a6442ce58aa70dc94372135c',1,'claragenomics::cudamapper::Sequence::create_sequence(const std::string &amp;name, const std::string &amp;data)']]]
+  ['convert_5fto_5fcigar_183',['convert_to_cigar',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#aeb4a583f6fbc643c93170797ca45a876',1,'claragenomics::cudaaligner::Alignment']]],
+  ['create_5faligner_184',['create_aligner',['../group__cudaaligner.html#ga07b5416cfe8a05f326cb244f9d596449',1,'claragenomics::cudaaligner']]],
+  ['create_5fbatch_185',['create_batch',['../group__cudapoa.html#ga81951b681c27354e2dbe7933a9f168f3',1,'claragenomics::cudapoa']]],
+  ['create_5findex_186',['create_index',['../classclaragenomics_1_1cudamapper_1_1Index.html#a47c3cb89daa4076243dd5977acfb7ccf',1,'claragenomics::cudamapper::Index']]],
+  ['create_5fmatcher_187',['create_matcher',['../classclaragenomics_1_1cudamapper_1_1Matcher.html#ae65a1507ddf1bf2aa046fc0eacfea752',1,'claragenomics::cudamapper::Matcher']]],
+  ['create_5fsequence_188',['create_sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a3e4a8fe41b71b13362433360b20115ed',1,'claragenomics::cudamapper::Sequence::create_sequence(const char *name, uint32_t name_length, const char *data, uint32_t data_length)'],['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a8d3420a4a6442ce58aa70dc94372135c',1,'claragenomics::cudamapper::Sequence::create_sequence(const std::string &amp;name, const std::string &amp;data)']]]
 ];
diff --git a/docs/cpp/search/functions_3.js b/docs/cpp/search/functions_3.js
index f1c7719f1..138c16eb1 100644
--- a/docs/cpp/search/functions_3.js
+++ b/docs/cpp/search/functions_3.js
@@ -1,6 +1,7 @@
 var searchData=
 [
-  ['data_156',['data',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a45c1a69a18ea6f6fd7a45bad6862bbca',1,'claragenomics::cudamapper::Sequence']]],
-  ['direction_157',['direction',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af4b53bc09f5816c3b81fef1c1abf3fc6',1,'claragenomics::cudamapper::SketchElement']]],
-  ['directions_5fof_5freads_158',['directions_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a407a2466e8740a0f78a3ce876b87352b',1,'claragenomics::cudamapper::Index']]]
+  ['data_189',['data',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a45c1a69a18ea6f6fd7a45bad6862bbca',1,'claragenomics::cudamapper::Sequence']]],
+  ['directed_5fedge_5fexists_190',['directed_edge_exists',['../classclaragenomics_1_1Graph.html#a1df5a4be1fc2f71130436e9f718e85ac',1,'claragenomics::Graph']]],
+  ['direction_191',['direction',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af4b53bc09f5816c3b81fef1c1abf3fc6',1,'claragenomics::cudamapper::SketchElement']]],
+  ['directions_5fof_5freads_192',['directions_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a5824f352fd89f69c9acc14430a3aa6cd',1,'claragenomics::cudamapper::Index']]]
 ];
diff --git a/docs/cpp/search/functions_4.js b/docs/cpp/search/functions_4.js
index f26f0ef91..a48af6f3a 100644
--- a/docs/cpp/search/functions_4.js
+++ b/docs/cpp/search/functions_4.js
@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['filter_5foverlaps_159',['filter_overlaps',['../group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c',1,'claragenomics::cudamapper::Overlapper']]],
-  ['format_5falignment_160',['format_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c',1,'claragenomics::cudaaligner::Alignment']]]
+  ['edges_5fto_5fdot_193',['edges_to_dot',['../classclaragenomics_1_1Graph.html#a88dda0ee0cffa26a188a041593d2fcd5',1,'claragenomics::Graph']]]
 ];
diff --git a/docs/cpp/search/functions_5.js b/docs/cpp/search/functions_5.js
index a6b735fd8..76dc830f7 100644
--- a/docs/cpp/search/functions_5.js
+++ b/docs/cpp/search/functions_5.js
@@ -1,18 +1,6 @@
 var searchData=
 [
-  ['generate_5fpoa_161',['generate_poa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09',1,'claragenomics::cudapoa::Batch']]],
-  ['get_5falignment_162',['get_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5falignment_5ftype_163',['get_alignment_type',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab22457c02ac00ec205dcd5a75b253881',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5falignments_164',['get_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a1d775f9821ce3ecdcdc67cb07f35a4d8',1,'claragenomics::cudaaligner::Aligner']]],
-  ['get_5fconsensus_165',['get_consensus',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0',1,'claragenomics::cudapoa::Batch']]],
-  ['get_5fmsa_166',['get_msa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2',1,'claragenomics::cudapoa::Batch']]],
-  ['get_5fnum_5fseqences_167',['get_num_seqences',['../classclaragenomics_1_1io_1_1FastaParser.html#a04f6deee5108374fa485487e06e759e5',1,'claragenomics::io::FastaParser']]],
-  ['get_5foverlaps_168',['get_overlaps',['../group__cudamapper.html#ga5498f3d8b5eff6481c67fdf0a049c300',1,'claragenomics::cudamapper::Overlapper']]],
-  ['get_5fquery_5fsequence_169',['get_query_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5fsequence_5fby_5fid_170',['get_sequence_by_id',['../classclaragenomics_1_1io_1_1FastaParser.html#a04a44819b81a93711295198492cc3765',1,'claragenomics::io::FastaParser']]],
-  ['get_5fsequence_5fby_5fname_171',['get_sequence_by_name',['../classclaragenomics_1_1io_1_1FastaParser.html#ad37d794106d347d1d360d62db2d31cda',1,'claragenomics::io::FastaParser']]],
-  ['get_5fstatus_172',['get_status',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5ftarget_5fsequence_173',['get_target_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4a61cdee74c32930f49cb878fc17db57',1,'claragenomics::cudaaligner::Alignment']]],
-  ['get_5ftotal_5fpoas_174',['get_total_poas',['../classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc',1,'claragenomics::cudapoa::Batch']]],
-  ['gpu_5fassert_175',['gpu_assert',['../group__cudautils.html#ga3769a812992df47886894f48f26edf6f',1,'claragenomics::cudautils']]]
+  ['filter_5foverlaps_194',['filter_overlaps',['../group__cudamapper.html#ga3e5732f34489315ec8d1ef8b82ccea5c',1,'claragenomics::cudamapper::Overlapper']]],
+  ['first_5foccurrence_5fof_5frepresentations_195',['first_occurrence_of_representations',['../classclaragenomics_1_1cudamapper_1_1Index.html#af4f69a9003fedb9ca11665d5faa43bff',1,'claragenomics::cudamapper::Index']]],
+  ['format_5falignment_196',['format_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4be4bb544d593f3fd7624628f2bda29c',1,'claragenomics::cudaaligner::Alignment']]]
 ];
diff --git a/docs/cpp/search/functions_6.js b/docs/cpp/search/functions_6.js
index 95d65fcb2..50a55423b 100644
--- a/docs/cpp/search/functions_6.js
+++ b/docs/cpp/search/functions_6.js
@@ -1,4 +1,23 @@
 var searchData=
 [
-  ['init_176',['Init',['../group__logging.html#ga1e6ecad63f4d5d90cc01578f653f6e94',1,'claragenomics::logging::Init()'],['../group__cudapoa.html#ga20324a870a7cad68e1b02dcc1d5b02a1',1,'claragenomics::cudapoa::Init()'],['../group__cudaaligner.html#ga1d5dd3c4f48d7a735cbf6d7b5937d41a',1,'claragenomics::cudaaligner::Init()']]]
+  ['generate_5fpoa_197',['generate_poa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a7387b746531d4e8ac1e5806ac2824f09',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fadjacent_5fnodes_198',['get_adjacent_nodes',['../classclaragenomics_1_1Graph.html#ab52b2707de415931f1990ee338b29eeb',1,'claragenomics::Graph']]],
+  ['get_5falignment_199',['get_alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a5139f26517193e077000dcddfbc15f70',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5falignment_5ftype_200',['get_alignment_type',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab22457c02ac00ec205dcd5a75b253881',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5falignments_201',['get_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a1d775f9821ce3ecdcdc67cb07f35a4d8',1,'claragenomics::cudaaligner::Aligner']]],
+  ['get_5fconsensus_202',['get_consensus',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a3224d1595caa5950c34708f4b7d64fe0',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fedges_203',['get_edges',['../classclaragenomics_1_1Graph.html#ac96335c01273c0dd74d2628e7bf38794',1,'claragenomics::Graph']]],
+  ['get_5fgraphs_204',['get_graphs',['../classclaragenomics_1_1cudapoa_1_1Batch.html#a0949cca1e89a40d759b0ca371512bb16',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fmsa_205',['get_msa',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab39956c82d5d5a2d8df1b1695e15d9d2',1,'claragenomics::cudapoa::Batch']]],
+  ['get_5fnode_5fids_206',['get_node_ids',['../classclaragenomics_1_1Graph.html#a1b51bca4b58c9922b375c983415ec0c8',1,'claragenomics::Graph']]],
+  ['get_5fnode_5flabel_207',['get_node_label',['../classclaragenomics_1_1Graph.html#a47bd2f14a355fbbd801846b0af305389',1,'claragenomics::Graph']]],
+  ['get_5fnum_5fseqences_208',['get_num_seqences',['../classclaragenomics_1_1io_1_1FastaParser.html#a04f6deee5108374fa485487e06e759e5',1,'claragenomics::io::FastaParser']]],
+  ['get_5foverlaps_209',['get_overlaps',['../group__cudamapper.html#gab0e3be4a9442dfb2b7952fb473e591a3',1,'claragenomics::cudamapper::Overlapper']]],
+  ['get_5fquery_5fsequence_210',['get_query_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#ab29dceafccd3cb0a2e87023c5d48a780',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5fsequence_5fby_5fid_211',['get_sequence_by_id',['../classclaragenomics_1_1io_1_1FastaParser.html#a04a44819b81a93711295198492cc3765',1,'claragenomics::io::FastaParser']]],
+  ['get_5fsequence_5fby_5fname_212',['get_sequence_by_name',['../classclaragenomics_1_1io_1_1FastaParser.html#ad37d794106d347d1d360d62db2d31cda',1,'claragenomics::io::FastaParser']]],
+  ['get_5fstatus_213',['get_status',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a7665f284b7929998357c89461e444f78',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5ftarget_5fsequence_214',['get_target_sequence',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a4a61cdee74c32930f49cb878fc17db57',1,'claragenomics::cudaaligner::Alignment']]],
+  ['get_5ftotal_5fpoas_215',['get_total_poas',['../classclaragenomics_1_1cudapoa_1_1Batch.html#af2b27869811283b869700c181a75cfdc',1,'claragenomics::cudapoa::Batch']]],
+  ['gpu_5fassert_216',['gpu_assert',['../group__cudautils.html#ga3769a812992df47886894f48f26edf6f',1,'claragenomics::cudautils']]]
 ];
diff --git a/docs/cpp/search/functions_7.js b/docs/cpp/search/functions_7.js
index a6fe61287..6669cdce6 100644
--- a/docs/cpp/search/functions_7.js
+++ b/docs/cpp/search/functions_7.js
@@ -1,6 +1,4 @@
 var searchData=
 [
-  ['maximum_5fkmer_5fsize_177',['maximum_kmer_size',['../classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919',1,'claragenomics::cudamapper::Index']]],
-  ['maximum_5frepresentation_178',['maximum_representation',['../classclaragenomics_1_1cudamapper_1_1Index.html#a69fd1882260a7c55a45fe5e2a092b152',1,'claragenomics::cudamapper::Index']]],
-  ['minimum_5frepresentation_179',['minimum_representation',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac5036778efd3c83f5bf048174a8ab824',1,'claragenomics::cudamapper::Index']]]
+  ['init_217',['Init',['../group__logging.html#ga1e6ecad63f4d5d90cc01578f653f6e94',1,'claragenomics::logging::Init()'],['../group__cudapoa.html#ga20324a870a7cad68e1b02dcc1d5b02a1',1,'claragenomics::cudapoa::Init()'],['../group__cudaaligner.html#ga1d5dd3c4f48d7a735cbf6d7b5937d41a',1,'claragenomics::cudaaligner::Init()']]]
 ];
diff --git a/docs/cpp/search/functions_8.js b/docs/cpp/search/functions_8.js
index 4b6f6fdb7..816fe40db 100644
--- a/docs/cpp/search/functions_8.js
+++ b/docs/cpp/search/functions_8.js
@@ -1,5 +1,4 @@
 var searchData=
 [
-  ['name_180',['name',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#ab9663611f0d6c691e40228c5a08cf0e2',1,'claragenomics::cudamapper::Sequence']]],
-  ['number_5fof_5freads_181',['number_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937',1,'claragenomics::cudamapper::Index']]]
+  ['maximum_5fkmer_5fsize_218',['maximum_kmer_size',['../classclaragenomics_1_1cudamapper_1_1Index.html#af9247d4b637615bf5912acc57b27b919',1,'claragenomics::cudamapper::Index']]]
 ];
diff --git a/docs/cpp/search/functions_9.js b/docs/cpp/search/functions_9.js
index fbd52a2d7..774bdc0a6 100644
--- a/docs/cpp/search/functions_9.js
+++ b/docs/cpp/search/functions_9.js
@@ -1,6 +1,6 @@
 var searchData=
 [
-  ['position_5fin_5fread_182',['position_in_read',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a0ddea36eed82ea3a9d1fa7ace61051bc',1,'claragenomics::cudamapper::SketchElement']]],
-  ['positions_5fin_5freads_183',['positions_in_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a5c75f11d1683e4f863f14a4088a36306',1,'claragenomics::cudamapper::Index']]],
-  ['print_5fpaf_184',['print_paf',['../group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371',1,'claragenomics::cudamapper::Overlapper']]]
+  ['name_219',['name',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#ab9663611f0d6c691e40228c5a08cf0e2',1,'claragenomics::cudamapper::Sequence']]],
+  ['node_5flabels_5fto_5fdot_220',['node_labels_to_dot',['../classclaragenomics_1_1Graph.html#a95ef438f6035c2240bf277645ad27cb9',1,'claragenomics::Graph']]],
+  ['number_5fof_5freads_221',['number_of_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac9e936ae3809c82894a22a5ddb6bb937',1,'claragenomics::cudamapper::Index']]]
 ];
diff --git a/docs/cpp/search/functions_a.js b/docs/cpp/search/functions_a.js
index 79778e53f..fad9df0af 100644
--- a/docs/cpp/search/functions_a.js
+++ b/docs/cpp/search/functions_a.js
@@ -1,11 +1,4 @@
 var searchData=
 [
-  ['reached_5fend_5fof_5finput_185',['reached_end_of_input',['../classclaragenomics_1_1cudamapper_1_1Index.html#a4e5b3cf1c41146635ce9d51bbdfe2277',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fid_186',['read_id',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af5f2e8fc8df725b336833930baf3cd39',1,'claragenomics::cudamapper::SketchElement']]],
-  ['read_5fid_5fand_5frepresentation_5fto_5fsketch_5felements_187',['read_id_and_representation_to_sketch_elements',['../classclaragenomics_1_1cudamapper_1_1Index.html#af8ad540ff0a2a244a35ae846ec745c24',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fid_5fto_5fread_5flength_188',['read_id_to_read_length',['../classclaragenomics_1_1cudamapper_1_1Index.html#af03421436f827e88316c74b0b3af200e',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fid_5fto_5fread_5fname_189',['read_id_to_read_name',['../classclaragenomics_1_1cudamapper_1_1Index.html#aec3176ac2d5e425b25dec14f411cbfe0',1,'claragenomics::cudamapper::Index']]],
-  ['read_5fids_190',['read_ids',['../classclaragenomics_1_1cudamapper_1_1Index.html#aac33d8d2aa72bb227326a35f5b452de5',1,'claragenomics::cudamapper::Index']]],
-  ['representation_191',['representation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#abb3c8927594ba5f077c4443c229e0730',1,'claragenomics::cudamapper::SketchElement']]],
-  ['reset_192',['reset',['../classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae',1,'claragenomics::cudapoa::Batch::reset()'],['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a9f7f056a269c32c909a9bfb7132ba439',1,'claragenomics::cudaaligner::Aligner::reset()']]]
+  ['operator_28_29_222',['operator()',['../structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61',1,'claragenomics::PairHash']]]
 ];
diff --git a/docs/cpp/search/functions_b.js b/docs/cpp/search/functions_b.js
index ab8e10fa8..c8da4e599 100644
--- a/docs/cpp/search/functions_b.js
+++ b/docs/cpp/search/functions_b.js
@@ -1,6 +1,6 @@
 var searchData=
 [
-  ['scoped_5fdevice_5fswitch_193',['scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650',1,'claragenomics::scoped_device_switch']]],
-  ['setheader_194',['SetHeader',['../group__logging.html#ga848bc3ae40b237ab46ae622aadab26a5',1,'claragenomics::logging']]],
-  ['sync_5falignments_195',['sync_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#ac929b7ba836dfac74d8975f652563482',1,'claragenomics::cudaaligner::Aligner']]]
+  ['position_5fin_5fread_223',['position_in_read',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#a0ddea36eed82ea3a9d1fa7ace61051bc',1,'claragenomics::cudamapper::SketchElement']]],
+  ['positions_5fin_5freads_224',['positions_in_reads',['../classclaragenomics_1_1cudamapper_1_1Index.html#a66e5d024befc410221610f454eff7183',1,'claragenomics::cudamapper::Index']]],
+  ['print_5fpaf_225',['print_paf',['../group__cudamapper.html#ga54fedd97206ad1691f7b9d9966d01371',1,'claragenomics::cudamapper::Overlapper']]]
 ];
diff --git a/docs/cpp/search/functions_c.js b/docs/cpp/search/functions_c.js
index 7367e0bb0..e106feb92 100644
--- a/docs/cpp/search/functions_c.js
+++ b/docs/cpp/search/functions_c.js
@@ -1,11 +1,10 @@
 var searchData=
 [
-  ['_7ealigner_196',['~Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#aaae329eae2ed3e364db643163755e987',1,'claragenomics::cudaaligner::Aligner']]],
-  ['_7ebatch_197',['~Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1',1,'claragenomics::cudapoa::Batch']]],
-  ['_7efastaparser_198',['~FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html#a213af5341107ea254176add6dd1dfd2d',1,'claragenomics::io::FastaParser']]],
-  ['_7eindex_199',['~Index',['../classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac',1,'claragenomics::cudamapper::Index']]],
-  ['_7eoverlapper_200',['~Overlapper',['../group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975',1,'claragenomics::cudamapper::Overlapper']]],
-  ['_7escoped_5fdevice_5fswitch_201',['~scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125',1,'claragenomics::scoped_device_switch']]],
-  ['_7esequence_202',['~Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a11498adb0025e53f3e397f72decc4e4f',1,'claragenomics::cudamapper::Sequence']]],
-  ['_7esketchelement_203',['~SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#ac62560de124742cb23bc1def0a0b2069',1,'claragenomics::cudamapper::SketchElement']]]
+  ['read_5fid_226',['read_id',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#af5f2e8fc8df725b336833930baf3cd39',1,'claragenomics::cudamapper::SketchElement']]],
+  ['read_5fid_5fto_5fread_5flength_227',['read_id_to_read_length',['../classclaragenomics_1_1cudamapper_1_1Index.html#a59186cdd6dbfd21baeb07e80bd4354d4',1,'claragenomics::cudamapper::Index']]],
+  ['read_5fid_5fto_5fread_5fname_228',['read_id_to_read_name',['../classclaragenomics_1_1cudamapper_1_1Index.html#ac59d309eeb226592a96622fec2b307fd',1,'claragenomics::cudamapper::Index']]],
+  ['read_5fids_229',['read_ids',['../classclaragenomics_1_1cudamapper_1_1Index.html#a5cfe03b47850170ec64d61d2dbef0401',1,'claragenomics::cudamapper::Index']]],
+  ['representation_230',['representation',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#abb3c8927594ba5f077c4443c229e0730',1,'claragenomics::cudamapper::SketchElement']]],
+  ['representations_231',['representations',['../classclaragenomics_1_1cudamapper_1_1Index.html#a876d5e82f9fc36f481854f7d84e5fc80',1,'claragenomics::cudamapper::Index']]],
+  ['reset_232',['reset',['../classclaragenomics_1_1cudapoa_1_1Batch.html#aa8de262cb7c43d7219f7064bb700e7ae',1,'claragenomics::cudapoa::Batch::reset()'],['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#a9f7f056a269c32c909a9bfb7132ba439',1,'claragenomics::cudaaligner::Aligner::reset()']]]
 ];
diff --git a/docs/cpp/search/functions_d.html b/docs/cpp/search/functions_d.html
new file mode 100644
index 000000000..4375535f3
--- /dev/null
+++ b/docs/cpp/search/functions_d.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/functions_d.js b/docs/cpp/search/functions_d.js
new file mode 100644
index 000000000..f7dae18a9
--- /dev/null
+++ b/docs/cpp/search/functions_d.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['scoped_5fdevice_5fswitch_233',['scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html#a41381ff64aeb0750803a315020a13650',1,'claragenomics::scoped_device_switch']]],
+  ['serialize_5fto_5fdot_234',['serialize_to_dot',['../classclaragenomics_1_1DirectedGraph.html#a7844605760f22a2a60e27c23178497b3',1,'claragenomics::DirectedGraph::serialize_to_dot()'],['../classclaragenomics_1_1UndirectedGraph.html#a64b119c6ca6049b081ddde7db3c87e3f',1,'claragenomics::UndirectedGraph::serialize_to_dot()']]],
+  ['set_5fnode_5flabel_235',['set_node_label',['../classclaragenomics_1_1Graph.html#a9861d50dbee863befed15eb8daacff3d',1,'claragenomics::Graph']]],
+  ['setheader_236',['SetHeader',['../group__logging.html#ga848bc3ae40b237ab46ae622aadab26a5',1,'claragenomics::logging']]],
+  ['sync_5falignments_237',['sync_alignments',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#ac929b7ba836dfac74d8975f652563482',1,'claragenomics::cudaaligner::Aligner']]]
+];
diff --git a/docs/cpp/search/functions_e.html b/docs/cpp/search/functions_e.html
new file mode 100644
index 000000000..0f2054469
--- /dev/null
+++ b/docs/cpp/search/functions_e.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/functions_e.js b/docs/cpp/search/functions_e.js
new file mode 100644
index 000000000..db56c67db
--- /dev/null
+++ b/docs/cpp/search/functions_e.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['unique_5frepresentations_238',['unique_representations',['../classclaragenomics_1_1cudamapper_1_1Index.html#af44999c8852d5915d585c55a1a95c74a',1,'claragenomics::cudamapper::Index']]],
+  ['update_5fadject_5fnodes_239',['update_adject_nodes',['../classclaragenomics_1_1Graph.html#a0043ec8f35f7491c06915c887d31ea77',1,'claragenomics::Graph']]]
+];
diff --git a/docs/cpp/search/functions_f.html b/docs/cpp/search/functions_f.html
new file mode 100644
index 000000000..0dc9f86c7
--- /dev/null
+++ b/docs/cpp/search/functions_f.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/functions_f.js b/docs/cpp/search/functions_f.js
new file mode 100644
index 000000000..eed38ce72
--- /dev/null
+++ b/docs/cpp/search/functions_f.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+  ['_7ealigner_240',['~Aligner',['../classclaragenomics_1_1cudaaligner_1_1Aligner.html#aaae329eae2ed3e364db643163755e987',1,'claragenomics::cudaaligner::Aligner']]],
+  ['_7ealignment_241',['~Alignment',['../classclaragenomics_1_1cudaaligner_1_1Alignment.html#a6479df67f21d643782abfed873218ea8',1,'claragenomics::cudaaligner::Alignment']]],
+  ['_7ebatch_242',['~Batch',['../classclaragenomics_1_1cudapoa_1_1Batch.html#ab70c94f0a2b161abd8fce03f487c2db1',1,'claragenomics::cudapoa::Batch']]],
+  ['_7efastaparser_243',['~FastaParser',['../classclaragenomics_1_1io_1_1FastaParser.html#a213af5341107ea254176add6dd1dfd2d',1,'claragenomics::io::FastaParser']]],
+  ['_7eindex_244',['~Index',['../classclaragenomics_1_1cudamapper_1_1Index.html#afcaccc9f9526d9c66280eca17ff3a4ac',1,'claragenomics::cudamapper::Index']]],
+  ['_7ematcher_245',['~Matcher',['../classclaragenomics_1_1cudamapper_1_1Matcher.html#ac2f70fb6b1876d0fa81fd8c0189191ab',1,'claragenomics::cudamapper::Matcher']]],
+  ['_7eoverlapper_246',['~Overlapper',['../group__cudamapper.html#ga569c8855bdf9806d3747b26fc7e98975',1,'claragenomics::cudamapper::Overlapper']]],
+  ['_7escoped_5fdevice_5fswitch_247',['~scoped_device_switch',['../classclaragenomics_1_1scoped__device__switch.html#ad17a140b9fc9badff82487e685013125',1,'claragenomics::scoped_device_switch']]],
+  ['_7esequence_248',['~Sequence',['../classclaragenomics_1_1cudamapper_1_1Sequence.html#a11498adb0025e53f3e397f72decc4e4f',1,'claragenomics::cudamapper::Sequence']]],
+  ['_7esketchelement_249',['~SketchElement',['../classclaragenomics_1_1cudamapper_1_1SketchElement.html#ac62560de124742cb23bc1def0a0b2069',1,'claragenomics::cudamapper::SketchElement']]]
+];
diff --git a/docs/cpp/search/groups_0.js b/docs/cpp/search/groups_0.js
index 200ed1f2f..09fc10af7 100644
--- a/docs/cpp/search/groups_0.js
+++ b/docs/cpp/search/groups_0.js
@@ -1,6 +1,6 @@
 var searchData=
 [
-  ['cuda_20aligner_20package_239',['CUDA Aligner package',['../group__cudaaligner.html',1,'']]],
-  ['cuda_20mapper_20package_240',['CUDA mapper package',['../group__cudamapper.html',1,'']]],
-  ['cuda_20poa_20package_241',['CUDA POA package',['../group__cudapoa.html',1,'']]]
+  ['cuda_20aligner_20package_290',['CUDA Aligner package',['../group__cudaaligner.html',1,'']]],
+  ['cuda_20mapper_20package_291',['CUDA mapper package',['../group__cudamapper.html',1,'']]],
+  ['cuda_20poa_20package_292',['CUDA POA package',['../group__cudapoa.html',1,'']]]
 ];
diff --git a/docs/cpp/search/groups_1.js b/docs/cpp/search/groups_1.js
index 6a70f56b2..ed1cd5f6a 100644
--- a/docs/cpp/search/groups_1.js
+++ b/docs/cpp/search/groups_1.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['internal_20cuda_20utilities_20package_242',['Internal CUDA utilities package',['../group__cudautils.html',1,'']]],
-  ['internal_20logging_20package_243',['Internal logging package',['../group__logging.html',1,'']]]
+  ['internal_20cuda_20utilities_20package_293',['Internal CUDA utilities package',['../group__cudautils.html',1,'']]],
+  ['internal_20logging_20package_294',['Internal logging package',['../group__logging.html',1,'']]]
 ];
diff --git a/docs/cpp/search/pages_0.js b/docs/cpp/search/pages_0.js
index aba3b60d2..6bfa30279 100644
--- a/docs/cpp/search/pages_0.js
+++ b/docs/cpp/search/pages_0.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['clara_20genomics_20analysis_244',['Clara Genomics Analysis',['../index.html',1,'']]]
+  ['clara_20genomics_20analysis_295',['Clara Genomics Analysis',['../index.html',1,'']]]
 ];
diff --git a/docs/cpp/search/searchdata.js b/docs/cpp/search/searchdata.js
index dc48894d1..863e43e11 100644
--- a/docs/cpp/search/searchdata.js
+++ b/docs/cpp/search/searchdata.js
@@ -1,11 +1,11 @@
 var indexSectionsWithContent =
 {
-  0: "abcdefgilmnopqrstw~",
-  1: "abefiors",
+  0: "abcdefgilmnopqrstuw~",
+  1: "abdefgimopsu",
   2: "cl",
-  3: "abcdfgimnprs~",
-  4: "bflnoqrstw",
-  5: "fg",
+  3: "abcdefgimnoprsu~",
+  4: "abceflnoqrstw",
+  5: "efgn",
   6: "adlos",
   7: "cs",
   8: "ci",
diff --git a/docs/cpp/search/typedefs_0.js b/docs/cpp/search/typedefs_0.js
index eb8e4e730..83bdb023c 100644
--- a/docs/cpp/search/typedefs_0.js
+++ b/docs/cpp/search/typedefs_0.js
@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['formattedalignment_228',['FormattedAlignment',['../group__cudaaligner.html#ga228dcdd4bf0cf40c64786cce6b045c40',1,'claragenomics::cudaaligner']]]
+  ['edge_5ft_276',['edge_t',['../classclaragenomics_1_1Graph.html#a3892123fce03f805e54ce0076e6b68dc',1,'claragenomics::Graph']]],
+  ['edge_5fweight_5ft_277',['edge_weight_t',['../classclaragenomics_1_1Graph.html#ad5388bf7676b6e35a6e62c034e2993b5',1,'claragenomics::Graph']]]
 ];
diff --git a/docs/cpp/search/typedefs_1.js b/docs/cpp/search/typedefs_1.js
index e591de88b..d48310a8e 100644
--- a/docs/cpp/search/typedefs_1.js
+++ b/docs/cpp/search/typedefs_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['group_229',['Group',['../group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32',1,'claragenomics::cudapoa']]]
+  ['formattedalignment_278',['FormattedAlignment',['../group__cudaaligner.html#ga228dcdd4bf0cf40c64786cce6b045c40',1,'claragenomics::cudaaligner']]]
 ];
diff --git a/docs/cpp/search/typedefs_2.html b/docs/cpp/search/typedefs_2.html
new file mode 100644
index 000000000..d633f0cef
--- /dev/null
+++ b/docs/cpp/search/typedefs_2.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/typedefs_2.js b/docs/cpp/search/typedefs_2.js
new file mode 100644
index 000000000..562c29ead
--- /dev/null
+++ b/docs/cpp/search/typedefs_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['group_279',['Group',['../group__cudapoa.html#ga6b301a3a6ac7edccc403ec75e7497d32',1,'claragenomics::cudapoa']]]
+];
diff --git a/docs/cpp/search/typedefs_3.html b/docs/cpp/search/typedefs_3.html
new file mode 100644
index 000000000..6a6421d3d
--- /dev/null
+++ b/docs/cpp/search/typedefs_3.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/typedefs_3.js b/docs/cpp/search/typedefs_3.js
new file mode 100644
index 000000000..925bc3985
--- /dev/null
+++ b/docs/cpp/search/typedefs_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['node_5fid_5ft_280',['node_id_t',['../classclaragenomics_1_1Graph.html#a0f9734799fc19b94b0621c956ce5508d',1,'claragenomics::Graph']]]
+];
diff --git a/docs/cpp/search/variables_0.js b/docs/cpp/search/variables_0.js
index 4c557a445..2e34041ee 100644
--- a/docs/cpp/search/variables_0.js
+++ b/docs/cpp/search/variables_0.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['block_5fsize_5f_204',['block_size_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a33ff27afee2ddb07e6fbdda0ff1de229',1,'claragenomics::cudamapper::ArrayBlock']]]
+  ['adjacent_5fnodes_5f_250',['adjacent_nodes_',['../classclaragenomics_1_1Graph.html#a8b53264154b5caed266385a007e33404',1,'claragenomics::Graph']]]
 ];
diff --git a/docs/cpp/search/variables_1.js b/docs/cpp/search/variables_1.js
index d01cb1870..f89037594 100644
--- a/docs/cpp/search/variables_1.js
+++ b/docs/cpp/search/variables_1.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['first_5felement_5f_205',['first_element_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a3fca81e893b35e0648977b00f21b7e7e',1,'claragenomics::cudamapper::ArrayBlock']]]
+  ['block_5fsize_5f_251',['block_size_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a33ff27afee2ddb07e6fbdda0ff1de229',1,'claragenomics::cudamapper::ArrayBlock']]]
 ];
diff --git a/docs/cpp/search/variables_2.js b/docs/cpp/search/variables_2.js
index 4c21a225b..245512e1e 100644
--- a/docs/cpp/search/variables_2.js
+++ b/docs/cpp/search/variables_2.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['length_206',['length',['../structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712',1,'claragenomics::cudapoa::Entry']]]
+  ['cigar_5f_252',['cigar_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54',1,'claragenomics::cudamapper::Overlap']]]
 ];
diff --git a/docs/cpp/search/variables_3.js b/docs/cpp/search/variables_3.js
index 208b2c898..4b8a95580 100644
--- a/docs/cpp/search/variables_3.js
+++ b/docs/cpp/search/variables_3.js
@@ -1,5 +1,5 @@
 var searchData=
 [
-  ['name_207',['name',['../structclaragenomics_1_1io_1_1FastaSequence.html#aea0664ca6e856203c4b954b519183bec',1,'claragenomics::io::FastaSequence']]],
-  ['num_5fresidues_5f_208',['num_residues_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d',1,'claragenomics::cudamapper::Overlap']]]
+  ['edges_5f_253',['edges_',['../classclaragenomics_1_1Graph.html#a4089c636086324cae1f2a2bde56c8b33',1,'claragenomics::Graph']]],
+  ['empty_5f_254',['empty_',['../classclaragenomics_1_1Graph.html#ada271fc17a3a6e86f5dcc78c4caa729c',1,'claragenomics::Graph']]]
 ];
diff --git a/docs/cpp/search/variables_4.js b/docs/cpp/search/variables_4.js
index a39744b96..1f68c6d7e 100644
--- a/docs/cpp/search/variables_4.js
+++ b/docs/cpp/search/variables_4.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['overlap_5fcomplete_209',['overlap_complete',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360',1,'claragenomics::cudamapper::Overlap']]]
+  ['first_5felement_5f_255',['first_element_',['../structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a3fca81e893b35e0648977b00f21b7e7e',1,'claragenomics::cudamapper::ArrayBlock']]]
 ];
diff --git a/docs/cpp/search/variables_5.js b/docs/cpp/search/variables_5.js
index 684868315..908ed1882 100644
--- a/docs/cpp/search/variables_5.js
+++ b/docs/cpp/search/variables_5.js
@@ -1,9 +1,4 @@
 var searchData=
 [
-  ['query_5fend_5fposition_5fin_5fread_5f_210',['query_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224',1,'claragenomics::cudamapper::Overlap']]],
-  ['query_5flength_5f_211',['query_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b',1,'claragenomics::cudamapper::Overlap']]],
-  ['query_5fposition_5fin_5fread_5f_212',['query_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad5e41665c86c77044b2ba2c939fdbb86',1,'claragenomics::cudamapper::Anchor']]],
-  ['query_5fread_5fid_5f_213',['query_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#a3c79e476eae0672a9a941e0980b6dcc3',1,'claragenomics::cudamapper::Anchor::query_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc',1,'claragenomics::cudamapper::Overlap::query_read_id_()']]],
-  ['query_5fread_5fname_5f_214',['query_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df',1,'claragenomics::cudamapper::Overlap']]],
-  ['query_5fstart_5fposition_5fin_5fread_5f_215',['query_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e',1,'claragenomics::cudamapper::Overlap']]]
+  ['length_256',['length',['../structclaragenomics_1_1cudapoa_1_1Entry.html#a2211688d275c808bf9b4f85336db6712',1,'claragenomics::cudapoa::Entry']]]
 ];
diff --git a/docs/cpp/search/variables_6.js b/docs/cpp/search/variables_6.js
index f5f8e66c2..01e7b2282 100644
--- a/docs/cpp/search/variables_6.js
+++ b/docs/cpp/search/variables_6.js
@@ -1,5 +1,6 @@
 var searchData=
 [
-  ['relative_5fstrand_216',['relative_strand',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7',1,'claragenomics::cudamapper::Overlap']]],
-  ['representation_5f_217',['representation_',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a839754dc6ed7d150ae06abf377e39c62',1,'claragenomics::cudamapper::Index::RepresentationToSketchElements']]]
+  ['name_257',['name',['../structclaragenomics_1_1io_1_1FastaSequence.html#aea0664ca6e856203c4b954b519183bec',1,'claragenomics::io::FastaSequence']]],
+  ['node_5flabels_5f_258',['node_labels_',['../classclaragenomics_1_1Graph.html#a5da2769d7e5bebd1d74c4899e3aad2c5',1,'claragenomics::Graph']]],
+  ['num_5fresidues_5f_259',['num_residues_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d',1,'claragenomics::cudamapper::Overlap']]]
 ];
diff --git a/docs/cpp/search/variables_7.js b/docs/cpp/search/variables_7.js
index 0e85bdfec..0a6a116b0 100644
--- a/docs/cpp/search/variables_7.js
+++ b/docs/cpp/search/variables_7.js
@@ -1,6 +1,4 @@
 var searchData=
 [
-  ['seq_218',['seq',['../structclaragenomics_1_1io_1_1FastaSequence.html#a9ac5e894fc08745c47b326a7038aa488',1,'claragenomics::io::FastaSequence::seq()'],['../structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4',1,'claragenomics::cudapoa::Entry::seq()']]],
-  ['sketch_5felements_5ffor_5frepresentation_5fand_5fall_5fread_5fids_5f_219',['sketch_elements_for_representation_and_all_read_ids_',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a604d5227c7fe6412e982fb31a1fee549',1,'claragenomics::cudamapper::Index::RepresentationToSketchElements']]],
-  ['sketch_5felements_5ffor_5frepresentation_5fand_5fread_5fid_5f_220',['sketch_elements_for_representation_and_read_id_',['../structclaragenomics_1_1cudamapper_1_1Index_1_1RepresentationToSketchElements.html#a84ff4998d9fec875845a20272d209b30',1,'claragenomics::cudamapper::Index::RepresentationToSketchElements']]]
+  ['overlap_5fcomplete_260',['overlap_complete',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360',1,'claragenomics::cudamapper::Overlap']]]
 ];
diff --git a/docs/cpp/search/variables_8.js b/docs/cpp/search/variables_8.js
index c4ec4c120..6ba1db5c2 100644
--- a/docs/cpp/search/variables_8.js
+++ b/docs/cpp/search/variables_8.js
@@ -1,9 +1,9 @@
 var searchData=
 [
-  ['target_5fend_5fposition_5fin_5fread_5f_221',['target_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797',1,'claragenomics::cudamapper::Overlap']]],
-  ['target_5flength_5f_222',['target_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11',1,'claragenomics::cudamapper::Overlap']]],
-  ['target_5fposition_5fin_5fread_5f_223',['target_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad58b2a619bd71c37c337ed44e45b4d23',1,'claragenomics::cudamapper::Anchor']]],
-  ['target_5fread_5fid_5f_224',['target_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ae9ae1af9e2feaea69ebde6b165966cec',1,'claragenomics::cudamapper::Anchor::target_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032',1,'claragenomics::cudamapper::Overlap::target_read_id_()']]],
-  ['target_5fread_5fname_5f_225',['target_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c',1,'claragenomics::cudamapper::Overlap']]],
-  ['target_5fstart_5fposition_5fin_5fread_5f_226',['target_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c',1,'claragenomics::cudamapper::Overlap']]]
+  ['query_5fend_5fposition_5fin_5fread_5f_261',['query_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224',1,'claragenomics::cudamapper::Overlap']]],
+  ['query_5flength_5f_262',['query_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b',1,'claragenomics::cudamapper::Overlap']]],
+  ['query_5fposition_5fin_5fread_5f_263',['query_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad5e41665c86c77044b2ba2c939fdbb86',1,'claragenomics::cudamapper::Anchor']]],
+  ['query_5fread_5fid_5f_264',['query_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#a3c79e476eae0672a9a941e0980b6dcc3',1,'claragenomics::cudamapper::Anchor::query_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc',1,'claragenomics::cudamapper::Overlap::query_read_id_()']]],
+  ['query_5fread_5fname_5f_265',['query_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057',1,'claragenomics::cudamapper::Overlap']]],
+  ['query_5fstart_5fposition_5fin_5fread_5f_266',['query_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e',1,'claragenomics::cudamapper::Overlap']]]
 ];
diff --git a/docs/cpp/search/variables_9.js b/docs/cpp/search/variables_9.js
index 0e87933b4..91a7140e1 100644
--- a/docs/cpp/search/variables_9.js
+++ b/docs/cpp/search/variables_9.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['weights_227',['weights',['../structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277',1,'claragenomics::cudapoa::Entry']]]
+  ['relative_5fstrand_267',['relative_strand',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7',1,'claragenomics::cudamapper::Overlap']]]
 ];
diff --git a/docs/cpp/search/variables_a.html b/docs/cpp/search/variables_a.html
new file mode 100644
index 000000000..fd8f0d751
--- /dev/null
+++ b/docs/cpp/search/variables_a.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/variables_a.js b/docs/cpp/search/variables_a.js
new file mode 100644
index 000000000..b1f7dc33f
--- /dev/null
+++ b/docs/cpp/search/variables_a.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['seq_268',['seq',['../structclaragenomics_1_1io_1_1FastaSequence.html#a9ac5e894fc08745c47b326a7038aa488',1,'claragenomics::io::FastaSequence::seq()'],['../structclaragenomics_1_1cudapoa_1_1Entry.html#a4ada5ced9af7930c95d7a49fb5ecdac4',1,'claragenomics::cudapoa::Entry::seq()']]]
+];
diff --git a/docs/cpp/search/variables_b.html b/docs/cpp/search/variables_b.html
new file mode 100644
index 000000000..577a4b71c
--- /dev/null
+++ b/docs/cpp/search/variables_b.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/variables_b.js b/docs/cpp/search/variables_b.js
new file mode 100644
index 000000000..4b25c7a36
--- /dev/null
+++ b/docs/cpp/search/variables_b.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+  ['target_5fend_5fposition_5fin_5fread_5f_269',['target_end_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797',1,'claragenomics::cudamapper::Overlap']]],
+  ['target_5flength_5f_270',['target_length_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11',1,'claragenomics::cudamapper::Overlap']]],
+  ['target_5fposition_5fin_5fread_5f_271',['target_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ad58b2a619bd71c37c337ed44e45b4d23',1,'claragenomics::cudamapper::Anchor']]],
+  ['target_5fread_5fid_5f_272',['target_read_id_',['../structclaragenomics_1_1cudamapper_1_1Anchor.html#ae9ae1af9e2feaea69ebde6b165966cec',1,'claragenomics::cudamapper::Anchor::target_read_id_()'],['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032',1,'claragenomics::cudamapper::Overlap::target_read_id_()']]],
+  ['target_5fread_5fname_5f_273',['target_read_name_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca',1,'claragenomics::cudamapper::Overlap']]],
+  ['target_5fstart_5fposition_5fin_5fread_5f_274',['target_start_position_in_read_',['../structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c',1,'claragenomics::cudamapper::Overlap']]]
+];
diff --git a/docs/cpp/search/variables_c.html b/docs/cpp/search/variables_c.html
new file mode 100644
index 000000000..0b92edbbb
--- /dev/null
+++ b/docs/cpp/search/variables_c.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+/* @license-end */
+--></script>
+</div>
+</body>
+</html>
diff --git a/docs/cpp/search/variables_c.js b/docs/cpp/search/variables_c.js
new file mode 100644
index 000000000..6e0816fa8
--- /dev/null
+++ b/docs/cpp/search/variables_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['weights_275',['weights',['../structclaragenomics_1_1cudapoa_1_1Entry.html#ab8564c38982af7716c70b06d029fb277',1,'claragenomics::cudapoa::Entry']]]
+];
diff --git a/docs/cpp/sequence_8hpp_source.html b/docs/cpp/sequence_8hpp_source.html
index 8b3557617..476c07604 100644
--- a/docs/cpp/sequence_8hpp_source.html
+++ b/docs/cpp/sequence_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/signed__integer__utils_8hpp_source.html b/docs/cpp/signed__integer__utils_8hpp_source.html
index cfe663d8b..73af9cf9d 100644
--- a/docs/cpp/signed__integer__utils_8hpp_source.html
+++ b/docs/cpp/signed__integer__utils_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/sketch__element_8hpp_source.html b/docs/cpp/sketch__element_8hpp_source.html
index 91f4d1908..f84101239 100644
--- a/docs/cpp/sketch__element_8hpp_source.html
+++ b/docs/cpp/sketch__element_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -84,7 +84,7 @@
 <div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
 <div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
 <div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &quot;claragenomics/cudamapper/types.hpp&quot;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;claragenomics/cudamapper/types.hpp&gt;</span></div>
 <div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
 <div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keyword">namespace </span>claragenomics</div>
 <div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;{</div>
diff --git a/docs/cpp/stringutils_8hpp_source.html b/docs/cpp/stringutils_8hpp_source.html
index 9f022eb4d..886df7407 100644
--- a/docs/cpp/stringutils_8hpp_source.html
+++ b/docs/cpp/stringutils_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1PairHash-members.html b/docs/cpp/structclaragenomics_1_1PairHash-members.html
new file mode 100644
index 000000000..f46f26af9
--- /dev/null
+++ b/docs/cpp/structclaragenomics_1_1PairHash-members.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="structclaragenomics_1_1PairHash.html">PairHash</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">claragenomics::PairHash Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structclaragenomics_1_1PairHash.html">claragenomics::PairHash</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61">operator()</a>(const std::pair&lt; T1, T2 &gt; &amp;pair) const</td><td class="entry"><a class="el" href="structclaragenomics_1_1PairHash.html">claragenomics::PairHash</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/structclaragenomics_1_1PairHash.html b/docs/cpp/structclaragenomics_1_1PairHash.html
new file mode 100644
index 000000000..f79f05cea
--- /dev/null
+++ b/docs/cpp/structclaragenomics_1_1PairHash.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.16"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ClaraGenomicsAnalysis: claragenomics::PairHash Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">ClaraGenomicsAnalysis
+   &#160;<span id="projectnumber">0.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.16 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><b>claragenomics</b></li><li class="navelem"><a class="el" href="structclaragenomics_1_1PairHash.html">PairHash</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="structclaragenomics_1_1PairHash-members.html">List of all members</a>  </div>
+  <div class="headertitle">
+<div class="title">claragenomics::PairHash Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="graph_8hpp_source.html">graph.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a46da7ce33ff4cf8a586a0c54b6be1e61"><td class="memTemplParams" colspan="2"><a id="a46da7ce33ff4cf8a586a0c54b6be1e61"></a>
+template&lt;class T1 , class T2 &gt; </td></tr>
+<tr class="memitem:a46da7ce33ff4cf8a586a0c54b6be1e61"><td class="memTemplItemLeft" align="right" valign="top">size_t&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1PairHash.html#a46da7ce33ff4cf8a586a0c54b6be1e61">operator()</a> (const std::pair&lt; T1, T2 &gt; &amp;pair) const</td></tr>
+<tr class="memdesc:a46da7ce33ff4cf8a586a0c54b6be1e61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Operator overload to define hash function. <br /></td></tr>
+<tr class="separator:a46da7ce33ff4cf8a586a0c54b6be1e61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Hash function for a pair </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>common/utils/include/claragenomics/utils/<a class="el" href="graph_8hpp_source.html">graph.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.16
+</small></address>
+</body>
+</html>
diff --git a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor-members.html b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor-members.html
index 7ed4b62d6..8b86bb709 100644
--- a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor-members.html
+++ b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor.html b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor.html
index 908ab2fe8..7191f1de4 100644
--- a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor.html
+++ b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Anchor.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock-members.html b/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock-members.html
index 175b259a5..8dcf89da5 100644
--- a/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock-members.html
+++ b/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock.html b/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock.html
index 4027b4739..b22a5913d 100644
--- a/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock.html
+++ b/docs/cpp/structclaragenomics_1_1cudamapper_1_1ArrayBlock.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap-members.html b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap-members.html
index 69743aae3..09502440e 100644
--- a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap-members.html
+++ b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -73,19 +73,20 @@
 
 <p>This is the complete list of members for <a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d">num_residues_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360">overlap_complete</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224">query_end_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b">query_length_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc">query_read_id_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df">query_read_name_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e">query_start_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">relative_strand</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797">target_end_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11">target_length_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032">target_read_id_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c">target_read_name_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c">target_start_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54">cigar_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d">num_residues_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360">overlap_complete</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224">query_end_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b">query_length_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc">query_read_id_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057">query_read_name_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#aef98d06e839295136d197fee76feb95e">query_start_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">relative_strand</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797">target_end_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11">target_length_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a6d01fc190b1cba1c6b41cd89d672b032">target_read_id_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca">target_read_name_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c">target_start_position_in_read_</a></td><td class="entry"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap.html b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap.html
index 07b258df1..8791fc816 100644
--- a/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap.html
+++ b/docs/cpp/structclaragenomics_1_1cudamapper_1_1Overlap.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -102,14 +102,14 @@
 position_in_read_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797">target_end_position_in_read_</a></td></tr>
 <tr class="memdesc:ad4721b3555a83acb588c54dc369f7797"><td class="mdescLeft">&#160;</td><td class="mdescRight">end position in the target <br /></td></tr>
 <tr class="separator:ad4721b3555a83acb588c54dc369f7797"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac2baa8c82cbe1ff7475d7a8700a691df"><td class="memItemLeft" align="right" valign="top"><a id="ac2baa8c82cbe1ff7475d7a8700a691df"></a>
-std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df">query_read_name_</a></td></tr>
-<tr class="memdesc:ac2baa8c82cbe1ff7475d7a8700a691df"><td class="mdescLeft">&#160;</td><td class="mdescRight">query read name (e.g from FASTA) <br /></td></tr>
-<tr class="separator:ac2baa8c82cbe1ff7475d7a8700a691df"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a8e75cd08ecddc434463ac2e9b748dd6c"><td class="memItemLeft" align="right" valign="top"><a id="a8e75cd08ecddc434463ac2e9b748dd6c"></a>
-std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c">target_read_name_</a></td></tr>
-<tr class="memdesc:a8e75cd08ecddc434463ac2e9b748dd6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">target read name (e.g from FASTA) <br /></td></tr>
-<tr class="separator:a8e75cd08ecddc434463ac2e9b748dd6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d37018aff3304bbe75b2d612b55c057"><td class="memItemLeft" align="right" valign="top"><a id="a7d37018aff3304bbe75b2d612b55c057"></a>
+char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057">query_read_name_</a> = 0</td></tr>
+<tr class="memdesc:a7d37018aff3304bbe75b2d612b55c057"><td class="mdescLeft">&#160;</td><td class="mdescRight">query read name (e.g from FASTA) <br /></td></tr>
+<tr class="separator:a7d37018aff3304bbe75b2d612b55c057"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afcb7e39abf2761899ff1abb3c95b82ca"><td class="memItemLeft" align="right" valign="top"><a id="afcb7e39abf2761899ff1abb3c95b82ca"></a>
+char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca">target_read_name_</a> = 0</td></tr>
+<tr class="memdesc:afcb7e39abf2761899ff1abb3c95b82ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">target read name (e.g from FASTA) <br /></td></tr>
+<tr class="separator:afcb7e39abf2761899ff1abb3c95b82ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a1c0b9bac9b2e15f70c60fcdae9728fd7"><td class="memItemLeft" align="right" valign="top"><a id="a1c0b9bac9b2e15f70c60fcdae9728fd7"></a>
 RelativeStrand&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">relative_strand</a></td></tr>
 <tr class="memdesc:a1c0b9bac9b2e15f70c60fcdae9728fd7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Relative strand: Forward ("+") or Reverse("-") <br /></td></tr>
@@ -130,6 +130,10 @@
 bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360">overlap_complete</a> = false</td></tr>
 <tr class="memdesc:a31d4f58b24a2e3fc57b5bca803827360"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether the overlap is considered valid by the generating overlapper. <br /></td></tr>
 <tr class="separator:a31d4f58b24a2e3fc57b5bca803827360"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9b3ed3f91b4979afb6198cea2d77e54"><td class="memItemLeft" align="right" valign="top"><a id="ad9b3ed3f91b4979afb6198cea2d77e54"></a>
+char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54">cigar_</a> = 0</td></tr>
+<tr class="memdesc:ad9b3ed3f91b4979afb6198cea2d77e54"><td class="mdescLeft">&#160;</td><td class="mdescRight">CIGAR string for alignment of mapped section. <br /></td></tr>
+<tr class="separator:ad9b3ed3f91b4979afb6198cea2d77e54"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p><a class="el" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a> - represents one overlap between two substrings</p>
diff --git a/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry-members.html b/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry-members.html
index 9a98fd8f8..77548f782 100644
--- a/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry-members.html
+++ b/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry.html b/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry.html
index 36b997c50..6ce862c1b 100644
--- a/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry.html
+++ b/docs/cpp/structclaragenomics_1_1cudapoa_1_1Entry.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence-members.html b/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence-members.html
index 84f99580f..ba9233c73 100644
--- a/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence-members.html
+++ b/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence-members.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence.html b/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence.html
index 667a914d9..b414099d2 100644
--- a/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence.html
+++ b/docs/cpp/structclaragenomics_1_1io_1_1FastaSequence.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
diff --git a/docs/cpp/types_8hpp_source.html b/docs/cpp/types_8hpp_source.html
index b9e48e48d..7f865cf11 100644
--- a/docs/cpp/types_8hpp_source.html
+++ b/docs/cpp/types_8hpp_source.html
@@ -22,7 +22,7 @@
  <tr style="height: 56px;">
   <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">ClaraGenomicsAnalysis
-   &#160;<span id="projectnumber">0.3.0</span>
+   &#160;<span id="projectnumber">0.4.0</span>
    </div>
   </td>
  </tr>
@@ -132,20 +132,22 @@
 <div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c">   86</a></span>&#160;    position_in_read_t <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a03cb25f83ca6344ad1b4108c1d910f0c">target_start_position_in_read_</a>;</div>
 <div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224">   88</a></span>&#160;    position_in_read_t <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a20866810acf35523e87efcb66181a224">query_end_position_in_read_</a>;</div>
 <div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797">   90</a></span>&#160;    position_in_read_t <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad4721b3555a83acb588c54dc369f7797">target_end_position_in_read_</a>;</div>
-<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df">   92</a></span>&#160;    std::string <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df">query_read_name_</a>;</div>
-<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c">   94</a></span>&#160;    std::string <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c">target_read_name_</a>;</div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057">   92</a></span>&#160;    <span class="keywordtype">char</span>* <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057">query_read_name_</a> = 0;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca">   94</a></span>&#160;    <span class="keywordtype">char</span>* <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca">target_read_name_</a> = 0;</div>
 <div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">   96</a></span>&#160;    RelativeStrand <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">relative_strand</a>;</div>
 <div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d">   98</a></span>&#160;    std::uint32_t <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d">num_residues_</a> = 0;</div>
 <div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b">  100</a></span>&#160;    std::uint32_t <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b">query_length_</a> = 0;</div>
 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11">  102</a></span>&#160;    std::uint32_t <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a2da1b559c8e45c6bc48eda8b60e40c11">target_length_</a> = 0;</div>
 <div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360">  104</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a31d4f58b24a2e3fc57b5bca803827360">overlap_complete</a> = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;} <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a>;</div>
-<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;} <span class="comment">// namespace cudamapper</span></div>
-<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160; </div>
-<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54">  106</a></span>&#160;    <span class="keywordtype">char</span>* <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54">cigar_</a> = 0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;} <a class="code" href="structclaragenomics_1_1cudamapper_1_1Overlap.html">Overlap</a>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;} <span class="comment">// namespace cudamapper</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;} <span class="comment">// namespace claragenomics</span></div>
 </div><!-- fragment --></div><!-- contents -->
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_a7677cc8d0aa20fc788b57f85905e051b"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7677cc8d0aa20fc788b57f85905e051b">claragenomics::cudamapper::Overlap::query_length_</a></div><div class="ttdeci">std::uint32_t query_length_</div><div class="ttdoc">Length of query sequence.</div><div class="ttdef"><b>Definition:</b> types.hpp:100</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_a8e75cd08ecddc434463ac2e9b748dd6c"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a8e75cd08ecddc434463ac2e9b748dd6c">claragenomics::cudamapper::Overlap::target_read_name_</a></div><div class="ttdeci">std::string target_read_name_</div><div class="ttdoc">target read name (e.g from FASTA)</div><div class="ttdef"><b>Definition:</b> types.hpp:94</div></div>
+<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_ad9b3ed3f91b4979afb6198cea2d77e54"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ad9b3ed3f91b4979afb6198cea2d77e54">claragenomics::cudamapper::Overlap::cigar_</a></div><div class="ttdeci">char * cigar_</div><div class="ttdoc">CIGAR string for alignment of mapped section.</div><div class="ttdef"><b>Definition:</b> types.hpp:106</div></div>
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_ab3594748a49ae4472ca28a03b05ddb7d"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ab3594748a49ae4472ca28a03b05ddb7d">claragenomics::cudamapper::Overlap::num_residues_</a></div><div class="ttdeci">std::uint32_t num_residues_</div><div class="ttdoc">Number of residues (e.g anchors) between the two reads.</div><div class="ttdef"><b>Definition:</b> types.hpp:98</div></div>
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_a3d98a09e4ccd8bda66cb09a72adaf1fc"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a3d98a09e4ccd8bda66cb09a72adaf1fc">claragenomics::cudamapper::Overlap::query_read_id_</a></div><div class="ttdeci">read_id_t query_read_id_</div><div class="ttdoc">internal read ID for query</div><div class="ttdef"><b>Definition:</b> types.hpp:80</div></div>
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Anchor_html_a3c79e476eae0672a9a941e0980b6dcc3"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Anchor.html#a3c79e476eae0672a9a941e0980b6dcc3">claragenomics::cudamapper::Anchor::query_read_id_</a></div><div class="ttdeci">read_id_t query_read_id_</div><div class="ttdoc">read ID of query</div><div class="ttdef"><b>Definition:</b> types.hpp:64</div></div>
@@ -164,8 +166,9 @@
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Anchor_html_ad58b2a619bd71c37c337ed44e45b4d23"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Anchor.html#ad58b2a619bd71c37c337ed44e45b4d23">claragenomics::cudamapper::Anchor::target_position_in_read_</a></div><div class="ttdeci">position_in_read_t target_position_in_read_</div><div class="ttdoc">position of second sketch element in target_read_id_</div><div class="ttdef"><b>Definition:</b> types.hpp:70</div></div>
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1ArrayBlock_html_a33ff27afee2ddb07e6fbdda0ff1de229"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1ArrayBlock.html#a33ff27afee2ddb07e6fbdda0ff1de229">claragenomics::cudamapper::ArrayBlock::block_size_</a></div><div class="ttdeci">std::uint32_t block_size_</div><div class="ttdoc">number of elements of the block</div><div class="ttdef"><b>Definition:</b> types.hpp:30</div></div>
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_a1c0b9bac9b2e15f70c60fcdae9728fd7"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a1c0b9bac9b2e15f70c60fcdae9728fd7">claragenomics::cudamapper::Overlap::relative_strand</a></div><div class="ttdeci">RelativeStrand relative_strand</div><div class="ttdoc">Relative strand: Forward (&quot;+&quot;) or Reverse(&quot;-&quot;)</div><div class="ttdef"><b>Definition:</b> types.hpp:96</div></div>
-<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_ac2baa8c82cbe1ff7475d7a8700a691df"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#ac2baa8c82cbe1ff7475d7a8700a691df">claragenomics::cudamapper::Overlap::query_read_name_</a></div><div class="ttdeci">std::string query_read_name_</div><div class="ttdoc">query read name (e.g from FASTA)</div><div class="ttdef"><b>Definition:</b> types.hpp:92</div></div>
+<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_a7d37018aff3304bbe75b2d612b55c057"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#a7d37018aff3304bbe75b2d612b55c057">claragenomics::cudamapper::Overlap::query_read_name_</a></div><div class="ttdeci">char * query_read_name_</div><div class="ttdoc">query read name (e.g from FASTA)</div><div class="ttdef"><b>Definition:</b> types.hpp:92</div></div>
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html">claragenomics::cudamapper::Overlap</a></div><div class="ttdef"><b>Definition:</b> types.hpp:77</div></div>
+<div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Overlap_html_afcb7e39abf2761899ff1abb3c95b82ca"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Overlap.html#afcb7e39abf2761899ff1abb3c95b82ca">claragenomics::cudamapper::Overlap::target_read_name_</a></div><div class="ttdeci">char * target_read_name_</div><div class="ttdoc">target read name (e.g from FASTA)</div><div class="ttdef"><b>Definition:</b> types.hpp:94</div></div>
 <div class="ttc" id="astructclaragenomics_1_1cudamapper_1_1Anchor_html_ae9ae1af9e2feaea69ebde6b165966cec"><div class="ttname"><a href="structclaragenomics_1_1cudamapper_1_1Anchor.html#ae9ae1af9e2feaea69ebde6b165966cec">claragenomics::cudamapper::Anchor::target_read_id_</a></div><div class="ttdeci">read_id_t target_read_id_</div><div class="ttdoc">read ID of target</div><div class="ttdef"><b>Definition:</b> types.hpp:66</div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>