Пример #1
0
void CBaseCountItem::x_GatherInfo(CBioseqContext& ctx)
{
    if ( ctx.IsProt() ) {
        x_SetSkip();
        return;
    }
    
    CSeqVector v(ctx.GetLocation(), ctx.GetHandle().GetScope(),
                 CBioseq_Handle::eCoding_Iupac);
    const size_t COUNT = kMax_UChar+1;
    TSeqPos counters[COUNT] = {}; // "{}" will set all counters to zero

    // every how many bases do we check if the flatfile generator is canceled?
    // (feel free to adjust this number if it makes things faster)
    const static TSeqPos kCancelCheckBases = 4096;

    CSeqVector_CI it(v, 0, CSeqVector_CI::eCaseConversion_lower);
    TSeqPos count = v.size();
    while ( count > 0 ) {
        const TSeqPos uBasesToCopyRightNow = min( kCancelCheckBases, count );
        ITERATE_SIMPLE(uBasesToCopyRightNow) {
            ++counters[*it];
            ++it;
        }
        count -= uBasesToCopyRightNow;
        ctx.ThrowIfCanceled();
    }
    m_A = counters[Uchar('a')];
    m_C = counters[Uchar('c')];
    m_G = counters[Uchar('g')];
    m_T = counters[Uchar('t')];
    m_Other = v.size() - m_A - m_C - m_G - m_T;
}
Пример #2
0
void CBaseCountItem::x_GatherInfo(CBioseqContext& ctx)
{
    if ( ctx.IsProt() ) {
        x_SetSkip();
        return;
    }
    
    CSeqVector v(ctx.GetLocation(), ctx.GetHandle().GetScope(),
                 CBioseq_Handle::eCoding_Iupac);
    const size_t COUNT = kMax_UChar+1;
    TSeqPos counters[COUNT];
    for ( size_t i = 0; i < COUNT; ++i) {
        counters[i] = 0;
    }

    CSeqVector_CI it(v, 0, CSeqVector_CI::eCaseConversion_lower);
    for ( TSeqPos count = v.size(); count; --count, ++it ) {
        ++counters[*it];
    }
    m_A = counters[Uchar('a')];
    m_C = counters[Uchar('c')];
    m_G = counters[Uchar('g')];
    m_T = counters[Uchar('t')];
    m_Other = v.size() - m_A - m_C - m_G - m_T;
}