From be0639f742c5df63e830a6a4176ff964a04c0f06 Mon Sep 17 00:00:00 2001
From: Derek <derekwbarnett@gmail.com>
Date: Tue, 20 Jul 2010 16:25:48 -0400
Subject: [PATCH] Modified BamMultiReader::Open() to return bool. Still needs
 some tweaks to handle all error cases correctly.

---
 BamMultiReader.cpp | 19 +++++++++++--------
 BamMultiReader.h   |  4 ++--
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/BamMultiReader.cpp b/BamMultiReader.cpp
index 75054a2..001df07 100644
--- a/BamMultiReader.cpp
+++ b/BamMultiReader.cpp
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College
 // All rights reserved.
 // ---------------------------------------------------------------------------
-// Last modified: 23 Februrary 2010 (EG)
+// Last modified: 20 July 2010 (DB)
 // ---------------------------------------------------------------------------
 // Uses BGZF routines were adapted from the bgzf.c code developed at the Broad
 // Institute.
@@ -210,7 +210,7 @@ void BamMultiReader::UpdateAlignments(void) {
 }
 
 // opens BAM files
-void BamMultiReader::Open(const vector<string> filenames, bool openIndexes, bool coreMode, bool useDefaultIndex) {
+bool BamMultiReader::Open(const vector<string> filenames, bool openIndexes, bool coreMode, bool useDefaultIndex) {
     
     // for filename in filenames
     fileNames = filenames; // save filenames in our multireader
@@ -245,18 +245,21 @@ void BamMultiReader::Open(const vector<string> filenames, bool openIndexes, bool
                                             make_pair(reader, alignment)));
             } else {
                 cerr << "WARNING: could not read first alignment in " << filename << ", ignoring file" << endl;
+                // if only file available & could not be read, return failure
+                if ( filenames.size() == 1 ) return false;
             }
         
         } 
        
-        // TODO; error handling on openedOK == false
-        else {
-          
-          
-        }
+        // TODO; any more error handling on openedOK ??
+        else 
+            return false;
     }
-    
+
+    // files opened ok, at least one alignment could be read,
+    // now need to check that all files use same reference data
     ValidateReaders();
+    return true;
 }
 
 void BamMultiReader::PrintFilenames(void) {
diff --git a/BamMultiReader.h b/BamMultiReader.h
index 37ad765..bd36d71 100644
--- a/BamMultiReader.h
+++ b/BamMultiReader.h
@@ -3,7 +3,7 @@
 // Marth Lab, Department of Biology, Boston College
 // All rights reserved.
 // ---------------------------------------------------------------------------
-// Last modified: 22 February 2010 (EG)
+// Last modified: 20 July 2010 (DB)
 // ---------------------------------------------------------------------------
 // Functionality for simultaneously reading multiple BAM files
 // ***************************************************************************
@@ -59,7 +59,7 @@ class BamMultiReader {
         // indexes.
         // @coreMode - setup our first alignments using GetNextAlignmentCore();
         // also useful for merging
-        void Open(const vector<string> filenames, bool openIndexes = true, bool coreMode = false, bool useDefaultIndex = true);
+        bool Open(const vector<string> filenames, bool openIndexes = true, bool coreMode = false, bool useDefaultIndex = true);
 
         // performs random-access jump to reference, position
         bool Jump(int refID, int position = 0);
-- 
2.39.5