1 #!/usr/bin/perl 2 3 # quick, very dirty little script so that we can put all the 4 # information for building a residue book set (except the original 5 # partitioning) in one spec file. 6 7 #eg: 8 9 # >res0_128_128 interleaved 10 # haux 44c0_s/resaux_0.vqd res0_96_128aux 0,4,2 9 11 # :1 res0_128_128_1.vqd, 4, nonseq cull, 0 +- 1 12 # :2 res0_128_128_2.vqd, 4, nonseq, 0 +- 1(.7) 2 13 # :3 res0_128_128_3.vqd, 4, nonseq, 0 +- 1(.7) 3 5 14 # :4 res0_128_128_4.vqd, 2, nonseq, 0 +- 1(.7) 3 5 8 11 15 # :5 res0_128_128_5.vqd, 1, nonseq, 0 +- 1 3 5 8 11 14 17 20 24 28 31 35 39 16 17 18 die "Could not open $ARGV[0]: $!" unless open (F,$ARGV[0]); 19 20 $goflag=0; 21 while($line=<F>){ 22 23 print "#### $line"; 24 if($line=~m/^GO/){ 25 $goflag=1; 26 next; 27 } 28 29 if($goflag==0){ 30 if($line=~m/\S+/ && !($line=~m/^\#/) ){ 31 my $command=$line; 32 print ">>> $command"; 33 die "Couldn't shell command.\n\tcommand:$command\n" 34 if syst($command); 35 } 36 next; 37 } 38 39 # >res0_128_128 40 if($line=~m/^>(\S+)\s+(\S*)/){ 41 # set the output name 42 $globalname=$1; 43 $interleave=$2; 44 next; 45 } 46 47 # haux 44c0_s/resaux_0.vqd res0_96_128aux 0,4,2 9 48 if($line=~m/^h(.*)/){ 49 # build a huffman book (no mapping) 50 my($name,$datafile,$bookname,$interval,$range)=split(' ',$1); 51 52 # check the desired subdir to see if the data file exists 53 if(-e $datafile){ 54 my $command="cp $datafile $bookname.tmp"; 55 print ">>> $command\n"; 56 die "Couldn't access partition data file.\n\tcommand:$command\n" 57 if syst($command); 58 59 my $command="huffbuild $bookname.tmp $interval"; 60 print ">>> $command\n"; 61 die "Couldn't build huffbook.\n\tcommand:$command\n" 62 if syst($command); 63 64 my $command="rm $bookname.tmp"; 65 print ">>> $command\n"; 66 die "Couldn't remove temporary file.\n\tcommand:$command\n" 67 if syst($command); 68 }else{ 69 my $command="huffbuild $bookname.tmp 0-$range"; 70 print ">>> $command\n"; 71 die "Couldn't build huffbook.\n\tcommand:$command\n" 72 if syst($command); 73 74 } 75 next; 76 } 77 78 # :1 res0_128_128_1.vqd, 4, nonseq, 0 +- 1 79 if($line=~m/^:(.*)/){ 80 my($namedata,$dim,$seqp,$vals)=split(',',$1); 81 my($name,$datafile)=split(' ',$namedata); 82 # build value list 83 my$plusminus="+"; 84 my$list; 85 my$thlist; 86 my$count=0; 87 foreach my$val (split(' ',$vals)){ 88 if($val=~/\-?\+?\d+/){ 89 my$th; 90 91 # got an explicit threshhint? 92 if($val=~/([0-9\.]+)\(([^\)]+)/){ 93 $val=$1; 94 $th=$2; 95 } 96 97 if($plusminus=~/-/){ 98 $list.="-$val "; 99 if(defined($th)){ 100 $thlist.="," if(defined($thlist)); 101 $thlist.="-$th"; 102 } 103 $count++; 104 } 105 if($plusminus=~/\+/){ 106 $list.="$val "; 107 if(defined($th)){ 108 $thlist.="," if(defined($thlist)); 109 $thlist.="$th"; 110 } 111 $count++; 112 } 113 }else{ 114 $plusminus=$val; 115 } 116 } 117 die "Couldn't open temp file $globalname$name.vql: $!" unless 118 open(G,">$globalname$name.vql"); 119 print G "$count $dim 0 "; 120 if($seqp=~/non/){ 121 print G "0\n$list\n"; 122 }else{ 123 print G "1\n$list\n"; 124 } 125 close(G); 126 127 my $command="latticebuild $globalname$name.vql > $globalname$name.vqh"; 128 print ">>> $command\n"; 129 die "Couldn't build latticebook.\n\tcommand:$command\n" 130 if syst($command); 131 132 if(-e $datafile){ 133 134 if($interleave=~/non/){ 135 $restune="res1tune"; 136 }else{ 137 $restune="res0tune"; 138 } 139 140 if($seqp=~/cull/){ 141 my $command="$restune $globalname$name.vqh $datafile 1 > temp$$.vqh"; 142 print ">>> $command\n"; 143 die "Couldn't tune latticebook.\n\tcommand:$command\n" 144 if syst($command); 145 }else{ 146 my $command="$restune $globalname$name.vqh $datafile > temp$$.vqh"; 147 print ">>> $command\n"; 148 die "Couldn't tune latticebook.\n\tcommand:$command\n" 149 if syst($command); 150 } 151 152 my $command="mv temp$$.vqh $globalname$name.vqh"; 153 print ">>> $command\n"; 154 die "Couldn't rename latticebook.\n\tcommand:$command\n" 155 if syst($command); 156 157 }else{ 158 print "No matching training file; leaving this codebook untrained.\n"; 159 } 160 161 my $command="rm $globalname$name.vql"; 162 print ">>> $command\n"; 163 die "Couldn't remove temp files.\n\tcommand:$command\n" 164 if syst($command); 165 166 next; 167 } 168 } 169 170 $command="rm -f temp$$.vqd"; 171 print ">>> $command\n"; 172 die "Couldn't remove temp files.\n\tcommand:$command\n" 173 if syst($command); 174 175 sub syst{ 176 system(@_)/256; 177 } 178