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