]> git.donarmstrong.com Git - bamtools.git/commitdiff
Modified Rewind() to check actual data present when resetting region markers, instead...
authorDerek <derekwbarnett@gmail.com>
Thu, 15 Jul 2010 17:59:42 +0000 (13:59 -0400)
committerDerek <derekwbarnett@gmail.com>
Thu, 15 Jul 2010 17:59:42 +0000 (13:59 -0400)
BamReader.cpp

index fcd17b16151c9562f10bb25734b01dc7f288321b..f67a2e63cd68104b5874157f2811240ec58084c0 100644 (file)
@@ -732,23 +732,23 @@ bool BamReader::BamReaderPrivate::Open(const string& filename, const string& ind
 // 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