예제 #1
0
/**
 * Initialize buffer for next interval.
 * This should only be invoked if the buffer is empty.
 * Returns true if successful.
 */
bool BCFSyncedReader::initialize_next_interval()
{
    if (random_access)
    {
        while (intervals_index < intervals.size())
        {
            GenomeInterval interval = intervals[intervals_index++];

            for (size_t i=0; i<nfiles; ++i)
            {
                hts_itr_destroy(itrs[i]);
                itrs[i] = 0;
                interval.to_string(&s);

                if (ftypes[i].format==bcf)
                {
                    itrs[i] = bcf_itr_querys(idxs[i], hdrs[i], s.s);
                }
                else if (ftypes[i].format==vcf)
                {
                    itrs[i] = tbx_itr_querys(tbxs[i], s.s);
                }

                fill_buffer(i);
            }

            //make sure pq is not empty
            //it is possible for the pq to be empty as iterators may be returned
            //as the sequence might be a valid sequence stated in the header
            if (pq.size()!=0)
            {
                return true;
            }
        }

        return false;
    }
    else
    {
        for (size_t i=0; i<nfiles; ++i)
        {
            fill_buffer(i);
        }

        if (pq.size()!=0)
        {
            return true;
        }

        return false;
    }
}
예제 #2
0
/**
 * Initialize buffer for next interval.
 * This should only be invoked if the buffer is empty.
 * Returns true if successful.
 */
bool BCFSyncedStreamReader::initialize_next_interval()
{
    while (intervals_index < intervals.size())
    {
        GenomeInterval interval = intervals[intervals_index++];

        for (int32_t i = 0; i<nfiles; ++i)
        {
            int32_t ftype = hts_file_type(vcf_files[i].c_str());
            hts_itr_destroy(itrs[i]);
            itrs[i] = 0;
            interval.to_string(&s);

            if (ftype==FT_BCF_GZ)
            {
                itrs[i] = bcf_itr_querys(idxs[i], hdrs[i], s.s);
            }
            else if (ftype==FT_VCF_GZ)
            {
                itrs[i] = tbx_itr_querys(tbxs[i], s.s);
            }

            fill_buffer(i);
        }

        //make sure pq is not empty
        //it is possible for the pq to be empty as iterators may be returned
        //as the sequence might be a valid sequence stated in the header
        if (pq.size()!=0)
        {
            return true;
        }
    }

    return false;
}