41 #include <Bpp/Seq/SequenceWithQuality.h> 48 if (input && ! input.eof()) {
51 while (TextTools::isEmpty(buffer) && !input.eof()) {
52 getline(input, buffer);
58 if (buffer[0] ==
'@') {
59 seq.setName(std::string(buffer.begin() + 1, buffer.end()));
62 getline(input, buffer);
63 seq.setContent(buffer);
65 getline(input, buffer);
67 std::string secName = std::string(buffer.begin() + 1, buffer.end());
68 if (secName != seq.getName()) {
69 throw Exception(
"Names are not equivalent for sequence(@ line) and quality (+ line)");
73 getline(input, buffer);
75 SequenceWithQuality& sq =
dynamic_cast<SequenceWithQuality&
>(seq);
76 for (
size_t i = 0 ; i < buffer.size() ; i++) {
77 sq.setQuality(i, static_cast<int>(buffer[i]));
90 std::string qual(seq.size(),
static_cast<char>(33));
92 const SequenceWithQuality& sq =
dynamic_cast<const SequenceWithQuality&
>(seq);
93 for (
size_t i = 0 ; i < sq.size() ; i++) {
94 char q =
static_cast<char>(sq.getQuality(i));
95 if (q < 33 || q > 126) {
96 throw BadIntegerException(
"Quality must lie between 33 and 126", q);
100 }
catch (
const std::bad_cast& e) {
101 throw Exception(
"seq must be a SequenceWithQuality object");
103 output <<
"@" << seq.getName() << std::endl;
104 output << seq.toString() << std::endl;
107 output << seq.getName();
110 output << qual << std::endl;
bool nextSequence(std::istream &input, Sequence &seq) const
void writeSequence(std::ostream &output, const Sequence &seq) const