50 #include <range/v3/view/zip.hpp> 97 template<
typename reference_
char_type,
typename query_
char_type>
99 requires std::detail::WeaklyEqualityComparableWith<reference_char_type, gap> &&
100 std::detail::WeaklyEqualityComparableWith<query_char_type, gap>
102 char compare_aligned_values(reference_char_type
const reference_char,
103 query_char_type
const query_char,
104 bool const extended_cigar)
106 return (reference_char == gap::GAP)
107 ? (query_char == gap::GAP)
110 : (query_char == gap::GAP)
113 ? (query_char == reference_char)
150 template<std::ranges::ForwardRange ref_seq_type, std::ranges::ForwardRange query_seq_type>
152 requires std::detail::WeaklyEqualityComparableWith<gap, reference_t<ref_seq_type>> &&
153 std::detail::WeaklyEqualityComparableWith<gap, reference_t<query_seq_type>>
155 std::string get_cigar_string(ref_seq_type && ref_seq,
156 query_seq_type && query_seq,
157 uint32_t
const query_start_pos = 0,
158 uint32_t
const query_end_pos = 0,
159 bool const extended_cigar =
false)
161 if (ref_seq.size() != query_seq.size())
162 throw std::logic_error(
"The aligned sequences must have the same length.");
164 std::ostringstream result;
167 return std::string();
171 result << query_start_pos <<
'S';
176 char tmp_char{compare_aligned_values(ref_seq[0], query_seq[0], extended_cigar)};
177 unsigned tmp_length{0};
180 for (
auto column : ranges::view::zip(ref_seq, query_seq))
182 char next_op = compare_aligned_values(std::get<0>(column), std::get<1>(column), extended_cigar);
184 if (tmp_char == next_op)
190 result << tmp_length << tmp_char;
196 result << tmp_length << tmp_char;
200 result << query_end_pos <<
'S';
245 template<tuple_like_concept alignment_type>
247 requires std::tuple_size_v<remove_cvref_t<alignment_type>> == 2
249 std::string get_cigar_string(alignment_type && alignment,
250 uint32_t
const query_start_pos = 0,
251 uint32_t
const query_end_pos = 0,
252 bool const extended_cigar =
false)
254 return get_cigar_string(get<0>(alignment), get<1>(alignment),
255 query_start_pos, query_end_pos, extended_cigar);
Includes the aligned_sequence_concept and the related insert_gap and erase_gap functions to enable st...
Provides seqan3::tuple_like_concept.
Adaptations of concepts from the Ranges TS.
Definition: aligned_sequence_concept.hpp:288