SeqAn3 3.1.0
The Modern C++ library for sequence analysis.
output_format_concept.hpp
Go to the documentation of this file.
1// -----------------------------------------------------------------------------------------------------
2// Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3// Copyright (c) 2016-2021, 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 <fstream>
16#include <string>
17#include <vector>
18
29
30namespace seqan3::detail
31{
32
45template <typename format_type>
46struct sam_file_output_format_exposer : public format_type
47{
48public:
49 // Can't use `using format_type::write_alignment_record` as it produces a hard failure in the format concept check
50 // for types that do not model the format concept, i.e. don't offer the proper write_alignment_record interface.
52 template <typename ...ts>
53 void write_alignment_record(ts && ...args)
54 {
55 format_type::write_alignment_record(std::forward<ts>(args)...);
56 }
57};
58
59} // namespace seqan3::detail
60
61namespace seqan3
62{
63
76template <typename t>
77SEQAN3_CONCEPT sam_file_output_format =
78 requires (detail::sam_file_output_format_exposer<t> & v,
79 std::ofstream & stream,
80 sam_file_output_options & options,
81 sam_file_header<> & header,
82 dna5_vector & seq,
85 int32_t & offset,
86 dna5_vector & ref_seq,
91 sam_flag & flag,
92 uint8_t & mapq,
94 sam_tag_dictionary & tag_dict,
95 double & e_value,
96 double & bit_score)
97{
98 t::file_extensions;
99
100 SEQAN3_RETURN_TYPE_CONSTRAINT(v.write_alignment_record(stream,
101 options,
102 header,
103 seq,
104 qual,
105 id,
106 offset,
107 ref_seq,
108 ref_id,
109 ref_offset,
110 align,
111 cigar,
112 flag,
113 mapq,
114 mate,
115 tag_dict,
116 e_value,
117 bit_score),
118 std::same_as, void);
119};
121
188
189} // namespace seqan3
190
191namespace seqan3::detail
192{
193
199template <typename t>
200constexpr bool is_type_list_of_sam_file_output_formats_v = false;
201
207template <typename ...ts>
208constexpr bool is_type_list_of_sam_file_output_formats_v<type_list<ts...>> = (sam_file_output_format<ts> && ...);
209
215template <typename t>
216SEQAN3_CONCEPT type_list_of_sam_file_output_formats = is_type_list_of_sam_file_output_formats_v<t>;
217} // namespace seqan3::detail
Provides aliases for qualified.
T align(T... args)
Provides the seqan3::cigar alphabet.
Provides seqan3::dna5, container aliases and string literals.
Provides seqan3::gapped.
sam_flag
An enum flag that describes the properties of an aligned read (given as a SAM record).
Definition: sam_flag.hpp:76
@ flag
The alignment flag (bit information), uint16_t value.
@ ref_offset
Sequence (seqan3::field::ref_seq) relative start position (0-based), unsigned value.
@ ref_seq
The (reference) "sequence" information, usually a range of nucleotides or amino acids.
@ cigar
The cigar vector (std::vector<seqan3::cigar>) representing the alignment in SAM/BAM format.
@ mapq
The mapping quality of the seqan3::field::seq alignment, usually a Phred-scaled score.
@ bit_score
The bit score (statistical significance indicator), unsigned value.
@ offset
Sequence (seqan3::field::seq) relative start position (0-based), unsigned value.
@ mate
The mate pair information given as a std::tuple of reference name, offset and template length.
@ ref_id
The identifier of the (reference) sequence that seqan3::field::seq was aligned to.
@ id
The identifier, usually a string.
@ seq
The "sequence", usually a range of nucleotides or amino acids.
@ qual
The qualities, usually in Phred score notation.
Provides the seqan3::sam_file_header class.
The generic concept for alignment file out formats.
The main SeqAn3 namespace.
Definition: cigar_operation_table.hpp:2
Provides seqan3::phred42 quality scores.
#define SEQAN3_RETURN_TYPE_CONSTRAINT(expression, concept_name,...)
Same as writing {expression} -> concept_name<type1[, ...]> in a concept definition.
Definition: platform.hpp:57
Provides seqan3::sam_file_output_options.
Provides helper data structures for the seqan3::sam_file_output.
Provides the seqan3::sam_tag_dictionary class and auxiliaries.
Provides seqan3::type_list.