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