-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvcfreader.h
104 lines (86 loc) · 2.45 KB
/
vcfreader.h
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
101
102
103
104
#ifndef VCFREADER_H
#define VCFREADER_H
#include <QObject>
#include <QtCore>
namespace vcf {
class Record;
class Field;
class VcfReader;
class Record
{
public:
explicit Record();
explicit Record(const QString& chrom,
quint64 pos,
const QString& id,
const QString& ref,
const QStringList& alt,
quint64 qual,
const QString& filter,
const QVariantMap& infos,
const QString& format = QString(),
const QHash<QString, QVariantMap>& samples = QHash<QString, QVariantMap>());
const QString& chrom()const {return mChrom;}
quint64 pos()const {return mPos;}
const QString id()const {return mId;}
const QString& ref()const {return mRef;}
const QStringList& alt()const{ return mAlt; }
quint64 qual()const { return mQual;}
const QString& filter()const{return mFilter;}
const QVariantMap& infos()const{return mInfos;}
const QString& format()const{ return mFormat;}
QStringList alleles() const;
quint64 start() const;
quint64 end() const;
bool isSnp() const;
private:
QString mChrom;
quint64 mPos = 0;
QString mId;
QString mRef;
QStringList mAlt;
quint64 mQual = 0;
QString mFilter;
QVariantMap mInfos;
QHash<QString, QVariantMap> mSamples;
QString mFormat;
};
class Field
{
public:
QString id;
QString type;
QString description;
QString number;
static QVariant::Type typeFromString(const QString& type);
};
class VcfReader : public QObject
{
Q_OBJECT
public:
explicit VcfReader(QObject *parent = Q_NULLPTR);
explicit VcfReader(const QString& filename, QObject * parent = Q_NULLPTR);
explicit VcfReader(QIODevice * device, QObject * parent = Q_NULLPTR);
const QHash<QString,Field>& infos() const;
const QHash<QString,Field>& formats() const;
const QHash<QString,QVariant>& metadata() const;
bool open();
bool next() ;
const Record& record() const;
const QStringList& samples() const;
protected:
void readHeader();
Record readRecord(const QString& raw);
private:
QTextStream mStream;
QIODevice * mDevice;
QString mFilename;
QByteArray mHeader;
QHash<QString, Field> mInfos;
QHash<QString, Field> mFormats;
QHash<QString, QVariant> mMetadata;
QStringList mSamples;
Record mCurrentRecord;
};
}
#endif // VCFREADER_H