annotate seqlogo @ 2:2f4298673519 draft

Uploaded
author davidvanzessen
date Wed, 10 Sep 2014 10:33:29 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
1 #!/usr/bin/perl -w
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
2
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
3 =head1 NAME
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
4
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
5 seqlogo - runs the logo creation script
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
6
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
7 =head1 SYNOPSIS
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
8
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
9 seqlogo [OPTION]...-f [FILENAME]
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
10
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
11 =head1 DESCRIPTION
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
12
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
13 Creates a logo for the given input filename.
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
14
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
15 Available options:
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
16 -B <bar bits> Number of bits in bar (real between 0, 1)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
17 -T <tic bits> Number of bits between tic marks
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
18 -C <chars per line> Number of characters per line of logo
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
19 -d <box shrink factor> Shrink factor of characters if option c is toggled
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
20 -E <error bar fraction> Fraction of error bar to show (real between 0, 1 )
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
21 -f <input file> Input filename
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
22 -F <format> Format of output (EPS, GIF, PDF, PNG), - for STDOUT
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
23 -h <logo height> Height of output logo (real > 0)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
24 -k <kind of data> 0 for amino acid, 1 for nucleic acid ; if not
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
25 defined, a 90% certainty method is used to
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
26 determine whether the input data is amino acid or
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
27 nucleic acid
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
28 -l <sequence lower bound> Lower bound of sequence (integer)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
29 -m <sequence upper bound> Upper bound of sequence (integer)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
30 -o <output file> Name of output file
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
31 -s <sequence start> Sequence start number, defaults to 1 (int)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
32 -t <titletext> Text of title, enclosed in "" if more than one word
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
33 -w <logo width> Width of output logo
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
34 -x <x-axis label> Label for x-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
35 -y <y-axis label> Label for y-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
36
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
37 Available toggles (no values associated)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
38 -a Toggle antialiasing
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
39 -b Toggle bar ends
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
40 -c Toggle color
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
41 -e Toggle error bar
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
42 -M Toggle small sample correction
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
43 -O Toggle outlining of characters
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
44 -n Toggle numbering of x-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
45 -S Toggle stretching of logos to entire length
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
46 -X Toggle boxing of characters
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
47 -Y Toggle y-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
48
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
49 =head1 EXAMPLE
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
50
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
51 The following command takes as input "input.fasta" and returns the logo in the
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
52 form "logo.eps". Antialiasing, bar ends, color, small sample correction,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
53 numbering of x-axis, and y-axis labelling are turned on:
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
54
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
55 seqlogo -f input.fasta -F EPS -o logo.eps -abcMnY
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
56
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
57 =cut
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
58
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
59 use vars qw($PATH);
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
60
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
61 BEGIN {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
62
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
63 use FindBin qw($Bin);
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
64 use lib "$Bin";
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
65
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
66 $PATH = $Bin;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
67
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
68 ## $PATH = "/h/gary/Seqlogo/Code/";
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
69 # $PATH = "/n/weblogo/home/httpd/weblogo/pub/beta/Seqlogo/Code";
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
70 # unshift(@INC, $PATH);
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
71 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
72
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
73 use logo;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
74 use template;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
75 use Getopt::Std;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
76 use FileHandle;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
77
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
78
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
79 my $opts;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
80 $opts =
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
81 $opt_a || # antialiasing
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
82 $opt_b || # bar ends (0 or 1)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
83 $opt_c || # color
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
84 $opt_e || # show error bar (0 or 1)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
85 $opt_n || # numbering (0 or 1)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
86 $opt_M || # small sample correction (0 or 1)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
87 $opt_O || # outline (0 or 1)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
88 $opt_S || # stretch
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
89 $opt_X || # box (0 for no box, 1 for box)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
90 $opt_Y || # y axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
91
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
92 $opt_B || # bar bits (real)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
93 $opt_T || # tics bits (real)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
94 $opt_C || # chars per line
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
95 $opt_d || # box shrinking factor (<1)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
96 $opt_E || # error bar fraction (real)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
97 $opt_f || # input filename
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
98 $opt_F || # format (PNG, EPS, PDF, GIF)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
99 $opt_h || # logo height (cm)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
100 $opt_k || # 0 = amino acid, 1 = nucleic acid
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
101 $opt_l || # lower bound of sequence to put in logo
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
102 $opt_m || # max bound of sequence to put in logo
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
103 $opt_o || # output file
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
104 $opt_s || # start number for very beginning of sequence
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
105 $opt_t || # title text (string)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
106 $opt_w || # logo width (cm)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
107 $opt_x || # x axis label
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
108 $opt_y || # y axis label
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
109 $opts;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
110
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
111 ################################################################################
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
112 ##### USAGE #####
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
113 ################################################################################
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
114
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
115 sub usage {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
116 my $usage = <<END
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
117
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
118 usage: seqlogo -f <input filename> [OPTIONs with values]
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
119 Creates a logo for the given input filename.
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
120
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
121 Available options:
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
122 -B <bar bits> Number of bits in bar (real # > 0)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
123 -T <tic bits> Number of bits between tic marks
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
124 -C <chars per line> Number of characters per line of logo
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
125 -d <box shrink factor> Shrink factor of characters if option c is toggled
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
126 -E <error bar fraction> Fraction of error bar to show (real # > 0)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
127 -f <input filename> Input filename
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
128 -F <format> Format of output (EPS, GIF, PDF, PNG), - for STDOUT
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
129 -h <logo height> Height of output logo (real # > 0)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
130 -k <kind of data> 0 for amino acid, 1 for nucleic acid
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
131 -l <sequence lower bound> Lower bound of sequence (integer)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
132 -m <sequence upper bound> Upper bound of sequence (integer)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
133 -o <output file> Name of output file
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
134 -s <sequence start> Sequence start number, defaults to 1 (int)
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
135 -t <titletext> Text of title, enclosed in "" if more than one word
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
136 -w <logo width> Width of output logo
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
137 -x <x-axis label> Label for x-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
138 -y <y-axis label> Label for y-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
139
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
140 Available toggles (no values associated) bOenc
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
141 -a Toggle antialiasing
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
142 -b Toggle bar ends
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
143 -c Toggle color
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
144 -e Toggle error bar
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
145 -M Toggle small sample correction
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
146 -O Toggle outlining of characters
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
147 -p Toggle fineprint
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
148 -n Toggle numbering of x-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
149 -S Toggle stretching of logos to entire length
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
150 -X Toggle boxing of characters
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
151 -Y Toggle y-axis
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
152
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
153 END
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
154 ;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
155
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
156 return $usage;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
157 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
158
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
159 ################################################################################
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
160 ##### MAIN FUNCTION #####
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
161 ################################################################################
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
162
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
163 # arguments : $_[0] : file name
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
164 MAIN: {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
165 init();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
166
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
167 # feed data from file to make height data array reference
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
168 my @input = <INPUTFILE>;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
169 close (INPUTFILE);
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
170 my %heightparams = (
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
171 smallsampletoggle => $opt_M,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
172 input_kind => $opt_k,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
173 stretch => $opt_S
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
174 );
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
175
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
176 my ($heightdata_r, $desc_r, $kind, $goodlength, $badline, $validformat) =
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
177 logo::getHeightData(\@input, \%heightparams);
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
178
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
179 # check for errors
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
180 if ((defined $validformat) && ($validformat == 1)) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
181 die("Error: Invalid input format does not conform to FASTA, " .
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
182 "CLUSTAL, or Flat.\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
183 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
184 if (!$goodlength) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
185 die("Error: Number of characters in each logo line is not " .
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
186 "consistent, starting at: ", $badline, "\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
187 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
188
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
189 my %input = (
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
190 LOGO_HEIGHT => $opt_h,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
191 LOGO_WIDTH => $opt_w,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
192 COLORSCHEME => ($opt_c) ? "DEFAULT" : "BW",
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
193
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
194 LOGOSTART => $opt_l,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
195 LOGOEND => $opt_m,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
196 START_NUM => $opt_s,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
197
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
198 TITLETEXT => $opt_t,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
199 YAXIS_LABEL => $opt_y,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
200 XAXIS_LABEL => $opt_x,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
201
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
202 BOXSHRINK => $opt_d,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
203 CHARSPERLINE => $opt_C,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
204 BARBITS => $opt_B,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
205 TICBITS => $opt_T,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
206 RES => "96",
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
207 "FORMAT" => (uc $opt_F),
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
208
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
209 # toggles
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
210 ANTIALIAS => $opt_a,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
211 ERRBAR => $opt_e,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
212 FINEPRINT => $opt_p,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
213 NUMBERING => $opt_n,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
214 OUTLINE => $opt_O,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
215 SHOWENDS => $opt_b,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
216 SHOWINGBOX => $opt_X,
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
217 YAXIS => $opt_Y
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
218 );
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
219
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
220 template::create_template(\%input, $kind, $desc_r, $heightdata_r, $opt_o, $PATH);
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
221 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
222
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
223
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
224 ################################################################################
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
225 ##### FUNCTINOS FOR INIT #####
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
226 ################################################################################
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
227
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
228 # all ints
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
229 sub isInt {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
230 return ($_[0] =~ /^[\+\-]?\d+$/) ? 1 : 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
231 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
232
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
233 # all reals
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
234 sub isReal {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
235 return ($_[0] =~ /^[\+\-]?\d*.\d*?$/) ? 1 : 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
236 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
237
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
238 sub isZeroOrOne {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
239 return ($_[0] == 0 || $_[0] == 1) ? 1 : 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
240 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
241
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
242 sub init {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
243
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
244 # if (not defined $PATH) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
245 # die ("PATH must be defined\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
246 # } elsif (not -e $PATH) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
247 # die ("PATH ($PATH) must exist\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
248 # } elsif (not -d $PATH) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
249 # die ("PATH ($PATH) must be a directory\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
250 # }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
251
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
252 &getopts('T:B:C:d:E:f:F:h:k:l:m:o:s:t:w:x:y:abcenMOpSXY');
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
253
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
254 if (defined $opt_B &&
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
255 (!isReal($opt_B) || $opt_B < 0) ) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
256 printf("\noption B must be a positive real, but is $opt_B, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
257 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
258 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
259 if (defined $opt_d &&
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
260 ( !isReal($opt_d) || $opt_d < 0 || $opt_d > 1) ) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
261 print("\noption d must be a real between 0 and 1, but is $opt_d, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
262 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
263 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
264 if (defined $opt_E &&
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
265 (!isReal($opt_E) || $opt_E < 0 || $opt_E > 1) ) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
266 print("\noption E must be a real between 0 and 1, but is $opt_E, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
267 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
268 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
269 if (defined $opt_f) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
270 open (INPUTFILE, "$opt_f") or die "Couldn't open input filename $opt_f: $!\n";
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
271 } else {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
272 print("\ninput file not specified, terminating...\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
273 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
274 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
275 if (defined $opt_h &&
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
276 (!isReal($opt_h) || $opt_h < 0) ) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
277 print("\noption h must be a positive real, but is $opt_h, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
278 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
279 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
280 if (defined $opt_w &&
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
281 (!isReal($opt_w) || $opt_w < 0) ) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
282 print("\noption w must be a positive real, but is $opt_w, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
283 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
284 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
285 if (defined $opt_k &&
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
286 (!isZeroOrOne($opt_k)) ) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
287 print("\noption k must be 0 or 1, but is $opt_k, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
288 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
289 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
290
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
291 #toggles
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
292 if (!defined $opt_a) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
293 $opt_a = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
294 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
295 if (!defined $opt_b) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
296 $opt_b = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
297 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
298 if (!defined $opt_c) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
299 $opt_c = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
300 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
301 if (!defined $opt_e) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
302 $opt_e = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
303 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
304 if (!defined $opt_n) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
305 $opt_n = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
306 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
307 if (!defined $opt_M) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
308 $opt_M = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
309 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
310 if (!defined $opt_O) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
311 $opt_O = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
312 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
313 if (!defined $opt_p) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
314 $opt_p = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
315 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
316 if (!defined $opt_S) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
317 $opt_S = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
318 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
319 if (!defined $opt_X) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
320 $opt_X = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
321 };
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
322 if (!defined $opt_Y) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
323 $opt_Y = 0;
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
324 };
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
325
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
326 if (!defined $opt_F) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
327 $opt_F = "EPS"; # default to EPS
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
328 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
329 if (!defined $opt_o) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
330 $opt_o = "-"; # for standard out
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
331 } else {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
332 # $opt_o =~ s/\.\S*$//; # remove extension if there is one
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
333 $opt_o .= "." . (lc $opt_F); # make file name
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
334 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
335
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
336 if (defined $opt_C &&
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
337 (!isInt($opt_C) || $opt_C < 0) ) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
338 printf("\noption C must be a postive integer, but is $opt_C, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
339 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
340 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
341
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
342 if (defined $opt_l && !isInt($opt_l)) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
343 printf("\noption l must be an integer, but is $opt_l, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
344 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
345 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
346
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
347 if (defined $opt_m && !isInt($opt_m)) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
348 printf("\noption m must be an integer, but is $opt_m, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
349 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
350 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
351
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
352 if (defined $opt_s && !isInt($opt_s)) {
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
353 printf("\noption s must be an integer, but is $opt_s, $!\n");
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
354 die &usage();
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
355 }
2f4298673519 Uploaded
davidvanzessen
parents:
diff changeset
356 }