From ad5b87f99ce352066805ed352f52d90507ffdce3 Mon Sep 17 00:00:00 2001
From: Brandi Cantarel <brandi.cantarel@utsouthwestern.edu>
Date: Fri, 19 Oct 2018 15:12:07 -0500
Subject: [PATCH] update union.sh

---
 variants/unionvcf.pl | 60 +++++++++++++++++++++++---------------------
 1 file changed, 31 insertions(+), 29 deletions(-)

diff --git a/variants/unionvcf.pl b/variants/unionvcf.pl
index ee84efb..57c2046 100755
--- a/variants/unionvcf.pl
+++ b/variants/unionvcf.pl
@@ -118,7 +118,7 @@ foreach $vcf (@vcffiles) {
       push @gtdesc, join(":",$id,$afinfo{$id});
       push @newgts, $newgts{$id};
     }
-    $lines{$chrom}{$pos}{$caller} = [$chrom,$pos,$id,$ref,$alt,$score,$filter,$annot,$newformat,\@newgts,\@gtdesc];
+    $lines{$chrom}{$pos}{$alt}{$caller} = [$chrom,$pos,$id,$ref,$alt,$score,$filter,$annot,$newformat,\@newgts,\@gtdesc];
   }
   close VCF;
 }
@@ -128,37 +128,39 @@ if (grep(/mutect/,@vcffiles)) {
 }
 F1:foreach $chr (sort {$a cmp $b} keys %lines) {
  F2:foreach $pos (sort {$a <=> $b} keys %{$lines{$chr}}) {
-    my @callset;
-    my %csets;
-  F3:foreach $caller (sort {$a cmp $b} keys %{$lines{$chr}{$pos}}) {
-      my ($chrom, $pos,$id,$ref,$alt,$score,$filter,$annot,
-	  $format,$gtsref,$gtdescref) = @{$lines{$chr}{$pos}{$caller}};
-      @gtdesc = @{$gtdescref};
-      foreach $gtd (@gtdesc) {
-	my ($id,$dp,$maf) = split(/:/,$gtd);
-	push @{$csets{$id}}, [$caller,$dp,$maf];
-      }
-      push @callset, join("|",$caller,$alt,@gtdesc);
-    }
-    my $consistent = 1;
-    foreach $id (keys %csets) {
-      my @calls = @{$csets{$id}};
-      my @calls = sort {$a[2] <=> $b[2]} @calls;
-      $consistent = 0 if ($calls[0][2] < 0.25 && $calls[-1][2] - $calls[0][2] > 0.10 && $calls[-1][2]/($calls[0][2]+0.001) > 3);
-    }
-  F3:foreach $caller (@callers) {
-      if ($lines{$chr}{$pos}{$caller}) {
+  F4:foreach $alt (sort {$a <=> $b} keys %{$lines{$chr}{$pos}}) {
+      my @callset;
+      my %csets;
+    F3:foreach $caller (sort {$a cmp $b} keys %{$lines{$chr}{$pos}{$alt}}) {
 	my ($chrom, $pos,$id,$ref,$alt,$score,$filter,$annot,
-	    $format,$gtsref,$gtdescref) = @{$lines{$chr}{$pos}{$caller}};
-	@gts = @{$gtsref};
+	    $format,$gtsref,$gtdescref) = @{$lines{$chr}{$pos}{$alt}{$caller}};
 	@gtdesc = @{$gtdescref};
-	$annot = $annot.";CallSet=".join(",",@callset);
-	unless ($consistent) {
-	  $annot = $annot.";CallSetInconsistent=1";
+	foreach $gtd (@gtdesc) {
+	  my ($id,$dp,$maf) = split(/:/,$gtd);
+	  push @{$csets{$id}}, [$caller,$dp,$maf];
+	}
+	push @callset, join("|",$caller,$alt,@gtdesc);
+      }
+      my $consistent = 1;
+      foreach $id (keys %csets) {
+	my @calls = @{$csets{$id}};
+	my @calls = sort {$a[2] <=> $b[2]} @calls;
+	$consistent = 0 if ($calls[0][2] < 0.25 && $calls[-1][2] - $calls[0][2] > 0.10 && $calls[-1][2]/($calls[0][2]+0.001) > 3);
+      }
+    F3:foreach $caller (@callers) {
+	if ($lines{$chr}{$pos}{$alt}{$caller}) {
+	  my ($chrom, $pos,$id,$ref,$alt,$score,$filter,$annot,
+	      $format,$gtsref,$gtdescref) = @{$lines{$chr}{$pos}{$alt}{$caller}};
+	  @gts = @{$gtsref};
+	  @gtdesc = @{$gtdescref};
+	  $annot = $annot.";CallSet=".join(",",@callset);
+	  unless ($consistent) {
+	    $annot = $annot.";CallSetInconsistent=1";
+	  }
+	  print OUT join("\t",$chrom,$pos,$id,$ref,$alt,$score,
+			 $filter,$annot,$format,@gts),"\n";
+	  last F3;
 	}
-	print OUT join("\t",$chrom,$pos,$id,$ref,$alt,$score,
-		       $filter,$annot,$format,@gts),"\n";
-	last F3;
       }
     }
   }
-- 
GitLab