Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
// 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;
}