bool CReadBlastApp::CheckMissingRibosomalRNA ( const CBioseq::TAnnot& annots ) { bool result = false; if(PrintDetails()) NcbiCerr << "CheckMissingRibosomalRNA[annots] starts" << NcbiEndl; IncreaseVerbosity(); ITERATE(CBioseq::TAnnot, gen_feature, annots) { if ( !(*gen_feature)->GetData().IsFtable() ) continue; bool lres = CheckMissingRibosomalRNA((*gen_feature)->GetData().GetFtable()); result = lres || result; } DecreaseVerbosity(); if(PrintDetails()) NcbiCerr << "CheckMissingRibosomalRNA[annots] ends" << NcbiEndl; return result; }
bool CReadBlastApp::CheckMissingRibosomalRNA ( const CSeq_annot::C_Data::TFtable& feats ) { // all rRNAs must be in one table! if(PrintDetails()) NcbiCerr << "CheckMissingRibosomalRNA[feats] starts" << NcbiEndl; IncreaseVerbosity(); bool result = false; bool has5S=false; bool has16S=false; bool has23S=false; ITERATE(CSeq_annot::C_Data::TFtable, f1, feats) { if( !(*f1)->GetData().IsRna() ) continue; CRNA_ref::EType rna_type = (*f1)->GetData().GetRna().GetType(); if( rna_type == CRNA_ref::eType_rRNA ) { if( !(*f1)->GetData().GetRna().CanGetExt() ) { NcbiCerr << "CReadBlastApp::CheckMissingRibosomalRNA[feats]: FATAL: no ext feature in rRNA" << NcbiEndl; throw; } string type = GetRRNAtype((*f1)->GetData().GetRna()); if(type == "5S") {has5S = true; } if(type == "16S") {has16S = true; } if(type == "23S") {has23S = true; } } } if(!has5S) NcbiCerr << "CReadBlastApp::CheckMissingRibosomalRNA[feats]: ERROR: 5S ribosomal RNA is missing" << NcbiEndl; if(!has16S) NcbiCerr << "CReadBlastApp::CheckMissingRibosomalRNA[feats]: ERROR: 16S ribosomal RNA is missing" << NcbiEndl; if(!has23S) NcbiCerr << "CReadBlastApp::CheckMissingRibosomalRNA[feats]: ERROR: 23S ribosomal RNA is missing" << NcbiEndl; DecreaseVerbosity(); if(PrintDetails()) NcbiCerr << "CheckMissingRibosomalRNA[feats] ends" << NcbiEndl; return result; }
// w.out CTypeConstIterator int CReadBlastApp::AnalyzeSeqs(CBioseq_set::TSeq_set& seqs) { CArgs args = GetArgs(); IncreaseVerbosity(); string tblFile; if (args["outTbl"].HasValue()) tblFile = args["outTbl"].AsString(); else tblFile = "/dev/null"; ofstream tblOut(tblFile.c_str(), IOS_BASE::app | IOS_BASE::out ); NON_CONST_ITERATE( CBioseq_set::TSeq_set, left, seqs) { if((*left)->IsSet()) { if(PrintDetails()) NcbiCerr << "AnalyzeSeqs: going down: " << NcbiEndl; CBioseq_set::TSeq_set& seqs2 = (*left)->SetSet().SetSeq_set(); PushVerbosity(); AnalyzeSeqs(seqs2); PopVerbosity(); continue; } if(PrintDetails()) NcbiCerr << "AnalyzeSeqs: left: " // << CSeq_id::GetStringDescr ((*left)->GetSeq(), CSeq_id::eFormat_FastA) << NcbiEndl; << GetStringDescr ((*left)->GetSeq()) << NcbiEndl; ///////////////////////////////// // not a protein. Do NA stuff if( !is_prot_entry((*left)->GetSeq()) ) { // NA, process all RNA and what not annotations here and compare for overlaps // CheckMissingRibosomalRNA((*left)->GetSeq().GetAnnot() ); // check overlaps of the sequence with other features overlaps_na((*left)->GetSeq().GetAnnot() ); continue; } /////////////////////////////////// // compare to... CBioseq_set::TSeq_set::iterator right = left; bool again=true; bool last_right=false; while(again) // have overlaps { again=false; ++right; if(!skip_toprot(right, seqs)) {last_right=true; break;} if(PrintDetails()) { NcbiCerr << "AnalyzeSeqs: right: " << GetStringDescr ((*right)->GetSeq()) << NcbiEndl; } // analyze for overlaps with the next one PushVerbosity(); // if there are overlaps, keep on working on left, iterating through right again=overlaps((*left)->GetSeq(), (*right)->GetSeq() ); PopVerbosity(); } if (last_right) break; if(PrintDetails()) NcbiCerr << "AnalyzeSeqs: finished lower level seq, overlaps: " << NcbiEndl; } NON_CONST_ITERATE( CBioseq_set::TSeq_set, left, seqs) { if((*left)->IsSet()) continue; // does not hit. Skip if( !has_blast_hits((*left)->GetSeq()) ) continue; if(PrintDetails()) NcbiCerr << "AnalyzeSeqs: left: valid" << NcbiEndl; CBioseq_set::TSeq_set::iterator right = left; ++right; if(!skip_to_valid_seq_cand(right, seqs)) break; if(PrintDetails()) NcbiCerr << "AnalyzeSeqs: right: valid" << NcbiEndl; string common_subject; bool fit_blast_result = fit_blast((*left)->GetSeq(), (*right)->GetSeq(), common_subject); bool lhp = hasProblems((*left)->GetSeq(), m_diag, eFrameShift); bool rhp = hasProblems((*right)->GetSeq(), m_diag, eFrameShift); bool lhoe = hasProblems((*left)->GetSeq(), m_diag, eMayBeNotFrameShift); bool rhoe = hasProblems((*right)->GetSeq(), m_diag, eMayBeNotFrameShift); if(PrintDetails()) NcbiCerr << "AnalyzeSeqs: after fit_blast:" << fit_blast_result << lhp << lhoe << rhp << rhoe << NcbiEndl; // if(fit_blast_result && (lhp && !lhoe) && (rhp && !rhoe)) if(fit_blast_result) { // go to the same sequence set, find first NA, add misc_feature append_misc_feature(seqs, GetStringDescr((*left)->GetSeq()), eFrameShift); } if(PrintDetails()) NcbiCerr << "AnalyzeSeqs: finished lower level seq, frameshifts: " << NcbiEndl; } DecreaseVerbosity(); return -1; }