// ---------------------------------------------------------------------------- bool CGffRecord::AssignPhase( const CSeq_feat& feature ) // ---------------------------------------------------------------------------- { m_strPhase = "."; if ( ! feature.CanGetData() ) { return true; } const CSeq_feat::TData& data = feature.GetData(); if ( data.GetSubtype() != CSeq_feat::TData::eSubtype_cdregion ) { return true; } const CCdregion& cdr = data.GetCdregion(); CCdregion::TFrame frame = cdr.GetFrame(); switch ( frame ) { default: break; case CCdregion::eFrame_one: m_strPhase = "0"; break; case CCdregion::eFrame_two: m_strPhase = "1"; break; case CCdregion::eFrame_three: m_strPhase = "2"; break; } return true; }
// ---------------------------------------------------------------------------- bool CGffRecord::AssignType( const CSeq_feat& feature ) // ---------------------------------------------------------------------------- { m_strType = "region"; if ( feature.CanGetQual() ) { const vector< CRef< CGb_qual > >& quals = feature.GetQual(); vector< CRef< CGb_qual > >::const_iterator it = quals.begin(); while ( it != quals.end() ) { if ( (*it)->CanGetQual() && (*it)->CanGetVal() ) { if ( (*it)->GetQual() == "standard_name" ) { m_strType = (*it)->GetVal(); return true; } } ++it; } } if ( ! feature.CanGetData() ) { return true; } switch ( feature.GetData().GetSubtype() ) { default: m_strType = feature.GetData().GetKey(); break; case CSeq_feat::TData::eSubtype_gene: m_strType = "gene"; break; case CSeq_feat::TData::eSubtype_cdregion: m_strType = "CDS"; break; case CSeq_feat::TData::eSubtype_mRNA: m_strType = "mRNA"; break; case CSeq_feat::TData::eSubtype_scRNA: m_strType = "scRNA"; break; case CSeq_feat::TData::eSubtype_exon: m_strType = "exon"; break; } return true; }