SeqAn3 3.3.0-rc.1
The Modern C++ library for sequence analysis.
sam_file/record.hpp
Go to the documentation of this file.
1// -----------------------------------------------------------------------------------------------------
2// Copyright (c) 2006-2022, Knut Reinert & Freie Universität Berlin
3// Copyright (c) 2016-2022, Knut Reinert & MPI für molekulare Genetik
4// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6// -----------------------------------------------------------------------------------------------------
7
13#pragma once
14
15#include <seqan3/io/record.hpp>
16
17namespace seqan3
18{
27template <typename field_types, typename field_ids>
28class sam_record : public record<field_types, field_ids>
29{
32
34 using tuple_base_t = typename base_t::base_type;
35
37 template <field f>
38 using field_constant = typename base_t::template field_constant<f>;
39
40 using base_t::get_impl;
41
42public:
46 sam_record() = default;
47 sam_record(sam_record const &) = default;
48 sam_record & operator=(sam_record const &) = default;
49 sam_record(sam_record &&) = default;
51 ~sam_record() = default;
52
54 using base_t::base_t;
56
60 decltype(auto) id() &&
61 {
62 return get_impl(field_constant<seqan3::field::id>{}, static_cast<tuple_base_t &&>(*this));
63 }
65 decltype(auto) id() const &&
66 {
67 return get_impl(field_constant<seqan3::field::id>{}, static_cast<tuple_base_t const &&>(*this));
68 }
70 decltype(auto) id() &
71 {
72 return get_impl(field_constant<seqan3::field::id>{}, static_cast<tuple_base_t &>(*this));
73 }
75 decltype(auto) id() const &
76 {
77 return get_impl(field_constant<seqan3::field::id>{}, static_cast<tuple_base_t const &>(*this));
78 }
79
83 decltype(auto) sequence() &&
84 {
85 return get_impl(field_constant<seqan3::field::seq>{}, static_cast<tuple_base_t &&>(*this));
86 }
88 decltype(auto) sequence() const &&
89 {
90 return get_impl(field_constant<seqan3::field::seq>{}, static_cast<tuple_base_t const &&>(*this));
91 }
93 decltype(auto) sequence() &
94 {
95 return get_impl(field_constant<seqan3::field::seq>{}, static_cast<tuple_base_t &>(*this));
96 }
98 decltype(auto) sequence() const &
99 {
100 return get_impl(field_constant<seqan3::field::seq>{}, static_cast<tuple_base_t const &>(*this));
101 }
102
106 decltype(auto) base_qualities() &&
107 {
108 return get_impl(field_constant<seqan3::field::qual>{}, static_cast<tuple_base_t &&>(*this));
109 }
111 decltype(auto) base_qualities() const &&
112 {
113 return get_impl(field_constant<seqan3::field::qual>{}, static_cast<tuple_base_t const &&>(*this));
114 }
116 decltype(auto) base_qualities() &
117 {
118 return get_impl(field_constant<seqan3::field::qual>{}, static_cast<tuple_base_t &>(*this));
119 }
121 decltype(auto) base_qualities() const &
122 {
123 return get_impl(field_constant<seqan3::field::qual>{}, static_cast<tuple_base_t const &>(*this));
124 }
125
137 {
138 return static_cast<int32_t>(0);
139 }
141 SEQAN3_DEPRECATED_340 decltype(auto) sequence_position() const &&
142 {
143 return static_cast<int32_t>(0);
144 }
147 {
148 return static_cast<int32_t>(0);
149 }
152 {
153 return static_cast<int32_t>(0);
154 }
155
161 {}
163 SEQAN3_DEPRECATED_340 decltype(auto) alignment() const &&
164 {}
167 {}
169 SEQAN3_DEPRECATED_340 decltype(auto) alignment() const &
170 {}
171
176 decltype(auto) reference_id() &&
177 {
178 return get_impl(field_constant<seqan3::field::ref_id>{}, static_cast<tuple_base_t &&>(*this));
179 }
181 decltype(auto) reference_id() const &&
182 {
183 return get_impl(field_constant<seqan3::field::ref_id>{}, static_cast<tuple_base_t const &&>(*this));
184 }
186 decltype(auto) reference_id() &
187 {
188 return get_impl(field_constant<seqan3::field::ref_id>{}, static_cast<tuple_base_t &>(*this));
189 }
191 decltype(auto) reference_id() const &
192 {
193 return get_impl(field_constant<seqan3::field::ref_id>{}, static_cast<tuple_base_t const &>(*this));
194 }
195
199 decltype(auto) reference_sequence() = delete;
200
205 decltype(auto) reference_position() &&
206 {
207 return get_impl(field_constant<seqan3::field::ref_offset>{}, static_cast<tuple_base_t &&>(*this));
208 }
210 decltype(auto) reference_position() const &&
211 {
212 return get_impl(field_constant<seqan3::field::ref_offset>{}, static_cast<tuple_base_t const &&>(*this));
213 }
215 decltype(auto) reference_position() &
216 {
217 return get_impl(field_constant<seqan3::field::ref_offset>{}, static_cast<tuple_base_t &>(*this));
218 }
220 decltype(auto) reference_position() const &
221 {
222 return get_impl(field_constant<seqan3::field::ref_offset>{}, static_cast<tuple_base_t const &>(*this));
223 }
224
230 decltype(auto) header_ptr() &&
231 {
232 return get_impl(field_constant<seqan3::field::header_ptr>{}, static_cast<tuple_base_t &&>(*this));
233 }
235 decltype(auto) header_ptr() const &&
236 {
237 return get_impl(field_constant<seqan3::field::header_ptr>{}, static_cast<tuple_base_t const &&>(*this));
238 }
240 decltype(auto) header_ptr() &
241 {
242 return get_impl(field_constant<seqan3::field::header_ptr>{}, static_cast<tuple_base_t &>(*this));
243 }
245 decltype(auto) header_ptr() const &
246 {
247 return get_impl(field_constant<seqan3::field::header_ptr>{}, static_cast<tuple_base_t const &>(*this));
248 }
249
253 decltype(auto) flag() &&
254 {
255 return get_impl(field_constant<seqan3::field::flag>{}, static_cast<tuple_base_t &&>(*this));
256 }
258 decltype(auto) flag() const &&
259 {
260 return get_impl(field_constant<seqan3::field::flag>{}, static_cast<tuple_base_t const &&>(*this));
261 }
263 decltype(auto) flag() &
264 {
265 return get_impl(field_constant<seqan3::field::flag>{}, static_cast<tuple_base_t &>(*this));
266 }
268 decltype(auto) flag() const &
269 {
270 return get_impl(field_constant<seqan3::field::flag>{}, static_cast<tuple_base_t const &>(*this));
271 }
272
280 decltype(auto) mate_reference_id() &&
281 {
282 return std::get<0>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t &&>(*this)));
283 }
285 decltype(auto) mate_reference_id() const &&
286 {
287 return std::get<0>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t const &&>(*this)));
288 }
290 decltype(auto) mate_reference_id() &
291 {
292 return std::get<0>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t &>(*this)));
293 }
295 decltype(auto) mate_reference_id() const &
296 {
297 return std::get<0>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t const &>(*this)));
298 }
299
303 decltype(auto) mate_position() &&
304 {
305 return std::get<1>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t &&>(*this)));
306 }
308 decltype(auto) mate_position() const &&
309 {
310 return std::get<1>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t const &&>(*this)));
311 }
313 decltype(auto) mate_position() &
314 {
315 return std::get<1>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t &>(*this)));
316 }
318 decltype(auto) mate_position() const &
319 {
320 return std::get<1>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t const &>(*this)));
321 }
322
326 decltype(auto) template_length() &&
327 {
328 return std::get<2>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t &&>(*this)));
329 }
331 decltype(auto) template_length() const &&
332 {
333 return std::get<2>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t const &&>(*this)));
334 }
336 decltype(auto) template_length() &
337 {
338 return std::get<2>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t &>(*this)));
339 }
341 decltype(auto) template_length() const &
342 {
343 return std::get<2>(get_impl(field_constant<seqan3::field::mate>{}, static_cast<tuple_base_t const &>(*this)));
344 }
345
349 decltype(auto) mapping_quality() &&
350 {
351 return get_impl(field_constant<seqan3::field::mapq>{}, static_cast<tuple_base_t &&>(*this));
352 }
354 decltype(auto) mapping_quality() const &&
355 {
356 return get_impl(field_constant<seqan3::field::mapq>{}, static_cast<tuple_base_t const &&>(*this));
357 }
359 decltype(auto) mapping_quality() &
360 {
361 return get_impl(field_constant<seqan3::field::mapq>{}, static_cast<tuple_base_t &>(*this));
362 }
364 decltype(auto) mapping_quality() const &
365 {
366 return get_impl(field_constant<seqan3::field::mapq>{}, static_cast<tuple_base_t const &>(*this));
367 }
368
372 decltype(auto) cigar_sequence() &&
373 {
374 return get_impl(field_constant<seqan3::field::cigar>{}, static_cast<tuple_base_t &&>(*this));
375 }
377 decltype(auto) cigar_sequence() const &&
378 {
379 return get_impl(field_constant<seqan3::field::cigar>{}, static_cast<tuple_base_t const &&>(*this));
380 }
382 decltype(auto) cigar_sequence() &
383 {
384 return get_impl(field_constant<seqan3::field::cigar>{}, static_cast<tuple_base_t &>(*this));
385 }
387 decltype(auto) cigar_sequence() const &
388 {
389 return get_impl(field_constant<seqan3::field::cigar>{}, static_cast<tuple_base_t const &>(*this));
390 }
391
395 decltype(auto) tags() &&
396 {
397 return get_impl(field_constant<seqan3::field::tags>{}, static_cast<tuple_base_t &&>(*this));
398 }
400 decltype(auto) tags() const &&
401 {
402 return get_impl(field_constant<seqan3::field::tags>{}, static_cast<tuple_base_t const &&>(*this));
403 }
405 decltype(auto) tags() &
406 {
407 return get_impl(field_constant<seqan3::field::tags>{}, static_cast<tuple_base_t &>(*this));
408 }
410 decltype(auto) tags() const &
411 {
412 return get_impl(field_constant<seqan3::field::tags>{}, static_cast<tuple_base_t const &>(*this));
413 }
414};
415} // namespace seqan3
416
417namespace std
418{
419
425template <typename field_types, typename field_ids>
426struct tuple_size<seqan3::sam_record<field_types, field_ids>> :
427 tuple_size<typename seqan3::sam_record<field_types, field_ids>::base_type>
428{};
429
435template <size_t elem_no, typename field_types, typename field_ids>
436struct tuple_element<elem_no, seqan3::sam_record<field_types, field_ids>> :
437 tuple_element<elem_no, typename seqan3::sam_record<field_types, field_ids>::base_type>
438{};
439
440} // namespace std
The record type of seqan3::sam_file_input.
Definition: sam_file/record.hpp:29
decltype(auto) reference_position() const &
(Reference) Sequence (seqan3::sam_record::reference_sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:220
decltype(auto) header_ptr() const &&
A pointer to the seqan3::sam_file_header object storing header information.
Definition: sam_file/record.hpp:235
SEQAN3_DEPRECATED_340 decltype(auto) sequence_position() &
[DEPRECATED] Sequence (seqan3::sam_record::sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:146
SEQAN3_DEPRECATED_340 decltype(auto) sequence_position() const &&
[DEPRECATED] Sequence (seqan3::sam_record::sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:141
decltype(auto) flag() const &
The alignment flag (bit information), uint16_t value. (SAM Column ID: FLAG)
Definition: sam_file/record.hpp:268
SEQAN3_DEPRECATED_340 decltype(auto) alignment() &
[DEPRECATED] The (pairwise) alignment stored in an object that models seqan3::detail::pairwise_alignm...
Definition: sam_file/record.hpp:166
decltype(auto) cigar_sequence() &
The cigar vector representing the alignment. (SAM Column ID: CIGAR)
Definition: sam_file/record.hpp:382
decltype(auto) mate_reference_id() &&
The identifier of the (reference) sequence of the mate. (SAM Column ID: RNEXT)
Definition: sam_file/record.hpp:280
decltype(auto) cigar_sequence() &&
The cigar vector representing the alignment. (SAM Column ID: CIGAR)
Definition: sam_file/record.hpp:372
SEQAN3_DEPRECATED_340 decltype(auto) sequence_position() const &
[DEPRECATED] Sequence (seqan3::sam_record::sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:151
decltype(auto) reference_id() const &&
The identifier of the (reference) sequence that seqan3::sam_record::sequence was aligned to....
Definition: sam_file/record.hpp:181
decltype(auto) base_qualities() const &
The qualities, usually in Phred score notation. (SAM Column ID: QUAL)
Definition: sam_file/record.hpp:121
decltype(auto) header_ptr() &&
A pointer to the seqan3::sam_file_header object storing header information.
Definition: sam_file/record.hpp:230
decltype(auto) base_qualities() const &&
The qualities, usually in Phred score notation. (SAM Column ID: QUAL)
Definition: sam_file/record.hpp:111
decltype(auto) template_length() const &
The observed template length. (SAM Column ID: TLEN)
Definition: sam_file/record.hpp:341
decltype(auto) mate_reference_id() const &&
The identifier of the (reference) sequence of the mate. (SAM Column ID: RNEXT)
Definition: sam_file/record.hpp:285
decltype(auto) sequence() &
The "sequence", usually a range of nucleotides or amino acids. (SAM Column ID: SEQ)
Definition: sam_file/record.hpp:93
decltype(auto) mapping_quality() &&
The mapping quality of the alignment, usually a Phred-scaled score. (SAM Column ID: MAPQ)
Definition: sam_file/record.hpp:349
decltype(auto) reference_id() &
The identifier of the (reference) sequence that seqan3::sam_record::sequence was aligned to....
Definition: sam_file/record.hpp:186
decltype(auto) sequence() const &&
The "sequence", usually a range of nucleotides or amino acids. (SAM Column ID: SEQ)
Definition: sam_file/record.hpp:88
decltype(auto) reference_position() &&
(Reference) Sequence (seqan3::sam_record::reference_sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:205
sam_record & operator=(sam_record &&)=default
Defaulted.
decltype(auto) template_length() const &&
The observed template length. (SAM Column ID: TLEN)
Definition: sam_file/record.hpp:331
decltype(auto) mate_position() &
(Reference) Sequence relative start position (0-based) of the mate. (SAM Column ID: PNEXT)
Definition: sam_file/record.hpp:313
sam_record(sam_record const &)=default
Defaulted.
decltype(auto) tags() const &
The optional tags in the SAM format.
Definition: sam_file/record.hpp:410
decltype(auto) reference_id() &&
The identifier of the (reference) sequence that seqan3::sam_record::sequence was aligned to....
Definition: sam_file/record.hpp:176
decltype(auto) flag() &&
The alignment flag (bit information), uint16_t value. (SAM Column ID: FLAG)
Definition: sam_file/record.hpp:253
decltype(auto) tags() &
The optional tags in the SAM format.
Definition: sam_file/record.hpp:405
decltype(auto) flag() const &&
The alignment flag (bit information), uint16_t value. (SAM Column ID: FLAG)
Definition: sam_file/record.hpp:258
decltype(auto) header_ptr() const &
A pointer to the seqan3::sam_file_header object storing header information.
Definition: sam_file/record.hpp:245
decltype(auto) base_qualities() &&
The qualities, usually in Phred score notation. (SAM Column ID: QUAL)
Definition: sam_file/record.hpp:106
decltype(auto) mapping_quality() &
The mapping quality of the alignment, usually a Phred-scaled score. (SAM Column ID: MAPQ)
Definition: sam_file/record.hpp:359
SEQAN3_DEPRECATED_340 decltype(auto) alignment() &&
[DEPRECATED] The (pairwise) alignment stored in an object that models seqan3::detail::pairwise_alignm...
Definition: sam_file/record.hpp:160
decltype(auto) template_length() &
The observed template length. (SAM Column ID: TLEN)
Definition: sam_file/record.hpp:336
decltype(auto) tags() const &&
The optional tags in the SAM format.
Definition: sam_file/record.hpp:400
decltype(auto) tags() &&
The optional tags in the SAM format.
Definition: sam_file/record.hpp:395
decltype(auto) flag() &
The alignment flag (bit information), uint16_t value. (SAM Column ID: FLAG)
Definition: sam_file/record.hpp:263
sam_record()=default
Defaulted.
sam_record(sam_record &&)=default
Defaulted.
decltype(auto) reference_position() &
(Reference) Sequence (seqan3::sam_record::reference_sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:215
decltype(auto) cigar_sequence() const &
The cigar vector representing the alignment. (SAM Column ID: CIGAR)
Definition: sam_file/record.hpp:387
decltype(auto) reference_id() const &
The identifier of the (reference) sequence that seqan3::sam_record::sequence was aligned to....
Definition: sam_file/record.hpp:191
SEQAN3_DEPRECATED_340 decltype(auto) sequence_position() &&
[DEPRECATED] Sequence (seqan3::sam_record::sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:136
decltype(auto) mate_position() &&
(Reference) Sequence relative start position (0-based) of the mate. (SAM Column ID: PNEXT)
Definition: sam_file/record.hpp:303
decltype(auto) reference_sequence()=delete
The (reference) "sequence" information, usually a range of nucleotides or amino acids....
sam_record & operator=(sam_record const &)=default
Defaulted.
decltype(auto) cigar_sequence() const &&
The cigar vector representing the alignment. (SAM Column ID: CIGAR)
Definition: sam_file/record.hpp:377
decltype(auto) sequence() const &
The "sequence", usually a range of nucleotides or amino acids. (SAM Column ID: SEQ)
Definition: sam_file/record.hpp:98
SEQAN3_DEPRECATED_340 decltype(auto) alignment() const &
[DEPRECATED] The (pairwise) alignment stored in an object that models seqan3::detail::pairwise_alignm...
Definition: sam_file/record.hpp:169
SEQAN3_DEPRECATED_340 decltype(auto) alignment() const &&
[DEPRECATED] The (pairwise) alignment stored in an object that models seqan3::detail::pairwise_alignm...
Definition: sam_file/record.hpp:163
decltype(auto) mate_position() const &
(Reference) Sequence relative start position (0-based) of the mate. (SAM Column ID: PNEXT)
Definition: sam_file/record.hpp:318
~sam_record()=default
Defaulted.
decltype(auto) header_ptr() &
A pointer to the seqan3::sam_file_header object storing header information.
Definition: sam_file/record.hpp:240
decltype(auto) mate_position() const &&
(Reference) Sequence relative start position (0-based) of the mate. (SAM Column ID: PNEXT)
Definition: sam_file/record.hpp:308
decltype(auto) mapping_quality() const &
The mapping quality of the alignment, usually a Phred-scaled score. (SAM Column ID: MAPQ)
Definition: sam_file/record.hpp:364
decltype(auto) mate_reference_id() &
The identifier of the (reference) sequence of the mate. (SAM Column ID: RNEXT)
Definition: sam_file/record.hpp:290
decltype(auto) mapping_quality() const &&
The mapping quality of the alignment, usually a Phred-scaled score. (SAM Column ID: MAPQ)
Definition: sam_file/record.hpp:354
decltype(auto) sequence() &&
The "sequence", usually a range of nucleotides or amino acids. (SAM Column ID: SEQ)
Definition: sam_file/record.hpp:83
decltype(auto) reference_position() const &&
(Reference) Sequence (seqan3::sam_record::reference_sequence) relative start position (0-based),...
Definition: sam_file/record.hpp:210
decltype(auto) base_qualities() &
The qualities, usually in Phred score notation. (SAM Column ID: QUAL)
Definition: sam_file/record.hpp:116
decltype(auto) template_length() &&
The observed template length. (SAM Column ID: TLEN)
Definition: sam_file/record.hpp:326
decltype(auto) mate_reference_id() const &
The identifier of the (reference) sequence of the mate. (SAM Column ID: RNEXT)
Definition: sam_file/record.hpp:295
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
SeqAn specific customisations in the standard namespace.
#define SEQAN3_DEPRECATED_340
Deprecation message for SeqAn 3.4.0 release.
Definition: platform.hpp:194
Provides the seqan3::record template and the seqan3::field enum.
The class template that file records are based on; behaves like a std::tuple.
Definition: record.hpp:192
detail::transfer_template_args_onto_t< field_types, std::tuple > base_type
A specialisation of std::tuple.
Definition: record.hpp:217