|
|
@@ -659,51 +659,51 @@ impl Contig {
|
|
|
}
|
|
|
|
|
|
// bug cigar len != seq len
|
|
|
- pub fn write_bam(&self, path: &str) -> Result<()> {
|
|
|
- let aligner = Aligner::builder()
|
|
|
- .asm5()
|
|
|
- .with_threads(8)
|
|
|
- .with_cigar()
|
|
|
- .with_seq(self.sequence.as_bytes())
|
|
|
- .expect("Unable to build index");
|
|
|
-
|
|
|
- let mut mappings = Vec::new();
|
|
|
- let supporting_records = self
|
|
|
- .supporting_records
|
|
|
- .clone()
|
|
|
- .ok_or(anyhow!("no supporting records"))?;
|
|
|
- for record in supporting_records.iter() {
|
|
|
- let seq = record.seq().as_bytes();
|
|
|
- let alignment = aligner
|
|
|
- .map(&seq, false, false, None, None)
|
|
|
- .expect("Unable to align");
|
|
|
- mappings.push(alignment);
|
|
|
- }
|
|
|
- let mut mappings: Vec<_> = mappings.into_iter().flatten().collect();
|
|
|
- mappings.sort_by(|a, b| a.target_start.cmp(&b.target_start));
|
|
|
-
|
|
|
- let mut header = bam::Header::new();
|
|
|
- let mut sq_record = rust_htslib::bam::header::HeaderRecord::new(b"SQ");
|
|
|
- sq_record.push_tag(b"SN", self.id.clone());
|
|
|
- sq_record.push_tag(b"LN", self.sequence.len());
|
|
|
- header.push_record(&sq_record);
|
|
|
-
|
|
|
- let mut out = bam::Writer::from_path(path, &header, bam::Format::Bam).unwrap();
|
|
|
-
|
|
|
- // copy reverse reads to new BAM file
|
|
|
- for mapping in mappings.iter() {
|
|
|
- let record = minimap2::htslib::mapping_to_record(
|
|
|
- Some(mapping),
|
|
|
- self.sequence.as_bytes(),
|
|
|
- header.clone(),
|
|
|
- None,
|
|
|
- Some(Uuid::new_v4().as_bytes()),
|
|
|
- );
|
|
|
- let _ = out.write(&record);
|
|
|
- }
|
|
|
- rust_htslib::bam::index::build(path, None, rust_htslib::bam::index::Type::Bai, 1)?;
|
|
|
- Ok(())
|
|
|
- }
|
|
|
+ // pub fn write_bam(&self, path: &str) -> Result<()> {
|
|
|
+ // let aligner = Aligner::builder()
|
|
|
+ // .asm5()
|
|
|
+ // .with_threads(8)
|
|
|
+ // .with_cigar()
|
|
|
+ // .with_seq(self.sequence.as_bytes())
|
|
|
+ // .expect("Unable to build index");
|
|
|
+ //
|
|
|
+ // let mut mappings = Vec::new();
|
|
|
+ // let supporting_records = self
|
|
|
+ // .supporting_records
|
|
|
+ // .clone()
|
|
|
+ // .ok_or(anyhow!("no supporting records"))?;
|
|
|
+ // for record in supporting_records.iter() {
|
|
|
+ // let seq = record.seq().as_bytes();
|
|
|
+ // let alignment = aligner
|
|
|
+ // .map(&seq, false, false, None, None)
|
|
|
+ // .expect("Unable to align");
|
|
|
+ // mappings.push(alignment);
|
|
|
+ // }
|
|
|
+ // let mut mappings: Vec<_> = mappings.into_iter().flatten().collect();
|
|
|
+ // mappings.sort_by(|a, b| a.target_start.cmp(&b.target_start));
|
|
|
+ //
|
|
|
+ // let mut header = bam::Header::new();
|
|
|
+ // let mut sq_record = rust_htslib::bam::header::HeaderRecord::new(b"SQ");
|
|
|
+ // sq_record.push_tag(b"SN", self.id.clone());
|
|
|
+ // sq_record.push_tag(b"LN", self.sequence.len());
|
|
|
+ // header.push_record(&sq_record);
|
|
|
+ //
|
|
|
+ // let mut out = bam::Writer::from_path(path, &header, bam::Format::Bam).unwrap();
|
|
|
+ //
|
|
|
+ // // copy reverse reads to new BAM file
|
|
|
+ // for mapping in mappings.iter() {
|
|
|
+ // let record = minimap2::htslib::mapping_to_record(
|
|
|
+ // Some(mapping),
|
|
|
+ // self.sequence.as_bytes(),
|
|
|
+ // header.clone(),
|
|
|
+ // None,
|
|
|
+ // Some(Uuid::new_v4().as_bytes()),
|
|
|
+ // );
|
|
|
+ // let _ = out.write(&record);
|
|
|
+ // }
|
|
|
+ // rust_htslib::bam::index::build(path, None, rust_htslib::bam::index::Type::Bai, 1)?;
|
|
|
+ // Ok(())
|
|
|
+ // }
|
|
|
|
|
|
pub fn hgvs(&self) -> Option<String> {
|
|
|
self.contig_ref.hgvs()
|