annotate external_tools/darwin/lib/hh/scripts/create_profile_from_hmmer.pl @ 6:2277dd59b9f9 draft

Uploaded
author hammock
date Wed, 01 Nov 2017 05:54:28 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
1 #!/usr/bin/env perl
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
2 #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
3 # create_profile_from_hmmer.pl
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
4 # Create a profile (.prf) from a given HMMER/HMMER3 file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
5
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
6 # HHsuite version 2.0.16 (January 2013)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
7 #
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
8 # Reference:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
9 # Remmert M., Biegert A., Hauser A., and Soding J.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
10 # HHblits: Lightning-fast iterative protein sequence searching by HMM-HMM alignment.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
11 # Nat. Methods, epub Dec 25, doi: 10.1038/NMETH.1818 (2011).
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
12
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
13 # (C) Michael Remmert and Johannes Soeding, 2012
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
14
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
15 # This program is free software: you can redistribute it and/or modify
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
16 # it under the terms of the GNU General Public License as published by
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
17 # the Free Software Foundation, either version 3 of the License, or
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
18 # (at your option) any later version.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
19
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
20 # This program is distributed in the hope that it will be useful,
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
23 # GNU General Public License for more details.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
24
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
25 # You should have received a copy of the GNU General Public License
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
26 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
27
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
28 # We are very grateful for bug reports! Please contact us at soeding@genzentrum.lmu.de
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
29
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
30 use lib $ENV{"HHLIB"}."/scripts";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
31 use HHPaths; # config file with path variables for nr, blast, psipred, pdb, dssp etc.
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
32 use strict;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
33
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
34 $|= 1; # Activate autoflushing on STDOUT
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
35
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
36 # Default values:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
37 our $v=2; # verbose mode
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
38 my $factor = 1; # mix orig sequence and HMMER profile with this factor (1 = 50/50, 2 = 33/66, 0.5 = 66/33 (orig/HMMER))
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
39 my $scale = 1000;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
40 my $log2 = log(2);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
41
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
42 my $help="
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
43 create_profile_from_hmmer.pl from HHsuite $VERSION
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
44 Create a profile (.prf) from a given HMMER/HMMER3 file
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
45
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
46 Usage: perl create_profile_from_hmmer.pl -i <infile> [-o <outfile>]
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
47
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
48 Options:
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
49 -i <infile> Input file in HMMER/HMMER3 format
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
50 -o <outfile> Output file in prf-format (default: infile.prf)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
51
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
52 -v [0-5] verbose mode (default: $v)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
53 \n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
54
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
55 # Variable declarations
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
56 my $line;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
57 my $infile;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
58 my $outfile;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
59 my $i;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
60 my $a;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
61
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
62 my @counts; # count profile (normalised to 1)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
63 my $name; # name of HMMER profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
64 my $len; # length of HMMER profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
65 my @hmmer_prof; # HMMER profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
66
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
67 # A C D E F G H I K L M N P Q R S T V W Y
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
68 my @hmmeraa2csaa = ( 0, 4, 3, 6, 13, 7, 8, 9, 11, 10, 12, 2, 14, 5, 1, 15, 16, 19, 17, 18);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
69 my @aminoacids = ('A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V');
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
70 my %aa2i;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
71 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
72 $aa2i{$aminoacids[$a]} = $a;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
73 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
74
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
75 ###############################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
76 # Processing command line input
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
77 ###############################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
78
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
79 if (@ARGV<1) {die ($help);}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
80
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
81 my $options="";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
82 for (my $i=0; $i<@ARGV; $i++) {$options.=" $ARGV[$i] ";}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
83
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
84 if ($options=~s/ -i\s+(\S+) //) {$infile=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
85 if ($options=~s/ -o\s+(\S+) //) {$outfile=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
86
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
87 if ($options=~s/ -factor\s+(\S+) //) {$factor=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
88
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
89 if ($options=~s/ -v\s+(\S+) //) {$v=$1;}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
90
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
91 if (!$infile) {print($help); print "ERROR! No input file!\n"; exit(1);}
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
92
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
93 if (!$outfile) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
94 $infile =~ /^(\S+)\.\S+?$/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
95 $outfile = "$1.prf";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
96 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
97
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
98 ##############################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
99 # Main part
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
100 ##############################################################################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
101
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
102 ######################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
103 # Read HMMER sequence and profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
104 ######################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
105 open (IN, $infile);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
106 $line = <IN>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
107
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
108 if ($line =~ /^HMMER3/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
109 while ($line = <IN>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
110 if ($line =~ /^NAME\s+(\S+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
111 $name = $1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
112 } elsif ($line =~ /^LENG\s+(\d+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
113 $len = $1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
114 } elsif ($line =~ /^HMM/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
115 last;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
116 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
117 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
118 $line = <IN>; $line = <IN>; # Skip header lines
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
119 if ($line =~ /^\s*COMPO/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
120 $line = <IN>; $line = <IN>; # Skip null model lines
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
121 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
122 # Read profiles and query seq
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
123 $i = 0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
124 while ($line = <IN>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
125 if ($line =~ /^\/\//) { last; }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
126
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
127 $line =~ s/^\s*\d+//; # sequence position
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
128 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
129 $line =~ s/^\s*(\S+)\s/ /;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
130 $hmmer_prof[$i][$hmmeraa2csaa[$a]] = exp(-1.0*$1);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
131 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
132
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
133 # Read query char in count profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
134 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
135 $counts[$i][$a] = 0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
136 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
137 $line =~ /^\s*\d+\s+(\S)/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
138 $counts[$i][$aa2i{$1}] = 1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
139
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
140 $line = <IN>; $line = <IN>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
141 $i++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
142
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
143 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
144 } elsif ($line =~ /^HMMER/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
145 my @pb;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
146 while ($line = <IN>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
147 if ($line =~ /^NAME\s+(\S+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
148 $name = $1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
149 } elsif ($line =~ /^LENG\s+(\d+)/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
150 $len = $1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
151 } elsif ($line =~ /^NULE/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
152 $line =~ s/^NULE//; # sequence position
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
153 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
154 $line =~ s/^\s*(\S+)\s/ /;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
155 # pb[a] = (float) 0.05 * fpow2(float(ptr)/HMMSCALE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
156 $pb[$a] = 0.05 * (2**($1/1000));
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
157 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
158 } elsif ($line =~ /^HMM/) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
159 last;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
160 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
161 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
162
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
163
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
164 $line = <IN>; $line = <IN>; # Skip header lines
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
165 # Read profiles and query seq
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
166 $i = 0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
167 while ($line = <IN>) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
168 if ($line =~ /^\/\//) { last; }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
169
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
170 $line =~ s/^\s*\d+//; # sequence position
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
171 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
172 $line =~ s/^\s*(\S+)\s/ /;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
173 # prob = pb[a]*fpow2(float(ptr)/HMMSCALE);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
174 $hmmer_prof[$i][$hmmeraa2csaa[$a]] = $pb[$a] * (2**($1/1000));
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
175 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
176
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
177 # Read query char in count profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
178 $line = <IN>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
179 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
180 $counts[$i][$a] = 0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
181 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
182 $line =~ /^\s*(\S)/;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
183 $counts[$i][$aa2i{$1}] = 1;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
184
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
185 $line = <IN>;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
186 $i++;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
187 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
188
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
189 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
190 print($help);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
191 print "ERROR! Unknown input format!\n";
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
192 exit(1);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
193 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
194 ######################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
195 # build count_profile (mix orig sequence and HMMER-profile)
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
196 ######################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
197 for ($i = 0; $i < $len; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
198 my $sum = 0;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
199 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
200 $counts[$i][$a] += $factor * $hmmer_prof[$i][$a];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
201 $sum += $counts[$i][$a];
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
202 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
203 # Normalize to one
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
204 my $fac = 1 / $sum;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
205 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
206 $counts[$i][$a] *= $fac;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
207 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
208 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
209
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
210 ######################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
211 # write count_profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
212 ######################################
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
213
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
214 open (OUT, ">$outfile");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
215 # Write header
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
216 printf(OUT "CountProfile\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
217 printf(OUT "NAME\t%s\n", $name);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
218 printf(OUT "LENG\t%i\n", $len);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
219 printf(OUT "ALPH\t20\n"); # 20 amino acid alphabet
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
220 printf(OUT "COUNTS");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
221 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
222 printf(OUT "\t%s", $aminoacids[$a]);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
223 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
224 printf(OUT "\tNEFF\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
225
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
226 # Write profile
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
227 for ($i = 0; $i < $len; $i++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
228 printf(OUT "%i", $i+1);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
229 for ($a = 0; $a < 20; $a++) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
230 if ($counts[$i][$a] == 0) {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
231 printf(OUT "\t*");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
232 } else {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
233 printf(OUT "\t%i", int(-(log2($counts[$i][$a]) * $scale)+0.5));
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
234 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
235 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
236 printf(OUT "\t%i\n", 1 * $scale); # set Neff to 1
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
237 }
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
238
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
239 printf(OUT "//\n");
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
240 close OUT;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
241
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
242 exit;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
243
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
244 sub log2()
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
245 {
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
246 my $n = shift;
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
247 return (log($n)/$log2);
2277dd59b9f9 Uploaded
hammock
parents:
diff changeset
248 }