int ReadMsa(const string& filename, CRef<CSeq_align>& align, CRef<CScope> scope, bool parse_deflines /* = false*/, objects::CSeqIdGenerator* id_generator /* = NULL*/) { if (scope.Empty()) { return -1; } CNcbiIfstream instream(filename.c_str()); if (!instream) { return -1; } CStreamLineReader line_reader(instream); CFastaReader::TFlags flags = CFastaReader::fAssumeProt | CFastaReader::fForceType | CFastaReader::fValidate; if (!parse_deflines) { flags |= CFastaReader::fNoParseID; } CFastaReader fasta_reader(line_reader, flags); if (id_generator) { fasta_reader.SetIDGenerator(*id_generator); } CRef<CSeq_entry> entry = fasta_reader.ReadAlignedSet(-1); if (entry.Empty()) { return -1; } scope->AddTopLevelSeqEntry(*entry); // notify of a problem if the whole file was not read if (!line_reader.AtEOF()) { return -1; } align = entry->GetAnnot().front()->GetData().GetAlign().front(); return 0; }