SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
Loading...
Searching...
No Matches
structure_file/input_format_concept.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2006-2024 Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2024 Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
10#pragma once
11
12#include <fstream>
13#include <set>
14#include <string>
15#include <utility>
16#include <vector>
17
23
24namespace seqan3::detail
25{
26
37template <typename format_type>
38struct structure_file_input_format_exposer : public format_type
39{
40public:
41 // Can't use `using format_type::read_structure_record` as it produces a hard failure in the format concept check
42 // for types that do not model the format concept, i.e. don't offer the proper read_structure_record interface.
44 template <typename... ts>
45 void read_structure_record(ts &&... args)
46 {
47 format_type::read_structure_record(std::forward<ts>(args)...);
48 }
49};
50
51} // namespace seqan3::detail
52
53namespace seqan3
54{
55
69template <typename t>
70concept structure_file_input_format = requires (detail::structure_file_input_format_exposer<t> & v,
71 std::ifstream & f,
72 structure_file_input_options<rna5, false> & options,
73 rna5_vector & seq,
78 double energy,
79 double react,
80 double react_err,
82 size_t offset) {
83 t::file_extensions;
84
85 {
86 v.read_structure_record(f, options, seq, id, bpp, structure, energy, react, react_err, comment, offset)
87 } -> std::same_as<void>;
88
89 {
90 v.read_structure_record(f,
91 options,
92 seq,
93 id,
94 bpp,
95 std::ignore,
96 std::ignore,
97 std::ignore,
98 std::ignore,
99 std::ignore,
100 std::ignore)
101 } -> std::same_as<void>;
102
103 {
104 v.read_structure_record(f,
105 options,
107 id,
108 std::ignore,
110 energy,
111 std::ignore,
112 std::ignore,
113 std::ignore,
114 std::ignore)
115 } -> std::same_as<void>;
116
117 // This one is required to be a valid call, but should always throw at run-time.
118 {
119 v.read_structure_record(f,
120 options,
121 std::ignore,
122 std::ignore,
123 std::ignore,
124 std::ignore,
125 std::ignore,
126 std::ignore,
127 std::ignore,
128 std::ignore,
129 std::ignore)
130 } -> std::same_as<void>;
131};
133
134// Workaround for https://github.com/doxygen/doxygen/issues/9379
135#if SEQAN3_DOXYGEN_ONLY(1) 0
136template <typename t>
139#endif
140
201
202} // namespace seqan3
203
204namespace seqan3::detail
205{
206
212template <typename t>
213constexpr bool is_type_list_of_structure_file_input_formats_v = false;
214
220template <typename... ts>
221constexpr bool is_type_list_of_structure_file_input_formats_v<type_list<ts...>> =
222 (structure_file_input_format<ts> && ...);
223
229template <typename t>
230concept type_list_of_structure_file_input_formats = is_type_list_of_structure_file_input_formats_v<t>;
231} // namespace seqan3::detail
The generic concept for structure file in formats.
Definition structure_file/input_format_concept.hpp:138
@ energy
Energy of a folded sequence, represented by one float number.
@ comment
Comment field of arbitrary content, usually a string.
@ structure
Fixed interactions, usually a string of structure alphabet characters.
@ bpp
Base pair probability matrix of interactions, usually a matrix of float numbers.
@ react
Reactivity values of the sequence characters given in a vector of float numbers.
@ react_err
Reactivity error values given in a vector corresponding to seqan3::field::react.
@ offset
Sequence (seqan3::field::seq) relative start position (0-based), unsigned value.
@ structured_seq
Sequence and fixed interactions combined in one range.
@ id
The identifier, usually a string.
@ seq
The "sequence", usually a range of nucleotides or amino acids.
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
Provides seqan3::rna5, container aliases and string literals.
Provides seqan3::structure_file_input_options.
Provides the composite of nucleotide with structure alphabets.
Provides seqan3::type_list.
Provides the WUSS format for RNA structure.
Hide me