https://github.com/lmrodriguezr/nonpareil
Raw File
Tip revision: 8b5d95cc01139093f04705ba0a2ab2b311f32066 authored by Luis M. Rodriguez-R on 28 January 2022, 18:13:10 UTC
Version bump: 3.4.0
Tip revision: 8b5d95c
SeqReader.h
#ifndef SEQREADER_H
#define SEQREADER_H

#include <iostream>
#include <fstream>
#include <unordered_set>
#include <string>
#include <time.h>
#include <stdlib.h>
#include <random>
#include <vector>
#include <string>

using namespace std;

class Sequence {

public:
  Sequence();
  Sequence(string header, string sequence);
  Sequence(string header, string sequence, string qualstr, vector<double> baseProb);
  void setHeader(string header);
  void setSequence(string sequence);
  void setQualStr(string qualstr);
  void setBaseProb(vector<double> baseProb);
  string header, sequence, qualstr;
  vector<double> baseProb;
};

void buildFastqSeq(string header, string sequence, string qual, Sequence &out);
void buildFastaSeq(string header, string sequence);

class SeqReader {

public:
  std::ifstream &ifs;
  string filename;
  std::unordered_set<std::string> randomHeaders;
  bool readNext;
  std::random_device rd;
  std::mt19937_64 gen;
  std::uniform_int_distribution<unsigned long long int> distribution;
  SeqReader(ifstream &ifs);
  void reset();
  virtual size_t readNextSeq(Sequence &out) = 0;
  virtual size_t getRandomSeq(Sequence &out) = 0;
};

class FastqReader: public SeqReader {

public:
  FastqReader(ifstream &ifs);
  size_t readNextSeq(Sequence &out);
  size_t getRandomSeq(Sequence &out);
};

class FastaReader: public SeqReader {
public:
  FastaReader(ifstream &ifs);
  size_t readNextSeq(Sequence &out);
  size_t getRandomSeq(Sequence &out);
};

#endif
back to top