annotate coVennTree/coVennTree.pl @ 0:745aede829e9 draft default tip

Imported from capsule None
author steffen
date Fri, 30 Jan 2015 09:55:45 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
1 #!/usr/bin/perl
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
2 use strict;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
3 use File::Basename;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
4 use List::MoreUtils qw( minmax );
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
5
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
6 # --------------------------------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
7 # author: steffen lott
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
8 # mail: steffen.lott@uni-freiburg.de
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
9 # date: 06-10-2014
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
10 # version: 1.6
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
11 #
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
12 # description:
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
13 # The tool converts an output from MEGAN in a special network which can visuallized with
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
14 # cytoscape. Gaper produces two files, the first one contains the network and the second one
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
15 # describes the attributes of the network.
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
16 # --------------------------------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
17
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
18 # return version number
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
19 if (@ARGV == 0) {
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
20 print "CoVennTree-Version 1.6\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
21 print "COMMAND\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
22 print "coventree argv0 argv1 argv2 argv3 argv4\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
23 print "--------------\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
24 print "argv0 = input file\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
25 print "argv1 = color mode [1,4]\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
26 print "argv2 = transformation function [1,7]\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
27 print "argv3 = only leaf information => 0 ; all information => 1\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
28 print "argv4 = output file name network\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
29 print "argv5 = output file name attributes\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
30 exit;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
31 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
32
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
33
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
34
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
35
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
36 # container to represent the network
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
37 my @network = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
38
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
39
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
40
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
41 # 0 PARAMETER_______________
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
42 # read argument from command-line
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
43 # important: DSV -> taxon-path, count(s) -> assigned -> tab
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
44 my $megan_file = $ARGV[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
45
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
46
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
47 # 1 PARAMETER_______________
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
48 my $colorMode;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
49 # color mode for venn-diagrams 0,1,2,3,4
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
50 if(defined $ARGV[1]){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
51 $colorMode = $ARGV[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
52 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
53 $colorMode = 3;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
54 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
55
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
56
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
57 # 2 PARAMETER_______________
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
58 # 2 different transformations functions
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
59 my $transFnc = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
60 if(defined $ARGV[2]){ # small datasets
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
61 $transFnc = $ARGV[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
62 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
63 $transFnc = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
64 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
65
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
66
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
67 # 3 PARAMETER_______________
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
68 # the user can switch between "only leaf information"
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
69 # or the complete tree information. the last one takes also the not assigned reads
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
70 # and creates artificial nodes to keep this number
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
71 my $onlyLeafs;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
72 if(defined $ARGV[3]){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
73 if($ARGV[3] == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
74 $onlyLeafs = "on";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
75 }elsif($ARGV[3] == 1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
76 $onlyLeafs = "off";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
77 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
78 }else{ # all information will be used! not assigned and assigned
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
79 $onlyLeafs = "off";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
80 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
81
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
82 # 4 PARAMETER_______________
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
83 # output -> network
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
84 my $out_network = $ARGV[4];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
85
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
86 # 5 PARAMETER_______________
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
87 # output -> attributes
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
88 my $out_attributes = $ARGV[5];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
89
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
90
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
91
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
92 # check the input format of the file. only a file with exactly three datasets are excepted. the other one will fill up with zeros
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
93
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
94
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
95 # read-in MEGAN-file
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
96 # if #{data-sets} = 1 -> no heade line
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
97 # if #{data-sets} > 1 -> heade line " #Datasets set1 set2 ..."
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
98 open(inFile , "<$megan_file") || die "File not found - \"Path-File\"!\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
99 my @pairIds = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
100 my $header = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
101 my @input_file = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
102 my @numberOfSets = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
103
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
104 while(<inFile>){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
105 chomp($_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
106 if($_ =~ /^#/){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
107 $header = $_;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
108 @numberOfSets = split("\t", $_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
109 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
110 #print @numberOfSets . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
111 # check the number of datasets are included
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
112 if(@numberOfSets == 0 || @numberOfSets == 1 || @numberOfSets > 4){ # no set is in the file
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
113 print "Error: File doesn't contain any dataset or contain more than three!";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
114 exit;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
115 }elsif(@numberOfSets == 2){ # only one set is in the file -> add 2x zeros
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
116 $_ .= "\t" . 0 . "\t" . 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
117 }elsif(@numberOfSets == 3){ # only two sets are in the file -> add 1x zeros
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
118 $_ .= "\t" . 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
119 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
120
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
121 addToNetwork($_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
122 push(@input_file, $_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
123 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
124 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
125 close(inFile);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
126
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
127
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
128 # --------------------------------------------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
129 # --------------------------------------------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
130 # (1) PREPROCESSING: detect all leaf nodes
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
131 my $modifiedInput = detectNonLeafs();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
132
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
133 # (2) MAIN COMPUTATION: compute deep by deep (path deep ex. root;Viruses; => deep 2)
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
134 my ($vennClusterOut, $specialNumberOut) = clusterVennBottomUp();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
135
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
136 # (3) VENN-END-PREPERATION: sum up all single values (d1-d3), transform abs values into
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
137 my $vennToStore = vennForCytoscape($vennClusterOut, $specialNumberOut);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
138
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
139 # (4) SAVE RESULTS INTO FILES: one file contains the network (.sif), the other one contains the attributes
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
140 storeNetwork();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
141 store2FileVenn($vennToStore);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
142 # --------------------------------------------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
143 # --------------------------------------------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
144
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
145
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
146
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
147
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
148 sub store2FileVenn{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
149 my $outVenn = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
150 # test
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
151 my $tmpFileName = $out_attributes;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
152
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
153 #my $tmpFileName = "./network.venn";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
154 open(FILE , ">$tmpFileName") || die "File can't be written - \"venn - File\"!\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
155 print FILE join("\n", @{$outVenn}) . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
156 close(FILE);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
157 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
158
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
159
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
160 sub vennForCytoscape{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
161 my $vennCluster = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
162 my $specialNum = $_[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
163 my $specNformat = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
164 my @out = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
165 # datastructure $vennCluster=> vennCluster[]{}{} => values
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
166 #delete $vennCluster->[0]{"no"};
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
167 my $frameSize = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
168 my $values = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
169 my $googleURL = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
170 my $outStr = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
171
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
172 for(my $i = 0 ; $i < @{$vennCluster}; $i++){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
173 while ( my($key, $value) = each %{$vennCluster->[$i]} ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
174 while ( my($key2, $value2) = each %{$vennCluster->[$i]{$key}} ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
175 $values = $vennCluster->[$i]{$key}{$key2};
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
176 $frameSize = getCorrectedFrameSize($values);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
177
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
178 if(defined $specialNum->[$i]{$key}{$key2}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
179 $specNformat = $key2 . "[" . sprintf("%.3f", $specialNum->[$i]{$key}{$key2}) . "]";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
180 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
181 $specNformat = $key2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
182 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
183
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
184 # old version, this version works pretty well
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
185 #$frameSize = getFrameSize($values);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
186 $googleURL = computeGoogleApiStrRotation($frameSize,$values,$colorMode);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
187 $outStr = $key2 . "\t" . $googleURL . "\t" . $specNformat . "\t" . $values;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
188 push(@out, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
189 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
190 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
191 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
192 return \@out;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
193 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
194
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
195
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
196 # this function keep the biggest node in the lowest depth,...
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
197 sub computeGoogleApiStrRotation{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
198 my $frameSize = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
199 my $values = $_[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
200 my $colMode = $_[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
201 my @relVal = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
202 my @col = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
203 my %sort = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
204 my @store = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
205 my %ovHash = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
206 my @storeOldPos = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
207 my @spVal = split(" ", $values);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
208 my $sum = $spVal[0] + $spVal[1] + $spVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
209
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
210 # user color-mode
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
211 if($colMode == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
212 $col[0] = "18A3F2"; $col[1] = "FA0800"; $col[2] = "FFF905";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
213 }elsif($colMode == 1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
214 $col[0] = "FF2A00"; $col[1] = "9CFF00"; $col[2] = "00CCFF";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
215 }elsif($colMode == 2){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
216 $col[0] = "B4FF00"; $col[1] = "FF00C6"; $col[2] = "00AEFF";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
217 }elsif($colMode == 3){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
218 $col[0] = "82FF00"; $col[1] = "7E00FF"; $col[2] = "FF003B";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
219 }elsif($colMode == 4){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
220 $col[0] = "1A1A1A"; $col[1] = "8A8A8A"; $col[2] = "C7C7C7";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
221 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
222
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
223 $sort{"0"} = $spVal[0]; $sort{"1"} = $spVal[1]; $sort{"2"} = $spVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
224
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
225 my $tmp = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
226 foreach(@spVal){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
227 if($sum != 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
228 $tmp = $_ * 100 / $sum;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
229 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
230 $tmp = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
231 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
232 push(@relVal,$tmp);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
233 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
234
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
235 $ovHash{"01"} = $relVal[3]; $ovHash{"10"} = $relVal[3];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
236 $ovHash{"02"} = $relVal[4]; $ovHash{"20"} = $relVal[4];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
237 $ovHash{"21"} = $relVal[5]; $ovHash{"12"} = $relVal[5];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
238
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
239 my $url = "http://chart.apis.google.com/chart?chs=" . $frameSize . "x" . $frameSize . "&chco=";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
240 # change color position in the google output string corresponding to the highest value
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
241 foreach my $k( sort {$sort{$b}<=>$sort{$a}} keys %sort) {
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
242 $url .= $col[$k] . ",";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
243 push(@store, $k);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
244 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
245 chop($url);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
246
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
247 $url .= "&cht=v&chd=t:";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
248 # sort node values in the right order
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
249 for(my $i = 0 ; $i < @relVal - 4 ; $i++){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
250 #print $i . "\t" . $store[$i] . "\t" . $relVal[$store[$i]] . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
251 $url .= sprintf("%.1f", $relVal[$store[$i]]) . ",";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
252 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
253 # sort intersection values in the right order
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
254 my $tStr0 = $store[0] . $store[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
255 my $tStr1 = $store[0] . $store[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
256 my $tStr2 = $store[1] . $store[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
257 $url .= sprintf("%.1f", $ovHash{$tStr0}) . "," . sprintf("%.1f", $ovHash{$tStr1}) . "," . sprintf("%.1f", $ovHash{$tStr2}) . ",";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
258 $url .= "0.0";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
259 $url .= "&chf=bg,s,e0dede00";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
260 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
261
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
262
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
263 # original function without any node rotation. the order of the nodes is always the same
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
264 sub computeGoogleApiStr{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
265 my $frameSize = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
266 my $values = $_[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
267 my @relVal = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
268 my @spVal = split(" ", $values);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
269 my $sum = $spVal[0] + $spVal[1] + $spVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
270
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
271 foreach(@spVal){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
272 my $tmp = $_ * 100 / $sum;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
273 push(@relVal,$tmp);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
274 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
275 my $url = "http://chart.apis.google.com/chart?chs=" . $frameSize . "x" . $frameSize .
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
276 #color
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
277 "&chco=FF6342,ADDE63,63C6DE" .
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
278 #"&chco=0000FF,0099FF,00FFFF" .
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
279
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
280 "&cht=v&chd=t:";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
281
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
282 for(my $i = 0 ; $i < @relVal - 1 ; $i++){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
283 $url .= sprintf("%.1f", $relVal[$i]) . ",";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
284 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
285 $url .= sprintf("%.1f", $relVal[-1]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
286
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
287 $url .= "&chf=bg,s,e0dede00";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
288 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
289
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
290
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
291 sub getCorrectedFrameSize{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
292 my $values = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
293 my @spVal = split(" ", $values);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
294 my $sum = $spVal[0] + $spVal[1] + $spVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
295 my $frame = lookupPixelSQRT($sum);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
296
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
297 # find maxValue position ([0] - [2])
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
298 my $arrPos = getMaxPos($spVal[0], $spVal[1], $spVal[2]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
299 my $addOver= -1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
300 my $addNode= -1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
301 my $addSum = -1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
302
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
303 if($arrPos == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
304 $addNode = $spVal[1] + $spVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
305 $addOver = $spVal[3] + $spVal[4];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
306 }elsif($arrPos == 1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
307 $addNode = $spVal[0] + $spVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
308 $addOver = $spVal[3] + $spVal[5];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
309 }elsif($arrPos == 2){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
310 $addNode = $spVal[0] + $spVal[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
311 $addOver = $spVal[4] + $spVal[5];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
312 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
313 # if the 2 of 3 nodes have no overlap to the largest one, than the complete value
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
314 # will be used to compute a frame and add this to the existing frame
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
315 $addSum = $addNode - $addOver;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
316
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
317 my $addFrame = lookupPixelSQRT($addSum);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
318 my $sumFrame = $frame + $addFrame;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
319 return $sumFrame;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
320 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
321
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
322
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
323 sub getMaxPos{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
324 my $pos = -1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
325 if( ($_[0] >= $_[1]) && ($_[0] >= $_[2]) ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
326 $pos = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
327 }elsif( ($_[1] >= $_[0]) && ($_[1] >= $_[2]) ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
328 $pos = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
329 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
330 $pos = 2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
331 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
332 return $pos;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
333 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
334
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
335
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
336 sub getFrameSize{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
337 my $values = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
338 my @spVal = split(" ", $values);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
339 my $sum = $spVal[0] + $spVal[1] + $spVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
340 my $frame = lookupPixel($sum);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
341 return $frame;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
342 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
343
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
344
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
345
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
346 sub clusterVennBottomUp{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
347 # transform $modifiedInput into datastructure
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
348 # container => [deep]{parent}{child}
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
349 my @container = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
350 my @containerSpecial = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
351 my @nodeValues = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
352 my $maxDeep = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
353 my %helperHash = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
354 my %specialMatrixAll = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
355
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
356 foreach(@{$modifiedInput}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
357 my @tmpArr = split('\t', $_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
358 my @path = split(';' , $tmpArr[0]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
359 my $deep = @path - 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
360
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
361 if(($deep - 1) >= 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
362 $container[$deep]{$path[-2]}{$path[-1]} = $tmpArr[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
363 $nodeValues[$deep]{$path[-2]}{$path[-1]} = "f";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
364 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
365 $container[$deep]{"no"}{$path[-1]} = $tmpArr[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
366 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
367 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
368 # start computation from the deepest path to the root node
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
369 for(my $i = (@container-1) ; $i >= 0 ; $i--){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
370 while ( my($key, $value) = each %{$container[$i]} ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
371 # update all predecessor nodes
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
372 while ( my($keyUp, $valueUp) = each %helperHash ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
373 if(exists $container[$i]{$key}{$keyUp}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
374 $container[$i]{$key}{$keyUp} = $valueUp;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
375 # compute special value by decompose venn's and add special value
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
376 $containerSpecial[$i]{$key}{$keyUp} = vennCongruousness(\@{$specialMatrixAll{$keyUp}});
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
377 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
378 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
379 # group all nodes which has the same predecessor id and sum up the values
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
380 while ( my($key2, $value2) = each %{$container[$i]{$key}} ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
381 if(exists $helperHash{$key}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
382 $helperHash{$key} = addValues($helperHash{$key}, $value2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
383 #push(@{$specialMatrixAll{$key}}, $value2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
384 #print $key . "\t" . $value2 . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
385 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
386 $helperHash{$key} = $value2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
387 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
388 #print $key . "\t" . $value2 . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
389 push(@{$specialMatrixAll{$key}}, $value2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
390 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
391 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
392 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
393 return \@container, \@containerSpecial;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
394 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
395
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
396
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
397 sub vennCongruousness{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
398 my $inSpecMatrix = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
399 my $numOfSets = @numberOfSets - 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
400 my @arrVal = (); my @matrix = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
401 my @sum = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
402 my $numVenn = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
403 my %actSet = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
404 my %actOvp = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
405 $actSet{"result"} = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
406 $actOvp{"result"} = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
407
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
408 # (step 1) - sum up rows
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
409 foreach (@{$inSpecMatrix}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
410 @arrVal = split(" ", $_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
411 $sum[0] += $arrVal[0]; $sum[1] += $arrVal[1]; $sum[2] += $arrVal[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
412 $sum[3] += $arrVal[3]; $sum[4] += $arrVal[4]; $sum[5] += $arrVal[5];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
413
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
414 if($arrVal[0] > 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
415 if(!(exists $actSet{1})){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
416 $actSet{1} = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
417 $actSet{"result"} += 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
418 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
419 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
420 if($arrVal[1] > 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
421 if(!(exists $actSet{2})){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
422 $actSet{2} = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
423 $actSet{"result"} += 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
424 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
425 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
426 if($arrVal[2] > 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
427 if(!(exists $actSet{3})){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
428 $actSet{3} = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
429 $actSet{"result"} += 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
430 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
431 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
432 if($arrVal[3] > 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
433 if(!(exists $actOvp{1})){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
434 $actOvp{1} = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
435 $actOvp{"result"} += 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
436 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
437 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
438 if($arrVal[4] > 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
439 if(!(exists $actOvp{2})){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
440 $actOvp{2} = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
441 $actOvp{"result"} += 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
442 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
443 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
444 if($arrVal[5] > 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
445 if(!(exists $actOvp{3})){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
446 $actOvp{3} = 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
447 $actOvp{"result"} += 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
448 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
449 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
450 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
451
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
452 # (step 2) - calc ratios (-1)
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
453 my $i = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
454 foreach (@{$inSpecMatrix}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
455 @arrVal = split(" ", $_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
456 for(my $j = 0 ; $j < @arrVal ; $j++){ # eventuell -1 da index von 0 - 6 anstatt 0 - 5 laeuft
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
457 # div zero !
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
458 if($arrVal[$j] == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
459 $matrix[$i][$j] = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
460 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
461 #print $j . "\t" . $sum[$j] . " \t" . $arrVal[$j] . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
462 $matrix[$i][$j] = $sum[$j] / $arrVal[$j];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
463 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
464 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
465 $i++;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
466 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
467
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
468 $numVenn = $i;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
469 # (step 3) - sum up data set ratios d1-d3
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
470 @sum = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
471 for(my $j = 0 ; $j < @matrix; $j++){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
472 $sum[0] += $matrix[$j][0]; $sum[1] += $matrix[$j][1]; $sum[2] += $matrix[$j][2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
473 $sum[3] += $matrix[$j][3]; $sum[4] += $matrix[$j][4]; $sum[5] += $matrix[$j][5];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
474 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
475 # (step 4) - calc ratios -> max(d_i, #{V}) / min(d_i, #{V})
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
476 my @condensedM = (); my $max = 0; my $min = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
477 for(my $j = 0 ; $j < @sum ; $j++){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
478 $max = ($numVenn, $sum[$j])[$numVenn < $sum[$j]];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
479 $min = ($numVenn, $sum[$j])[$numVenn > $sum[$j]];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
480
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
481 if($min == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
482 $sum[$j] = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
483 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
484 #$sum[$j] = $max / $min;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
485 $sum[$j] = $sum[$j] / $numVenn;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
486 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
487 #print "-> " . $j . "\t" . $sum[$j] . "\t" . $max . "\t" . $min . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
488 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
489 # (step 5) - normalize values between zero and one -> [0..1]
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
490 for(my $j = 0 ; $j < @sum ; $j++){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
491 $max = ($numVenn, $sum[$j])[$numVenn < $sum[$j]];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
492 $min = ($numVenn, $sum[$j])[$numVenn > $sum[$j]];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
493
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
494 if($max == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
495 $sum[$j] = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
496 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
497 $sum[$j] = $min / $max;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
498 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
499 #print "=> " . $j . "\t" . $sum[$j] . "\t" . $min . "\t" . $max . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
500 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
501 # (step 6) - combine all decomposed values and create only one value
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
502 # case a: only one dataset -> $numOfSets == 1
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
503 if($numOfSets == 1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
504 #print "res: " . $sum[0] . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
505 return $sum[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
506 }elsif($numOfSets == 2){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
507 # evtl fallunteruntescheiung
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
508 print "sum1: " . $sum[0] . "\t" . "sum2: " . $sum[1] . "\t" . "ovp1-2: " . $sum[3] . "\t" . "sets: " . $actSet{"result"} . "\t" . "ovp: " . $actOvp{"result"} . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
509 if($actOvp{"result"} == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
510 my $t = ((($sum[0] + $sum[1]) / $actSet{"result"}) );
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
511 #print "res2 " . $t . " ***\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
512 return ((($sum[0] + $sum[1]) / $actSet{"result"}) );
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
513 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
514 print "foobar\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
515 my $t = ((((($sum[0] + $sum[1]) / $actSet{"result"}) + $sum[3]) / 2) );
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
516 #print "res2* " . $t . " ***\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
517 return ((((($sum[0] + $sum[1]) / $actSet{"result"}) + $sum[3]) / 2) );
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
518 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
519 }elsif($numOfSets == 3){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
520 #print $sum[0] . "\t" . $sum[1] . "\t" . $sum[2] . "\t" . $sum[3] . "\t" . $sum[4] . "\t" . $sum[5] . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
521 #print $actSet{"result"} . "\t" . $actOvp{"result"} . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
522 #return ((((($sum[0] + $sum[1] + $sum[2]) / $numOfSets) + (($sum[3] + $sum[4] + $sum[5]) / $numOfSets) ) / 2) );
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
523
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
524 if($actOvp{"result"} == 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
525 my $t = (($sum[0] + $sum[1] + $sum[2]) / $actSet{"result"});
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
526 #print ">>>>>>> " . $t. "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
527 return (($sum[0] + $sum[1] + $sum[2]) / $actSet{"result"});
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
528 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
529 my $t = ((((($sum[0] + $sum[1] + $sum[2]) / $actSet{"result"}) + (($sum[3] + $sum[4] + $sum[5]) / $actOvp{"result"}) ) / 2));
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
530 #print ">>>>>>> " . $t. "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
531 return ((((($sum[0] + $sum[1] + $sum[2]) / $actSet{"result"}) + (($sum[3] + $sum[4] + $sum[5]) / $actOvp{"result"}) ) / 2));
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
532 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
533 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
534 return -1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
535 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
536 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
537
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
538
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
539 # save version of function clusterVennBottomUp()
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
540 #sub clusterVennBottomUp{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
541 # # transform $modifiedInput into datastructure
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
542 # # container => [deep]{parent}{child}
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
543 # my @container = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
544 # my $maxDeep = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
545 # my %helperHash = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
546 #
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
547 # foreach(@{$modifiedInput}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
548 # my @tmpArr = split('\t', $_);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
549 # my @path = split(';' , $tmpArr[0]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
550 # my $deep = @path - 1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
551 #
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
552 # if(($deep - 1) >= 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
553 # $container[$deep]{$path[-2]}{$path[-1]} = $tmpArr[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
554 # }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
555 # $container[$deep]{"no"}{$path[-1]} = $tmpArr[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
556 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
557 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
558 # # start computation from the deepest path to the root node
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
559 # for(my $i = (@container-1) ; $i >= 0 ; $i--){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
560 # while ( my($key, $value) = each %{$container[$i]} ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
561 # # update all predecessor nodes
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
562 # while ( my($keyUp, $valueUp) = each %helperHash ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
563 # if(exists $container[$i]{$key}{$keyUp}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
564 # $container[$i]{$key}{$keyUp} = $valueUp;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
565 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
566 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
567 # # group all nodes which has the same predecessor id and sum up the values
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
568 # while ( my($key2, $value2) = each %{$container[$i]{$key}} ){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
569 # if(exists $helperHash{$key}){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
570 # $helperHash{$key} = addValues($helperHash{$key}, $value2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
571 # }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
572 # $helperHash{$key} = $value2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
573 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
574 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
575 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
576 # }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
577 # return \@container;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
578 #}
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
579
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
580
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
581
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
582 sub addValues{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
583 my $val1 = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
584 my $val2 = $_[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
585
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
586 my @sV1 = split(" ", $val1);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
587 my @sV2 = split(" ", $val2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
588
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
589 my $tmp = $sV1[0] + $sV2[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
590 my $out = $tmp;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
591
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
592 for(my $i = 1 ; $i < @sV1 ; $i++){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
593 $tmp = $sV1[$i] + $sV2[$i];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
594 $out .= " " . $tmp;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
595 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
596 return $out;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
597 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
598
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
599
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
600
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
601 # detect non leaf nodes and remove the values
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
602 # works on @input_file !!!
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
603 # this version works only with 3 depths!
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
604 sub detectNonLeafs{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
605 my %recursiveValues = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
606 my @modifiedFile = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
607 my $convertedPath = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
608
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
609 my @additionalNetwork = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
610
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
611 # read last line
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
612 my @tmpArr1 = split('\t',$input_file[($#input_file)],2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
613 # -2 path direction from reward instead from the beginning. (-1 leaf,child , -2 parent,inner node)
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
614 my $parent1 = getId($tmpArr1[0],-2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
615 my $child1 = getId($tmpArr1[0],-1);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
616 my $deep1 = getPathDeep($tmpArr1[0]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
617 my $parent2 = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
618 my $child2 = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
619 my $deep2 = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
620
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
621
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
622 # if "if-statement is true, only root node exists"
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
623 my $outStr = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
624 if($parent1 == -1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
625 $outStr = convertPath($tmpArr1[0]) . "\t" . computeLeafValues($tmpArr1[1]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
626 push(@modifiedFile, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
627 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
628 $outStr = convertPath($tmpArr1[0]) . "\t" . computeLeafValues($tmpArr1[1]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
629 push(@modifiedFile, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
630
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
631 for(my $i = (@input_file-2) ; $i >= 0 ; $i--){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
632 @tmpArr1 = split('\t',$input_file[$i],2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
633 $parent2 = getId($tmpArr1[0],-2);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
634 $child2 = getId($tmpArr1[0],-1);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
635 $deep2 = getPathDeep($tmpArr1[0]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
636
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
637 #print $parent2 . "\t" . $child2 . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
638
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
639 # if eq true -> new leaf
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
640 if($parent2 eq $parent1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
641 $outStr = convertPath($tmpArr1[0]) . "\t" . computeLeafValues($tmpArr1[1]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
642 push(@modifiedFile, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
643 }elsif($parent1 eq $child2){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
644 $outStr = convertPath($tmpArr1[0]) . "\t" . "undef";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
645 push(@modifiedFile, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
646
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
647 my @check = split('\t', $tmpArr1[1]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
648 my $tSum = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
649 foreach(@check){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
650 $tSum += $_;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
651 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
652 if(($onlyLeafs eq "off") && ($tSum > 0)){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
653 $outStr = convertPath($tmpArr1[0]) . "not_assigned_" . $child2 . ";" . "\t" . computeLeafValues($tmpArr1[1]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
654 push(@modifiedFile, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
655 $outStr = $child2 . " pp " . "not_assigned_" . $child2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
656 push(@network, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
657 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
658 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
659 $outStr = convertPath($tmpArr1[0]) . "\t" . computeLeafValues($tmpArr1[1]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
660 push(@modifiedFile, $outStr);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
661 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
662
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
663 if($parent1 == -1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
664 push(@modifiedFile, convertPath($tmpArr1[0]));
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
665 last;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
666 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
667 $parent1 = $parent2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
668 $child1 = $child2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
669 $deep1 = $deep2;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
670 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
671 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
672 # store @additionalNetwork in .sif file!!! at this point, the sif file exists!
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
673 # it is stored into @network container. this container is globel defined!
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
674
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
675 return \@modifiedFile;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
676 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
677
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
678
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
679 # helper function for detectNonLeafs
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
680 sub getPathDeep{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
681 my $inPath = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
682 my @deep = split(';', $inPath);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
683 my $size = $#deep;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
684 return $size;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
685 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
686
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
687 sub convertPath{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
688 my $inString = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
689 $inString =~ s/"//g;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
690 $inString =~ s/\s+/_/g;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
691 return $inString;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
692 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
693
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
694 sub getId{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
695 my $lineToParse = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
696 my $idPos = $_[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
697 my $stringId = "";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
698 my @path = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
699
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
700 $lineToParse =~ s/"//g;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
701 $lineToParse =~ s/\s+/_/g;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
702 @path = split(';',$lineToParse);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
703 my $num = @path;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
704
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
705 if(($num + $idPos) < 0){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
706 return -1;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
707 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
708 return $path[$idPos];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
709 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
710 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
711
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
712 sub computeLeafValues{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
713 my $meganValues = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
714 my @rawValues = split('\t', $meganValues);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
715 my @nodeRelVal = ();
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
716
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
717 my $outValues = $rawValues[0] . " " . $rawValues[1] . " " . $rawValues[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
718
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
719 if($rawValues[0] <= $rawValues[1]){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
720 $outValues .= " " . $rawValues[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
721 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
722 $outValues .= " " . $rawValues[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
723 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
724 if($rawValues[0] <= $rawValues[2]){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
725 $outValues .= " " . $rawValues[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
726 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
727 $outValues .= " " . $rawValues[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
728 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
729 if($rawValues[1] <= $rawValues[2]){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
730 $outValues .= " " . $rawValues[1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
731 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
732 $outValues .= " " . $rawValues[2];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
733 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
734 #my ($min, $max) = minmax @rawValues;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
735 my $min = 0;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
736 $outValues .= " " . $min;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
737
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
738 return $outValues;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
739 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
740 # -----------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
741
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
742
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
743 # compute network (.sif)
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
744 sub addToNetwork{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
745 my $inLine = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
746 my @splitInLine = split('\t',$inLine);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
747 # remove ' " ' from line
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
748 $splitInLine[0] =~ s/"//g;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
749 $splitInLine[0] =~ s/\s+/_/g;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
750 my @elements = split(';' ,$splitInLine[0]);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
751
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
752 if(@elements > 1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
753 my $outString = $elements[-2] . " pp " . $elements[-1];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
754 push(@network, $outString);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
755 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
756 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
757
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
758
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
759 # store network in .sif file
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
760 sub storeNetwork{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
761 # test
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
762 my $tmpFileName = $out_network;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
763
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
764 #my $tmpFileName = "./network.sif";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
765 open(FILE , ">$tmpFileName") || die "File can't be written - \"sif - File\"!\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
766 print FILE join("\n", @network) . "\n";
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
767 close(FILE);
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
768 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
769
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
770
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
771 # ---------------------------------------------------------------------------------------------
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
772 # two different lookup-tables are available!
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
773 # lookupPixel() => static ; lookupPixelSQRT() => dynamic
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
774 #
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
775 # lookup absolute node-size to pixel (frame-size for venn-diagram)
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
776 sub lookupPixel{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
777 my $query = $_[0];
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
778
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
779 if($query < 10){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
780 return 30;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
781 }elsif($query < 100){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
782 return 40;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
783 }elsif($query < 1000){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
784 return 50;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
785 }elsif($query < 10000){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
786 return 60;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
787 }elsif($query < 100000){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
788 return 80;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
789 }elsif($query < 1000000){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
790 return 100;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
791 }elsif($query < 10000000){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
792 return 140;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
793 }elsif($query < 20000000){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
794 return 180;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
795 }elsif($query < 30000000){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
796 return 220;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
797 }else{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
798 return 250;
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
799 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
800 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
801
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
802 # lookup absolute node-size to pixel (frame-size for venn-diagram) <- this is currently used!
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
803 sub lookupPixelSQRT{
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
804
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
805 if ($transFnc == 0) {
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
806 return int(($_[0] ** (1/(1.6))) * 1.8 + 8); # 3,000 datapoints in sum
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
807 }elsif($transFnc == 1){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
808 return int(($_[0] ** (1/(2.1))) * 1.8 + 8); # 30,000 datapoints in sum
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
809 }elsif($transFnc == 2){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
810 return int(($_[0] ** (1/(2.6))) * 1.8 + 8); # 300,000 datapoints in sum
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
811 }elsif($transFnc == 3){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
812 return int(($_[0] ** (1/(3.1))) * 1.8 + 8); # 3,000,000 datapoints in sum
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
813 }elsif($transFnc == 4){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
814 return int(($_[0] ** (1/(3.7))) * 1.8 + 8); # 30,000,000 datapoints in sum
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
815 }elsif($transFnc == 5){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
816 return int(($_[0] ** (1/(4))) * 1.8 + 8); # 300,000,000 datapoints in sum
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
817 }elsif($transFnc == 6){
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
818 return int(($_[0] ** (1/(4.7))) * 1.8 + 8); # 3,000,000,000 datapoints in sum
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
819 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
820
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
821 #return int(($_[0] ** (1/(3.3))) * 1.8 + 30); # test version for small and large datasets?
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
822 #return int(($_[0] ** (1/(3.3))) * 1.8 + 5); # test version for small and large datasets?
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
823 #return int(($_[0] ** (1/(4))) * 1.8 + 8); # test version for small and large datasets?
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
824 #return int(($_[0] ** (1/6)) * 12); # old version this version is good for large datasets
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
825 }
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
826
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
827
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
828
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
829
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
830
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
831
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
832
745aede829e9 Imported from capsule None
steffen
parents:
diff changeset
833