Mercurial > repos > mmaiensc > ember
view GALAXY_FILES/tools/EMBER/Expression_Pattern_Distance.pl @ 3:037c3edda16e
Uploaded
author | mmaiensc |
---|---|
date | Thu, 22 Mar 2012 13:49:52 -0400 |
parents | 003f802d4c7d |
children |
line wrap: on
line source
#!/usr/bin/perl # computes difference distances between motif models if( $#ARGV != 1 ){ print "Usage: ./Expression_Pattern_Distance.pl model1 model2\n"; exit; } @model1 = &read_model( $ARGV[0] ); @model2 = &read_model( $ARGV[1] ); if( $#model1 != $#model2 ){ print "Error: model dimensions do not match\n"; exit; } # # second distance: sum of absolute difference, divided by absolute sum # bounded between 0 and 1; equals 1 if all signs are different # $dist = 0; $denom = 0; for($i=0; $i< $classes; $i++){ for($j=0; $j< $dims; $j++){ if( $model1[$i][$j] ne "nan" && $model2[$i][$j] ne "nan" ){ $dist+= abs($model1[$i][$j] - $model2[$i][$j]); $denom+= abs($model1[$i][$j]) + abs($model2[$i][$j]); } } } $dist/=$denom; printf("%0.3f\n", $dist); exit; ################################ # function to read a motif model from file $_[0] sub read_model{ $dims = 0; $classes = 0; open(IN,"$_[0]") || die "Error: can't open file $_[0]\n"; @modpars = (); # burn the first two lines $line = <IN>; $line = <IN>; while( $line = <IN> ){ chomp($line); @parts = split(' ',$line); if($parts[0] !~ /#/ ){ @parts2 = (); for($i=1; $i<= $#parts; $i++){ if( $parts[$i] ne "NA" ){ push(@parts2, $parts[$i]); } else{ push(@parts2, 0); } } push(@modpars, [@parts2] ); $classes++; $dims = $#parts; } } close(IN); return @modpars; }