Browse Source

DUPLICATION

Thomas 6 months ago
parent
commit
418c754b01
3 changed files with 47 additions and 5 deletions
  1. 1 5
      src/commands/dorado.rs
  2. 22 0
      src/lib.rs
  3. 24 0
      src/variant/variant.rs

+ 1 - 5
src/commands/dorado.rs

@@ -516,11 +516,7 @@ impl Dorado {
             }
         }
 
-        if base_pod_dir.is_some() {
-            info!("Removing tmp archive dir: {}", config.unarchive_tmp_dir);
-            fs::remove_dir_all(&config.unarchive_tmp_dir)?;
-        }
-
+        
         Ok(())
     }
 }

+ 22 - 0
src/lib.rs

@@ -746,6 +746,28 @@ let variant: VcfVariant = row.parse()?;
         Ok(())
     }
 
+    #[test]
+    fn dup_parse() -> anyhow::Result<()> {
+        init();
+
+        let row = "chr9\t91352364\tID_14667_1\tC\t]chr9:98584394]C\t.\tPASS\tSVTYPE=BND;MATEID=ID_14667_2;TUMOUR_READ_SUPPORT=3;TUMOUR_ALN_SUPPORT=3;NORMAL_READ_SUPPORT=0;NORMAL_ALN_SUPPORT=0;SVLEN=7232030;BP_NOTATION=-+;SOURCE=SUPPLEMENTARY;CLUSTERED_READS_TUMOUR=3;CLUSTERED_READS_NORMAL=0;ORIGIN_STARTS_STD_DEV=0.471;ORIGIN_MAPQ_MEAN=60;ORIGIN_EVENT_SIZE_STD_DEV=8.524;ORIGIN_EVENT_SIZE_MEDIAN=7232030;ORIGIN_EVENT_SIZE_MEAN=7232020;END_STARTS_STD_DEV=8.731;END_MAPQ_MEAN=60;END_EVENT_SIZE_STD_DEV=8.524;END_EVENT_SIZE_MEDIAN=7232030;END_EVENT_SIZE_MEAN=7232020;TUMOUR_DP_BEFORE=16,38;TUMOUR_DP_AT=20,33;TUMOUR_DP_AFTER=20,33;NORMAL_DP_BEFORE=26,22;NORMAL_DP_AT=26,22;NORMAL_DP_AFTER=26,22;TUMOUR_AF=0.15,0.091;NORMAL_AF=0,0;TUMOUR_TOTAL_HP_AT=7,12,1;NORMAL_TOTAL_HP_AT=13,13,0;TUMOUR_ALT_HP=0,2,1;TUMOUR_PS=90796185;NORMAL_ALT_HP=0,0,0;CLASS=PREDICTED_SOMATIC\tGT\t0/1";
+
+        let variant: VcfVariant = row.parse()?;
+        assert_eq!(AlterationCategory::DUP, variant.alteration_category());
+
+        let row = "chr9\t98584394\tID_14667_2\tC\tC[chr9:91352364[\t.\tPASS\tSVTYPE=BND;MATEID=ID_14667_1;TUMOUR_READ_SUPPORT=3;TUMOUR_ALN_SUPPORT=3;NORMAL_READ_SUPPORT=0;NORMAL_ALN_SUPPORT=0;SVLEN=7232030;BP_NOTATION=-+;SOURCE=SUPPLEMENTARY;CLUSTERED_READS_TUMOUR=3;CLUSTERED_READS_NORMAL=0;ORIGIN_STARTS_STD_DEV=0.471;ORIGIN_MAPQ_MEAN=60;ORIGIN_EVENT_SIZE_STD_DEV=8.524;ORIGIN_EVENT_SIZE_MEDIAN=7232030;ORIGIN_EVENT_SIZE_MEAN=7232020;END_STARTS_STD_DEV=8.731;END_MAPQ_MEAN=60;END_EVENT_SIZE_STD_DEV=8.524;END_EVENT_SIZE_MEDIAN=7232030;END_EVENT_SIZE_MEAN=7232020;TUMOUR_DP_BEFORE=38,16;TUMOUR_DP_AT=33,20;TUMOUR_DP_AFTER=33,20;NORMAL_DP_BEFORE=22,26;NORMAL_DP_AT=22,26;NORMAL_DP_AFTER=22,26;TUMOUR_AF=0.091,0.15;NORMAL_AF=0,0;TUMOUR_TOTAL_HP_AT=15,18,0;NORMAL_TOTAL_HP_AT=11,10,1;TUMOUR_ALT_HP=1,0,2;TUMOUR_PS=98176815;NORMAL_ALT_HP=0,0,0;CLASS=PREDICTED_SOMATIC\tGT\t0/1";
+        let variant: VcfVariant = row.parse()?;
+        assert_eq!(AlterationCategory::DUP, variant.alteration_category());
+
+        let row = "chr1\t9218455\tr_0\tC\t<DUP>\t.\tPASS\tSVTYPE=DUP;SVLEN=12572;END=9231027\tTR:VR\t37:9";
+
+        let variant: VcfVariant = row.parse()?;
+        println!("{:#?}", variant.alteration_category());
+        println!("{:#?}", variant.bnd_desc());
+
+        Ok(())
+    }
+
 
     #[test]
     fn variant_parse() -> anyhow::Result<()> {

+ 24 - 0
src/variant/variant.rs

@@ -269,6 +269,8 @@ impl VcfVariant {
                             AlterationCategory::TRL
                         } else if bnd_desc.a_sens != bnd_desc.b_sens {
                             AlterationCategory::DELINV
+                        } else if bnd_desc.a_sens && bnd_desc.a_position > bnd_desc.b_position {
+                            AlterationCategory::DUP
                         } else {
                             AlterationCategory::DEL
                         }
@@ -315,6 +317,28 @@ impl VcfVariant {
     /// - The alteration category is not BND
     pub fn bnd_desc(&self) -> anyhow::Result<BNDDesc> {
         let alt = self.alternative.to_string();
+        if self.alternative.to_string() == "<DUP>" {
+            //         let row = "chr1\t9218455\tr_0\tC\t<DUP>\t.\tPASS\tSVTYPE=DUP;SVLEN=12572;END=9231027\tTR:VR\t37:9";
+
+            if let Some(len) = self.infos.0.iter().find_map(|i| {
+                if let Info::SVLEN(l) = i {
+                    Some(l)
+                } else {
+                    None
+                }
+            }) {
+                let c = self.position.contig();
+                return Ok(BNDDesc {
+                    a_contig: c.clone(),
+                    a_position: (self.position.position + 1).saturating_add(*len as u32),
+                    a_sens: true,
+                    b_contig: c,
+                    b_position: self.position.position + 1,
+                    b_sens: true,
+                    added_nt: "".to_string(),
+                });
+            }
+        }
         BNDDesc::from_vcf_breakend(&self.position().contig(), self.position.position + 1, &alt)
             .context(format!("The alteration is not BND: {alt}"))
     }