From bc929f79403d12a1f0a3e095e7848bb3e1595cb3 Mon Sep 17 00:00:00 2001 From: Chris Seymour Date: Wed, 13 Mar 2024 13:55:48 +0000 Subject: [PATCH 1/5] upgrade to minimap2-2.27 (r1193) --- dorado/3rdparty/ont-minimap2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorado/3rdparty/ont-minimap2 b/dorado/3rdparty/ont-minimap2 index 14282e6d..a3ab12e7 160000 --- a/dorado/3rdparty/ont-minimap2 +++ b/dorado/3rdparty/ont-minimap2 @@ -1 +1 @@ -Subproject commit 14282e6d1aa816b1aa9a0abeedd7b87c4f623e57 +Subproject commit a3ab12e721134e0fa992fba36c796e148c2da23d From 1a7399d061de6e8df8a78189b6889f2830523645 Mon Sep 17 00:00:00 2001 From: Joyjit Daw Date: Tue, 19 Mar 2024 20:31:07 -0400 Subject: [PATCH 2/5] upgrade mm2 to commit with fixed MD generation --- dorado/3rdparty/ont-minimap2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dorado/3rdparty/ont-minimap2 b/dorado/3rdparty/ont-minimap2 index a3ab12e7..41b2c01b 160000 --- a/dorado/3rdparty/ont-minimap2 +++ b/dorado/3rdparty/ont-minimap2 @@ -1 +1 @@ -Subproject commit a3ab12e721134e0fa992fba36c796e148c2da23d +Subproject commit 41b2c01bba3b1a89304f8220694385fcdbe9ed67 From e3646638a14af89ecbc6e8b5b38a9058ab1bf472 Mon Sep 17 00:00:00 2001 From: Joyjit Daw Date: Tue, 19 Mar 2024 20:51:39 -0400 Subject: [PATCH 3/5] Update dorado aligner default preset to lr:hq And add option to set the mm2 preset from the cmdline for dorado aligner and basecaller. --- dorado/alignment/Minimap2Index.cpp | 8 +++++--- dorado/alignment/Minimap2Options.h | 7 ++++--- dorado/cli/cli_utils.h | 7 +++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/dorado/alignment/Minimap2Index.cpp b/dorado/alignment/Minimap2Index.cpp index a42b6740..407da5b7 100644 --- a/dorado/alignment/Minimap2Index.cpp +++ b/dorado/alignment/Minimap2Index.cpp @@ -101,8 +101,10 @@ 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) { + throw std::runtime_error("Cannot set mm2 options with preset: " + options.mm2_preset); + } set_index_options(options); set_mapping_options(options); @@ -180,4 +182,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..39b0e40d 100644 --- a/dorado/alignment/Minimap2Options.h +++ b/dorado/alignment/Minimap2Options.h @@ -9,6 +9,7 @@ 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) { @@ -87,7 +88,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; From 6b7859f066cd5e3f380ed97008545cd769e5bd99 Mon Sep 17 00:00:00 2001 From: Joyjit Daw Date: Tue, 19 Mar 2024 21:51:11 -0400 Subject: [PATCH 4/5] update comparators for options types --- dorado/alignment/Minimap2Options.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dorado/alignment/Minimap2Options.h b/dorado/alignment/Minimap2Options.h index 39b0e40d..d6035689 100644 --- a/dorado/alignment/Minimap2Options.h +++ b/dorado/alignment/Minimap2Options.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include namespace dorado::alignment { @@ -13,8 +14,8 @@ struct 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) { @@ -30,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) { From 944b54bce51ff6ebd543765e3232ae98c5d76c24 Mon Sep 17 00:00:00 2001 From: Joyjit Daw Date: Wed, 20 Mar 2024 10:12:53 -0400 Subject: [PATCH 5/5] fix error handling to return bool --- dorado/alignment/Minimap2Index.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dorado/alignment/Minimap2Index.cpp b/dorado/alignment/Minimap2Index.cpp index 407da5b7..008ffe90 100644 --- a/dorado/alignment/Minimap2Index.cpp +++ b/dorado/alignment/Minimap2Index.cpp @@ -103,7 +103,8 @@ bool Minimap2Index::initialise(Minimap2Options options) { mm_set_opt(0, &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) { - throw std::runtime_error("Cannot set mm2 options with preset: " + options.mm2_preset); + spdlog::error("Cannot set mm2 options with preset: {}", options.mm2_preset); + return false; } set_index_options(options);