|
|
@@ -49,17 +49,17 @@ pub enum TagValue {
|
|
|
Str(String)
|
|
|
}
|
|
|
|
|
|
-pub type BamRead = (
|
|
|
- i32, // ref_id
|
|
|
- i32, // pos
|
|
|
- u8, // mapq
|
|
|
- u16, // flag
|
|
|
- String, // read_name
|
|
|
- Vec<(String, u32)>, // cigar
|
|
|
- BamSequence, // sequence
|
|
|
- Vec<u8>, // phred
|
|
|
- Vec<(String, TagValue)> // tags
|
|
|
-);
|
|
|
+pub struct BamRead {
|
|
|
+ ref_id: i32, // ref_id
|
|
|
+ pos: i32, // pos
|
|
|
+ mapq: u8, // mapq
|
|
|
+ flag: u16, // flag
|
|
|
+ read_name: String, // read_name
|
|
|
+ cigar: Vec<(String, u32)>, // cigar
|
|
|
+ sequence: BamSequence, // sequence
|
|
|
+ phred: Vec<u8>, // phred
|
|
|
+ tags: Vec<(String, TagValue)> // tags
|
|
|
+}
|
|
|
|
|
|
pub struct BamReader {
|
|
|
reader: BGZFReader<fs::File>,
|
|
|
@@ -300,10 +300,10 @@ impl BamReader {
|
|
|
};
|
|
|
tags.push((tag, tag_v));
|
|
|
|
|
|
- // if block_size - current_read == 0 { break; }
|
|
|
if self.reader.bgzf_pos() - pos_start >= block_size as u64 { break; }
|
|
|
}
|
|
|
- Ok((ref_id, pos, mapq, flag, read_name, cigar, sequence, phred, tags))
|
|
|
+ Ok(BamRead {ref_id, pos, mapq, flag, read_name, cigar, sequence, phred, tags})
|
|
|
+ // Ok((ref_id, pos, mapq, flag, read_name, cigar, sequence, phred, tags))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -331,12 +331,12 @@ mod tests {
|
|
|
let bam_reader = BamReader::new(bam_path).unwrap();
|
|
|
|
|
|
let reads = bam_reader
|
|
|
- .filter(|br| flags.contains(&br.3))
|
|
|
+ .filter(|br| flags.contains(&br.flag))
|
|
|
.take(1000)
|
|
|
.collect::<Vec<BamRead>>();
|
|
|
|
|
|
assert_eq!(
|
|
|
- reads[0].4,
|
|
|
+ reads[0].read_name,
|
|
|
"NB501645:337:HCCMVAFX2:3:11505:17842:2102_GATGGGACGG".to_string()
|
|
|
);
|
|
|
}
|