|
|
@@ -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(())
|
|
|
}
|