Example #1
0
  std::string GenomicRegion::ChrName(const BamHeader& h) const {
    
    std::string cc;
    if (!h.isEmpty()) {
      if (chr >= h.NumSequences())
	throw std::invalid_argument( "GenomicRegion::ChrName - not enough targets in BamHeader to cover ref id");
      else
	cc = h.IDtoName(chr); // std::string(h->target_name[chr]);
    } else {
      cc = chrToString(chr);
    }
    return cc;
  }
    void Interval(const BamHeader& header,
                  const GenomicInterval& interval)
    {
        htsIterator_.reset(nullptr);

        if (header.HasSequence(interval.Name())) {
            auto id = header.SequenceId(interval.Name());
            if (id >= 0 && static_cast<size_t>(id) < header.NumSequences()) {
                htsIterator_.reset(bam_itr_queryi(htsIndex_.get(),
                                                  id,
                                                  interval.Start(),
                                                  interval.Stop()));
            }
        }

        if (!htsIterator_)
            throw std::runtime_error("could not create iterator for requested region");
    }