1 #include "BamMultiReader.h"
\r
2 #include "BamWriter.h"
\r
3 #include <boost/algorithm/string.hpp>
\r
6 using namespace BamTools;
\r
9 int main(int argc, char** argv) {
\r
12 cerr << "USAGE: ./BamMultiMerge <output file> [input files]" << endl;
\r
16 string outputFilename = argv[1];
\r
18 BamMultiReader reader;
\r
19 vector<string> filenames;
\r
20 for (int i = 2; i<argc; ++i) {
\r
21 filenames.push_back(argv[i]);
\r
24 reader.Open(filenames);
\r
26 //cerr << "merging to " << outputFilename << endl;
\r
27 string mergedHeader = reader.GetUnifiedHeaderText();
\r
28 //cerr << "mergedHeader = " << endl << mergedHeader << endl;
\r
30 // check that we are merging files which have the same sets of references
\r
31 RefVector references;
\r
32 int referencesSize = 0; bool first = true;
\r
33 for (int i = 2; i<argc; ++i) {
\r
35 areader.Open( argv[i] );
\r
37 references = areader.GetReferenceData();
\r
38 referencesSize = references.size();
\r
41 RefVector newreferences = areader.GetReferenceData();
\r
43 for (RefVector::const_iterator it = references.begin(); it != references.end(); it++) {
\r
44 if (newreferences.at(i++).RefName != it->RefName) {
\r
45 cerr << "BAM FILES ALIGNED AGAINST DIFFERING SETS OF REFERENCES, NOT MERGING" << endl;
\r
54 writer.Open( outputFilename.c_str(), mergedHeader, references);
\r
56 BamAlignment bAlignment;
\r
57 while (reader.GetNextAlignment(bAlignment)) {
\r
58 // write to output file
\r
59 writer.SaveAlignment(bAlignment);
\r
62 // close output file
\r
64 // close input files
\r
67 //cerr << "done" << endl;
\r