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
|
#ifndef _BLASR_SAM_READER_HPP_
#define _BLASR_SAM_READER_HPP_
#include <pbdata/StringUtils.hpp>
#include <pbdata/sam/AlignmentSet.hpp>
#include <pbdata/sam/ReadGroup.hpp>
#include <pbdata/sam/ReferenceSequence.hpp>
#include <pbdata/sam/SAMKeywordValuePair.hpp>
#include <pbdata/utils.hpp>
template <typename T_ReferenceSequence, typename T_ReadGroup, typename T_SAMAlignment>
class SAMReader
{
public:
int lineNumber;
std::ifstream samFile;
std::istream *samFilePtr;
bool Initialize(std::string samFileName);
void Close();
enum LineType
{
Blank,
HSHeader,
HSSequence,
HSReadGroup,
HSProgram,
HSComment,
Alignment,
Error
};
void GetLine(std::istream &in, std::string &line);
bool LineTypeIsHeader(LineType lineType);
bool PeekLineIsHeader(std::istream &in);
LineType GetLineType(std::string &line);
void StoreKVPairs(std::string line, std::vector<SAMKeywordValuePair> &kvPairs);
void StoreHeader(std::vector<SAMKeywordValuePair> &kvPairs,
AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments);
void StoreReferenceSequence(
std::vector<SAMKeywordValuePair> &kvPairs,
AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments);
void StoreReadGroup(std::vector<SAMKeywordValuePair> &kvPairs,
AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments);
void StoreAlignment(std::string &line,
AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments);
// Not implemented
void StoreProgram(std::vector<SAMKeywordValuePair> &kvPairs,
AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments)
{
(void)(kvPairs);
(void)(alignments);
}
void Read(std::string samFileName,
AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments);
std::vector<std::string> ReadHeader(
AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments);
void Read(AlignmentSet<T_ReferenceSequence, T_ReadGroup, T_SAMAlignment> &alignments);
bool GetNextAlignment(SAMAlignment &alignment);
};
#include "SAMReaderImpl.hpp"
#endif
|