pre_plot.pl 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. my (%data,%segs);
  5. my $sam=shift;
  6. my $fseg=$sam.'.seg';
  7. my $fptn=$sam.'.ptn.tsv';
  8. my $ftn=$sam.'.tn.tsv';
  9. my @chrs=(1..22,'X','Y');
  10. open my $tn_fh, '<', $ftn or die "Cannot open file:$ftn\n$!\n";
  11. while(<$tn_fh>){
  12. chomp;
  13. next if /^#/ or /^contig/;
  14. #next unless /^chr/;
  15. my ($chr,$start,$end,$name,$val)=split /\t/;
  16. # my $id=join("\t",$chr,$start,$end,$name);
  17. # push @ids,$id;
  18. $chr=~s/^chr//;
  19. $data{$chr}{$start}{tn}=$val;
  20. $name=~s/_\d+$//;
  21. $data{$chr}{$start}{name}=$end."\t".$name;
  22. }
  23. close($tn_fh);
  24. open my $ptn_fh, '<', $fptn or die "Cannot open file:$!\n";
  25. while(<$ptn_fh>){
  26. chomp;
  27. next if /^#/ or /^contig/;
  28. my ($chr,$start,$end,$name,$val)=split /\t/;
  29. $chr=~s/^chr//;
  30. $data{$chr}{$start}{ptn}=$val;
  31. # my $id=join("\t",$chr,$start,$end,$name);
  32. # push @ids,$id;
  33. # $data{$id}{ptn}=$val;
  34. }
  35. close($ptn_fh);
  36. open my $seg_fh, '<', $fseg or die "Cannot open file:$!\n";
  37. while(<$seg_fh>){
  38. chomp;
  39. next if /^Sample/;
  40. my ($chr,$start,$end,$val)=(split /\t/)[1,2,3,5];
  41. $chr=~s/chr//;
  42. my $id=join("\t",$chr,$start,$end);
  43. $segs{$id}=$val;
  44. }
  45. close($seg_fh);
  46. open my $wfh ,' >',$sam.'_plot.tsv' or die "Cannot write file:$!";
  47. print $wfh join("\t",'#Chr','Start','End','Name','PTN','TN','Seg'),"\n";
  48. for my $chr (@chrs){
  49. for my $start(sort {$a <=> $b } keys %{$data{$chr}}){
  50. my $ptn=$data{$chr}{$start}{ptn};
  51. my $tn=$data{$chr}{$start}{tn};
  52. my $name=$data{$chr}{$start}{name};
  53. my $seg_val;
  54. for my $seg_reg(keys %segs){
  55. my ($seg_chr,$seg_start,$seg_end)=split /\t/,$seg_reg;
  56. next unless $seg_chr eq $chr;
  57. if($start>= $seg_start and $start <= $seg_end){
  58. $seg_val=$segs{$seg_reg};
  59. last;
  60. }
  61. }
  62. print $wfh join("\t",$chr,$start,$name,$ptn,$tn,$seg_val),"\n";
  63. }
  64. }