annotate Haplophyle.pl @ 0:6f11162b6fa2 draft

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