author | A.M. Thurnherr <athurnherr@yahoo.com> |
Wed, 25 May 2016 12:23:02 -0400 | |
changeset 34 | 3b4bcd55e1ea |
parent 33 | 307630665c6c |
child 37 | 40d85448debf |
permissions | -rwxr-xr-x |
0 | 1 |
#!/usr/bin/perl |
2 |
#====================================================================== |
|
3 |
# L I S T E N S |
|
4 |
# doc: Sat Jan 18 18:41:49 2003 |
|
34 | 5 |
# dlm: Tue Apr 19 21:11:12 2016 |
0 | 6 |
# (c) 2003 A.M. Thurnherr |
34 | 7 |
# uE-Info: 181 53 NIL 0 0 72 2 2 4 NIL ofnI |
0 | 8 |
#====================================================================== |
9 |
||
10 |
# Print useful info from the ensemble list or dump ensembles to |
|
11 |
# separate files. |
|
12 |
||
13 |
# HISTORY: |
|
14 |
# Jan 18, 2003: - created |
|
15 |
# Mar 18, 2004: - updated |
|
16 |
# Sep 15, 2005: - made ESW optional (BB150) |
|
17 |
# - change RDI binread library name |
|
18 |
# Aug 25, 2006: - added -r)ange |
|
19 |
# - added write -E)nsembles |
|
20 |
# Aug 26, 2006: - added -M)agdecl |
|
21 |
# Sep 19, 2007: - adapted to new [RDI_BB_Read.pl] (not tested) |
|
22 |
# Jan 26, 2008: - BUG: diagnostic output had been written to STDOUT |
|
23 |
# Feb 1, 2008: - BUG: still more diagnostic output written to STDOUT |
|
24 |
# - BUG: -E/-A combo had ignored -E |
|
25 |
# - changed %-good fieldnames for earth coordinates |
|
26 |
# - allowed for 3-beam solutions |
|
27 |
# Feb 7, 2008: - added -f)ields |
|
28 |
# Apr 4, 2008: - made -f output nan on undefined values |
|
29 |
# - BUG: -f fields did not allow array indices |
|
30 |
# - added in-w)ater data only |
|
31 |
# - restructured for simplicity |
|
32 |
# Mar 2, 2009: - added # of valid bin-1 vels to non-ANTS output |
|
33 |
# Jul 30, 2009: - NaN => nan |
|
1 | 34 |
# Aug 15, 2010: - BUG: usage typo |
5 | 35 |
# Dec 10, 2010: - changed ANTS output to time/date instead of UNIX time |
36 |
# Jan 5, 2011: - added -b |
|
6 | 37 |
# May 12, 2011: - disabled error exit on built-in-test errors when ensembles are dumped to stdout |
10 | 38 |
# Mar 20, 2013: - removed DATA_FORMAT stuff |
11 | 39 |
# Apr 12, 2013: - added bin number to -E output |
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
40 |
# Aug 7, 2013: - added -d, -4 |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
41 |
# - added w12, w34 to -E output |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
42 |
# - added sounspeed correction warning |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
43 |
# - changed -E from prefix to suffix |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
44 |
# - added active header line to -E output |
18 | 45 |
# Mar 4, 2014: - added partial support for DATA_SOURCE_ID |
46 |
# - added support for missing PITCH/ROLL/HEADING |
|
21 | 47 |
# Sep 8, 2014: - added -B)T |
33 | 48 |
# Mar 17, 2016: - adapted to new Getopt library |
34 | 49 |
# Apr 19, 2016: - added %date, %time to -E output |
0 | 50 |
|
51 |
# Notes: |
|
5 | 52 |
# - -E outputs data in earth coordinates, unless -b is set also |
0 | 53 |
# - -E output is always in ANTS format, ignoring -A |
54 |
# - no soundspeed correction |
|
55 |
||
33 | 56 |
use Getopt::Std; |
0 | 57 |
$0 =~ m{(.*/)[^/]+}; |
58 |
require "$1RDI_BB_Read.pl"; |
|
59 |
require "$1RDI_Coords.pl"; |
|
60 |
||
61 |
die("Usage: $0 [-A)nts] [-Q)uiet (errcheck only)] " . |
|
62 |
"[-f)ields <[name=]FIELD[,...]>] " . |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
63 |
"[require -4)-beam solutions] [-d)iscard <beam#>] " . |
21 | 64 |
"[write -E)nsemples <.suff> [use -B)T] [-M)agnetic <declination>] [min -p)ercent-good <#>] [keep -b)eam coords]] " . |
1 | 65 |
"[-r)ange <first_ens,last_ens>] [in-w)ater ensembles only] " . |
0 | 66 |
"<RDI file...>\n") |
33 | 67 |
unless (&getopts("4ABbd:E:f:M:p:Qr:w") && $#ARGV >= 0); |
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
68 |
|
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
69 |
print(STDERR "WARNING: no soundspeed correction applied!\n"); |
0 | 70 |
|
71 |
print(STDERR "WARNING: magnetic declination not set!\n") |
|
72 |
if defined($opt_E) && !defined($opt_M); |
|
73 |
||
74 |
die("$0: illegal option combination\n") |
|
21 | 75 |
if ($opt_Q && $opt_A) || ((defined($opt_M) || defined($opt_p) || defined($opt_b) || $opt_B) && !defined($opt_E)); |
0 | 76 |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
77 |
die("$0: -4 and -d are mutually exclusive\n") |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
78 |
if ($opt_4 && defined($opt_d)); |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
79 |
|
0 | 80 |
($first_ens,$last_ens) = split(',',$opt_r) |
81 |
if defined($opt_r); |
|
82 |
||
83 |
undef($opt_A) if defined($opt_E); |
|
84 |
||
85 |
$opt_p = 0 unless defined($opt_p); |
|
86 |
||
87 |
if ($opt_f) { # additional fields |
|
88 |
@addFields = split(',',$opt_f); |
|
89 |
foreach my $f (@addFields) { |
|
90 |
$f =~ s/\s//g; # remove spaces |
|
91 |
@def = split('=',$f); |
|
92 |
if (@def == 2) { # name=field |
|
93 |
$addLayout .= $opt_A ? " {$def[0]}" : " $def[0]"; |
|
94 |
$f = $def[1]; |
|
95 |
} else { # field |
|
96 |
$addLayout .= " {$f}"; |
|
97 |
} |
|
98 |
} |
|
99 |
# print(STDERR "addLayout = $addLayout\n"); |
|
100 |
# print(STDERR "\@addFields = @addFields\n"); |
|
101 |
} |
|
102 |
||
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
103 |
$RDI_Coords::minValidVels = 4 if ($opt_4); # no 3-beam solutions |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
104 |
|
0 | 105 |
#---------------------------------------------------------------------- |
106 |
# MAIN |
|
107 |
#---------------------------------------------------------------------- |
|
108 |
||
109 |
while (-f $ARGV[0]) { |
|
110 |
if ($opt_A && !$opt_E) { |
|
111 |
print("#ANTS#PARAMS# RDI_file{$ARGV[0]}\n"); |
|
112 |
} elsif (!$opt_Q) { |
|
113 |
print(STDERR "$ARGV[0]: "); |
|
114 |
} |
|
115 |
readData(@ARGV,\%dta); |
|
116 |
printf(STDERR "%d complete ensembles...\n",scalar(@{$dta{ENSEMBLE}})) |
|
117 |
unless ($opt_Q); |
|
118 |
$dta{HEADING_BIAS} = -$opt_M; # magnetic declination |
|
119 |
shift; |
|
120 |
||
121 |
if ($dta{BEAM_COORDINATES}) { # coords used |
|
122 |
$beamCoords = 1; |
|
123 |
} elsif (!$dta{EARTH_COORDINATES}) { |
|
124 |
die("$ARGV[0]: only beam and earth coordinates implemented so far\n"); |
|
125 |
} |
|
126 |
||
5 | 127 |
die("$ARGV[0]: -b only makes sense for beam-coordinate data\n") |
128 |
if ($opt_b && !$beamCoords); |
|
129 |
||
0 | 130 |
if ($opt_A) { # select output fmt: ANTS |
131 |
unless ($opt_Q) { |
|
132 |
printf("#ANTS#PARAMS# N_ensembles{%d}\n",scalar(@{$dta{ENSEMBLE}})); |
|
133 |
print('#ANTS#FIELDS# {ens} {time} {xducer_up} {temp} {hdg} {pitch} {roll} {XMIT_VOLTAGE} {XMIT_CURRENT}'); |
|
10 | 134 |
print(' {ESW}') if ($dta{FIXED_LEADER_BYTES} >= 53); |
0 | 135 |
print("$addLayout\n"); |
136 |
} |
|
137 |
||
138 |
$dumpEns = sub ($) |
|
139 |
{ |
|
140 |
my($e) = @_; |
|
141 |
||
18 | 142 |
printf('%d %lf %d %g', |
0 | 143 |
$dta{ENSEMBLE}[$e]->{NUMBER}, |
144 |
$dta{ENSEMBLE}[$e]->{UNIX_TIME}, |
|
145 |
$dta{ENSEMBLE}[$e]->{XDUCER_FACING_UP} ? 1 : 0, |
|
146 |
$dta{ENSEMBLE}[$e]->{TEMPERATURE}, |
|
18 | 147 |
); |
148 |
if (defined($dta{ENSEMBLE}[$e]->{HEADING})) { printf(' %g',$dta{ENSEMBLE}[$e]->{HEADING}); } |
|
149 |
else { printf(' nan'); } |
|
150 |
if (defined($dta{ENSEMBLE}[$e]->{PITCH})) { printf(' %g',$dta{ENSEMBLE}[$e]->{PITCH}); } |
|
151 |
else { printf(' nan'); } |
|
152 |
if (defined($dta{ENSEMBLE}[$e]->{ROLL})) { printf(' %g',$dta{ENSEMBLE}[$e]->{ROLL}); } |
|
153 |
else { printf(' nan'); } |
|
154 |
printf(' %g %g', |
|
0 | 155 |
$dta{ENSEMBLE}[$e]->{ADC_XMIT_VOLTAGE}, |
156 |
$dta{ENSEMBLE}[$e]->{ADC_XMIT_CURRENT}, |
|
157 |
); |
|
158 |
printf(' %08X',$dta{ENSEMBLE}[$e]->{ERROR_STATUS_WORD}) |
|
10 | 159 |
if ($dta{FIXED_LEADER_BYTES} >= 53); |
0 | 160 |
foreach my $f (@addFields) { |
161 |
my($fn,$fi) = ($f =~ m{([^[]*)(\[.*)}); |
|
162 |
$fn = $f unless defined($fn); |
|
163 |
my($v) = eval("\$dta{ENSEMBLE}[$e]->{$fn}$fi"); |
|
164 |
print(defined($v) ? " $v" : " nan"); |
|
165 |
} |
|
166 |
print("\n"); |
|
167 |
} |
|
168 |
||
169 |
} elsif ($opt_E) { # one file per ens |
|
170 |
||
171 |
$dumpEns = sub ($) |
|
172 |
{ |
|
173 |
my($e) = @_; |
|
174 |
my($b,$i); |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
175 |
my($file) = "$dta{ENSEMBLE}[$e]->{NUMBER}$opt_E"; |
0 | 176 |
|
177 |
open(P,">$file") || die("$file: $!\n"); |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
178 |
print(P "#!/usr/bin/perl -S list\n"); |
0 | 179 |
print(P "#ANTS#PARAMS# " . |
34 | 180 |
"date{$dta{ENSEMBLE}[$e]->{DATE}} " . |
181 |
"time{$dta{ENSEMBLE}[$e]->{TIME}} " . |
|
0 | 182 |
"BT_u{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[0]} " . |
183 |
"BT_v{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[1]} " . |
|
184 |
"BT_w{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[2]} " . |
|
185 |
"BT_e{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[3]} " . |
|
186 |
"BT_cor1{$dta{ENSEMBLE}[$e]->{BT_CORRELATION}[0]} " . |
|
187 |
"BT_cor2{$dta{ENSEMBLE}[$e]->{BT_CORRELATION}[1]} " . |
|
188 |
"BT_cor3{$dta{ENSEMBLE}[$e]->{BT_CORRELATION}[2]} " . |
|
189 |
"BT_cor4{$dta{ENSEMBLE}[$e]->{BT_CORRELATION}[3]} " . |
|
190 |
"BT_amp1{$dta{ENSEMBLE}[$e]->{BT_AMPLITUDE}[0]} " . |
|
191 |
"BT_amp2{$dta{ENSEMBLE}[$e]->{BT_AMPLITUDE}[1]} " . |
|
192 |
"BT_amp3{$dta{ENSEMBLE}[$e]->{BT_AMPLITUDE}[2]} " . |
|
193 |
"BT_amp4{$dta{ENSEMBLE}[$e]->{BT_AMPLITUDE}[3]} " . |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
194 |
"soundspeed_correction{NONE!} " . |
0 | 195 |
"\n" |
196 |
); |
|
197 |
print(P "#ANTS#FIELDS# " . |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
198 |
"{bin} {dz} {u} {v} {w} {e} {w12} {w34} {cor1} {cor2} {cor3} {cor4} " . |
0 | 199 |
"{amp1} {amp2} {amp3} {amp4} " |
200 |
); |
|
201 |
if ($beamCoords) { |
|
202 |
print(P "{pcg1} {pcg2} {pcg3} {pcg4}"); |
|
203 |
} else { |
|
204 |
print(P "{pc3beam} {pcBadErrVel} {pc1or2beam} {pc4beam}"); |
|
205 |
} |
|
206 |
print(P "$addLayout\n"); |
|
207 |
||
208 |
for (my($b)=0; $b<$dta{N_BINS}; $b++) { |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
209 |
my(@v,$w12,$w34); |
0 | 210 |
my($dz) = $dta{DISTANCE_TO_BIN1_CENTER} + $b*$dta{BIN_LENGTH}; |
211 |
||
212 |
if ($beamCoords) { |
|
213 |
undef($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][0]) |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
214 |
if (($dta{ENSEMBLE}[$e]->{PERCENT_GOOD}[$b][0] < $opt_p) || ($opt_d == 1)); |
0 | 215 |
undef($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][1]) |
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
216 |
if (($dta{ENSEMBLE}[$e]->{PERCENT_GOOD}[$b][1] < $opt_p) || ($opt_d == 2)); |
0 | 217 |
undef($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][2]) |
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
218 |
if (($dta{ENSEMBLE}[$e]->{PERCENT_GOOD}[$b][2] < $opt_p) || ($opt_d == 3)); |
0 | 219 |
undef($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][3]) |
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
220 |
if (($dta{ENSEMBLE}[$e]->{PERCENT_GOOD}[$b][3] < $opt_p) || ($opt_d == 4)); |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
221 |
($dummy,$w12,$dummy,$w34) = |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
222 |
velBeamToBPEarth(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]}); |
5 | 223 |
@v = $opt_b ? @{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]} : |
224 |
velInstrumentToEarth(\%dta,$e, |
|
225 |
velBeamToInstrument(\%dta, |
|
226 |
@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]})); |
|
0 | 227 |
} else { |
228 |
@v = velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]}); |
|
229 |
} |
|
230 |
||
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
231 |
$v[0] = nan unless defined($v[0]); # u |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
232 |
$v[1] = nan unless defined($v[1]); # v |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
233 |
$v[2] = nan unless defined($v[2]); # w |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
234 |
$v[3] = nan unless defined($v[3]); # err_vel |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
235 |
$w12 = nan unless defined($w12); # w from beams 1&2 |
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
236 |
$w34 = nan unless defined($w34); # w from beams 3&4 |
21 | 237 |
|
238 |
my(@out); |
|
239 |
if ($opt_B) { |
|
240 |
$v[0] = nan unless defined($dta{ENSEMBLE}[$e]->{BT_VELOCITY}[0]); |
|
241 |
$v[1] = nan unless defined($dta{ENSEMBLE}[$e]->{BT_VELOCITY}[1]); |
|
242 |
@out = ( |
|
243 |
$b,$dz,$v[0]-$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[0], |
|
244 |
$v[1]-$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[1],$v[2],$v[3],$w12,$w34, |
|
245 |
@{$dta{ENSEMBLE}[$e]->{CORRELATION}[$b]}, |
|
246 |
@{$dta{ENSEMBLE}[$e]->{ECHO_AMPLITUDE}[$b]}, |
|
247 |
@{$dta{ENSEMBLE}[$e]->{PERCENT_GOOD}[$b]} |
|
248 |
); |
|
249 |
} else { |
|
250 |
@out = ( |
|
251 |
$b,$dz,$v[0],$v[1],$v[2],$v[3],$w12,$w34, |
|
252 |
@{$dta{ENSEMBLE}[$e]->{CORRELATION}[$b]}, |
|
253 |
@{$dta{ENSEMBLE}[$e]->{ECHO_AMPLITUDE}[$b]}, |
|
254 |
@{$dta{ENSEMBLE}[$e]->{PERCENT_GOOD}[$b]} |
|
255 |
); |
|
256 |
} |
|
0 | 257 |
foreach my $f (@addFields) { |
258 |
my($fn,$fi) = ($f =~ m{([^[]*)(\[.*)}); |
|
259 |
$fn = $f unless defined($fn); |
|
260 |
push(@out,eval("\$dta{ENSEMBLE}[$e]->{$fn}$fi")); |
|
261 |
} |
|
13
b176da8559b3
before implementing WBWens (PD0 writing)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
11
diff
changeset
|
262 |
for ($i=0; $i<19+@addFields; $i++) { |
0 | 263 |
$out[$i] = nan unless defined($out[$i]); |
264 |
} |
|
265 |
print(P "@out\n"); |
|
266 |
} |
|
267 |
close(P); |
|
268 |
} |
|
269 |
||
270 |
} else { # neither ANTS nor ens files |
|
271 |
unless ($opt_Q) { |
|
10 | 272 |
if ($dta{FIXED_LEADER_BYTES} >= 53) { |
18 | 273 |
printf(" # Date Time XD Temp Headng Pitch Roll #vv DSID ESW$addLayout\n"); |
0 | 274 |
printf("-----------------------------------------------------------------------\n"); |
275 |
} else { |
|
18 | 276 |
printf(" # Date Time XD Temp Headng Pitch Roll #vv DSID$addLayout\n"); |
0 | 277 |
printf("-------------------------------------------------------------------\n"); |
278 |
} |
|
279 |
} |
|
280 |
||
281 |
$dumpEns = sub ($) |
|
282 |
{ |
|
283 |
my($e) = @_; |
|
284 |
||
18 | 285 |
printf('%5d %s %s %s %5.1f', |
0 | 286 |
$dta{ENSEMBLE}[$e]->{NUMBER}, |
287 |
$dta{ENSEMBLE}[$e]->{DATE}, |
|
288 |
$dta{ENSEMBLE}[$e]->{TIME}, |
|
289 |
$dta{ENSEMBLE}[$e]->{XDUCER_FACING_UP} ? "UP" : "DN", |
|
290 |
$dta{ENSEMBLE}[$e]->{TEMPERATURE}, |
|
18 | 291 |
); |
292 |
if (defined($dta{ENSEMBLE}[$e]->{HEADING})) { printf(' %6.1f',$dta{ENSEMBLE}[$e]->{HEADING}); } |
|
293 |
else { printf(' nan'); } |
|
294 |
if (defined($dta{ENSEMBLE}[$e]->{PITCH})) { printf(' %5.1f',$dta{ENSEMBLE}[$e]->{PITCH}); } |
|
295 |
else { printf(' nan'); } |
|
296 |
if (defined($dta{ENSEMBLE}[$e]->{ROLL})) { printf(' %5.1f',$dta{ENSEMBLE}[$e]->{ROLL}); } |
|
297 |
else { printf(' nan'); } |
|
298 |
printf(' %3d 0x%02X', |
|
0 | 299 |
$dta{ENSEMBLE}[$e]->{BIN1VELS}, |
18 | 300 |
$dta{ENSEMBLE}[$e]->{DATA_SOURCE_ID}, |
0 | 301 |
); |
302 |
printf(' 0x%08X',$dta{ENSEMBLE}[$e]->{ERROR_STATUS_WORD}) |
|
10 | 303 |
if ($dta{FIXED_LEADER_BYTES} >= 53); |
0 | 304 |
foreach my $f (@addFields) { |
305 |
my($fn,$fi) = ($f =~ m{([^[]*)(\[.*)}); |
|
306 |
$fn = $f unless defined($fn); |
|
307 |
my($v) = eval("\$dta{ENSEMBLE}[$e]->{$fn}$fi"); |
|
308 |
print(defined($v) ? " $v" : " nan"); |
|
309 |
} |
|
6 | 310 |
print(" BUILT-IN-TEST ERROR") |
311 |
if defined($dta{ENSEMBLE}[$e]->{BUILT_IN_TEST_ERROR}); |
|
0 | 312 |
print("\n"); |
313 |
} |
|
314 |
||
315 |
} |
|
316 |
||
317 |
for ($e=0; $e<=$#{$dta{ENSEMBLE}}; $e++) { |
|
318 |
next if (defined($first_ens) && |
|
319 |
$dta{ENSEMBLE}[$e]->{NUMBER} < $first_ens); |
|
320 |
last if (defined($last_ens) && |
|
321 |
$dta{ENSEMBLE}[$e]->{NUMBER} > $last_ens); |
|
322 |
$dta{ENSEMBLE}[$e]->{BIN1VELS} = |
|
323 |
defined($dta{ENSEMBLE}[$e]->{VELOCITY}[1][0]) + |
|
324 |
defined($dta{ENSEMBLE}[$e]->{VELOCITY}[1][1]) + |
|
325 |
defined($dta{ENSEMBLE}[$e]->{VELOCITY}[1][2]) + |
|
326 |
defined($dta{ENSEMBLE}[$e]->{VELOCITY}[1][3]); |
|
327 |
next if ($opt_w && $dta{ENSEMBLE}[$e]->{BIN1VELS}<3); |
|
328 |
||
329 |
die("3-beams used in ensemble #$dta{ENSEMBLE}[$e]->{NUMBER}\n") |
|
330 |
if ($dta{ENSEMBLE}[$e]->{N_BEAMS_USED} < 4); |
|
331 |
die("BIT error in ensemble $dta{ENSEMBLE}[$e]->{NUMBER}\n") |
|
6 | 332 |
if ($opt_Q || $opt_A || $opt_E) && defined($dta{ENSEMBLE}[$e]->{BUILT_IN_TEST_ERROR}); |
0 | 333 |
die("Low gain in ensemble #$dta{ENSEMBLE}[$e]->{NUMBER}\n") |
334 |
if ($dta{ENSEMBLE}[$e]->{LOW_GAIN}); |
|
335 |
||
336 |
&$dumpEns($e) |
|
337 |
unless ($opt_Q); |
|
338 |
} |
|
339 |
} |
|
340 |
||
341 |
exit(0); |