annotate GALAXY_FILES/tools/EMBER/Expression_Pattern_Distance.pl @ 1:e62b2ba92070 default tip

Uploaded
author mmaiensc
date Thu, 22 Mar 2012 13:19:59 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
1 #!/usr/bin/perl
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
2 # computes difference distances between motif models
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
3
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
4 if( $#ARGV != 1 ){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
5 print "Usage: ./Expression_Pattern_Distance.pl model1 model2\n";
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
6 exit;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
7 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
8
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
9 @model1 = &read_model( $ARGV[0] );
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
10 @model2 = &read_model( $ARGV[1] );
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
11 if( $#model1 != $#model2 ){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
12 print "Error: model dimensions do not match\n";
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
13 exit;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
14 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
15
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
16
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
17 #
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
18 # second distance: sum of absolute difference, divided by absolute sum
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
19 # bounded between 0 and 1; equals 1 if all signs are different
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
20 #
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
21 $dist = 0;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
22 $denom = 0;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
23 for($i=0; $i< $classes; $i++){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
24 for($j=0; $j< $dims; $j++){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
25 if( $model1[$i][$j] ne "nan" && $model2[$i][$j] ne "nan" ){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
26 $dist+= abs($model1[$i][$j] - $model2[$i][$j]);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
27 $denom+= abs($model1[$i][$j]) + abs($model2[$i][$j]);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
28 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
29 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
30 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
31 $dist/=$denom;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
32
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
33 printf("%0.3f\n", $dist);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
34
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
35
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
36 exit;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
37
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
38
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
39
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
40
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
41 ################################
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
42
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
43 # function to read a motif model from file $_[0]
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
44 sub read_model{
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
45 $dims = 0;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
46 $classes = 0;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
47 open(IN,"$_[0]") || die "Error: can't open file $_[0]\n";
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
48 @modpars = ();
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
49 # burn the first two lines
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
50 $line = <IN>;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
51 $line = <IN>;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
52 while( $line = <IN> ){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
53 chomp($line);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
54 @parts = split(' ',$line);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
55 if($parts[0] !~ /#/ ){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
56 @parts2 = ();
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
57 for($i=1; $i<= $#parts; $i++){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
58 if( $parts[$i] ne "NA" ){
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
59 push(@parts2, $parts[$i]);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
60 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
61 else{
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
62 push(@parts2, 0);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
63 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
64 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
65 push(@modpars, [@parts2] );
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
66 $classes++;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
67 $dims = $#parts;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
68 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
69 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
70 close(IN);
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
71 return @modpars;
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
72 }
e62b2ba92070 Uploaded
mmaiensc
parents:
diff changeset
73