// returns BAM file pointer to beginning of alignment data\r
bool BamReader::BamReaderPrivate::Rewind(void) {\r
\r
- // find first reference that has alignments in the BAM file\r
- int refID = 0;\r
- int refCount = References.size();\r
- for ( ; refID < refCount; ++refID ) {\r
- if ( References.at(refID).RefHasAlignments ) \r
- break;\r
- }\r
-\r
- // reset default region info\r
- Region.LeftRefID = refID;\r
- Region.LeftPosition = 0;\r
- Region.RightRefID = -1;\r
- Region.RightPosition = -1;\r
- IsLeftBoundSpecified = false;\r
- IsRightBoundSpecified = false;\r
+ // rewind to first alignment\r
+ if ( !mBGZF.Seek(AlignmentsBeginOffset) ) return false;\r
+ \r
+ // retrieve first alignment data\r
+ BamAlignment al;\r
+ if ( !GetNextAlignmentCore(al) ) return false;\r
+ \r
+ // reset default region info using first alignment in file\r
+ Region.LeftRefID = al.RefID;\r
+ Region.LeftPosition = al.Position;\r
+ Region.RightRefID = -1;\r
+ Region.RightPosition = -1;\r
+ IsLeftBoundSpecified = false;\r
+ IsRightBoundSpecified = false; \r
\r
- // return success/failure of seek\r
+ // rewind back to before first alignment\r
+ // return success/fail of seek\r
return mBGZF.Seek(AlignmentsBeginOffset);\r
}\r
\r