void Application::processContigs(const BOOM::String &contigsFile, BOOM::Map<BOOM::String,TranscriptList*> &transcriptMap) { BOOM::FastaReader fastaReader(contigsFile); BOOM::String def, seq; while(fastaReader.nextSequence(def,seq)) { BOOM::String substrate=BOOM::FastaReader::getId(def); if(transcriptMap.isDefined(substrate)) { TranscriptList &transcripts=*transcriptMap[substrate]; int n=transcripts.size(); for(int i=0 ; i<n ; ++i) { BOOM::GffTranscript *feature=transcripts[i]; switch(feature->getStrand()) { case '+': processForwardFeature(feature->getEnd(),seq); break; case '-': processReverseFeature(feature->getBegin(),seq); break; default: continue; } } } } }
bool CBasicFastaWrapper::ReadFile(CNcbiIstream& iStream) { bool result = (iStream.good()); if (!result) { m_error = "Read Error: invalid stream.\n"; } else { CNcbiOstrstream oss; oss << iStream.rdbuf(); iStream.seekg(0); m_activeFastaString = CNcbiOstrstreamToString(oss); if (m_cacheRawFasta) m_rawFastaString = m_activeFastaString; // temporarily turn off warning messages (in case of '.' in *.a2m files) EDiagSev originalDiagSev = SetDiagPostLevel(eDiag_Error); try{ CStreamLineReader lineReader(iStream); CFastaReader fastaReader(lineReader, m_readFastaFlags); //CCounterManager counterMgr(reader.SetIDGenerator(), NULL); m_seqEntry = fastaReader.ReadSet(); // If there is only one sequence in the fasta, the Seq-entry returned is a Bioseq and not a Bioseq-set. // In that case, change the Bioseq to a Bioseq-set so caller doesn't have to manage multiple Seq-entry choices. if (m_seqEntry->IsSeq() && m_useBioseqSet) { CRef<CSeq_entry> bioseqFromFasta(new CSeq_entry); bioseqFromFasta->Assign(*m_seqEntry); m_seqEntry->Select(CSeq_entry::e_Set); m_seqEntry->SetSet().SetSeq_set().push_back(bioseqFromFasta); } } catch (...) { result = false; m_seqEntry.Reset(); } if (m_seqEntry.Empty()) { result = false; m_error = "Read Error: empty seq entry.\n"; } SetDiagPostLevel(originalDiagSev); } return result; }