// NrToFasta.cpp #include #include #include #include #include #include #include "FastaWriter.hpp" #include "GzipReader.hpp" #include "SystemError.hpp" #include "NrParser.hpp" using namespace NGBW; int main(int argc, char **argv) { try { std::ios_base::sync_with_stdio(false); if(argc != 5) throw std::invalid_argument("usage: nr-to-fasta dataset blastoutputname luceneoutputname inputname"); boost::scoped_ptr blast_output_file; if(std::memcmp(argv[2], "-", 2) != 0) { blast_output_file.reset(new std::ofstream(argv[2])); if(!blast_output_file->good()) { std::string message("can't open "); message.append(argv[2]); throw SystemError("main", message, errno); } } boost::scoped_ptr lucene_output_file; if(std::memcmp(argv[3], "-", 2) != 0) { lucene_output_file.reset(new std::ofstream(argv[3])); if(!lucene_output_file->good()) { std::string message("can't open "); message.append(argv[3]); throw SystemError("main", message, errno); } } std::ostream &blast_output = blast_output_file ? *blast_output_file : std::cout; std::ostream &lucene_output = lucene_output_file ? *lucene_output_file : std::cout; FastaWriter blast_writer(argv[1], blast_output); FastaWriter lucene_writer(argv[1], lucene_output); GzipReader reader(argv[4]); NrParser parser(reader); NrFastaRecord nr_record; FastaRecord fasta_record; while (parser.Parse(nr_record)) { fasta_record.sequence.assign(nr_record.sequence); DeflineList::const_iterator defline(nr_record.deflines.begin()); if (defline != nr_record.deflines.end()) { fasta_record.identity.assign((*defline).identity); fasta_record.description.assign((*defline).description); blast_writer.Write(fasta_record); lucene_writer.Write(fasta_record); while (++defline != nr_record.deflines.end()) { fasta_record.identity.assign((*defline).identity); fasta_record.description.assign((*defline).description); lucene_writer.Write(fasta_record); } } } return 0; } catch(const std::exception &err) { std::cerr << err.what() << std::endl; return 1; } catch(...) { std::cerr << "An unknown exception was thrown" << std::endl; return 1; } }