1#!/usr/bin/perl 2 3@quant=( 4 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 5 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 6 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 7 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 8 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 9); 10 11 12use POSIX; 13my($groupn)=@ARGV; 14my%hash; 15my$count=0; 16my$lines=0; 17 18if(!defined($groupn)){ 19 print "Usage: residue_entropy <groupsize> \n"; 20 exit(1); 21} 22$|=1; 23 24while (<STDIN>) { 25 chop; 26 my@nums = (); 27 @nums = split(/,/); 28 $lines++; 29 30 my$step=$#nums/$groupn; 31 for(my$i=0;$i<$step;$i++){ 32 my$key=""; 33 for(my$j=$i;$j<$#nums;$j+=$step){ 34 if($nums[$j]<0){ 35 $num=-$quant[int(-$nums[$j]*2)]; 36 }else{ 37 $num=$quant[int($nums[$j]*2)]; 38 } 39 $key.=":$num"; 40 } 41 42 if(!defined($hash{$key})){ 43 $count++; 44 $hash{$key}=1; 45 } 46 } 47 48 if(($lines % 1000)==0){ 49 print "\rworking... $lines lines, found $count values so far"; 50 } 51} 52 53foreach $key (keys %hash){ 54 print "\t$key\n"; 55} 56 57print "\r$count values total \n"; 58print "Done.\n\n"; 59