Skip to content

Commit dd5f806

Browse files
Gracefully handle missing chromosome names.
1 parent d73ad95 commit dd5f806

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/bcf/match_variants.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use std::error::Error;
2-
use std::collections::{vec_deque, HashMap, BTreeMap, btree_map};
2+
use std::collections::{HashMap, BTreeMap, btree_map};
33
use std::str;
44

55
use itertools::Itertools;
@@ -40,10 +40,10 @@ impl VarIndex {
4040
})
4141
}
4242

43-
pub fn range(&self, chrom: &[u8], pos: u32) -> btree_map::Range<u32, Variant> {
44-
// TODO error handling
45-
let records = self.inner.get(chrom).expect("CHROM name not found in matching VCF.");
46-
records.range(pos.saturating_sub(self.max_dist)..pos + self.max_dist)
43+
pub fn range(&self, chrom: &[u8], pos: u32) -> Option<btree_map::Range<u32, Variant>> {
44+
self.inner.get(chrom).map(
45+
|recs| recs.range(pos.saturating_sub(self.max_dist)..pos + self.max_dist)
46+
)
4747
}
4848
}
4949

@@ -81,9 +81,11 @@ pub fn match_variants(
8181

8282
let var = try!(Variant::new(&mut rec, &mut i));
8383
let matching = var.alleles.iter().map(|a| {
84-
for (_, v) in index.range(chrom, pos) {
85-
if let Some(id) = var.matches(v, a, max_dist, max_len_diff) {
86-
return id as i32;
84+
if let Some(range) = index.range(chrom, pos) {
85+
for (_, v) in range {
86+
if let Some(id) = var.matches(v, a, max_dist, max_len_diff) {
87+
return id as i32;
88+
}
8789
}
8890
}
8991
-1

0 commit comments

Comments
 (0)