Mercurial > repos > dereeper > sniplay
comparison egglib/egglib-2.1.5/include/egglib-cpp/Fasta.hpp @ 1:420b57c3c185 draft
Uploaded
author | dereeper |
---|---|
date | Fri, 10 Jul 2015 04:39:30 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:3e19d0dfcf3e | 1:420b57c3c185 |
---|---|
1 /* | |
2 Copyright 2008-2009 Stéphane De Mita, Mathieu Siol | |
3 | |
4 This file is part of the EggLib library. | |
5 | |
6 EggLib is free software: you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation, either version 3 of the License, or | |
9 (at your option) any later version. | |
10 | |
11 EggLib is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with EggLib. If not, see <http://www.gnu.org/licenses/>. | |
18 */ | |
19 | |
20 #ifndef EGGLIB_FASTA_HPP | |
21 #define EGGLIB_FASTA_HPP | |
22 | |
23 #include <istream> | |
24 #include <iostream> | |
25 #include <string> | |
26 #include "Container.hpp" | |
27 | |
28 namespace egglib { | |
29 | |
30 /** \brief Fasta parser/formatted | |
31 * | |
32 * \ingroup core | |
33 * | |
34 * Reads a multifasta sequence file from a string, a stream or a file | |
35 * and returns a Container. See the description of the format below. | |
36 * Formats a fasta string from a sequence container object and places | |
37 * it in a string, a stream of a file. All methods are static and the | |
38 * class cannot be instantiated. The methods parsef and formatf will | |
39 * open the file for you while the others will read/write directly | |
40 * in a string. | |
41 * | |
42 * Specifications of the fasta format: | |
43 * | |
44 * - The number of sequences is not limited. | |
45 * | |
46 * - Each sequence is preceded by a header limited to a single | |
47 * line and starting by a ">" character. | |
48 * | |
49 * - The header length is not limited and all characters are | |
50 * allowed but white spaces and special characters are | |
51 * discouraged. | |
52 * | |
53 * - Group indices are specified by \@0, \@1, \@2... strings | |
54 * appearing at the end of the header string (just before the | |
55 * carriage return). Note that group labels are ignored by | |
56 * default. | |
57 * | |
58 * - Group indices are ignored unless specifically specified in a | |
59 * parser's options. | |
60 * | |
61 * - The sequence itself continues on following lines until the | |
62 * next ">" character or the end of the file. | |
63 * | |
64 * - White spaces, tab and carriage returns are allowed at any | |
65 * position There is no limitation in length and different | |
66 * sequences can have different lengths. | |
67 * | |
68 * - Although the standard is lower case characters, Fasta | |
69 * assumes upper case characters and only supports lower case | |
70 * characters (and converts them to upper case characters). | |
71 * Information coded by change in case is lost. | |
72 * | |
73 */ | |
74 class Fasta { | |
75 | |
76 public: | |
77 | |
78 /** \brief Imports a fasta file | |
79 * | |
80 * Imports the content of the file as is. Calls the method | |
81 * pase(std::istream*, bool) by creating its own istream. | |
82 * | |
83 * \param fname the name of a fasta file. | |
84 * | |
85 * \param importGroupLabels if set to true, scan automatically | |
86 * for groups. The format is @ followed by an integer, placed | |
87 * at the end of the header string(sequences without labels | |
88 * will be treated as \@0). | |
89 * | |
90 * \return A Container object containing the sequences. | |
91 * | |
92 */ | |
93 static Container parsef(const char* fname, bool importGroupLabels=false); | |
94 | |
95 | |
96 /** \brief Imports a fasta file | |
97 * | |
98 * Imports the content of the file as is. Calls the method | |
99 * pase(std::istream*, bool) by creating its own istream. This | |
100 * method expects a reference to a Container to which the | |
101 * sequences will be appended. | |
102 * | |
103 * \param fname the name of a fasta file. | |
104 * | |
105 * \param container a Container instance, empty or not. | |
106 * | |
107 * \param importGroupLabels if set to true, scan automatically | |
108 * for groups. The format is @ followed by an integer, placed | |
109 * at the end of the header string(sequences without labels | |
110 * will be treated as \@0). | |
111 * | |
112 * \return Nothings: the new sequences are appended to the | |
113 * Container passed as argument. | |
114 * | |
115 */ | |
116 static void parsef(const char* fname, Container& container, bool importGroupLabels=false); | |
117 | |
118 | |
119 /** \brief Imports a fasta file | |
120 * | |
121 * Imports the content of the file as is. Calls the method | |
122 * pase(std::istream*, bool) by creating its own istream. | |
123 * | |
124 * \param str a string containing the data. | |
125 * | |
126 * \param importGroupLabels if set to true, scan automatically | |
127 * for groups. The format is @ followed by an integer, placed | |
128 * at the end of the header string(sequences without labels | |
129 * will be treated as \@0). | |
130 * | |
131 * \return A Container object containing the sequences. | |
132 * | |
133 */ | |
134 static Container parse(const std::string& str, bool importGroupLabels=false); | |
135 | |
136 | |
137 /** \brief Imports a fasta file | |
138 * | |
139 * Imports the content of the file as is. Calls the method | |
140 * pase(std::istream*, bool) by creating its own istream. This | |
141 * method expects a reference to a Container to which the | |
142 * sequences will be appended. | |
143 * | |
144 * \param str a string containing the data. | |
145 * | |
146 * \param container a Container instance, empty or not. | |
147 * | |
148 * \param importGroupLabels if set to true, scan automatically | |
149 * for groups. The format is @ followed by an integer, placed | |
150 * at the end of the header string(sequences without labels | |
151 * will be treated as \@0). | |
152 * | |
153 * \return Nothing: new sequences are appended to the Container | |
154 * passed as argument. | |
155 * | |
156 */ | |
157 static void parse(const std::string& str, Container& container, bool importGroupLabels=false); | |
158 | |
159 | |
160 /** \brief Imports a fasta file from an open stream | |
161 * | |
162 * Imports the content of the file as is. | |
163 * | |
164 * \param stream an open stream (file or string) containing the | |
165 * data. | |
166 * | |
167 * \param importGroupLabels if set to true, scan automatically | |
168 * for groups. The format is @ followed by an integer, placed | |
169 * at the end of the header string(sequences without labels | |
170 * will be treated as \@0). | |
171 * | |
172 * \return A Container object containing the sequences. | |
173 * | |
174 */ | |
175 static Container parse(std::istream& stream, bool importGroupLabels=false); | |
176 | |
177 | |
178 /** \brief Imports a fasta file from an open stream | |
179 * | |
180 * Imports the content of the file as is. This | |
181 * method expects a reference to a Container to which the | |
182 * sequences will be appended. | |
183 * | |
184 * \param stream an open stream (file or string) containing the | |
185 * data. | |
186 * | |
187 * \param container a Container instance, empty or not. | |
188 * | |
189 * \param importGroupLabels if set to true, scan automatically | |
190 * for groups. The format is @ followed by an integer, placed | |
191 * at the end of the header string(sequences without labels | |
192 * will be treated as \@0). | |
193 * | |
194 * \return Nothing: the new sequences are appended to the | |
195 * Container passed as argument. | |
196 * | |
197 */ | |
198 static void parse(std::istream& stream, Container& container, bool importGroupLabels=false); | |
199 | |
200 | |
201 /** \brief Export sequences as fasta | |
202 * | |
203 * \param fname the name of the file where to place the result. | |
204 * | |
205 * \param container Container object to export. | |
206 * | |
207 * \param exportGroupLabels if set to true, exports group | |
208 * indices as a \@x at the end of the sequence name, where x is | |
209 * the group index. Otherwise, this information is discarded. | |
210 * | |
211 * \param lineLength the number of characters to place on a | |
212 * single line. If zero, no newlines are inserted within | |
213 * sequences. | |
214 * | |
215 */ | |
216 static void formatf(const char* fname, const Container& container, bool exportGroupLabels=false, unsigned int lineLength=50); | |
217 | |
218 | |
219 /** \brief Export sequences as fasta | |
220 * | |
221 * \param file an open stream. | |
222 * | |
223 * \param container Container object to export. | |
224 * | |
225 * \param exportGroupLabels if set to true, exports group | |
226 * indices as a \@x at the end of the sequence name, where x is | |
227 * the group index. Otherwise, this information is discarded. | |
228 * | |
229 * \param lineLength the number of characters to place on a | |
230 * single line. If zero, no newlines are inserted within | |
231 * sequences. | |
232 * | |
233 */ | |
234 static void format(std::ostream& file, const Container& container, bool exportGroupLabels=false, unsigned int lineLength=50); | |
235 | |
236 | |
237 /** \brief Export sequences as fasta | |
238 * | |
239 * This medod creates internally an ostringstream, calls the | |
240 * method format(ostream, container, bool) and returns the | |
241 * resulting string. | |
242 * | |
243 * \param container Container object to export. | |
244 * | |
245 * \param exportGroupLabels if set to true, exports group | |
246 * indices as a \@x at the end of the sequence name, where x is | |
247 * the group index. Otherwise, this information is discarded. | |
248 * | |
249 * \param lineLength the number of characters to place on a | |
250 * single line. If zero, no newlines are inserted within | |
251 * sequences. | |
252 * | |
253 * \return The formatted string. | |
254 * | |
255 */ | |
256 static std::string format(const Container& container, bool exportGroupLabels=false, unsigned int lineLength=50); | |
257 | |
258 | |
259 | |
260 protected: | |
261 | |
262 /// This class cannot be instantiated | |
263 Fasta() { } | |
264 | |
265 /// This class cannot be instantiated | |
266 Fasta(const Fasta& source) { } | |
267 | |
268 /// This class cannot be or copied | |
269 Fasta& operator=(const Fasta& source) { return *this; } | |
270 | |
271 /// This class cannot be instantiated | |
272 virtual ~Fasta() { } | |
273 | |
274 | |
275 }; | |
276 } | |
277 | |
278 #endif |