├── .github
└── workflows
│ └── ci.yaml
├── .gitignore
├── .travis.yml
├── CITATION.cff
├── CMakeLists.txt
├── LICENSE.txt
├── Makefile
├── README.md
├── apps
├── CMakeLists.txt
└── README.md
├── doc
├── .gitignore
├── Makefile
├── README.md
├── code
│ ├── demos
│ │ ├── compare_jplace_files.cpp
│ │ ├── compare_jplace_files
│ │ │ ├── jplace_a.jplace
│ │ │ └── jplace_b.jplace
│ │ ├── extract_clade_placements.cpp
│ │ ├── extract_clade_placements
│ │ │ ├── clades.tsv
│ │ │ ├── example.jplace
│ │ │ └── output
│ │ │ │ └── .gitignore
│ │ ├── labelled_tree.cpp
│ │ ├── placement_histograms.cpp
│ │ └── visualize_placements.cpp
│ └── tutorials
│ │ ├── color.cpp
│ │ ├── placement_analyses.cpp
│ │ ├── placement_basics.cpp
│ │ ├── sequence.cpp
│ │ ├── taxonomy.cpp
│ │ ├── tree.newick
│ │ ├── tree_advanced.cpp
│ │ ├── tree_basics.cpp
│ │ └── tree_visualization.cpp
├── doxygen
│ ├── Doxyfile
│ ├── footer.html
│ ├── header.html
│ ├── layout.xml
│ └── style.css
├── logo
│ ├── colors.svg
│ ├── favicon.ico
│ ├── icon.svg
│ ├── icon_bw.svg
│ ├── logo.svg
│ ├── logo_bw.svg
│ ├── logo_doxygen.png
│ ├── logo_large.png
│ ├── logo_readme.png
│ └── tangerine.zip
├── manual
│ ├── demos.md
│ ├── demos
│ │ ├── compare_jplace_files.md
│ │ ├── extract_clade_placements.md
│ │ ├── labelled_tree.md
│ │ ├── placement_histograms.md
│ │ └── visualize_placements.md
│ ├── main.md
│ ├── setup.md
│ ├── supplement.md
│ ├── supplement
│ │ ├── acknowledgements.md
│ │ ├── acknowledgements.sh
│ │ ├── acknowledgements
│ │ │ ├── a_00_header.inc
│ │ │ ├── b_00_dependencies.inc
│ │ │ ├── b_01_gtest.inc
│ │ │ ├── b_02_pybind.inc
│ │ │ ├── b_03_htslib.inc
│ │ │ ├── c_00_code_reuse.inc
│ │ │ ├── c_01_json_document.inc
│ │ │ ├── c_02_input_stream.inc
│ │ │ ├── c_03_gzip_stream.inc
│ │ │ ├── c_04_optional_bare.inc
│ │ │ ├── c_05_interval_tree.inc
│ │ │ ├── c_06_threadsafe_queue.inc
│ │ │ ├── c_07_concurrent_queue.inc
│ │ │ ├── d_01_srmq.inc
│ │ │ ├── d_02_mds.inc
│ │ │ ├── d_03_glm.inc
│ │ │ ├── d_04_gsl.inc
│ │ │ ├── d_05_stocc.inc
│ │ │ ├── d_06_min_enc_can_kmer.inc
│ │ │ ├── e_01_md5.inc
│ │ │ ├── e_02_sha1.inc
│ │ │ ├── e_03_sha256.inc
│ │ │ ├── f_01_matplotlib_colors.inc
│ │ │ ├── f_02_xkcd_colors.inc
│ │ │ ├── f_03_colorbrewer_colors.inc
│ │ │ └── f_04_nextstrain_colors.inc
│ │ ├── build_process.md
│ │ └── license.md
│ ├── tutorials.md
│ └── tutorials
│ │ ├── color.md
│ │ ├── placement_analyses.md
│ │ ├── placement_basics.md
│ │ ├── sequence.md
│ │ ├── taxonomy.md
│ │ ├── tree_advanced.md
│ │ ├── tree_basics.md
│ │ └── tree_visualization.md
├── png
│ ├── demos
│ │ ├── hist_edpl.png
│ │ └── hist_lwr.png
│ ├── placement
│ │ ├── edpl.png
│ │ ├── epa_input.png
│ │ ├── epa_placement.png
│ │ ├── epca_scatter.png
│ │ ├── epca_trees.png
│ │ ├── labelled_tree_fully_resolved.png
│ │ ├── labelled_tree_multifurcating.png
│ │ ├── squash_clustering.png
│ │ └── visualize_placements.png
│ ├── tree
│ │ ├── add_new_leaf_node.png
│ │ ├── add_new_node_edge.png
│ │ ├── add_new_node_node.png
│ │ ├── branch_length_tree.png
│ │ ├── monophyletic_subtrees.png
│ │ ├── nodes_and_edges.png
│ │ ├── red_blue_tree.png
│ │ ├── structure.png
│ │ ├── subtree.png
│ │ ├── traversal.png
│ │ ├── traversal_levelorder.png
│ │ └── tree_rooting.png
│ └── utils
│ │ └── color_lists.png
└── svg
│ ├── placement
│ ├── edpl.svg
│ ├── epa_input.svg
│ ├── epa_placement.svg
│ ├── epca_scatter.svg
│ ├── epca_trees.svg
│ ├── labelled_tree_fully_resolved.svg
│ ├── labelled_tree_multifurcating.svg
│ ├── squash_clustering.svg
│ └── visualize_placements.svg
│ ├── tree
│ ├── add_new_leaf_node.svg
│ ├── add_new_node_edge.svg
│ ├── add_new_node_node.svg
│ ├── branch_length_tree.svg
│ ├── monophyletic_subtrees.svg
│ ├── nodes_and_edges.svg
│ ├── red_blue_tree.svg
│ ├── structure.svg
│ ├── subtree.svg
│ ├── traversal.svg
│ ├── traversal_levelorder.svg
│ └── tree_rooting.svg
│ └── utils
│ ├── color_lists.cpp
│ └── color_lists.svg
├── lib
└── genesis
│ ├── CMakeLists.txt
│ ├── genesis.hpp
│ ├── placement.hpp
│ ├── placement
│ ├── formats
│ │ ├── edge_color.cpp
│ │ ├── edge_color.hpp
│ │ ├── jplace_reader.cpp
│ │ ├── jplace_reader.hpp
│ │ ├── jplace_writer.cpp
│ │ ├── jplace_writer.hpp
│ │ ├── newick_reader.hpp
│ │ ├── newick_writer.hpp
│ │ ├── serializer.cpp
│ │ └── serializer.hpp
│ ├── function
│ │ ├── cog.cpp
│ │ ├── cog.hpp
│ │ ├── distances.cpp
│ │ ├── distances.hpp
│ │ ├── emd.cpp
│ │ ├── emd.hpp
│ │ ├── epca.cpp
│ │ ├── epca.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── helper.cpp
│ │ ├── helper.hpp
│ │ ├── manipulation.cpp
│ │ ├── manipulation.hpp
│ │ ├── masses.cpp
│ │ ├── masses.hpp
│ │ ├── measures.cpp
│ │ ├── measures.hpp
│ │ ├── nhd.cpp
│ │ ├── nhd.hpp
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ ├── sample_set.cpp
│ │ ├── sample_set.hpp
│ │ ├── tree.cpp
│ │ └── tree.hpp
│ ├── placement_tree.hpp
│ ├── pquery.cpp
│ ├── pquery.hpp
│ ├── pquery
│ │ ├── name.hpp
│ │ ├── placement.hpp
│ │ └── plain.hpp
│ ├── sample.cpp
│ ├── sample.hpp
│ ├── sample_set.hpp
│ └── simulator
│ │ ├── distributions.cpp
│ │ ├── distributions.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── simulator.cpp
│ │ └── simulator.hpp
│ ├── population.hpp
│ ├── population
│ ├── filter
│ │ ├── filter_stats.hpp
│ │ ├── filter_status.hpp
│ │ ├── sample_counts_filter.cpp
│ │ ├── sample_counts_filter.hpp
│ │ ├── sample_counts_filter_numerical.cpp
│ │ ├── sample_counts_filter_numerical.hpp
│ │ ├── sample_counts_filter_positional.hpp
│ │ ├── variant_filter.cpp
│ │ ├── variant_filter.hpp
│ │ ├── variant_filter_numerical.cpp
│ │ ├── variant_filter_numerical.hpp
│ │ └── variant_filter_positional.hpp
│ ├── format
│ │ ├── bed_reader.cpp
│ │ ├── bed_reader.hpp
│ │ ├── frequency_table_input_stream.cpp
│ │ ├── frequency_table_input_stream.hpp
│ │ ├── genome_region_reader.cpp
│ │ ├── genome_region_reader.hpp
│ │ ├── gff_reader.cpp
│ │ ├── gff_reader.hpp
│ │ ├── hts_file.cpp
│ │ ├── hts_file.hpp
│ │ ├── map_bim_reader.cpp
│ │ ├── map_bim_reader.hpp
│ │ ├── sam_flags.cpp
│ │ ├── sam_flags.hpp
│ │ ├── sam_variant_input_stream.cpp
│ │ ├── sam_variant_input_stream.hpp
│ │ ├── simple_pileup_common.cpp
│ │ ├── simple_pileup_common.hpp
│ │ ├── simple_pileup_input_stream.hpp
│ │ ├── simple_pileup_reader.cpp
│ │ ├── simple_pileup_reader.hpp
│ │ ├── sync_common.cpp
│ │ ├── sync_common.hpp
│ │ ├── sync_input_stream.hpp
│ │ ├── sync_reader.cpp
│ │ ├── sync_reader.hpp
│ │ ├── vcf_common.cpp
│ │ ├── vcf_common.hpp
│ │ ├── vcf_format_iterator.cpp
│ │ ├── vcf_format_iterator.hpp
│ │ ├── vcf_header.cpp
│ │ ├── vcf_header.hpp
│ │ ├── vcf_input_stream.cpp
│ │ ├── vcf_input_stream.hpp
│ │ ├── vcf_record.cpp
│ │ └── vcf_record.hpp
│ ├── function
│ │ ├── diversity_pool_calculator.hpp
│ │ ├── diversity_pool_functions.cpp
│ │ ├── diversity_pool_functions.hpp
│ │ ├── diversity_pool_processor.hpp
│ │ ├── fst_cathedral.cpp
│ │ ├── fst_cathedral.hpp
│ │ ├── fst_pool_calculator.hpp
│ │ ├── fst_pool_functions.hpp
│ │ ├── fst_pool_karlsson.hpp
│ │ ├── fst_pool_kofler.hpp
│ │ ├── fst_pool_processor.hpp
│ │ ├── fst_pool_unbiased.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── genome_locus.hpp
│ │ ├── genome_locus_set.cpp
│ │ ├── genome_locus_set.hpp
│ │ ├── genome_region.cpp
│ │ ├── genome_region.hpp
│ │ ├── subsample.cpp
│ │ ├── subsample.hpp
│ │ ├── variant_input_stream.cpp
│ │ ├── variant_input_stream.hpp
│ │ └── window_average.hpp
│ ├── genome_locus.hpp
│ ├── genome_locus_set.cpp
│ ├── genome_locus_set.hpp
│ ├── genome_region.hpp
│ ├── genome_region_list.hpp
│ ├── plotting
│ │ ├── af_spectrum.cpp
│ │ ├── af_spectrum.hpp
│ │ ├── cathedral_plot.cpp
│ │ ├── cathedral_plot.hpp
│ │ ├── genome_heatmap.cpp
│ │ ├── genome_heatmap.hpp
│ │ ├── heatmap_colorization.cpp
│ │ └── heatmap_colorization.hpp
│ ├── sample_counts.hpp
│ ├── stream
│ │ ├── variant_gapless_input_stream.cpp
│ │ ├── variant_gapless_input_stream.hpp
│ │ ├── variant_input_stream.hpp
│ │ ├── variant_input_stream_adapters.cpp
│ │ ├── variant_input_stream_adapters.hpp
│ │ ├── variant_input_stream_sources.cpp
│ │ ├── variant_input_stream_sources.hpp
│ │ ├── variant_parallel_input_stream.cpp
│ │ └── variant_parallel_input_stream.hpp
│ ├── variant.hpp
│ └── window
│ │ ├── base_window.hpp
│ │ ├── base_window_stream.hpp
│ │ ├── chromosome_window_stream.hpp
│ │ ├── functions.hpp
│ │ ├── genome_window_stream.hpp
│ │ ├── interval_window_stream.hpp
│ │ ├── position_window_stream.hpp
│ │ ├── queue_window_stream.hpp
│ │ ├── region_window_stream.hpp
│ │ ├── sliding_window_generator.hpp
│ │ ├── variant_window_stream.hpp
│ │ ├── vcf_window.hpp
│ │ ├── window.hpp
│ │ ├── window_view.hpp
│ │ └── window_view_stream.hpp
│ ├── sequence.hpp
│ ├── sequence
│ ├── counts.cpp
│ ├── counts.hpp
│ ├── formats
│ │ ├── fai_input_stream.hpp
│ │ ├── fasta_reader.cpp
│ │ ├── fasta_reader.hpp
│ │ ├── fasta_writer.cpp
│ │ ├── fasta_writer.hpp
│ │ ├── fastq_reader.cpp
│ │ ├── fastq_reader.hpp
│ │ ├── fastq_writer.cpp
│ │ ├── fastq_writer.hpp
│ │ ├── fastx_input_stream.hpp
│ │ ├── fastx_input_view_stream.hpp
│ │ ├── fastx_output_stream.hpp
│ │ ├── phylip_reader.cpp
│ │ ├── phylip_reader.hpp
│ │ ├── phylip_writer.cpp
│ │ └── phylip_writer.hpp
│ ├── functions
│ │ ├── codes.cpp
│ │ ├── codes.hpp
│ │ ├── consensus.cpp
│ │ ├── consensus.hpp
│ │ ├── dict.cpp
│ │ ├── dict.hpp
│ │ ├── entropy.cpp
│ │ ├── entropy.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── labels.cpp
│ │ ├── labels.hpp
│ │ ├── quality.cpp
│ │ ├── quality.hpp
│ │ ├── signature_specifications.cpp
│ │ ├── signature_specifications.hpp
│ │ ├── signatures.cpp
│ │ ├── signatures.hpp
│ │ ├── stats.cpp
│ │ └── stats.hpp
│ ├── kmer
│ │ ├── alphabet.cpp
│ │ ├── alphabet.hpp
│ │ ├── bitfield.cpp
│ │ ├── bitfield.hpp
│ │ ├── canonical_encoding.cpp
│ │ ├── canonical_encoding.hpp
│ │ ├── color_gamut.cpp
│ │ ├── color_gamut.hpp
│ │ ├── color_gamut_functions.cpp
│ │ ├── color_gamut_functions.hpp
│ │ ├── extractor.hpp
│ │ ├── function.hpp
│ │ ├── kmer.hpp
│ │ └── microvariant_scanner.hpp
│ ├── printers
│ │ ├── bitmap.cpp
│ │ ├── bitmap.hpp
│ │ ├── simple.cpp
│ │ └── simple.hpp
│ ├── reference_genome.hpp
│ ├── sequence.hpp
│ ├── sequence_dict.hpp
│ └── sequence_set.hpp
│ ├── taxonomy.hpp
│ ├── taxonomy
│ ├── accession_lookup.hpp
│ ├── formats
│ │ ├── accession_lookup_reader.hpp
│ │ ├── json_reader.cpp
│ │ ├── json_reader.hpp
│ │ ├── json_writer.cpp
│ │ ├── json_writer.hpp
│ │ ├── ncbi.cpp
│ │ ├── ncbi.hpp
│ │ ├── taxonomy_reader.cpp
│ │ ├── taxonomy_reader.hpp
│ │ ├── taxonomy_writer.cpp
│ │ ├── taxonomy_writer.hpp
│ │ ├── taxopath_generator.cpp
│ │ ├── taxopath_generator.hpp
│ │ ├── taxopath_parser.cpp
│ │ └── taxopath_parser.hpp
│ ├── functions
│ │ ├── entropy.cpp
│ │ ├── entropy.hpp
│ │ ├── entropy_data.hpp
│ │ ├── kmer.cpp
│ │ ├── kmer.hpp
│ │ ├── kmer_data.hpp
│ │ ├── kmer_grouping.cpp
│ │ ├── kmer_grouping.hpp
│ │ ├── kmer_partitioning.cpp
│ │ ├── kmer_partitioning.hpp
│ │ ├── operators.hpp
│ │ ├── ranks.cpp
│ │ ├── ranks.hpp
│ │ ├── taxonomy.cpp
│ │ ├── taxonomy.hpp
│ │ ├── taxopath.cpp
│ │ ├── taxopath.hpp
│ │ ├── tree.cpp
│ │ └── tree.hpp
│ ├── iterator
│ │ ├── levelorder.hpp
│ │ ├── postorder.hpp
│ │ └── preorder.hpp
│ ├── printers
│ │ ├── nested.cpp
│ │ └── nested.hpp
│ ├── taxon.hpp
│ ├── taxon_data.hpp
│ ├── taxonomy.cpp
│ ├── taxonomy.hpp
│ └── taxopath.hpp
│ ├── tree.hpp
│ ├── tree
│ ├── attribute_tree
│ │ ├── indexed_newick_reader.cpp
│ │ ├── indexed_newick_reader.hpp
│ │ ├── keyed_newick_reader.cpp
│ │ ├── keyed_newick_reader.hpp
│ │ └── tree.hpp
│ ├── bipartition
│ │ ├── bipartition.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── rf.cpp
│ │ └── rf.hpp
│ ├── common_tree
│ │ ├── distances.cpp
│ │ ├── distances.hpp
│ │ ├── edge_color.cpp
│ │ ├── edge_color.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── newick_reader.hpp
│ │ ├── newick_writer.hpp
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ ├── phyloxml_writer.hpp
│ │ └── tree.hpp
│ ├── drawing
│ │ ├── circular_layout.cpp
│ │ ├── circular_layout.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── heat_tree.cpp
│ │ ├── heat_tree.hpp
│ │ ├── layout_base.cpp
│ │ ├── layout_base.hpp
│ │ ├── layout_tree.hpp
│ │ ├── rectangular_layout.cpp
│ │ └── rectangular_layout.hpp
│ ├── formats
│ │ ├── color_writer_plugin.hpp
│ │ ├── newick
│ │ │ ├── broker.cpp
│ │ │ ├── broker.hpp
│ │ │ ├── color_writer_plugin.hpp
│ │ │ ├── element.hpp
│ │ │ ├── input_iterator.hpp
│ │ │ ├── reader.cpp
│ │ │ ├── reader.hpp
│ │ │ ├── simple_reader.hpp
│ │ │ ├── simple_tree.hpp
│ │ │ ├── simple_writer.hpp
│ │ │ ├── writer.cpp
│ │ │ └── writer.hpp
│ │ ├── phyloxml
│ │ │ ├── color_writer_plugin.hpp
│ │ │ ├── writer.cpp
│ │ │ └── writer.hpp
│ │ └── table
│ │ │ ├── reader.cpp
│ │ │ └── reader.hpp
│ ├── function
│ │ ├── accumulate.hpp
│ │ ├── distances.cpp
│ │ ├── distances.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── lca_lookup.cpp
│ │ ├── lca_lookup.hpp
│ │ ├── manipulation.cpp
│ │ ├── manipulation.hpp
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ ├── tree_set.cpp
│ │ └── tree_set.hpp
│ ├── iterator
│ │ ├── eulertour.hpp
│ │ ├── levelorder.hpp
│ │ ├── node_links.hpp
│ │ ├── path.hpp
│ │ ├── path_set.hpp
│ │ ├── postorder.hpp
│ │ └── preorder.hpp
│ ├── mass_tree
│ │ ├── balances.cpp
│ │ ├── balances.hpp
│ │ ├── emd.cpp
│ │ ├── emd.hpp
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── kmeans.cpp
│ │ ├── kmeans.hpp
│ │ ├── phylo_factor.cpp
│ │ ├── phylo_factor.hpp
│ │ ├── phylo_factor_colors.cpp
│ │ ├── phylo_factor_colors.hpp
│ │ ├── phylo_ilr.cpp
│ │ ├── phylo_ilr.hpp
│ │ ├── squash_clustering.cpp
│ │ ├── squash_clustering.hpp
│ │ └── tree.hpp
│ ├── printer
│ │ ├── compact.cpp
│ │ ├── compact.hpp
│ │ ├── detailed.cpp
│ │ ├── detailed.hpp
│ │ ├── table.cpp
│ │ └── table.hpp
│ ├── tree.cpp
│ ├── tree.hpp
│ ├── tree
│ │ ├── edge.hpp
│ │ ├── edge_data.hpp
│ │ ├── link.hpp
│ │ ├── node.hpp
│ │ ├── node_data.hpp
│ │ └── subtree.hpp
│ └── tree_set.hpp
│ ├── utils.hpp
│ └── utils
│ ├── bit
│ ├── bit.hpp
│ ├── bitvector.cpp
│ ├── bitvector.hpp
│ ├── bitvector
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── operators.cpp
│ │ └── operators.hpp
│ ├── twobit_vector.cpp
│ ├── twobit_vector.hpp
│ └── twobit_vector
│ │ ├── functions.cpp
│ │ ├── functions.hpp
│ │ ├── iterator_deletions.hpp
│ │ ├── iterator_insertions.hpp
│ │ └── iterator_substitutions.hpp
│ ├── color
│ ├── color.cpp
│ ├── color.hpp
│ ├── functions.cpp
│ ├── functions.hpp
│ ├── heat_map.cpp
│ ├── heat_map.hpp
│ ├── helpers.cpp
│ ├── helpers.hpp
│ ├── list_diverging.cpp
│ ├── list_diverging.hpp
│ ├── list_misc.cpp
│ ├── list_misc.hpp
│ ├── list_qualitative.cpp
│ ├── list_qualitative.hpp
│ ├── list_sequential.cpp
│ ├── list_sequential.hpp
│ ├── map.cpp
│ ├── map.hpp
│ ├── names.cpp
│ ├── names.hpp
│ ├── norm_boundary.hpp
│ ├── norm_diverging.hpp
│ ├── norm_linear.hpp
│ ├── norm_logarithmic.hpp
│ └── normalization.hpp
│ ├── containers
│ ├── bitpacked_vector.hpp
│ ├── dataframe.hpp
│ ├── dataframe
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ └── reader.hpp
│ ├── deref_iterator.hpp
│ ├── filter_iterator.hpp
│ ├── function_cache.hpp
│ ├── generic_input_stream.hpp
│ ├── hash_tuple.hpp
│ ├── interval_tree.hpp
│ ├── interval_tree
│ │ ├── functions.hpp
│ │ ├── fwd.hpp
│ │ ├── interval.hpp
│ │ ├── iterator.hpp
│ │ └── node.hpp
│ ├── matrix.hpp
│ ├── matrix
│ │ ├── col.hpp
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ ├── reader.hpp
│ │ ├── row.hpp
│ │ ├── simple_reader.hpp
│ │ └── writer.hpp
│ ├── mru_cache.hpp
│ ├── optional.hpp
│ ├── range.hpp
│ └── transform_iterator.hpp
│ ├── core
│ ├── algorithm.hpp
│ ├── exception.hpp
│ ├── fs.cpp
│ ├── fs.hpp
│ ├── info.cpp
│ ├── info.hpp
│ ├── logging.cpp
│ ├── logging.hpp
│ ├── options.hpp
│ ├── resource_logger.hpp
│ ├── std.hpp
│ └── version.hpp
│ ├── formats
│ ├── bmp
│ │ ├── writer.cpp
│ │ └── writer.hpp
│ ├── csv
│ │ ├── input_iterator.hpp
│ │ ├── reader.cpp
│ │ └── reader.hpp
│ ├── json
│ │ ├── document.cpp
│ │ ├── document.hpp
│ │ ├── iterator.hpp
│ │ ├── reader.cpp
│ │ ├── reader.hpp
│ │ ├── writer.cpp
│ │ └── writer.hpp
│ ├── nexus
│ │ ├── block.cpp
│ │ ├── block.hpp
│ │ ├── document.cpp
│ │ ├── document.hpp
│ │ ├── taxa.hpp
│ │ ├── trees.hpp
│ │ ├── writer.cpp
│ │ └── writer.hpp
│ ├── svg
│ │ ├── attributes.cpp
│ │ ├── attributes.hpp
│ │ ├── axis.cpp
│ │ ├── axis.hpp
│ │ ├── color_bar.cpp
│ │ ├── color_bar.hpp
│ │ ├── definitions.hpp
│ │ ├── document.cpp
│ │ ├── document.hpp
│ │ ├── gradient.cpp
│ │ ├── gradient.hpp
│ │ ├── group.cpp
│ │ ├── group.hpp
│ │ ├── helper.cpp
│ │ ├── helper.hpp
│ │ ├── image.cpp
│ │ ├── image.hpp
│ │ ├── matrix.cpp
│ │ ├── matrix.hpp
│ │ ├── object.hpp
│ │ ├── pie_chart.cpp
│ │ ├── pie_chart.hpp
│ │ ├── shapes.cpp
│ │ ├── shapes.hpp
│ │ ├── svg.hpp
│ │ ├── text.cpp
│ │ └── text.hpp
│ └── xml
│ │ ├── document.cpp
│ │ ├── document.hpp
│ │ ├── helper.cpp
│ │ ├── helper.hpp
│ │ ├── writer.cpp
│ │ └── writer.hpp
│ ├── io
│ ├── base64.cpp
│ ├── base64.hpp
│ ├── base_input_source.hpp
│ ├── base_output_target.hpp
│ ├── deserializer.hpp
│ ├── file_input_source.hpp
│ ├── file_output_target.hpp
│ ├── gzip.cpp
│ ├── gzip.hpp
│ ├── gzip_block_ostream.cpp
│ ├── gzip_block_ostream.hpp
│ ├── gzip_input_source.cpp
│ ├── gzip_input_source.hpp
│ ├── gzip_output_target.hpp
│ ├── gzip_stream.cpp
│ ├── gzip_stream.hpp
│ ├── input_buffer.hpp
│ ├── input_reader.hpp
│ ├── input_source.hpp
│ ├── input_stream.cpp
│ ├── input_stream.hpp
│ ├── output_stream.hpp
│ ├── output_target.hpp
│ ├── parser.cpp
│ ├── parser.hpp
│ ├── scanner.hpp
│ ├── serializer.hpp
│ ├── stream_input_source.hpp
│ ├── stream_output_target.hpp
│ ├── strict_fstream.cpp
│ ├── strict_fstream.hpp
│ ├── string_input_source.hpp
│ └── string_output_target.hpp
│ ├── math
│ ├── binomial.cpp
│ ├── binomial.hpp
│ ├── common.hpp
│ ├── compensated_sum.hpp
│ ├── correlation.cpp
│ ├── correlation.hpp
│ ├── distance.cpp
│ ├── distance.hpp
│ ├── distribution.cpp
│ ├── distribution.hpp
│ ├── euclidean_kmeans.cpp
│ ├── euclidean_kmeans.hpp
│ ├── hac.hpp
│ ├── hac
│ │ ├── functions.hpp
│ │ └── linkage.hpp
│ ├── histogram.cpp
│ ├── histogram.hpp
│ ├── histogram
│ │ ├── accumulator.cpp
│ │ ├── accumulator.hpp
│ │ ├── distances.cpp
│ │ ├── distances.hpp
│ │ ├── operations.cpp
│ │ ├── operations.hpp
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ ├── stats.cpp
│ │ └── stats.hpp
│ ├── kmeans.hpp
│ ├── matrix.cpp
│ ├── matrix.hpp
│ ├── mds.cpp
│ ├── mds.hpp
│ ├── moments.hpp
│ ├── pca.cpp
│ ├── pca.hpp
│ ├── random.cpp
│ ├── random.hpp
│ ├── range_minimum_query.cpp
│ ├── range_minimum_query.hpp
│ ├── ranking.hpp
│ ├── regression
│ │ ├── dataframe.cpp
│ │ ├── dataframe.hpp
│ │ ├── factor.hpp
│ │ ├── family.hpp
│ │ ├── glm.cpp
│ │ ├── glm.hpp
│ │ ├── helper.cpp
│ │ ├── helper.hpp
│ │ ├── link.hpp
│ │ └── slr.hpp
│ └── statistics.hpp
│ ├── text
│ ├── char.cpp
│ ├── char.hpp
│ ├── convert.cpp
│ ├── convert.hpp
│ ├── light_string.hpp
│ ├── string.cpp
│ ├── string.hpp
│ ├── style.cpp
│ ├── style.hpp
│ ├── table.cpp
│ └── table.hpp
│ ├── threading
│ ├── blocking_concurrent_queue.hpp
│ ├── concurrent_queue.hpp
│ ├── concurrent_vector_guard.hpp
│ ├── lightweight_semaphore.hpp
│ ├── multi_future.hpp
│ ├── sequential_output_buffer.hpp
│ ├── serial_task_queue.hpp
│ ├── thread_functions.hpp
│ ├── thread_local_cache.hpp
│ ├── thread_pool.hpp
│ └── threadsafe_queue.hpp
│ └── tools
│ ├── char_lookup.hpp
│ ├── date_time.cpp
│ ├── date_time.hpp
│ ├── geodesy
│ ├── functions.cpp
│ ├── functions.hpp
│ └── geo_coordinate.hpp
│ ├── hash
│ ├── functions.cpp
│ ├── functions.hpp
│ ├── md5.cpp
│ ├── md5.hpp
│ ├── sha1.cpp
│ ├── sha1.hpp
│ ├── sha256.cpp
│ └── sha256.hpp
│ ├── tickmarks.cpp
│ ├── tickmarks.hpp
│ └── timer.hpp
├── python
├── CMakeLists.txt
└── src
│ ├── common.hpp
│ ├── docstrings.cpp
│ ├── module.cpp
│ ├── placement
│ ├── formats
│ │ ├── edge_color.cpp
│ │ ├── jplace_reader.cpp
│ │ ├── jplace_writer.cpp
│ │ ├── newick_reader.cpp
│ │ ├── newick_writer.cpp
│ │ └── serializer.cpp
│ ├── function
│ │ ├── cog.cpp
│ │ ├── distances.cpp
│ │ ├── emd.cpp
│ │ ├── epca.cpp
│ │ ├── functions.cpp
│ │ ├── helper.cpp
│ │ ├── masses.cpp
│ │ ├── measures.cpp
│ │ ├── nhd.cpp
│ │ ├── operators.cpp
│ │ ├── sample_set.cpp
│ │ └── tree.cpp
│ ├── placement_tree.cpp
│ ├── pquery.cpp
│ ├── pquery
│ │ ├── name.cpp
│ │ ├── placement.cpp
│ │ └── plain.cpp
│ ├── sample.cpp
│ ├── sample_set.cpp
│ └── simulator
│ │ ├── distributions.cpp
│ │ ├── functions.cpp
│ │ └── simulator.cpp
│ ├── sequence
│ ├── counts.cpp
│ ├── formats
│ │ ├── fasta_input_iterator.cpp
│ │ ├── fasta_output_iterator.cpp
│ │ ├── fasta_reader.cpp
│ │ ├── fasta_writer.cpp
│ │ ├── phylip_reader.cpp
│ │ └── phylip_writer.cpp
│ ├── functions
│ │ ├── codes.cpp
│ │ ├── consensus.cpp
│ │ ├── entropy.cpp
│ │ ├── functions.cpp
│ │ ├── labels.cpp
│ │ ├── signature_specifications.cpp
│ │ ├── signatures.cpp
│ │ └── stats.cpp
│ ├── printers
│ │ ├── bitmap.cpp
│ │ └── simple.cpp
│ ├── sequence.cpp
│ └── sequence_set.cpp
│ ├── taxonomy
│ ├── formats
│ │ ├── ncbi.cpp
│ │ ├── taxonomy_reader.cpp
│ │ ├── taxonomy_writer.cpp
│ │ ├── taxopath_generator.cpp
│ │ └── taxopath_parser.cpp
│ ├── functions
│ │ ├── entropy.cpp
│ │ ├── entropy_data.cpp
│ │ ├── operators.hpp
│ │ ├── ranks.cpp
│ │ ├── taxonomy.cpp
│ │ ├── taxonomy.hpp
│ │ └── taxopath.cpp
│ ├── iterator
│ │ ├── levelorder.cpp
│ │ ├── postorder.cpp
│ │ ├── preorder.cpp
│ │ └── preorder.hpp
│ ├── printers
│ │ └── nested.cpp
│ ├── taxon.cpp
│ ├── taxon_data.cpp
│ ├── taxonomy.cpp
│ └── taxopath.cpp
│ ├── tree
│ ├── attribute_tree
│ │ ├── indexed_newick_reader.cpp
│ │ ├── keyed_newick_reader.cpp
│ │ └── tree.cpp
│ ├── bipartition
│ │ ├── bipartition.cpp
│ │ └── functions.cpp
│ ├── common_tree
│ │ ├── distances.cpp
│ │ ├── edge_color.cpp
│ │ ├── functions.cpp
│ │ ├── newick_reader.cpp
│ │ ├── newick_writer.cpp
│ │ ├── operators.cpp
│ │ ├── phyloxml_writer.cpp
│ │ └── tree.cpp
│ ├── drawing
│ │ ├── circular_layout.cpp
│ │ ├── functions.cpp
│ │ ├── layout_base.cpp
│ │ ├── layout_tree.cpp
│ │ └── rectangular_layout.cpp
│ ├── formats
│ │ ├── color_writer_plugin.cpp
│ │ ├── newick
│ │ │ ├── broker.cpp
│ │ │ ├── color_writer_plugin.cpp
│ │ │ ├── element.cpp
│ │ │ ├── input_iterator.cpp
│ │ │ ├── reader.cpp
│ │ │ └── writer.cpp
│ │ └── phyloxml
│ │ │ ├── color_writer_plugin.cpp
│ │ │ └── writer.cpp
│ ├── function
│ │ ├── distances.cpp
│ │ ├── functions.cpp
│ │ ├── lca_lookup.cpp
│ │ ├── manipulation.cpp
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ └── tree_set.cpp
│ ├── iterator
│ │ ├── eulertour.hpp
│ │ ├── levelorder.hpp
│ │ ├── node_links.hpp
│ │ ├── path.hpp
│ │ ├── path_set.hpp
│ │ ├── postorder.hpp
│ │ └── preorder.hpp
│ ├── mass_tree
│ │ ├── emd.cpp
│ │ ├── functions.cpp
│ │ ├── kmeans.cpp
│ │ ├── squash_clustering.cpp
│ │ └── tree.cpp
│ ├── printer
│ │ ├── compact.cpp
│ │ ├── detailed.cpp
│ │ └── table.cpp
│ ├── tree.cpp
│ ├── tree
│ │ ├── edge.cpp
│ │ ├── edge_data.cpp
│ │ ├── link.cpp
│ │ ├── node.cpp
│ │ └── node_data.cpp
│ └── tree_set.cpp
│ └── utils
│ ├── containers
│ ├── dataframe.hpp
│ ├── dataframe
│ │ └── reader.hpp
│ ├── matrix.hpp
│ ├── matrix
│ │ ├── col.hpp
│ │ ├── operators.cpp
│ │ ├── operators.hpp
│ │ ├── reader.hpp
│ │ ├── row.hpp
│ │ └── writer.hpp
│ ├── mru_cache.hpp
│ ├── sorted_vector.hpp
│ └── sorted_vector
│ │ └── operators.hpp
│ ├── core
│ ├── algorithm.hpp
│ ├── fs.cpp
│ ├── indexed_list.hpp
│ ├── logging.cpp
│ ├── options.cpp
│ ├── range.hpp
│ ├── std.hpp
│ └── version.cpp
│ ├── formats
│ ├── bmp
│ │ └── writer.cpp
│ ├── csv
│ │ └── reader.cpp
│ ├── nexus
│ │ ├── block.cpp
│ │ ├── document.cpp
│ │ ├── taxa.cpp
│ │ ├── trees.cpp
│ │ └── writer.cpp
│ └── xml
│ │ ├── document.cpp
│ │ ├── helper.cpp
│ │ ├── helper.hpp
│ │ └── writer.cpp
│ ├── math
│ ├── bitvector.cpp
│ ├── bitvector
│ │ └── operators.cpp
│ ├── common.cpp
│ ├── common.hpp
│ ├── euclidean_kmeans.cpp
│ ├── histogram.cpp
│ ├── histogram
│ │ ├── accumulator.cpp
│ │ ├── distances.cpp
│ │ ├── operations.cpp
│ │ └── stats.cpp
│ ├── kmeans.cpp
│ ├── kmeans.hpp
│ ├── matrix.cpp
│ ├── matrix.hpp
│ ├── pca.cpp
│ ├── random.cpp
│ ├── range_minimum_query.cpp
│ ├── statistics.cpp
│ ├── statistics.hpp
│ ├── twobit_vector.cpp
│ └── twobit_vector
│ │ ├── functions.cpp
│ │ ├── iterator_deletions.cpp
│ │ ├── iterator_insertions.cpp
│ │ └── iterator_substitutions.cpp
│ ├── text
│ ├── char.cpp
│ ├── string.cpp
│ ├── string.hpp
│ ├── style.cpp
│ └── table.cpp
│ └── tools
│ ├── char_lookup.hpp
│ ├── color.cpp
│ ├── color
│ ├── diverging_lists.cpp
│ ├── functions.cpp
│ ├── helpers.cpp
│ ├── map.cpp
│ ├── names.cpp
│ ├── norm_boundary.cpp
│ ├── norm_diverging.cpp
│ ├── norm_linear.cpp
│ ├── norm_logarithmic.cpp
│ ├── normalization.cpp
│ ├── qualitative_lists.cpp
│ └── sequential_lists.cpp
│ ├── date_time.cpp
│ ├── geodesy.cpp
│ ├── geodesy
│ └── functions.cpp
│ ├── gzip.cpp
│ ├── hashing.cpp
│ ├── md5.cpp
│ ├── sha1.cpp
│ ├── sha256.cpp
│ └── tickmarks.cpp
├── test
├── CMakeLists.txt
├── README.md
├── data
│ ├── placement
│ │ ├── duplicates_a.jplace
│ │ ├── duplicates_b.jplace
│ │ ├── rooted.jplace
│ │ ├── test_a.jplace
│ │ ├── test_a.jplace.gz
│ │ ├── test_b.jplace
│ │ ├── test_b.jplace.gz
│ │ ├── test_c.jplace
│ │ ├── test_c.jplace.gz
│ │ ├── unrooted.jplace
│ │ ├── version_1.jplace
│ │ ├── version_2.jplace
│ │ └── version_3.jplace
│ ├── population
│ │ ├── 78.pileup.gz
│ │ ├── README.txt
│ │ ├── cram_cache
│ │ │ ├── 426e31835a6dfdcbf6c534671edf02f7
│ │ │ └── b6853ffe730ece50076db834dea18e3b
│ │ ├── empty.pileup
│ │ ├── ex1.bam
│ │ ├── ex1.cram
│ │ ├── ex1.fa
│ │ ├── ex1.fa.fai
│ │ ├── ex1.sam.gz
│ │ ├── example.pileup
│ │ ├── example.vcf
│ │ ├── example2.pileup
│ │ ├── example3.pileup
│ │ ├── example_ad.vcf
│ │ ├── freq1.csv
│ │ ├── long.sync
│ │ ├── mask.bed
│ │ ├── mask.fasta
│ │ ├── masked.sync
│ │ ├── p1_p2.sync.gz
│ │ ├── parallel.pileup
│ │ ├── parallel.vcf
│ │ ├── parallel_a.sync
│ │ ├── parallel_b.sync
│ │ ├── parallel_chrs_1.sync
│ │ ├── regions.vcf
│ │ ├── regions_1.bim
│ │ ├── regions_1.map
│ │ ├── regions_1.txt
│ │ ├── regions_2.bim
│ │ ├── regions_2.map
│ │ ├── regions_2.txt
│ │ ├── sample-names.sync
│ │ ├── sample.gff2
│ │ ├── sample.gff3
│ │ ├── sample.gtf
│ │ ├── test.sync
│ │ ├── test_header.sync
│ │ ├── ucsc.bed
│ │ ├── unordered.csv
│ │ ├── unordered.pileup
│ │ ├── unordered.sam.gz
│ │ ├── unordered.sync
│ │ ├── unordered.vcf
│ │ ├── wiki1.bed3
│ │ └── wiki2.bed
│ ├── sequence
│ │ ├── SP1.fq
│ │ ├── TAIR10_chr_all.dict
│ │ ├── TAIR10_chr_all.fa.fai
│ │ ├── aa_3_384_i.phylip
│ │ ├── aa_3_384_s.phylip
│ │ ├── dna_10.fasta
│ │ ├── dna_10.fasta.gz
│ │ ├── dna_10_single.fasta
│ │ ├── dna_5_42_i.phylip
│ │ ├── dna_5_42_s.phylip
│ │ ├── grouped_taxonomy.json.gz
│ │ ├── grouped_taxonomy_trunk.json.gz
│ │ └── wiki.fastq
│ ├── taxonomy
│ │ ├── tax_slv_ssu_123.1.clean
│ │ ├── tax_slv_ssu_123.1.ordered
│ │ └── tax_slv_ssu_123.1.unordered
│ ├── tree
│ │ ├── distances.newick
│ │ ├── indexed_attributes_0.newick
│ │ ├── indexed_attributes_1.newick
│ │ ├── keyed_attributes_0.newick
│ │ ├── keyed_attributes_1.newick
│ │ ├── multiple.newick
│ │ ├── multiple_named.newick
│ │ ├── random-trees.newick
│ │ └── rooted.newick
│ └── utils
│ │ ├── csv
│ │ ├── comment_empty.csv
│ │ ├── complex.csv
│ │ ├── linear_regression.R
│ │ ├── linear_regression.csv
│ │ ├── logistic_regression.R
│ │ ├── logistic_regression.csv
│ │ ├── mixed.csv
│ │ ├── mixed_nan.csv
│ │ ├── simple.csv
│ │ ├── tab_esc.csv
│ │ └── table.csv
│ │ ├── hash
│ │ ├── aaa.txt.gz
│ │ ├── abc.txt
│ │ └── empty.txt
│ │ ├── json
│ │ ├── README.md
│ │ ├── _fail13.jtest
│ │ ├── _fail15.jtest
│ │ ├── _fail17.jtest
│ │ ├── _fail25.jtest
│ │ ├── _fail26.jtest
│ │ ├── _fail27.jtest
│ │ ├── _fail28.jtest
│ │ ├── fail10.jtest
│ │ ├── fail11.jtest
│ │ ├── fail12.jtest
│ │ ├── fail14.jtest
│ │ ├── fail16.jtest
│ │ ├── fail19.jtest
│ │ ├── fail2.jtest
│ │ ├── fail20.jtest
│ │ ├── fail21.jtest
│ │ ├── fail22.jtest
│ │ ├── fail23.jtest
│ │ ├── fail24.jtest
│ │ ├── fail29.jtest
│ │ ├── fail3.jtest
│ │ ├── fail30.jtest
│ │ ├── fail31.jtest
│ │ ├── fail32.jtest
│ │ ├── fail33.jtest
│ │ ├── fail4.jtest
│ │ ├── fail5.jtest
│ │ ├── fail6.jtest
│ │ ├── fail7.jtest
│ │ ├── fail8.jtest
│ │ ├── fail9.jtest
│ │ ├── pass1.jtest
│ │ ├── pass2.jtest
│ │ ├── pass3.jtest
│ │ └── pass4.jtest.gz
│ │ └── matrix
│ │ ├── README.md
│ │ ├── headers.mat
│ │ ├── iris.data.csv
│ │ ├── iris.names.txt
│ │ ├── iris.pca_projection.csv
│ │ ├── iris.standardized.csv
│ │ ├── iris.standardized_means.csv
│ │ ├── iris.standardized_stddevs.csv
│ │ └── simple.mat
├── run.sh
└── src
│ ├── common.hpp
│ ├── main.cpp
│ ├── placement
│ ├── edge_color.cpp
│ ├── epca.cpp
│ ├── functions.cpp
│ ├── jplace_reader.cpp
│ ├── jplace_writer.cpp
│ ├── manipulation.cpp
│ ├── measures.cpp
│ ├── sample.cpp
│ ├── serializer.cpp
│ └── simulator.cpp
│ ├── population
│ ├── bed_reader.cpp
│ ├── chromosome_window_stream.cpp
│ ├── diversity.cpp
│ ├── frequency_table.cpp
│ ├── fst_pool.cpp
│ ├── functions.cpp
│ ├── genome_locus.cpp
│ ├── genome_locus_set.cpp
│ ├── genome_region.cpp
│ ├── gff_reader.cpp
│ ├── interval_window_stream.cpp
│ ├── map_bim_reader.cpp
│ ├── position_window_stream.cpp
│ ├── queue_window_stream.cpp
│ ├── random_variants.cpp
│ ├── region_window_stream.cpp
│ ├── sam_variant.cpp
│ ├── simple_pileup.cpp
│ ├── subsample.cpp
│ ├── sync.cpp
│ ├── variant.cpp
│ ├── variant_gapless_input_stream.cpp
│ ├── variant_input_stream.cpp
│ ├── variant_parallel_input_stream.cpp
│ ├── variant_pileup.cpp
│ ├── vcf_basics.cpp
│ ├── vcf_window.cpp
│ └── window_view_stream.cpp
│ ├── sequence
│ ├── codes.cpp
│ ├── counts.cpp
│ ├── dict.cpp
│ ├── fasta.cpp
│ ├── fastq.cpp
│ ├── functions.cpp
│ ├── kmer.cpp
│ ├── kmer_color_gamut.cpp
│ ├── labels.cpp
│ ├── phylip.cpp
│ ├── print.cpp
│ ├── quality.cpp
│ ├── reference_genome.cpp
│ └── signatures.cpp
│ ├── taxonomy
│ ├── accession_lookup.cpp
│ ├── functions.cpp
│ ├── iterator.cpp
│ ├── printer.cpp
│ ├── rank.cpp
│ ├── reader.cpp
│ ├── taxonomy.cpp
│ ├── taxopath.cpp
│ └── tree.cpp
│ ├── tree
│ ├── attribute_tree
│ │ └── newick_reader.cpp
│ ├── common_tree
│ │ ├── common_tree.cpp
│ │ ├── distances.cpp
│ │ └── rf.cpp
│ ├── drawing.cpp
│ ├── functions.cpp
│ ├── iterator
│ │ ├── eulertour.cpp
│ │ ├── levelorder.cpp
│ │ ├── path.cpp
│ │ ├── path_set.cpp
│ │ ├── postorder.cpp
│ │ └── preorder.cpp
│ ├── manipulation.cpp
│ ├── mass_tree.cpp
│ ├── newick.cpp
│ ├── printer.cpp
│ ├── table.cpp
│ └── tree.cpp
│ └── utils
│ ├── bit
│ ├── bit.cpp
│ ├── bitvector.cpp
│ └── twobit_vector.cpp
│ ├── containers
│ ├── bitpacked_vector.cpp
│ ├── dataframe.cpp
│ ├── interval_tree.cpp
│ ├── iterators.cpp
│ ├── matrix
│ │ ├── basics.cpp
│ │ ├── iterators.cpp
│ │ ├── operators.cpp
│ │ ├── reader.cpp
│ │ └── writer.cpp
│ ├── mru_cache.cpp
│ └── optional.cpp
│ ├── core
│ ├── algorithm.cpp
│ ├── fs.cpp
│ └── info.cpp
│ ├── formats
│ ├── bmp.cpp
│ ├── csv.cpp
│ ├── json.cpp
│ ├── nexus.cpp
│ └── svg.cpp
│ ├── io
│ ├── base64.cpp
│ ├── gzip_stream.cpp
│ ├── input_stream.cpp
│ ├── lexing.cpp
│ ├── output_target.cpp
│ └── serializer.cpp
│ ├── math
│ ├── common.cpp
│ ├── correlation.cpp
│ ├── hac.cpp
│ ├── histogram.cpp
│ ├── kmeans.cpp
│ ├── matrix.cpp
│ ├── moments.cpp
│ ├── pca.cpp
│ ├── random.cpp
│ ├── range_minimum_query.cpp
│ ├── ranking.cpp
│ ├── regression.cpp
│ └── statistics.cpp
│ ├── text
│ ├── char.cpp
│ ├── convert.cpp
│ ├── light_string.cpp
│ ├── string.cpp
│ └── text.cpp
│ ├── threading
│ ├── concurrent_vector_guard.cpp
│ ├── sequential_output_buffer.cpp
│ ├── serial_task_queue.cpp
│ ├── thread_local_cache.cpp
│ ├── thread_pool.cpp
│ └── threadsafe_queue.cpp
│ └── tools
│ ├── char_lookup.cpp
│ ├── color.cpp
│ ├── date_time.cpp
│ ├── geodesy.cpp
│ ├── md5.cpp
│ ├── sha1.cpp
│ ├── sha256.cpp
│ ├── tickmarks.cpp
│ └── timer.cpp
└── tools
├── cmake
├── AssembleMonolith.cmake
├── CMakeParseImplicitLinkInfo.cmake
├── DetectCppVersion.cmake
├── FindAVX.cmake
├── FindDeflate.cmake
├── FindOpenMP_patch.cmake
├── FindOpenMP_patch2.cmake
├── GTestDownload.cmake
├── IncludeAVX.cmake
├── IncludeHtslib.cmake
├── IncludeOpenMP.cmake
├── IncludePthreads.cmake
├── IncludeSamtools.cmake
├── IncludeZlib.cmake
└── Pybind11Download.cmake
├── deploy
├── build_example_apps.sh
├── check_header_guards.sh
├── make_genesis_header.sh
├── notable_changes.sh
├── release.sh
├── update_api_doc.sh
└── xkcd.py
├── extract_todos.sh
├── plot_resources.py
└── py_bindings
├── .gitignore
├── Doxyfile
├── generate.sh
├── py_binder.py
└── py_binder
├── __init__.py
├── boost_writer.py
├── cpp_entities.py
├── doxygen_reader.py
└── pybind11_writer.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # --------------------------------------------------------------------
2 | # Project Build Folders
3 | # --------------------------------------------------------------------
4 |
5 | bin/
6 | build/
7 | tools/googletest/
8 | tools/pybind11/
9 |
10 | # --------------------------------------------------------------------
11 | # C++ Compiled Object files
12 | # --------------------------------------------------------------------
13 |
14 | *.slo
15 | *.lo
16 | *.o
17 | *.obj
18 |
19 | # --------------------------------------------------------------------
20 | # C++ Precompiled Headers
21 | # --------------------------------------------------------------------
22 |
23 | *.gch
24 | *.pch
25 |
26 | # --------------------------------------------------------------------
27 | # C++ Compiled Dynamic Libraries
28 | # --------------------------------------------------------------------
29 |
30 | *.so
31 | *.dylib
32 | *.dll
33 |
34 | # --------------------------------------------------------------------
35 | # C++ Compiled Static Libraries
36 | # --------------------------------------------------------------------
37 |
38 | *.lai
39 | *.la
40 | *.a
41 | *.lib
42 |
43 | # --------------------------------------------------------------------
44 | # Python Byte-Compiled Files
45 | # --------------------------------------------------------------------
46 |
47 | __pycache__/
48 | *.pyc
49 | *.pyo
50 | *.pyd
51 |
52 | # --------------------------------------------------------------------
53 | # Executables
54 | # --------------------------------------------------------------------
55 |
56 | *.exe
57 | *.out
58 | *.app
59 |
60 | # --------------------------------------------------------------------
61 | # Misc
62 | # --------------------------------------------------------------------
63 |
64 | .*
65 | *~
66 | *.swp
67 | TODO
68 | extern/
69 | apps/*.cpp
70 | apps/*.hpp
71 | apps/*/
72 |
--------------------------------------------------------------------------------
/CITATION.cff:
--------------------------------------------------------------------------------
1 | cff-version: 1.2.0
2 | authors:
3 | - family-names: "Czech"
4 | given-names: "Lucas"
5 | orcid: "https://orcid.org/0000-0002-1340-9644"
6 | - family-names: "Barbera"
7 | given-names: "Pierre"
8 | orcid: "https://orcid.org/0000-0002-3437-150X"
9 | - family-names: "Stamatakis"
10 | given-names: "Alexandros"
11 | orcid: "https://orcid.org/0000-0003-0353-0691"
12 | title: "Genesis and Gappa: processing, analyzing and visualizing phylogenetic (placement) data"
13 | doi: 10.1093/bioinformatics/btaa070
14 | url: "http://github.com/lczech/genesis"
15 | preferred-citation:
16 | type: article
17 | authors:
18 | - family-names: "Czech"
19 | given-names: "Lucas"
20 | orcid: "https://orcid.org/0000-0002-1340-9644"
21 | - family-names: "Barbera"
22 | given-names: "Pierre"
23 | orcid: "https://orcid.org/0000-0002-3437-150X"
24 | - family-names: "Stamatakis"
25 | given-names: "Alexandros"
26 | orcid: "https://orcid.org/0000-0003-0353-0691"
27 | doi: "10.1093/bioinformatics/btaa070"
28 | journal: "Bioinformatics"
29 | start: 3263 # First page number
30 | end: 3265 # Last page number
31 | title: "Genesis and Gappa: processing, analyzing and visualizing phylogenetic (placement) data"
32 | volume: 36
33 | issue: 10
34 | year: 2020
35 |
--------------------------------------------------------------------------------
/apps/README.md:
--------------------------------------------------------------------------------
1 | genesis applications
2 | ====================
3 |
4 | This directory is provided for conveniently and quickly developing small applications which use
5 | genesis as their main C++ library. This is a way of using C++ similar to a scripting language.
6 |
7 | Reasons to use this method (instead of the genesis python bindings) include:
8 |
9 | * If Boost Python is not available on your target system.
10 | * If not all needed functions of genesis are exported to python (yet).
11 | * If you simply feel more comfortable developing in C++ than in python.
12 |
13 | To create a new application, create a `*.cpp` file in the `./apps` directory and provide it with
14 | a main function:
15 |
16 | int main( int argc, const char* argv[] )
17 | {
18 | // [Your code here.]
19 | }
20 |
21 | Include all needed headers and write the desired functionality.
22 | Of course, you can use other local functions in addition to the main function in order to structure
23 | your code.
24 |
25 | The app is automatically compiled by the main build process and linked against the shared library
26 | version of genesis by calling
27 |
28 | make update
29 |
30 | in the main directory. The resulting executable is placed in `./bin` and named after the `*.cpp`
31 | file (without the ending).
32 |
33 | Apart from that, there are no further requirements. Simply include the needed genesis headers (or
34 | any other headers you might need) and compile. Happy coding!
35 |
--------------------------------------------------------------------------------
/doc/.gitignore:
--------------------------------------------------------------------------------
1 | # --------------------------------------------------------------------
2 | # Documentation
3 | # --------------------------------------------------------------------
4 |
5 | html/
6 | index.html
7 |
--------------------------------------------------------------------------------
/doc/Makefile:
--------------------------------------------------------------------------------
1 | # Genesis - A toolkit for working with phylogenetic data.
2 | # Copyright (C) 2014-2016 Lucas Czech
3 | #
4 | # This program is free software: you can redistribute it and/or modify
5 | # it under the terms of the GNU General Public License as published by
6 | # the Free Software Foundation, either version 3 of the License, or
7 | # (at your option) any later version.
8 | #
9 | # This program is distributed in the hope that it will be useful,
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | # GNU General Public License for more details.
13 | #
14 | # You should have received a copy of the GNU General Public License
15 | # along with this program. If not, see .
16 | #
17 | # Contact:
18 | # Lucas Czech
19 | # Exelixis Lab, Heidelberg Institute for Theoretical Studies
20 | # Schloss-Wolfsbrunnenweg 35, D-69118 Heidelberg, Germany
21 |
22 | # --------------------------------------------------------------------------------------------------
23 | # This makefile wraps around doxygen for easily creating the documentation.
24 | # --------------------------------------------------------------------------------------------------
25 |
26 | .PHONY: doc clean
27 |
28 | # Make Doxygen documentation
29 | doc:
30 | @cd doxygen && doxygen Doxyfile
31 | @ln -fs ./html/index.html index.html
32 |
33 | # Remove all generated files
34 | clean:
35 | -@$(RM) -r ./html
36 | -@$(RM) ./index.html
37 |
--------------------------------------------------------------------------------
/doc/README.md:
--------------------------------------------------------------------------------
1 | genesis documentation
2 | =====================
3 |
4 | This directory contains the files needed for the tutorials and demos.
5 | The genesis documentation is available at [doc.genesis-lib.org](http://doc.genesis-lib.org/).
6 |
7 | Also, the files that are used to generate the documentation with doxygen are stored here.
8 | The documentation of genesis contains both, the user manual with tutorials and code examples,
9 | and the API Reference with more details about classes and functions:
10 |
11 | * The files of the user manual are written in
12 | [doxygen-flavored markdown format](https://www.stack.nl/~dimitri/doxygen/manual/markdown.html)
13 | and thus human-readable. They are stored in the subdirectory `manual`.
14 | * The API Reference is generated from the doc-blocks in the C++ source code.
15 |
16 | In order to generate the full documentation, [doxygen](http://www.doxygen.org/) 1.8.13 and
17 | [graphviz](http://www.graphviz.org/) need to be installed.
18 | The files can then be generated into the subdirectory `html` by calling `make` in this directory.
19 | A symlink to the index page is also created for convenience.
20 |
--------------------------------------------------------------------------------
/doc/code/demos/extract_clade_placements/clades.tsv:
--------------------------------------------------------------------------------
1 | Taxon_1 clade_b
2 | Taxon_13 clade_b
3 | Taxon_15 clade_b
4 | Taxon_16 clade_b
5 | Taxon_19 clade_b
6 | Taxon_21 clade_b
7 | Taxon_22 clade_b
8 | Taxon_23 clade_b
9 | Taxon_26 clade_b
10 | Taxon_27 clade_b
11 | Taxon_28 clade_b
12 | Taxon_3 clade_b
13 | Taxon_31 clade_b
14 | Taxon_33 clade_b
15 | Taxon_35 clade_b
16 | Taxon_36 clade_b
17 | Taxon_40 clade_b
18 | Taxon_41 clade_b
19 | Taxon_44 clade_b
20 | Taxon_45 clade_b
21 | Taxon_6 clade_b
22 | Taxon_71 clade_a
23 | Taxon_74 clade_a
24 | Taxon_77 clade_a
25 | Taxon_78 clade_a
26 | Taxon_79 clade_a
27 | Taxon_8 clade_b
28 | Taxon_82 clade_a
29 | Taxon_83 clade_a
30 | Taxon_84 clade_a
31 | Taxon_87 clade_a
32 | Taxon_88 clade_a
33 | Taxon_89 clade_a
34 | Taxon_9 clade_b
35 | Taxon_95 clade_b
36 |
--------------------------------------------------------------------------------
/doc/code/demos/extract_clade_placements/output/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore everything in this directory
2 | *
3 |
4 | # Except this file
5 | !.gitignore
6 |
--------------------------------------------------------------------------------
/doc/code/tutorials/color.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | Genesis - A toolkit for working with phylogenetic data.
3 | Copyright (C) 2014-2020 Lucas Czech and HITS gGmbH
4 |
5 | This program is free software: you can redistribute it and/or modify
6 | it under the terms of the GNU General Public License as published by
7 | the Free Software Foundation, either version 3 of the License, or
8 | (at your option) any later version.
9 |
10 | This program is distributed in the hope that it will be useful,
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | GNU General Public License for more details.
14 |
15 | You should have received a copy of the GNU General Public License
16 | along with this program. If not, see .
17 |
18 | Contact:
19 | Lucas Czech
20 | Exelixis Lab, Heidelberg Institute for Theoretical Studies
21 | Schloss-Wolfsbrunnenweg 35, D-69118 Heidelberg, Germany
22 | */
23 |
24 | #include "genesis/genesis.hpp"
25 |
26 | int main()
27 | {
28 | using namespace genesis::utils;
29 |
30 | // Some ways to obtian a color.
31 | Color c1 = Color( 1.0, 0.0, 1.0 );
32 | Color c2 = Color::from_bytes( 255, 0, 255 );
33 | Color c3 = Color::from_hex( "#FF00FF" );
34 |
35 | // Basic usage of a Color Map.
36 | auto color_map = ColorMap( color_list_viridis() );
37 | auto some_color = color_map( 0.3 );
38 |
39 | // Some exemplary values for log scaling.
40 | auto values = std::vector{ 2.3, 43.5, 195.8, 566.0, 846.2 };
41 | auto color_norm = ColorNormalizationLogarithmic( 1.0, 1000.0);
42 | auto colors = color_map( color_norm, values );
43 |
44 | // Let's avoid ugly compiler warnings about unused variables.
45 | // Not part of the tutorial. Just part of being clean.
46 | (void) c1;
47 | (void) c2;
48 | (void) c3;
49 | (void) some_color;
50 | }
51 |
--------------------------------------------------------------------------------
/doc/code/tutorials/tree.newick:
--------------------------------------------------------------------------------
1 | ((A:0.132,(B:0.212,C:0.183):0.066):0.129,((F:0.154,(G:0.121,H:0.196):0.11):0.30,K:0.164):0.063):0.094;
2 |
--------------------------------------------------------------------------------
/doc/doxygen/footer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
14 |
19 |
20 |