|
@@ -215,6 +215,18 @@ pub fn get_start_end_qual_rec(
|
|
|
|
|
|
|
|
if rend >= start && rend < stop {
|
|
if rend >= start && rend < stop {
|
|
|
if record.mapq() >= mapq {
|
|
if record.mapq() >= mapq {
|
|
|
|
|
+ if record.is_supplementary() {
|
|
|
|
|
+ match record.aux(b"SA") {
|
|
|
|
|
+ std::result::Result::Ok(v) => match v {
|
|
|
|
|
+ record::Aux::String(v) => {
|
|
|
|
|
+ println!("{v}");
|
|
|
|
|
+ let v = v.split(";");
|
|
|
|
|
+ }
|
|
|
|
|
+ _ => (),
|
|
|
|
|
+ },
|
|
|
|
|
+ Err(_) => (),
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
let index = rend - start;
|
|
let index = rend - start;
|
|
|
let u = results_end.get_mut(index as usize).unwrap();
|
|
let u = results_end.get_mut(index as usize).unwrap();
|
|
|
u.push(record.clone());
|
|
u.push(record.clone());
|
|
@@ -224,6 +236,26 @@ pub fn get_start_end_qual_rec(
|
|
|
Ok((results_start, results_end))
|
|
Ok((results_start, results_end))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+pub fn primary_record(
|
|
|
|
|
+ bam: &mut rust_htslib::bam::IndexedReader,
|
|
|
|
|
+ qname: &str,
|
|
|
|
|
+ positions: &Vec<(&str, i32, i32)>
|
|
|
|
|
+) -> Option<Record> {
|
|
|
|
|
+ for position in positions {
|
|
|
|
|
+ bam.fetch(*position).unwrap();
|
|
|
|
|
+ let records = bam.records();
|
|
|
|
|
+ for record in records {
|
|
|
|
|
+ let record = record.unwrap();
|
|
|
|
|
+ if qname == String::from_utf8(record.qname().to_vec()).unwrap().as_str() {
|
|
|
|
|
+ if !record.is_supplementary() {
|
|
|
|
|
+ return Some(record.clone())
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ None
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
pub fn range_depths(
|
|
pub fn range_depths(
|
|
|
bam: &mut rust_htslib::bam::IndexedReader,
|
|
bam: &mut rust_htslib::bam::IndexedReader,
|
|
|
chr: &str,
|
|
chr: &str,
|
|
@@ -326,9 +358,7 @@ mod tests {
|
|
|
let start = 21839796;
|
|
let start = 21839796;
|
|
|
let mapq = 50;
|
|
let mapq = 50;
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- let mut bam = rust_htslib::bam::IndexedReader::from_path(bam_path)
|
|
|
|
|
- .unwrap();
|
|
|
|
|
|
|
+ let mut bam = rust_htslib::bam::IndexedReader::from_path(bam_path).unwrap();
|
|
|
|
|
|
|
|
let a = get_start_end_qual(&mut bam, chr, start, start + 1, mapq).unwrap();
|
|
let a = get_start_end_qual(&mut bam, chr, start, start + 1, mapq).unwrap();
|
|
|
println!("{a:?}");
|
|
println!("{a:?}");
|