#ifndef BAMTOOLS_TYPES\r
#define BAMTOOLS_TYPES\r
#ifdef _MSC_VER\r
- typedef char int8_t;\r
- typedef unsigned char uint8_t;\r
- typedef short int16_t;\r
- typedef unsigned short uint16_t;\r
- typedef int int32_t;\r
- typedef unsigned int uint32_t;\r
- typedef long long int64_t;\r
- typedef unsigned long long uint64_t;\r
+ typedef char int8_t;\r
+ typedef unsigned char uint8_t;\r
+ typedef short int16_t;\r
+ typedef unsigned short uint16_t;\r
+ typedef int int32_t;\r
+ typedef unsigned int uint32_t;\r
+ typedef long long int64_t;\r
+ typedef unsigned long long uint64_t;\r
#else\r
- #include <stdint.h>\r
+ #include <stdint.h>\r
#endif\r
#endif // BAMTOOLS_TYPES\r
\r
// Marth Lab, Department of Biology, Boston College\r
// All rights reserved.\r
// ---------------------------------------------------------------------------\r
-// Last modified: 11 December 2009 (DB)\r
+// Last modified: 11 Janaury 2010 (DB)\r
// ---------------------------------------------------------------------------\r
// Provides the basic constants, data structures, etc. for using BAM files\r
// ***************************************************************************\r
#define BAMAUX_H\r
\r
// C inclues\r
+#include <cstdio>\r
#include <cstdlib>\r
#include <cstring>\r
\r
#ifndef BAMTOOLS_TYPES\r
#define BAMTOOLS_TYPES\r
#ifdef _MSC_VER\r
- typedef char int8_t;\r
- typedef unsigned char uint8_t;\r
- typedef short int16_t;\r
- typedef unsigned short uint16_t;\r
- typedef int int32_t;\r
- typedef unsigned int uint32_t;\r
- typedef long long int64_t;\r
- typedef unsigned long long uint64_t;\r
+ typedef char int8_t;\r
+ typedef unsigned char uint8_t;\r
+ typedef short int16_t;\r
+ typedef unsigned short uint16_t;\r
+ typedef int int32_t;\r
+ typedef unsigned int uint32_t;\r
+ typedef long long int64_t;\r
+ typedef unsigned long long uint64_t;\r
#else\r
- #include <stdint.h>\r
+ #include <stdint.h>\r
#endif\r
#endif // BAMTOOLS_TYPES\r
\r
// Returns true if alignment is second mate on read\r
bool IsSecondMate(void) const { return ( (AlignmentFlag & READ_2) != 0 ); }\r
\r
+ // Manipulate alignment flag\r
+ public:\r
+ // Sets "PCR duplicate" bit \r
+ void SetIsDuplicate(bool ok) { if (ok) AlignmentFlag |= DUPLICATE; else AlignmentFlag &= ~DUPLICATE; }\r
+ // Sets "failed quality control" bit\r
+ void SetIsFailedQC(bool ok) { if (ok) AlignmentFlag |= QC_FAILED; else AlignmentFlag &= ~QC_FAILED; }\r
+ // Sets "alignment is first mate" bit\r
+ void SetIsFirstMate(bool ok) { if (ok) AlignmentFlag |= READ_1; else AlignmentFlag &= ~READ_1; }\r
+ // Sets "alignment's mate is mapped" bit\r
+ void SetIsMateUnmapped(bool ok) { if (ok) AlignmentFlag |= MATE_UNMAPPED; else AlignmentFlag &= ~MATE_UNMAPPED; }\r
+ // Sets "alignment's mate mapped to reverse strand" bit\r
+ void SetIsMateReverseStrand(bool ok) { if (ok) AlignmentFlag |= MATE_REVERSE; else AlignmentFlag &= ~MATE_REVERSE; }\r
+ // Sets "alignment part of paired-end read" bit\r
+ void SetIsPaired(bool ok) { if (ok) AlignmentFlag |= PAIRED; else AlignmentFlag &= ~PAIRED; }\r
+ // Sets "alignment is part of read that satisfied paired-end resolution" bit\r
+ void SetIsProperPair(bool ok) { if (ok) AlignmentFlag |= PROPER_PAIR; else AlignmentFlag &= ~PROPER_PAIR; }\r
+ // Sets "alignment mapped to reverse strand" bit\r
+ void SetIsReverseStrand(bool ok) { if (ok) AlignmentFlag |= REVERSE; else AlignmentFlag &= ~REVERSE; }\r
+ // Sets "position is primary alignment (determined by external app)"\r
+ void SetIsSecondaryAlignment(bool ok) { if (ok) AlignmentFlag |= SECONDARY; else AlignmentFlag &= ~SECONDARY; }\r
+ // Sets "alignment is second mate on read" bit\r
+ void SetIsSecondMate(bool ok) { if (ok) AlignmentFlag |= READ_2; else AlignmentFlag &= ~READ_2; }\r
+ // Sets "alignment is mapped" bit\r
+ void SetIsUnmapped(bool ok) { if (ok) AlignmentFlag |= UNMAPPED; else AlignmentFlag &= ~UNMAPPED; }\r
+ \r
public:\r
\r
// get "RG" tag data\r
int32_t Position; // Position (0-based) where alignment starts\r
uint16_t Bin; // Bin in BAM file where this alignment resides\r
uint16_t MapQuality; // Mapping quality score\r
- uint32_t AlignmentFlag; // Alignment bit-flag - see Is<something>() methods for available queries\r
+ uint32_t AlignmentFlag; // Alignment bit-flag - see Is<something>() methods to query this value, SetIs<something>() methods to manipulate \r
std::vector<CigarOp> CigarData; // CIGAR operations for this alignment\r
int32_t MateRefID; // ID number for reference sequence where alignment's mate was aligned\r
int32_t MatePosition; // Position (0-based) where alignment's mate starts\r