Mercurial > repos > dereeper > haplophyle
diff Haplophyle.pl @ 0:6f11162b6fa2 draft
planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
author | dereeper |
---|---|
date | Tue, 14 Aug 2018 08:04:23 -0400 |
parents | |
children | 8e248dc6ad56 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Haplophyle.pl Tue Aug 14 08:04:23 2018 -0400 @@ -0,0 +1,142 @@ +#!/usr/bin/perl + +use strict; +use Getopt::Long; +use Bio::SeqIO; + +use Cwd; +my $dir = getcwd; + + +my $usage = qq~Usage:$0 <args> [<opts>] +where <args> are: + -i, --input <input> + -o, --output <output> + -d, --dotfile <dotfile> +<opts> are: + -g, --groups <groupfile> + -s, --stats <statfile> + -t, --tool_path <tool_path> +~; +$usage .= "\n"; + +my ($infile,$output,$outfile,$groupfile,$statfile,$tool_path); + + +GetOptions( + "input=s" => \$infile, + "output=s" => \$output, + "dot=s" => \$outfile, + "groups=s" => \$groupfile, + "stats=s" => \$statfile, + "tool_path=s"=> \$tool_path +); + + +die $usage + if ( !$infile); + + +my $HAPLOPHYLE_EXE = "java -Xmx2048m -jar NetworkCreator_fat.jar"; +if ($tool_path){ + $HAPLOPHYLE_EXE = "java -Xmx2048m -jar $tool_path/NetworkCreator_fat.jar"; +} + + +my $out_png = "network.png"; + +my $command = "$HAPLOPHYLE_EXE -in $infile -out $outfile"; +system($command); + + + +my %groups; +my %groups2; +my %hash; +my %haplosize; +if ($groupfile && $statfile){ + open(G,$groupfile); + while(<G>){ + my $line = $_;$line=~s/\n//g;$line=~s/\r//g; + my ($ind,$group) = split(";",$line); + if ($group =~/\w+/ && $ind=~/\w+/){ + $groups{$group}.=$ind.","; + $groups2{$ind} = $group; + } + } + close(G); + + open(S,$statfile); + while(<S>){ + if (/^(haplo\d+):(\d+):(.*)/){ + my $haplo_num = $1; + my $nb_haplo = $2; + my $inds = $3; + my @inds = split(",",$3); + foreach my $ind(@inds){ + my ($indname,$rank) = split("_",$ind); + my $group = $groups2{$indname}; + $hash{$haplo_num}{$group}++; + $haplosize{$haplo_num}++; + } + } + } + close(S); +} + +my $nb_groups = scalar keys(%groups); +my @colors = ("#ed292a","#ed292a","#82ABA0","#2255a6","#6ebe43","#e76599","#662e91","#c180ff","#ea8b2f","#fff100","#666666","#01ffff","#bfbfbf","#2ac966","#666666"); +my $pie_block = ""; +my %correspondence_groups; +my $i = 0; +foreach my $group(keys(%groups)){ + $i++; + $correspondence_groups{$i} = $group; + $pie_block .= "'pie-$i-background-color': '$colors[$i]',\n"; + $pie_block .= "'pie-$i-background-size': 'mapData(group$i, 0, 10, 0, 100)',\n"; +} +open(JSON_CYTOSCAPE,">$output"); +my $json = "{\"elements\": {\"nodes\": ["; +my $done = 0; +open(OUTFILE,"$outfile"); +while(<OUTFILE>){ + if (/(^\w+)\s\[.*width=([\d\.]+),/){ + my $node = $1; + my $size = $2; + my $ref_hash = $hash{$node}; + if ($ref_hash){ + my %hash2 = %$ref_hash; + my $s = scalar keys(%hash2); + $json.= "{ \"data\": { \"id\": \"$node\", \"width\": $size"; + for (my $i = 1; $i <= $nb_groups; $i++){ + my $group = $correspondence_groups{$i}; + my $ratio = 0; + if ($haplosize{$node} > 0 && $hash{$node}{$group} > 0){ + $ratio = ($hash{$node}{$group}/$haplosize{$node}) * 10; + } + $json .= ", group$i: $ratio"; + } + $json.= " } },\n"; + } + else{ + $json.= "{ \"data\": { \"id\": \"$node\", \"width\": $size} },\n"; + } + } + if (/(\w+) -- (\w+)/){ + if ($done == 0){ + $done = 1; + chop($json); + chop($json); + $json .= "],\n"; + $json .= "\"edges\": [\n"; + } + $done = 1; + $json.= "{ \"data\": { \"id\": \"$1$2\", \"weight\": 1, \"source\": \"$1\", \"target\": \"$2\"} },\n"; + } +} +chop($json); +chop($json); +$json.="]}}"; +print JSON_CYTOSCAPE $json; +close(JSON_CYTOSCAPE); +