annotate Haplophyle.pl @ 2:d6281dc90e20 draft default tip

Uploaded
author dereeper
date Wed, 09 Jun 2021 16:54:15 +0000
parents 8e248dc6ad56
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
1 #!/usr/bin/perl
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
2
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
3 use strict;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
4 use Getopt::Long;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
5
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
6 use Cwd;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
7 my $dir = getcwd;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
8
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
9
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
10 my $usage = qq~Usage:$0 <args> [<opts>]
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
11 where <args> are:
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
12 -i, --input <input>
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
13 -o, --output <output>
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
14 -d, --dotfile <dotfile>
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
15 <opts> are:
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
16 -g, --groups <groupfile>
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
17 -s, --stats <statfile>
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
18 -t, --tool_path <tool_path>
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
19 ~;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
20 $usage .= "\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
21
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
22 my ($infile,$output,$outfile,$groupfile,$statfile,$tool_path);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
23
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
24
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
25 GetOptions(
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
26 "input=s" => \$infile,
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
27 "output=s" => \$output,
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
28 "dot=s" => \$outfile,
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
29 "groups=s" => \$groupfile,
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
30 "stats=s" => \$statfile,
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
31 "tool_path=s"=> \$tool_path
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
32 );
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
33
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
34
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
35 die $usage
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
36 if ( !$infile);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
37
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
38
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
39 my $HAPLOPHYLE_EXE = "java -Xmx2048m -jar NetworkCreator_fat.jar";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
40 if ($tool_path){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
41 $HAPLOPHYLE_EXE = "java -Xmx2048m -jar $tool_path/NetworkCreator_fat.jar";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
42 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
43
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
44
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
45 my $out_png = "network.png";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
46
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
47 my $command = "$HAPLOPHYLE_EXE -in $infile -out $outfile";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
48 system($command);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
49
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
50
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
51
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
52 my %groups;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
53 my %groups2;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
54 my %hash;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
55 my %haplosize;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
56 if ($groupfile && $statfile){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
57 open(G,$groupfile);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
58 while(<G>){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
59 my $line = $_;$line=~s/\n//g;$line=~s/\r//g;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
60 my ($ind,$group) = split(";",$line);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
61 if ($group =~/\w+/ && $ind=~/\w+/){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
62 $groups{$group}.=$ind.",";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
63 $groups2{$ind} = $group;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
64 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
65 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
66 close(G);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
67
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
68 open(S,$statfile);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
69 while(<S>){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
70 if (/^(haplo\d+):(\d+):(.*)/){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
71 my $haplo_num = $1;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
72 my $nb_haplo = $2;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
73 my $inds = $3;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
74 my @inds = split(",",$3);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
75 foreach my $ind(@inds){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
76 my ($indname,$rank) = split("_",$ind);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
77 my $group = $groups2{$indname};
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
78 $hash{$haplo_num}{$group}++;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
79 $haplosize{$haplo_num}++;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
80 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
81 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
82 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
83 close(S);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
84 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
85
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
86 my $nb_groups = scalar keys(%groups);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
87 my @colors = ("#ed292a","#ed292a","#82ABA0","#2255a6","#6ebe43","#e76599","#662e91","#c180ff","#ea8b2f","#fff100","#666666","#01ffff","#bfbfbf","#2ac966","#666666");
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
88 my $pie_block = "";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
89 my %correspondence_groups;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
90 my $i = 0;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
91 foreach my $group(keys(%groups)){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
92 $i++;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
93 $correspondence_groups{$i} = $group;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
94 $pie_block .= "'pie-$i-background-color': '$colors[$i]',\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
95 $pie_block .= "'pie-$i-background-size': 'mapData(group$i, 0, 10, 0, 100)',\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
96 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
97 open(JSON_CYTOSCAPE,">$output");
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
98 my $json = "{\"elements\": {\"nodes\": [";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
99 my $done = 0;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
100 open(OUTFILE,"$outfile");
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
101 while(<OUTFILE>){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
102 if (/(^\w+)\s\[.*width=([\d\.]+),/){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
103 my $node = $1;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
104 my $size = $2;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
105 my $ref_hash = $hash{$node};
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
106 if ($ref_hash){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
107 my %hash2 = %$ref_hash;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
108 my $s = scalar keys(%hash2);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
109 $json.= "{ \"data\": { \"id\": \"$node\", \"width\": $size";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
110 for (my $i = 1; $i <= $nb_groups; $i++){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
111 my $group = $correspondence_groups{$i};
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
112 my $ratio = 0;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
113 if ($haplosize{$node} > 0 && $hash{$node}{$group} > 0){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
114 $ratio = ($hash{$node}{$group}/$haplosize{$node}) * 10;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
115 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
116 $json .= ", group$i: $ratio";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
117 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
118 $json.= " } },\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
119 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
120 else{
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
121 $json.= "{ \"data\": { \"id\": \"$node\", \"width\": $size} },\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
122 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
123 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
124 if (/(\w+) -- (\w+)/){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
125 if ($done == 0){
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
126 $done = 1;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
127 chop($json);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
128 chop($json);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
129 $json .= "],\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
130 $json .= "\"edges\": [\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
131 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
132 $done = 1;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
133 $json.= "{ \"data\": { \"id\": \"$1$2\", \"weight\": 1, \"source\": \"$1\", \"target\": \"$2\"} },\n";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
134 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
135 }
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
136 chop($json);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
137 chop($json);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
138 $json.="]}}";
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
139 print JSON_CYTOSCAPE $json;
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
140 close(JSON_CYTOSCAPE);
6f11162b6fa2 planemo upload commit 11382afe87364aaafb19973470d5066229a6e34f
dereeper
parents:
diff changeset
141