Thomas 2 vuotta sitten
vanhempi
commit
181829f9a2
3 muutettua tiedostoa jossa 43 lisäystä ja 1 poistoa
  1. 27 0
      Cargo.lock
  2. 1 0
      Cargo.toml
  3. 15 1
      src/lib.rs

+ 27 - 0
Cargo.lock

@@ -112,6 +112,12 @@ dependencies = [
  "cfg-if",
 ]
 
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
 [[package]]
 name = "curl-sys"
 version = "0.4.72+curl-8.6.0"
@@ -152,6 +158,7 @@ dependencies = [
  "log",
  "minimap2",
  "rust-htslib",
+ "seq_io",
  "uuid",
 ]
 
@@ -480,12 +487,32 @@ version = "1.0.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
 
+[[package]]
+name = "scoped_threadpool"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
+
 [[package]]
 name = "semver"
 version = "0.1.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac"
 
+[[package]]
+name = "seq_io"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b213fabdebb1c56d330d1dbf92cef0257f3873b718eb2202bb73c707197e9c"
+dependencies = [
+ "buffer-redux",
+ "crossbeam-utils",
+ "memchr",
+ "scoped_threadpool",
+ "serde",
+ "serde_derive",
+]
+
 [[package]]
 name = "serde"
 version = "1.0.197"

+ 1 - 0
Cargo.toml

@@ -11,3 +11,4 @@ rust-htslib = "0.46.0"
 anyhow = "1.0.75"
 log = "0.4.19"
 uuid = { version = "1.6.1", features = ["serde", "v4"] }
+seq_io = "0.3.2"

+ 15 - 1
src/lib.rs

@@ -5,7 +5,7 @@ use rust_htslib::bam::{self, Record};
 use uuid::Uuid;
 use std::{
     collections::{HashMap, VecDeque},
-    fmt,
+    fmt, fs::File, io::BufWriter,
 };
 
 #[derive(Debug, Clone)]
@@ -321,6 +321,11 @@ impl Contig {
             .sort_by(|a, b| a.target_start.cmp(&b.target_start));
     }
 
+    pub fn to_igv(&mut seld) -> {
+
+    }
+
+    // bug cigar len != seq len
     pub fn write_bam(&self, path: &str) -> Result<()> {
         let aligner = Aligner::builder()
             .asm5()
@@ -394,6 +399,15 @@ fn group_mappings(mappings: &mut Vec<Mapping>) -> Result<Vec<Vec<Mapping>>> {
     Ok(alignments)
 }
 
+// unique
+pub fn write_fastq(fastq_path: &str, d: &Vec<Record>) {
+    let file = File::create(fasta_path).unwrap();
+    let mut writer = BufWriter::new(file);
+    for record in d {
+        seq_io::fastq::write_parts(&mut writer, record.qname(), None, &record.seq().as_bytes(), record.qual());
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;