1 /*
2  * BamRecord.h
3  *
4  *  Created on: Dec 4, 2012
5  *      Author: nek3d
6  */
7 
8 #ifndef BAMRECORD_H_
9 #define BAMRECORD_H_
10 
11 #include "Bed6Interval.h"
12 #include "ParseTools.h"
13 #include "string.h"
14 #include "api/BamAlignment.h"
15 
16 class FileReader;
17 class BamFileReader;
18 class RecordKeyVector;
19 
20 class BamRecord : public Bed6Interval {
21 public:
22 	friend class FreeList<BamRecord>;
23 
24 	BamRecord();
25 	virtual const BamRecord &operator=(const BamRecord &);
26 
27 
28 	// This using statement is only being added to supress warning from the CLANG compiler regarding
29 	// hidden overriden methods. Though it makes the base class methods available, developers should
30 	// not actually call them on a BamRecord object.
31 	using Bed6Interval::initFromFile;
32 
33 
34 	bool initFromFile(FileReader *);
35 	virtual bool initFromFile(BamFileReader *);
36 	virtual void clear();
37 
38 
39 	// As above, this using statement is only being added to supress warning from the CLANG compiler
40 	// regarding hidden overriden methods. Though it makes the base class methods available, developers
41 	// should not actually call them on a BamRecord object.
42 	using Bed6Interval::print;
43 
44 
45 	virtual void print(string &outBuf, int start, int end, RecordKeyVector *keyList) const;
46 	virtual void print(string &outBuf, RecordKeyVector *keyList) const;
47 	virtual void print(string &outBuf, const string & start, const string & end, RecordKeyVector *keyList) const;
48 	virtual void printNull(string &outBuf) const;
49 	virtual void printRemainingBamFields(string &outBuf, RecordKeyVector *keyList) const;
50 	virtual void printUnmapped(string &outBuf) const;
51 
getType()52 	virtual FileRecordTypeChecker::RECORD_TYPE getType() const { return FileRecordTypeChecker::BAM_RECORD_TYPE; }
getCigarStr()53 	const string &getCigarStr() const { return _cigarStr; }
getCigarData()54 	const vector<BamTools::CigarOp> &getCigarData() const { return _bamAlignment.CigarData; }
55 
getAlignment()56 	const BamTools::BamAlignment &getAlignment() const { return _bamAlignment; }
getBamChromId()57 	int getBamChromId() const { return _bamChromId; }
58 
59 	virtual const string &getField(int fieldNum) const;
getNumFields()60 	virtual int getNumFields() const  { return 12; }
61 	static bool isNumericField(int fieldNum);
62 
63 	CHRPOS getLength(bool obeySplits) const;
64 
65 protected:
66 	BamTools::BamAlignment _bamAlignment;
67 	int _bamChromId; //different from chromId, because BAM file may be in different order
68 	//than the genomeFile.
69 
70 	string _cigarStr; //stored for fast retrieval in column ops
71 	string _mateChrName;
72 	string _matePos;
73 	string _insertSize;
74 	string _queryBases;
75 	string _qualities;
76 
77 	virtual ~BamRecord();
78 	void printRemainingBamFields();
79 	void buildCigarStr();
80 
81 };
82 
83 
84 #endif /* BAMRECORD_H_ */
85