Mercurial > repos > elixir-it > vinyl_pca
view makeToM.pl @ 1:460883beb10c draft default tip
Uploaded
author | elixir-it |
---|---|
date | Wed, 15 Jul 2020 07:55:07 +0000 |
parents | 0011da72f65a |
children |
line wrap: on
line source
use strict; use Cwd qw(cwd); my $file_aff=shift; my $file_cont=shift; my $ofile=shift; my $dir=cwd; open(O,">$ofile.tmp"); my %Final_data=(); my @ids=(); my $ND=populate($file_aff); my $NH=populate($file_cont); my $head=join("\t",@ids); print O "\t$head\n"; foreach my $gene (sort keys %Final_data) { print O "$gene\t"; foreach (my $j=0;$j<=$#ids;$j++) { my $individual=$ids[$j]; my $SCORE=$Final_data{$gene}{$individual} ? $Final_data{$gene}{$individual} : 0; if ($j==$#ids) { print O "$SCORE\n"; }else{ print O "$SCORE\t"; } } } #print "Rscript --vanilla $dir/PCA.R $ofile $ND $NH $ofile.png\n"; system ("Rscript --vanilla $dir/PCA.R $ofile.tmp $ND $NH $ofile")==0||die($!); sub populate { my $file=$_[0]; open(IN,$file); my @P=(); my $N=0; while(<IN>) { if ($_=~/^#CHROM/) { my ($chr,$pos,$id,$ref,$alt,$qual,$filter,$info,$format,@Pids)=(split()); foreach my $P (@Pids) { push(@ids,$P); push(@P,$P); $N++; } }else{ my ($chr,$pos,$id,$ref,$alt,$qual,$filter,$info,$format,@data)=(split()); my @infos=split(/\;/,$info); my $gene="."; my $score=0; foreach my $i (@infos) { if ($i=~/Gene.refGene/) { $gene=(split(/\=/,$i))[1]; }elsif ($i=~/VINYL_score/){ $score=(split(/\=/,$i))[1]; } } next if $gene eq "."; foreach (my $j=0;$j<=$#data;$j++) { my $individual=$P[$j]; my $call=$data[$j]; next if $call eq "." || $call eq "0|0"; if ($Final_data{$gene}{$individual}) { $Final_data{$gene}{$individual}=$score if $score>$Final_data{$gene}{$individual} }else{ $Final_data{$gene}{$individual}=$score; } } } } return($N); }