Răsfoiți Sursa

VariantsTrack

Thomas 1 an în urmă
părinte
comite
bf4e82ca48
1 a modificat fișierele cu 62 adăugiri și 5 ștergeri
  1. 62 5
      src/lib.rs

+ 62 - 5
src/lib.rs

@@ -162,7 +162,8 @@ impl BamTrack {
 #[derive(Debug)]
 pub enum Track {
     Bam(BamTrack),
-    Genes(GenesTrack)
+    Genes(GenesTrack),
+    Variants(VariantsTrack),
 }
 
 impl Track {
@@ -170,6 +171,7 @@ impl Track {
         match self {
             Track::Bam(bam) => json!(bam),
             Track::Genes(genes) => json!(genes),
+            Track::Variants(variants) => json!(variants),
         }
     }
 
@@ -177,6 +179,7 @@ impl Track {
         match self {
             Track::Bam(track) => track.order = order,
             Track::Genes(track) => track.order = order,
+            Track::Variants(track) => track.order = order,
         }
     }
 }
@@ -226,6 +229,48 @@ impl GenesTrack {
     }
 }
 
+#[derive(Serialize, SmartDefault, Debug)]
+pub struct VariantsTrack {
+    #[default = "variant"]
+    #[serde(rename = "type")]
+    pub igv_type: String,
+
+    #[default = "vcf"]
+    pub format: String,
+
+    pub url: String,
+
+    #[serde(rename = "indexURL")]
+    pub index_url: String,
+
+    #[default = ""]
+    pub filename: String,
+
+    pub name: String,
+
+    #[default = "#008cff"]
+    pub color: String,
+
+    #[serde(rename = "visibilityWindow")]
+    #[default = 13513380]
+    pub visibility_window: i32,
+
+    #[default = 0]
+    pub order: i16,
+}
+
+impl VariantsTrack {
+    pub fn new(vcf_url: &str, name: &str) -> Self {
+        Self {
+            url: vcf_url.to_string(),
+            index_url: format!("{vcf_url}.tbi"),
+            filename: name.to_string(),
+            name: name.to_string(),
+            ..Default::default()
+        }
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;
@@ -235,11 +280,23 @@ mod tests {
         let sess = Session::default()
             .with_reference(ReferenceValues::default())
             .with_locus_at(("chr1".to_string(), 47_098_189))?
-            .add_track(Track::Bam(BamTrack::new("ROBIN diag", "/data/longreads_basic_pipe/ROBIN/diag/ROBIN_diag_hs1.bam")))?
-            .add_track(Track::Bam(BamTrack::new("ROBIN mrd", "/data/longreads_basic_pipe/ROBIN/mrd/ROBIN_mrd_hs1.bam")))?
-            .add_track(Track::Genes(GenesTrack::new("/data/ref/hs1/chm13v2.0_RefSeq_Liftoff_v5.1_sorted.gff3.gz")))?;
+            .add_track(Track::Bam(BamTrack::new(
+                "ROBIN diag",
+                "/data/longreads_basic_pipe/ROBIN/diag/ROBIN_diag_hs1.bam",
+            )))?
+            .add_track(Track::Bam(BamTrack::new(
+                "ROBIN mrd",
+                "/data/longreads_basic_pipe/ROBIN/mrd/ROBIN_mrd_hs1.bam",
+            )))?
+            .add_track(Track::Genes(GenesTrack::new(
+                "/data/ref/hs1/chm13v2.0_RefSeq_Liftoff_v5.1_sorted.gff3.gz",
+            )))?
+            .add_track(Track::Variants(VariantsTrack::new(
+                "/data/longreads_basic_pipe/ROBIN/diag/ROBIN_loh.vcf.gz",
+                "LOH",
+            )))?;
         let compressed_str = sess.link("http://store-desktop.local/igv/")?;
-// 
+        //
         println!("{compressed_str}");
         Ok(())
     }