4 // Marth Lab, Boston College
\r
5 // Last modified: 20 March 2009
\r
7 #ifndef BAMALIGNMENT_H
\r
8 #define BAMALIGNMENT_H
\r
26 unsigned int RefLength;
\r
27 bool RefHasAlignments;
\r
32 , RefHasAlignments(false)
\r
36 typedef vector<RefData> RefVector;
\r
38 struct BamAlignment {
\r
40 // queries against alignment flag - see below for further detail
\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
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
73 // alignment flag query constants
\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
89 // commonly used vector in this library
\r
90 typedef vector< BamAlignment > BamAlignmentVector;
\r
92 #endif /* BAMALIGNMENT_H */
\r