File: fastq.cpp

package info (click to toggle)
assembly-stats 1.0.1%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 256 kB
  • sloc: cpp: 795; sh: 31; makefile: 9
file content (100 lines) | stat: -rw-r--r-- 2,046 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "fastq.h"

Fastq::Fastq() : Fasta(), qual_("") {}


Fastq::Fastq(string id, string seq, string qual)
{
    if (seq.length() != qual.length())
    {
        cerr << "Error constructing Fastq object: mismatch in sequence and qual length." << endl
             << "id: " << id << endl
             << "Seq: " << seq << endl
             << "Qual: " << qual << endl
             << "Aborting" << endl;
        exit(1);
    }

    id_ = id;
    seq_ = seq;
    qual_ = qual;
}


string Fastq::qual() const
{
    return qual_;
}


void Fastq::qual(string s)
{
    qual_ = s;
}


bool Fastq::fillFromFile(istream& inStream)
{
    string line;
    getline(inStream, line);

    // check if we're at the end of the file
    if (inStream.eof())
    {
        id_ = "";
        seq_ = "";
        qual_ = "";
        return false;
    }
    // Expecting a header line.  If not, abort
    else if (line[0] == '@')
    {
        id_ = line.substr(1);
    }
    else
    {
        cerr << "Error reading fastq file!" << endl
             << "Expected line starting with '@', but got this:" << endl
             << line << endl;
        exit(1);
    }

    // Next line is sequence string
    getline(inStream, line);
    seq_ = line;

    // Next line is +... line
    getline(inStream, line);

    if (line[0] != '+')
    {
        cerr << "Error reading fastq file!" << endl
             << "Expected line starting with '+', but got this:" << endl
             << line << endl;
        exit(1);
    }

    // Next line is quality string
    getline(inStream, line);

    if (line.length() != seq_.length())
    {
        cerr << "Mismatch in sequence and quality length." << endl
             << "id: " << id_ << endl
             << "seq: " << seq_ << endl
             << "qual: " << line << endl
             << "Aborting" << endl;
        exit(1);
    }
    qual_ = line;

    return true;
}


void Fastq::toString(ostream& outStream) const
{
    outStream << "@" << id_ << endl << seq_ << '\n'
              << "+" << endl << qual_ << '\n';
}