for (vector<string>::const_iterator it = filenames.begin(); it != filenames.end(); ++it) {
string filename = *it;
BamReader* reader = new BamReader;
+
+ // TODO; change Open to return success/failure so we can report errors here
if (openIndexes) {
reader->Open(filename, filename + ".bai");
} else {
reader->Open(filename); // for merging, jumping is disallowed
}
+
+ bool fileOK = true;
BamAlignment* alignment = new BamAlignment;
if (coreMode) {
- reader->GetNextAlignmentCore(*alignment);
+ fileOK &= reader->GetNextAlignmentCore(*alignment);
} else {
- reader->GetNextAlignment(*alignment);
+ fileOK &= reader->GetNextAlignment(*alignment);
}
- readers.push_back(make_pair(reader, alignment)); // store pointers to our readers for cleanup
- alignments.insert(make_pair(make_pair(alignment->RefID, alignment->Position),
- make_pair(reader, alignment)));
+ if (fileOK) {
+ readers.push_back(make_pair(reader, alignment)); // store pointers to our readers for cleanup
+ alignments.insert(make_pair(make_pair(alignment->RefID, alignment->Position),
+ make_pair(reader, alignment)));
+ } else {
+ cerr << "WARNING: could not read first alignment in " << filename << ", ignoring file" << endl;
+ }
+
}
ValidateReaders();
}