SeqAn3  3.2.0
The Modern C++ library for sequence analysis.
sam_file/input_format_concept.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 <fstream>
16 #include <optional>
17 #include <string>
18 #include <vector>
19 
31 
32 namespace seqan3::detail
33 {
34 
45 template <typename format_type>
46 struct sam_file_input_format_exposer : public format_type
47 {
48 public:
49  // Can't use `using format_type::read_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 read_alignment_record interface.
52  template <typename... ts>
53  void read_alignment_record(ts &&... args)
54  {
55  format_type::read_alignment_record(std::forward<ts>(args)...);
56  }
57 };
58 
59 } // namespace seqan3::detail
60 
61 namespace seqan3
62 {
63 
77 template <typename t>
78 concept sam_file_input_format = requires (detail::sam_file_input_format_exposer<t> & v,
79  std::ifstream & stream,
80  sam_file_input_options<dna5> & options,
81  std::vector<dna5_vector> & ref_sequences,
82  sam_file_header<> & header,
83  std::streampos & position_buffer,
84  dna5_vector & seq,
85  std::vector<phred42> & qual,
86  std::string & id,
87  int32_t & offset,
88  dna5_vector & ref_seq,
89  std::optional<int32_t> & ref_id,
90  std::optional<int32_t> & ref_offset,
91  std::pair<std::vector<gapped<dna4>>, std::vector<gapped<dna4>>> & align,
92  std::vector<cigar> & cigar,
93  sam_flag & flag,
94  uint8_t & mapq,
96  sam_tag_dictionary & tag_dict,
97  double & e_value,
98  double & bit_score) {
99  t::file_extensions;
100  // std::same_as<decltype(t::file_extensions), std::vector<std::string>>;
101 
102  {
103  v.read_alignment_record(stream,
104  options,
105  ref_sequences,
106  header,
107  position_buffer,
108  seq,
109  qual,
110  id,
111  offset,
112  ref_seq,
113  ref_id,
114  ref_offset,
115  align,
116  cigar,
117  flag,
118  mapq,
119  mate,
120  tag_dict,
121  e_value,
122  bit_score)
123  };
124 
125  {
126  v.read_alignment_record(stream,
127  options,
128  std::ignore,
129  header,
130  position_buffer,
131  std::ignore,
132  std::ignore,
133  std::ignore,
134  std::ignore,
135  std::ignore,
136  std::ignore,
137  std::ignore,
138  std::ignore,
139  std::ignore,
140  std::ignore,
141  std::ignore,
142  std::ignore,
143  std::ignore,
144  std::ignore,
145  std::ignore)
146  };
147  };
149 
229 
230 } // namespace seqan3
231 
232 namespace seqan3::detail
233 {
234 
240 template <typename t>
241 constexpr bool is_type_list_of_sam_file_input_formats_v = false;
242 
248 template <typename... ts>
249 constexpr bool is_type_list_of_sam_file_input_formats_v<type_list<ts...>> = (sam_file_input_format<ts> && ...);
250 
256 template <typename t>
257 concept type_list_of_sam_file_input_formats = is_type_list_of_sam_file_input_formats_v<t>;
258 
259 } // namespace seqan3::detail
Provides aliases for qualified.
Provides the seqan3::cigar alphabet.
Provides seqan3::dna4, container aliases and string literals.
Provides seqan3::dna5, container aliases and string literals.
Provides seqan3::gapped.
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164
sam_flag
An enum flag that describes the properties of an aligned read (given as a SAM record).
Definition: sam_flag.hpp:76
Provides the seqan3::sam_file_header class.
The generic concept for alignment file input formats.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides seqan3::phred42 quality scores.
Provides seqan3::sam_file_input_options.
Provides helper data structures for the seqan3::sam_file_output.
Provides the seqan3::sam_tag_dictionary class and auxiliaries.
Provides seqan3::type_list.