// ---------------------------------------------------------------------------- bool CGtfReader::x_CreateFeatureLocation( const CGff2Record& record, CRef< CSeq_feat > pFeature ) // ---------------------------------------------------------------------------- { CRef<CSeq_id> pId = CReadUtil::AsSeqId( record.Id(), m_iFlags & fAllIdsAsLocal); CSeq_interval& location = pFeature->SetLocation().SetInt(); location.SetId( *pId ); location.SetFrom( record.SeqStart() ); if (record.Type() != "mRNA") { location.SetTo(record.SeqStop()); } else { // place holder // actual location will be computed from the exons and CDSs living on // this feature. location.SetTo(record.SeqStart()); } if ( record.IsSetStrand() ) { location.SetStrand( record.Strand() ); } return true; }
// ---------------------------------------------------------------------------- bool CGtfReader::x_MergeFeatureLocationMultiInterval( const CGff2Record& record, CRef< CSeq_feat > pFeature ) // ---------------------------------------------------------------------------- { CRef<CSeq_id> pId = CReadUtil::AsSeqId( record.Id(), m_iFlags & fAllIdsAsLocal); CRef< CSeq_loc > pLocation( new CSeq_loc ); pLocation->SetInt().SetId( *pId ); pLocation->SetInt().SetFrom( record.SeqStart() ); pLocation->SetInt().SetTo( record.SeqStop() ); if ( record.IsSetStrand() ) { pLocation->SetInt().SetStrand( record.Strand() ); } pLocation = pLocation->Add( pFeature->SetLocation(), CSeq_loc::fSortAndMerge_All, 0 ); pFeature->SetLocation( *pLocation ); return true; }