get_roh.pl 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. my $sam=shift;
  5. my $vaf=$sam.".ps.tab";
  6. my $roh=$sam."_ROHTableCall.bed";
  7. my (%dat,$num);
  8. open my $rohfh, '<', $roh or die "Cannot open file: $roh $!\n";
  9. while(<$rohfh>){
  10. chomp;
  11. my ($chr, $start, $end, $flag, $snp)=split /\t/;
  12. $chr=~s/chr//;
  13. if($snp>150 or ($end-$start > 5000000 and $snp>50 ) ){
  14. $num++;
  15. $dat{$chr}{$start.'_'.$end}='ROH'.$num;
  16. }
  17. }
  18. open my $vaffh, '<', $vaf or die "Cannot open file:$vaf $!\n";
  19. open my $wfh, '>' , $vaf.".xls" or die "Cannot write file:$! \n";
  20. $num=0;
  21. while(<$vaffh>){
  22. chomp;
  23. next if /^#/;
  24. if(/^contig/){
  25. print $wfh $_,"\tVAFadj\tROH\n";
  26. next;
  27. }
  28. my ($chr,$pos, $nref, $nalt, $other, $af)=split /\t/;
  29. $chr=~s/chr//;
  30. next if $nalt+$nref<40;
  31. my $vaf=$nalt/($nalt+$nref);
  32. $vaf=$vaf >0.5 ? 1-$vaf : $vaf;
  33. $vaf=sprintf("%.3f", $vaf);
  34. my $roh;
  35. for my $reg (keys %{$dat{$chr} }){
  36. my ($seg_start,$seg_end)=split /_/,$reg;
  37. if($pos>= $seg_start and $pos <= $seg_end){
  38. $roh=$dat{$chr}{$reg};
  39. ($num)=$roh=~/ROH(\d+)$/;
  40. last;
  41. }
  42. }
  43. if (defined $roh){
  44. print $wfh $_,"\t", $vaf,"\t", $roh,"\n";
  45. }else{
  46. print $wfh $_,"\t", $vaf, "\t", 'HET'.$num,"\n";
  47. }
  48. }