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"); }
TEST(BamHeaderTest, DecodeTest) { const string& text = "@HD\tVN:1.1\tSO:queryname\tpb:3.0.1\n" "@SQ\tSN:chr1\tLN:2038\tSP:chocobo\n" "@SQ\tSN:chr2\tLN:3042\tSP:chocobo\n" "@RG\tID:rg1\tSM:control\n" "@RG\tID:rg2\tSM:condition1\n" "@RG\tID:rg3\tSM:condition1\n" "@PG\tID:_foo_\tPN:ide\n" "@CO\tipsum and so on\n" "@CO\tcitation needed\n"; BamHeader header = BamHeader(text); EXPECT_EQ(string("1.1"), header.Version()); EXPECT_EQ(string("queryname"), header.SortOrder()); EXPECT_EQ(string("3.0.1"), header.PacBioBamVersion()); EXPECT_EQ(3, header.ReadGroups().size()); EXPECT_TRUE(header.HasReadGroup("rg1")); EXPECT_TRUE(header.HasReadGroup("rg2")); EXPECT_TRUE(header.HasReadGroup("rg3")); EXPECT_EQ(string("control"), header.ReadGroup("rg1").Sample()); EXPECT_EQ(string("condition1"), header.ReadGroup("rg2").Sample()); EXPECT_EQ(string("condition1"), header.ReadGroup("rg3").Sample()); EXPECT_EQ(2, header.Sequences().size()); EXPECT_TRUE(header.HasSequence("chr1")); EXPECT_TRUE(header.HasSequence("chr2")); EXPECT_EQ(string("chocobo"), header.Sequence("chr1").Species()); EXPECT_EQ(string("chocobo"), header.Sequence("chr2").Species()); EXPECT_EQ(string("2038"), header.Sequence("chr1").Length()); EXPECT_EQ(string("3042"), header.Sequence("chr2").Length()); EXPECT_EQ(1, header.Programs().size()); EXPECT_TRUE(header.HasProgram("_foo_")); EXPECT_EQ(string("ide"), header.Program("_foo_").Name()); EXPECT_EQ(2, header.Comments().size()); EXPECT_EQ(string("ipsum and so on"), header.Comments().at(0)); EXPECT_EQ(string("citation needed"), header.Comments().at(1)); }