1 #ifndef PAIREDENDREADQ_H_
2 #define PAIREDENDREADQ_H_
9 #include "SingleReadQ.h"
11 class PairedEndReadQ : public Read {
13 PairedEndReadQ() : mate1(), mate2() {}
14 PairedEndReadQ(const SingleReadQ& mate1, const SingleReadQ& mate2) {
17 this->name = mate1.getName();
20 bool read(int argc, std::istream* argv[], int flags = 7);
21 void write(int argc, std::ostream* argv[]);
23 const SingleReadQ& getMate1() const { return mate1; }
24 const SingleReadQ& getMate2() const { return mate2; }
25 const SingleReadQ& getMate(int i) const {
26 if (i == 1) return mate1;
30 void calc_lq(bool, int); // calculate if this read is low quality. Without calling this function, isLowQuality() will always be false
33 SingleReadQ mate1, mate2;
36 bool PairedEndReadQ::read(int argc, std::istream* argv[], int flags) {
38 std::istream *inpMate1[1], *inpMate2[1];
41 inpMate1[0] = argv[0]; inpMate2[0] = argv[1];
42 success = mate1.read(1, inpMate1, flags) && mate2.read(1, inpMate2, flags);
44 if (flags & 4) { name = mate1.getName(); } //May chop 1 char later if we want
49 void PairedEndReadQ::write(int argc, std::ostream* argv[]) {
50 std::ostream *outMate1[1], *outMate2[1];
53 outMate1[0] = argv[0]; outMate2[0] = argv[1];
54 mate1.write(1, outMate1);
55 mate2.write(1, outMate2);
58 //calculate if this read is low quality
59 void PairedEndReadQ::calc_lq(bool hasPolyA, int seedLen) {
61 mate1.calc_lq(hasPolyA, seedLen);
62 mate2.calc_lq(hasPolyA, seedLen);
63 if (mate1.getReadLength() < seedLen || mate2.getReadLength() < seedLen) low_quality = true;
64 else low_quality = mate1.isLowQuality() && mate2.isLowQuality();
67 #endif /* PAIREDENDREADQ_H_ */