SeqAn3 3.2.0
The Modern C++ library for sequence analysis.
output_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 <set>
17#include <string>
18#include <vector>
19
25
26namespace seqan3::detail
27{
28
39template <typename format_type>
40struct structure_file_output_format_exposer : public format_type
41{
42public:
43 // Can't use `using format_type::write_structure_record` as it produces a hard failure in the format concept check
44 // for types that do not model the format concept, i.e. don't offer the proper write_structure_record interface.
46 template <typename... ts>
47 void write_structure_record(ts &&... args)
48 {
49 format_type::write_structure_record(std::forward<ts>(args)...);
50 }
51};
52
53} // namespace seqan3::detail
54
55namespace seqan3
56{
57
71template <typename t>
73 requires (detail::structure_file_output_format_exposer<t> & v,
74 std::ofstream & f,
75 structure_file_output_options & options,
76 rna5_vector & seq,
81 double energy,
82 double react,
83 double react_err,
85 size_t offset) {
86 t::file_extensions;
87
88 {
89 v.write_structure_record(f, options, seq, id, bpp, structure, energy, react, react_err, comment, offset)
90 } -> std::same_as<void>;
91
92 {
93 v.write_structure_record(f,
94 options,
95 seq,
96 id,
97 bpp,
98 std::ignore,
99 std::ignore,
100 std::ignore,
101 std::ignore,
102 std::ignore,
103 std::ignore)
104 } -> std::same_as<void>;
105
106 {
107 v.write_structure_record(f,
108 options,
109 structured_seq,
110 id,
111 std::ignore,
112 structured_seq,
113 energy,
114 std::ignore,
115 std::ignore,
116 std::ignore,
117 std::ignore)
118 } -> std::same_as<void>;
119
120 {
121 v.write_structure_record(f,
122 options,
123 std::ignore,
124 std::ignore,
125 std::ignore,
126 std::ignore,
127 std::ignore,
128 std::ignore,
129 std::ignore,
130 std::ignore,
131 std::ignore)
132 } -> std::same_as<void>;
133 // the last is required to be compile time valid, but should always throw at run-time.
134 };
136
196
197} // namespace seqan3
198
199namespace seqan3::detail
200{
201
207template <typename t>
208constexpr bool is_type_list_of_structure_file_output_formats_v = false;
209
215template <typename... ts>
216constexpr bool is_type_list_of_structure_file_output_formats_v<type_list<ts...>> =
218
224template <typename t>
225concept type_list_of_structure_file_output_formats = is_type_list_of_structure_file_output_formats_v<t>;
226} // namespace seqan3::detail
@ 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 generic concept for structure file out formats.
void write_structure_record(stream_type &stream, structure_file_output_options const &options, seq_type &&seq, id_type &&id, bpp_type &&bpp, structure_type &&structure, energy_type &&energy, react_type &&react, react_type &&react_err, comment_type &&comment, offset_type &&offset)
Write the given fields to the specified stream.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides seqan3::rna5, container aliases and string literals.
Provides seqan3::structure_file_output_options.
Provides the composite of nucleotide with structure alphabets.
Provides seqan3::type_list.
Provides the WUSS format for RNA structure.