diff --git a/dorado/3rdparty/ont-minimap2 b/dorado/3rdparty/ont-minimap2 index 14282e6d..41b2c01b 160000 --- a/dorado/3rdparty/ont-minimap2 +++ b/dorado/3rdparty/ont-minimap2 @@ -1 +1 @@ -Subproject commit 14282e6d1aa816b1aa9a0abeedd7b87c4f623e57 +Subproject commit 41b2c01bba3b1a89304f8220694385fcdbe9ed67 diff --git a/dorado/alignment/Minimap2Index.cpp b/dorado/alignment/Minimap2Index.cpp index a42b6740..008ffe90 100644 --- a/dorado/alignment/Minimap2Index.cpp +++ b/dorado/alignment/Minimap2Index.cpp @@ -101,8 +101,11 @@ bool Minimap2Index::initialise(Minimap2Options options) { m_mapping_options = std::make_optional(); mm_set_opt(0, &m_index_options.value(), &m_mapping_options.value()); - // Setting options to map-ont default till relevant args are exposed. - mm_set_opt("map-ont", &m_index_options.value(), &m_mapping_options.value()); + if (mm_set_opt(options.mm2_preset.c_str(), &m_index_options.value(), + &m_mapping_options.value()) != 0) { + spdlog::error("Cannot set mm2 options with preset: {}", options.mm2_preset); + return false; + } set_index_options(options); set_mapping_options(options); @@ -180,4 +183,4 @@ const mm_mapopt_t& Minimap2Index::mapping_options() const { const Minimap2Options& Minimap2Index::get_options() const { return m_options; } -} // namespace dorado::alignment \ No newline at end of file +} // namespace dorado::alignment diff --git a/dorado/alignment/Minimap2Options.h b/dorado/alignment/Minimap2Options.h index 5631a34f..d6035689 100644 --- a/dorado/alignment/Minimap2Options.h +++ b/dorado/alignment/Minimap2Options.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include namespace dorado::alignment { @@ -9,11 +10,12 @@ struct Minimap2IndexOptions { short kmer_size; short window_size; uint64_t index_batch_size; + std::string mm2_preset; }; inline bool operator<(const Minimap2IndexOptions& l, const Minimap2IndexOptions& r) { - return std::tie(l.kmer_size, l.window_size, l.index_batch_size) < - std::tie(r.kmer_size, r.window_size, r.index_batch_size); + return std::tie(l.kmer_size, l.window_size, l.index_batch_size, l.mm2_preset) < + std::tie(r.kmer_size, r.window_size, r.index_batch_size, r.mm2_preset); } inline bool operator>(const Minimap2IndexOptions& l, const Minimap2IndexOptions& r) { @@ -29,8 +31,8 @@ inline bool operator>=(const Minimap2IndexOptions& l, const Minimap2IndexOptions } inline bool operator==(const Minimap2IndexOptions& l, const Minimap2IndexOptions& r) { - return std::tie(l.kmer_size, l.window_size, l.index_batch_size) == - std::tie(r.kmer_size, r.window_size, r.index_batch_size); + return std::tie(l.kmer_size, l.window_size, l.index_batch_size, l.mm2_preset) == + std::tie(r.kmer_size, r.window_size, r.index_batch_size, r.mm2_preset); } inline bool operator!=(const Minimap2IndexOptions& l, const Minimap2IndexOptions& r) { @@ -87,7 +89,7 @@ inline bool operator==(const Minimap2Options& l, const Minimap2Options& r) { inline bool operator!=(const Minimap2Options& l, const Minimap2Options& r) { return !(l == r); } -static constexpr Minimap2Options dflt_options{{15, 10, 16000000000ull}, - {5, 500, 20000, false, false, true}, - false}; +static const Minimap2Options dflt_options{{15, 10, 16000000000ull, "lr:hq"}, + {5, 500, 20000, false, false, true}, + false}; } // namespace dorado::alignment diff --git a/dorado/cli/cli_utils.h b/dorado/cli/cli_utils.h index 16f2e39e..25e768e6 100644 --- a/dorado/cli/cli_utils.h +++ b/dorado/cli/cli_utils.h @@ -203,6 +203,12 @@ void add_minimap2_arguments(ArgParser& parser, const Options& dflt) { "specified as NUM,[NUM]") .default_value(to_size(dflt.bandwidth) + "," + to_size(dflt.bandwidth_long)); + // Setting options to lr:hq which is appropriate for high quality nanopore reads. + parser.visible.add_argument("--mm2-preset") + .help("minimap2 preset for indexing and mapping. Alias for the -x " + "option in minimap2.") + .default_value(dflt.mm2_preset); + parser.hidden.add_argument("--secondary-seq") .help("minimap2 output seq/qual for secondary and supplementary alignments") .default_value(false) @@ -251,6 +257,7 @@ Options process_minimap2_arguments(const ArgParser& parser, const Options& dflt) throw std::runtime_error("Wrong number of arguments for option '-r'."); } res.soft_clipping = parser.visible.get("Y"); + res.mm2_preset = parser.visible.get("mm2-preset"); res.secondary_seq = parser.hidden.get("secondary-seq"); res.print_aln_seq = parser.hidden.get("print-aln-seq"); return res;