Mercurial > repos > elixir-it > vinyl_optimizer
diff optimizer_genetic.pl @ 0:4c6529d120c3 draft
Uploaded
author | elixir-it |
---|---|
date | Tue, 09 Jun 2020 16:07:19 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/optimizer_genetic.pl Tue Jun 09 16:07:19 2020 +0000 @@ -0,0 +1,109 @@ +#!/usr/bin/perl -w +use Cwd; +use strict; +#scoreN=c("-disease_clinvar","-score_AF","-score_functional", +# "-score_NS","-score_nIND","-scoreeQTL", +# "-scoreG","-scoreT","-scoreM", +# "-scoreR","-scoreSP","-scoreGW") + + +my %arguments= +( +"fileR"=>"", #file: vcf file of affected individuals +"fileC"=>"", #file: vcf file of unaffected individuals +"ofile"=>"", #name: name of the output files +"AD"=>"T", +"XL"=>"F", # +"disease_clinvar"=>[1,10], #numeric mandadory, multiple values +"score_AF"=>[1,10], #numeric mandatory, multiple values +"score_functional"=>[1,10], #numeric mandatory, multiple values +"score_NS"=>[1,10], #numeric mandatory, multiple values +"score_nIND"=>[1,10], #numeric mandatory, multiple values +"scoreeQTL"=>[1,10], #numeric mandatory, multiple values +"scoreG"=>[1,10], #numeric mandatory, multiple values +"scoreT"=>[1,10], +"scoreM"=>[1,10], +"scoreR"=>[1,10], +"scoreSP"=>[1,10], +"scoreGW"=>[1,10], +"disease"=>"", #name optional +"similarD"=>"", #file optional +"lgenes"=>"", #file optional +"leQTL"=>"qfile", #file mandatory, but default value +"keywords"=>"kfile", #file mandatory, but default value +"effects"=>"efile", #file mandatory, but default value +"nind"=>5, +"AF"=>0.0001 +); + +my @arguments=@ARGV; +for (my $i=0;$i<=$#ARGV;$i+=2) +{ + my $act=$ARGV[$i]; + $act=~s/-//g; + my $val=$ARGV[$i+1]; + if (exists $arguments{$act}) + { + unless ($val=~/\:/) + { + $arguments{$act}=$val; + }else{ + my ($s,$e)=(split(/\:/,$val)); + $arguments{$act}=[$s,$e]; + } + }else{ + warn("$act: unknown argument\n"); + my @valid=keys %arguments; + warn("Valid arguments are @valid\n"); + die("All those moments will be lost in time, like tears in rain.\n Time to die!\n"); + } + #print "$act $val\n"; +} + +my %compose_ARG= +( + "disease"=>1, #name optional + "similarD"=>1, #file optional + "lgenes"=>1, #file optional + "leQTL"=>1, #file mandatory, but default value + "keywords"=>1, #file mandatory, but default value + "effects"=>1, #file + "AF"=>1, + "nind"=>1, + "AD"=>1, + "XL"=>1, +); + +my $dir=getcwd(); +my $add_string=" "; + +foreach my $a (keys %compose_ARG) +{ + $add_string.="-$a $arguments{$a} " if $arguments{$a} ne ""; +} + + +my @DC=@{$arguments{"disease_clinvar"}};#=>[2..8], #numeric mandadory, but default value +my @AF=@{$arguments{"score_AF"}}; #numeric mandatory, but default value +my @FUN=@{$arguments{"score_functional"}};#=>[2..8], #numeric mandatory, but default value +my @NS=@{$arguments{"score_NS"}};#=>[2..8], #numeric mandatory, but default value +my @NI=@{$arguments{"score_nIND"}};#=>[2..8], #numeric mandatory, but default value +my @Q=@{$arguments{"scoreeQTL"}}; #numeric mandatory, but default value +my @G=@{$arguments{"scoreG"}}; #=>[1..3], #numeric mandatory, but default value +my @T=@{$arguments{"scoreT"}}; +my @M=@{$arguments{"scoreM"}}; +my @R=@{$arguments{"scoreR"}}; +my @SP=@{$arguments{"scoreSP"}}; +my @GW=@{$arguments{"scoreGW"}}; + +my $Rfile=$arguments{"fileR"}; +my $Cfile=$arguments{"fileC"}; +my $Ofile=$arguments{"ofile"}; + +my $minVals="$DC[0] $AF[0] $FUN[0] $NS[0] $NI[0] $Q[0] $G[0] $T[0] $M[0] $R[0] $SP[0] $GW[0]"; +my $maxVals="$DC[1] $AF[1] $FUN[1] $NS[1] $NI[1] $Q[1] $G[1] $T[1] $M[1] $R[1] $SP[1] $GW[1]"; + +system("Rscript --vanilla $dir/GENEO_VINYL.R $Rfile $Cfile \"$add_string\" \"$minVals\" \"$maxVals\" $Ofile.tmp")==0||die("no optimization"); + +system("(head -n 1 $Ofile.tmp && tail -n +1 $Ofile.tmp | sort -nk 19 -r) > $Ofile")==0||die("no sort"); +