string IndexFilename;\r
\r
// user-specified region values\r
- bool IsRegionSpecified;\r
- int CurrentRefID;\r
- unsigned int CurrentLeft;\r
+ bool IsRegionSpecified;\r
+ int CurrentRefID;\r
+ int CurrentLeft;\r
\r
// BAM character constants\r
const char* DNA_LOOKUP;\r
\r
// flie operations\r
void Close(void);\r
- bool Jump(int refID, unsigned int position = 0);\r
+ bool Jump(int refID, int position = 0);\r
void Open(const string& filename, const string& indexFilename = "");\r
bool Rewind(void);\r
\r
// *** reading alignments and auxiliary data *** //\r
\r
// calculate bins that overlap region ( left to reference end for now )\r
- int BinsFromRegion(int, unsigned int, uint16_t[MAX_BIN]);\r
+ int BinsFromRegion(int refID, int left, uint16_t[MAX_BIN]);\r
// calculates alignment end position based on starting position and provided CIGAR operations\r
- unsigned int CalculateAlignmentEnd(const unsigned int& position, const std::vector<CigarOp>& cigarData);\r
+ int CalculateAlignmentEnd(const int& position, const std::vector<CigarOp>& cigarData);\r
// calculate file offset for first alignment chunk overlapping 'left'\r
- int64_t GetOffset(int refID, unsigned int left);\r
+ int64_t GetOffset(int refID, int left);\r
// checks to see if alignment overlaps current region\r
bool IsOverlap(BamAlignment& bAlignment);\r
// retrieves header text from BAM file\r
\r
// file operations\r
void BamReader::Close(void) { d->Close(); }\r
-bool BamReader::Jump(int refID, unsigned int position) { return d->Jump(refID, position); }\r
+bool BamReader::Jump(int refID, int position) { return d->Jump(refID, position); }\r
void BamReader::Open(const string& filename, const string& indexFilename) { d->Open(filename, indexFilename); }\r
bool BamReader::Rewind(void) { return d->Rewind(); }\r
\r
}\r
\r
// calculate bins that overlap region ( left to reference end for now )\r
-int BamReader::BamReaderPrivate::BinsFromRegion(int refID, unsigned int left, uint16_t list[MAX_BIN]) {\r
+int BamReader::BamReaderPrivate::BinsFromRegion(int refID, int left, uint16_t list[MAX_BIN]) {\r
\r
// get region boundaries\r
- uint32_t begin = left;\r
- uint32_t end = References.at(refID).RefLength - 1;\r
+ int32_t begin = left;\r
+ int32_t end = References.at(refID).RefLength - 1;\r
\r
// initialize list, bin '0' always a valid bin\r
int i = 0;\r
// if lastCoordinate greater than BAM position - file not sorted properly\r
else if ( lastCoordinate > bAlignment.Position ) {\r
printf("BAM file not properly sorted:\n");\r
- printf("Alignment %s : %u > %u on reference (id = %d)", bAlignment.Name.c_str(), lastCoordinate, bAlignment.Position, bAlignment.RefID);\r
+ printf("Alignment %s : %d > %d on reference (id = %d)", bAlignment.Name.c_str(), lastCoordinate, bAlignment.Position, bAlignment.RefID);\r
exit(1);\r
}\r
\r
}\r
\r
// calculates alignment end position based on starting position and provided CIGAR operations\r
-unsigned int BamReader::BamReaderPrivate::CalculateAlignmentEnd(const unsigned int& position, const vector<CigarOp>& cigarData) {\r
+int BamReader::BamReaderPrivate::CalculateAlignmentEnd(const int& position, const vector<CigarOp>& cigarData) {\r
\r
// initialize alignment end to starting position\r
- unsigned int alignEnd = position;\r
+ int alignEnd = position;\r
\r
// iterate over cigar operations\r
vector<CigarOp>::const_iterator cigarIter = cigarData.begin();\r
// clear out index\r
ClearIndex();\r
\r
+ // build (& save) index from BAM file\r
bool ok = true;\r
ok &= BuildIndex();\r
ok &= WriteIndex();\r
+\r
+ // return success/fail\r
return ok;\r
}\r
\r
}\r
\r
// calculate closest indexed file offset for region specified\r
-int64_t BamReader::BamReaderPrivate::GetOffset(int refID, unsigned int left) {\r
+int64_t BamReader::BamReaderPrivate::GetOffset(int refID, int left) {\r
\r
// calculate which bins overlap this region\r
uint16_t* bins = (uint16_t*)calloc(MAX_BIN, 2);\r
if ( bAlignment.RefID != CurrentRefID ) { return false; }\r
\r
// read starts after left boundary\r
- if ( bAlignment.Position >= (int32_t)CurrentLeft) { return true; }\r
+ if ( bAlignment.Position >= CurrentLeft) { return true; }\r
\r
// return whether alignment end overlaps left boundary\r
return ( CalculateAlignmentEnd(bAlignment.Position, bAlignment.CigarData) >= CurrentLeft );\r
}\r
\r
// jumps to specified region(refID, leftBound) in BAM file, returns success/fail\r
-bool BamReader::BamReaderPrivate::Jump(int refID, unsigned int position) {\r
+bool BamReader::BamReaderPrivate::Jump(int refID, int position) {\r
\r
// if data exists for this reference and position is valid \r
if ( References.at(refID).RefHasAlignments && (position <= References.at(refID).RefLength) ) {\r
// get reference name and reference sequence length\r
mBGZF.Read(refName, refNameLength);\r
mBGZF.Read(buffer, 4);\r
- const unsigned int refLength = BgzfData::UnpackUnsignedInt(buffer);\r
+ const int refLength = BgzfData::UnpackSignedInt(buffer);\r
\r
// store data for reference\r
RefData aReference;\r