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"); }