]> git.donarmstrong.com Git - bamtools.git/blob - BamAlignment.h
Initial import.
[bamtools.git] / BamAlignment.h
1 // BamAlignment.h\r
2 \r
3 // Derek Barnett\r
4 // Marth Lab, Boston College\r
5 // Last modified: 20 March 2009\r
6 \r
7 #ifndef BAMALIGNMENT_H\r
8 #define BAMALIGNMENT_H\r
9 \r
10 #include <stdint.h>\r
11 \r
12 // C++ includes\r
13 #include <string>\r
14 using std::string;\r
15 \r
16 #include <vector>\r
17 using std::vector;\r
18 \r
19 struct CigarOp {\r
20         uint32_t Length;\r
21         char     Type;\r
22 };\r
23 \r
24 struct RefData {\r
25   string       RefName;\r
26   unsigned int RefLength;\r
27   bool         RefHasAlignments;\r
28 \r
29   // constructor\r
30   RefData(void)\r
31   : RefLength(0)\r
32   , RefHasAlignments(false)\r
33   { }\r
34 };\r
35 \r
36 typedef vector<RefData> RefVector;\r
37 \r
38 struct BamAlignment {\r
39 \r
40     // queries against alignment flag - see below for further detail\r
41     public:\r
42         bool IsPaired(void) const            { return ( (AlignmentFlag & PAIRED)        != 0 ); }\r
43         bool IsProperPair(void) const        { return ( (AlignmentFlag & PROPER_PAIR)   != 0 ); }\r
44         bool IsMapped(void) const            { return ( (AlignmentFlag & UNMAPPED)      == 0 ); }\r
45         bool IsMateMapped(void) const        { return ( (AlignmentFlag & MATE_UNMAPPED) == 0 ); }\r
46         bool IsReverseStrand(void) const     { return ( (AlignmentFlag & REVERSE)       != 0 ); }\r
47         bool IsMateReverseStrand(void) const { return ( (AlignmentFlag & MATE_REVERSE)  != 0 ); }\r
48         bool IsFirstMate(void) const         { return ( (AlignmentFlag & READ_1)        != 0 ); }\r
49         bool IsSecondMate(void) const        { return ( (AlignmentFlag & READ_2)        != 0 ); }\r
50         bool IsPrimaryAlignment(void) const  { return ( (AlignmentFlag & SECONDARY)     == 0 ); }\r
51         bool IsFailedQC(void) const          { return ( (AlignmentFlag & QC_FAILED)     != 0 ); }\r
52         bool IsDuplicate(void) const         { return ( (AlignmentFlag & DUPLICATE)     != 0 ); }\r
53 \r
54     // data members\r
55     public:\r
56         string       Name;           // read name\r
57         unsigned int Length;         // query length\r
58         string       QueryBases;     // original sequence ( produced from machine )\r
59         string       AlignedBases;   // aligned sequence ( with indels ) \r
60         string       Qualities;      // FASTQ qualities ( still in ASCII characters )\r
61                 vector<string> Tags;\r
62         unsigned int RefID;          // ID for reference sequence\r
63         unsigned int Position;       // position on reference sequence where alignment starts\r
64         unsigned int Bin;            // bin in BAM file where this alignment resides\r
65         unsigned int MapQuality;     // mapping quality \r
66         unsigned int AlignmentFlag;  // see above for available queries\r
67                 vector<CigarOp> CigarData;   // vector of CIGAR operations (length & type) )\r
68         unsigned int MateRefID;      // ID for reference sequence that mate was aligned to\r
69         unsigned int MatePosition;   // position that mate was aligned to\r
70         unsigned int InsertSize;     // mate pair insert size\r
71                 \r
72 \r
73     // alignment flag query constants\r
74     private:\r
75         enum { PAIRED        = 1,               // Alignment comes from paired-end data\r
76                PROPER_PAIR   = 2,               // Alignment passed paired-end resolution\r
77                UNMAPPED      = 4,               // Read is unmapped\r
78                MATE_UNMAPPED = 8,               // Mate is unmapped\r
79                REVERSE       = 16,              // Read is on reverse strand\r
80                MATE_REVERSE  = 32,              // Mate is on reverse strand\r
81                READ_1        = 64,              // This alignment is mate 1 of pair\r
82                READ_2        = 128,             // This alignment is mate 2 of pair\r
83                SECONDARY     = 256,             // This alignment is not the primary (best) alignment for read\r
84                QC_FAILED     = 512,             // Read did not pass prior quality control steps\r
85                DUPLICATE     = 1024             // Read is PCR duplicate\r
86         };\r
87 };\r
88 \r
89 // commonly used vector in this library\r
90 typedef vector< BamAlignment > BamAlignmentVector;\r
91 \r
92 #endif /* BAMALIGNMENT_H */\r