Skip to content

Commit 74f2fc8

Browse files
committed
[FEATURE] Make seqan3::align_cfg::method_global a config element.
1 parent f9869db commit 74f2fc8

30 files changed

Lines changed: 122 additions & 61 deletions

doc/tutorial/pairwise_alignment/pa_assignment_3_solution.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ int main()
2727
}
2828

2929
// Configure the alignment kernel.
30-
auto config = seqan3::align_cfg::method_global |
30+
auto config = seqan3::align_cfg::method_global{} |
3131
seqan3::align_cfg::scoring{seqan3::aminoacid_scoring_scheme{
3232
seqan3::aminoacid_similarity_matrix::BLOSUM62}} |
3333
seqan3::align_cfg::aligned_ends{seqan3::free_ends_second};

doc/tutorial/pairwise_alignment/pairwise_alignment_first_global.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int main()
1313
seqan3::dna4_vector s2 = "ACGAAGACCGAT"_dna4;
1414

1515
// Configure the alignment kernel.
16-
auto config = seqan3::align_cfg::method_global |
16+
auto config = seqan3::align_cfg::method_global{} |
1717
seqan3::align_cfg::scoring{seqan3::nucleotide_scoring_scheme{}};
1818

1919
// Invoke the pairwise alignment which returns a lazy range over alignment results.

doc/tutorial/pairwise_alignment/pairwise_alignment_solution_1.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ int main()
1717
"AGGTACGAGCGACACT"_dna4};
1818

1919
// Configure the alignment kernel.
20-
auto config = seqan3::align_cfg::method_global |
20+
auto config = seqan3::align_cfg::method_global{} |
2121
seqan3::align_cfg::scoring{seqan3::nucleotide_scoring_scheme{}};
2222

2323
for (auto const & res : seqan3::align_pairwise(seqan3::views::pairwise_combine(vec), config))

doc/tutorial/pairwise_alignment/pairwise_alignment_solution_2.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ int main()
1717
"AGGTACGAGCGACACT"_dna4};
1818

1919
// Configure the alignment kernel.
20-
auto config = seqan3::align_cfg::method_global |
20+
auto config = seqan3::align_cfg::method_global{} |
2121
seqan3::align_cfg::scoring{seqan3::nucleotide_scoring_scheme{}} |
2222
seqan3::align_cfg::aligned_ends{seqan3::free_ends_first};
2323

doc/tutorial/pairwise_alignment/pairwise_alignment_solution_3.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int main()
1313
auto seq2 = "AFLPGWQEENKLSKIWMKDCGCLW"_aa27;
1414

1515
// Configure the alignment kernel.
16-
auto config = seqan3::align_cfg::method_global |
16+
auto config = seqan3::align_cfg::method_global{} |
1717
seqan3::align_cfg::scoring{seqan3::aminoacid_scoring_scheme{
1818
seqan3::aminoacid_similarity_matrix::BLOSUM62}} |
1919
seqan3::align_cfg::gap{seqan3::gap_scheme{seqan3::gap_score{-2}, seqan3::gap_open_score{-9}}};

doc/tutorial/pairwise_alignment/pairwise_alignment_solution_4.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int main()
1313
auto seq2 = "GGACGACATGACGTACGACTTTACGTACGACTAGC"_dna4;
1414

1515
// Configure the alignment kernel.
16-
auto config = seqan3::align_cfg::method_global |
16+
auto config = seqan3::align_cfg::method_global{} |
1717
seqan3::align_cfg::scoring{seqan3::nucleotide_scoring_scheme{
1818
seqan3::match_score{4}, seqan3::mismatch_score{-2}}} |
1919
seqan3::align_cfg::gap{seqan3::gap_scheme{seqan3::gap_score{-4}}} |

doc/tutorial/pairwise_alignment/pairwise_alignment_solution_5.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int main()
1313
auto seq2 = "GGACGACATGACGTACGACTTTACGTACGACTAGC"_dna4;
1414

1515
// Configure the alignment kernel.
16-
auto config = seqan3::align_cfg::method_global |
16+
auto config = seqan3::align_cfg::method_global{} |
1717
seqan3::align_cfg::scoring{seqan3::nucleotide_scoring_scheme{
1818
seqan3::match_score{4}, seqan3::mismatch_score{-2}}} |
1919
seqan3::align_cfg::gap{seqan3::gap_scheme{seqan3::gap_score{-4}}} |

include/seqan3/alignment/configuration/align_config_edit.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace seqan3::align_cfg
4949
* trigger the slower algorithm which can handle the case if the ends are free in the second sequence instead of the
5050
* first sequence.
5151
*/
52-
inline constexpr configuration edit = method_global | scoring{nucleotide_scoring_scheme{}} |
52+
inline constexpr configuration edit = method_global{} | scoring{nucleotide_scoring_scheme{}} |
5353
gap{gap_scheme{gap_score{-1}}};
5454

5555
} // namespace seqan3

include/seqan3/alignment/configuration/align_config_method.hpp

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,6 @@
2323
namespace seqan3::detail
2424
{
2525

26-
//!\brief A strong type to select the global alignment method.
27-
//!\ingroup alignment_configuration
28-
struct method_global_tag : public pipeable_config_element<method_global_tag>
29-
{
30-
//!\privatesection
31-
//!\brief An internal id used to check for a valid alignment configuration.
32-
static constexpr detail::align_config_id id{detail::align_config_id::global};
33-
};
34-
3526
//!\brief A strong type to select the local alignment method.
3627
//!\ingroup alignment_configuration
3728
struct method_local_tag : public pipeable_config_element<method_local_tag>
@@ -108,6 +99,55 @@ struct free_end_gaps_sequence2_trailing : public seqan3::detail::strong_type<boo
10899
* \ingroup alignment_configuration
109100
* \copydetails seqan3::align_cfg::method_local
110101
*/
111-
inline constexpr seqan3::detail::method_global_tag method_global{};
102+
struct method_global : public pipeable_config_element<method_global>
103+
{
104+
/*!\name Constructors, destructor and assignment
105+
* \{
106+
*/
107+
method_global() = default; //!< Defaulted.
108+
method_global(method_global const &) = default; //!< Defaulted.
109+
method_global(method_global &&) = default; //!< Defaulted.
110+
method_global & operator=(method_global const &) = default; //!< Defaulted.
111+
method_global & operator=(method_global &&) = default; //!< Defaulted.
112+
~method_global() = default; //!< Defaulted.
113+
114+
/*!\brief Construct method_global with a specific free end gap configuration.
115+
* \param[in] free_sequence1_leading An instance of seqan3::align_cfg::free_end_gaps_sequence1_leading that
116+
* indicates whether leading gaps in sequence1 should be freed (not penalised)
117+
* `true` or not `false`;
118+
* \param[in] free_sequence2_leading An instance of seqan3::align_cfg::free_end_gaps_sequence2_leading that
119+
* indicates whether leading gaps in sequence2 should be freed (not penalised)
120+
* `true` or not `false`;
121+
* \param[in] free_sequence1_trailing An instance of seqan3::align_cfg::free_end_gaps_sequence1_trailing that
122+
* indicates whether trailing gaps in sequence1 should be freed (not penalised)
123+
* `true` or not `false`;
124+
* \param[in] free_sequence2_trailing An instance of seqan3::align_cfg::free_end_gaps_sequence2_trailing that
125+
* indicates whether trailing gaps in sequence2 should be freed (not penalised)
126+
* `true` or not `false`;
127+
*/
128+
constexpr method_global(seqan3::align_cfg::free_end_gaps_sequence1_leading free_sequence1_leading,
129+
seqan3::align_cfg::free_end_gaps_sequence2_leading free_sequence2_leading,
130+
seqan3::align_cfg::free_end_gaps_sequence1_trailing free_sequence1_trailing,
131+
seqan3::align_cfg::free_end_gaps_sequence2_trailing free_sequence2_trailing) noexcept :
132+
free_end_gaps_sequence1_leading{free_sequence1_leading.get()},
133+
free_end_gaps_sequence2_leading{free_sequence2_leading.get()},
134+
free_end_gaps_sequence1_trailing{free_sequence1_trailing.get()},
135+
free_end_gaps_sequence2_trailing{free_sequence2_trailing.get()}
136+
{}
137+
//!\}
138+
139+
//!\brief If set to `true`, leading gaps in sequence1 are not penalized when computing the optimal alignment.
140+
seqan3::align_cfg::free_end_gaps_sequence1_leading free_end_gaps_sequence1_leading{false};
141+
//!\brief If set to `true`, leading gaps in sequence2 are not penalized when computing the optimal alignment.
142+
seqan3::align_cfg::free_end_gaps_sequence2_leading free_end_gaps_sequence2_leading{false};
143+
//!\brief If set to `true`, trailing gaps in sequence1 are not penalized when computing the optimal alignment.
144+
seqan3::align_cfg::free_end_gaps_sequence1_trailing free_end_gaps_sequence1_trailing{false};
145+
//!\brief If set to `true`, trailing gaps in sequence2 are not penalized when computing the optimal alignment.
146+
seqan3::align_cfg::free_end_gaps_sequence2_trailing free_end_gaps_sequence2_trailing{false};
147+
148+
//!\privatesection
149+
//!\brief An internal id used to check for a valid alignment configuration.
150+
static constexpr detail::align_config_id id{detail::align_config_id::global};
151+
};
112152

113153
} // namespace seqan3::align_cfg

include/seqan3/alignment/pairwise/alignment_configurator.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ struct alignment_contract
131131
//!\brief Expects alignment configurations.
132132
constexpr static bool expects_alignment_configuration()
133133
{
134-
const bool is_global = alignment_config_type::template exists<seqan3::detail::method_global_tag>();
134+
const bool is_global = alignment_config_type::template exists<seqan3::align_cfg::method_global>();
135135
const bool is_local = alignment_config_type::template exists<seqan3::detail::method_local_tag>();
136136

137137
return (is_global || is_local);
@@ -317,7 +317,7 @@ struct alignment_configurator
317317
auto const & scoring_scheme = get<align_cfg::scoring>(cfg).value;
318318
auto align_ends_cfg = config_with_result_type.get_or(align_cfg::aligned_ends{free_ends_none}).value;
319319

320-
if constexpr (config_t::template exists<seqan3::detail::method_global_tag>())
320+
if constexpr (config_t::template exists<seqan3::align_cfg::method_global>())
321321
{
322322
// Only use edit distance if ...
323323
if (gaps.get_gap_open_score() == 0 && // gap open score is not set,
@@ -550,7 +550,7 @@ constexpr function_wrapper_t alignment_configurator::configure_scoring_scheme(co
550550
typename traits_t::score_type,
551551
typename traits_t::scoring_scheme_alphabet_type,
552552
typename std::conditional_t<traits_t::is_global,
553-
seqan3::detail::method_global_tag,
553+
seqan3::align_cfg::method_global,
554554
seqan3::detail::method_local_tag>>,
555555
typename traits_t::scoring_scheme_type>;
556556

0 commit comments

Comments
 (0)