// ---------------------------------------------------------------------------- bool CGtfReader::x_FeatureSetDataCDS( const CGff2Record& record, CRef< CSeq_feat > pFeature ) // ---------------------------------------------------------------------------- { if ( ! CGff2Reader::x_FeatureSetDataCDS( record, pFeature ) ) { return false; } CCdregion& cdr = pFeature->SetData().SetCdregion(); string strValue; if ( record.GetAttribute( "protein_id", strValue ) ) { CRef<CSeq_id> pId = CReadUtil::AsSeqId(strValue,m_iFlags); if (pId->IsGenbank()) { pFeature->SetProduct().SetWhole(*pId); } } if ( record.GetAttribute( "ribosomal_slippage", strValue ) ) { pFeature->SetExcept( true ); pFeature->SetExcept_text( "ribosomal slippage" ); } if ( record.GetAttribute( "transl_table", strValue ) ) { CRef< CGenetic_code::C_E > pGc( new CGenetic_code::C_E ); pGc->SetId( NStr::StringToUInt( strValue ) ); cdr.SetCode().Set().push_back( pGc ); } return true; }
// ---------------------------------------------------------------------------- bool CGff3Reader::x_UpdateAnnot( const CGff2Record& record, CRef< CSeq_annot > pAnnot ) // ---------------------------------------------------------------------------- { string gbkey; record.GetAttribute("gbkey", gbkey); CRef< CSeq_feat > pFeature(new CSeq_feat); // Round trip info: CRef< CGb_qual > pQual( new CGb_qual ); pQual->SetQual( "gff_source" ); pQual->SetVal( record.Source() ); pFeature->SetQual().push_back( pQual ); pQual.Reset( new CGb_qual ); pQual->SetQual( "gff_type" ); pQual->SetVal( record.Type() ); pFeature->SetQual().push_back( pQual ); if ( record.IsSetScore() ) { pQual.Reset( new CGb_qual ); pQual->SetQual( "gff_score" ); pQual->SetVal( NStr::DoubleToString( record.Score() ) ); pFeature->SetQual().push_back( pQual ); } // Special case: exon feature belonging to an RNA we have already seen if (record.Type() == "exon") { string parent; if (record.GetAttribute("Parent", parent)) { IdToFeatureMap::iterator it = m_MapIdToFeature.find(parent); if (it != m_MapIdToFeature.end()) { return record.UpdateFeature(m_iFlags, it->second); } } } // Special case: Piece of another feature we have already seen string id; if (record.GetAttribute("ID", id)) { IdToFeatureMap::iterator it = m_MapIdToFeature.find(id); if (it != m_MapIdToFeature.end()) { return record.UpdateFeature(m_iFlags, it->second); } } // General case: brand new regular feature if (!record.InitializeFeature(m_iFlags, pFeature)) { return false; } string strId; if ( record.GetAttribute( "ID", strId ) ) { m_MapIdToFeature[ strId ] = pFeature; } return x_AddFeatureToAnnot( pFeature, pAnnot ); }
// ---------------------------------------------------------------------------- string s_GeneKey( const CGff2Record& gff ) // ---------------------------------------------------------------------------- { string strGeneId; if ( ! gff.GetAttribute( "gene_id", strGeneId ) ) { cerr << "Unexpected: GTF feature without a gene_id." << endl; return "gene_id"; } return strGeneId; }
// ---------------------------------------------------------------------------- string s_FeatureKey( const CGff2Record& gff ) // ---------------------------------------------------------------------------- { string strGeneId = s_GeneKey( gff ); if ( gff.Type() == "gene" ) { return strGeneId; } string strTranscriptId; if ( ! gff.GetAttribute( "transcript_id", strTranscriptId ) ) { cerr << "Unexpected: GTF feature without a transcript_id." << endl; strTranscriptId = "transcript_id"; } return strGeneId + "|" + strTranscriptId; }
// ---------------------------------------------------------------------------- bool CGtfReader::x_CdsIsPartial( const CGff2Record& record ) // ---------------------------------------------------------------------------- { string strPartial; // if ( record.Type() != "CDS" ) { // return false; // } if ( record.GetAttribute( "partial", strPartial ) ) { return true; } CRef< CSeq_feat > mRna; if ( ! x_FindParentMrna( record, mRna ) ) { return false; } return ( mRna->IsSetPartial() && mRna->GetPartial() ); }
// ---------------------------------------------------------------------------- bool CGtfReader::x_FeatureSetDataMRNA( const CGff2Record& record, CRef<CSeq_feat> pFeature) // ---------------------------------------------------------------------------- { if ( ! CGff2Reader::x_FeatureSetDataRna( record, pFeature, CSeqFeatData::eSubtype_mRNA)) { return false; } CRNA_ref& rna = pFeature->SetData().SetRna(); string strValue; if (record.GetAttribute("product", strValue)) { rna.SetExt().SetName(strValue); } return true; }
// ---------------------------------------------------------------------------- bool CGtfReader::x_FeatureSetDataGene( const CGff2Record& record, CRef< CSeq_feat > pFeature ) // ---------------------------------------------------------------------------- { if ( ! CGff2Reader::x_FeatureSetDataGene( record, pFeature ) ) { return false; } CGene_ref& gene = pFeature->SetData().SetGene(); string strValue; if ( record.GetAttribute( "gene_synonym", strValue ) ) { gene.SetSyn().push_back( strValue ); } // mss-399: do -not- use gene_id for /gene_syn or /gene: //if ( record.GetAttribute( "gene_id", strValue ) ) { // gene.SetSyn().push_front( strValue ); //} return true; }