1 #!/usr/bin/perl |
1 #!/usr/bin/perl |
2 #====================================================================== |
2 #====================================================================== |
3 # L I S T E N S |
3 # L I S T E N S |
4 # doc: Sat Jan 18 18:41:49 2003 |
4 # doc: Sat Jan 18 18:41:49 2003 |
5 # dlm: Wed Aug 7 10:38:17 2013 |
5 # dlm: Tue Mar 4 12:56:36 2014 |
6 # (c) 2003 A.M. Thurnherr |
6 # (c) 2003 A.M. Thurnherr |
7 # uE-Info: 215 0 NIL 0 0 72 2 2 4 NIL ofnI |
7 # uE-Info: 46 64 NIL 0 0 72 2 2 4 NIL ofnI |
8 #====================================================================== |
8 #====================================================================== |
9 |
9 |
10 # Print useful info from the ensemble list or dump ensembles to |
10 # Print useful info from the ensemble list or dump ensembles to |
11 # separate files. |
11 # separate files. |
12 |
12 |
40 # Aug 7, 2013: - added -d, -4 |
40 # Aug 7, 2013: - added -d, -4 |
41 # - added w12, w34 to -E output |
41 # - added w12, w34 to -E output |
42 # - added sounspeed correction warning |
42 # - added sounspeed correction warning |
43 # - changed -E from prefix to suffix |
43 # - changed -E from prefix to suffix |
44 # - added active header line to -E output |
44 # - added active header line to -E output |
|
45 # Mar 4, 2014: - added partial support for DATA_SOURCE_ID |
|
46 # - added support for missing PITCH/ROLL/HEADING |
45 |
47 |
46 # Notes: |
48 # Notes: |
47 # - -E outputs data in earth coordinates, unless -b is set also |
49 # - -E outputs data in earth coordinates, unless -b is set also |
48 # - -E output is always in ANTS format, ignoring -A |
50 # - -E output is always in ANTS format, ignoring -A |
49 # - no soundspeed correction |
51 # - no soundspeed correction |
132 |
134 |
133 $dumpEns = sub ($) |
135 $dumpEns = sub ($) |
134 { |
136 { |
135 my($e) = @_; |
137 my($e) = @_; |
136 |
138 |
137 printf('%d %lf %d %g %g %g %g %g %g', |
139 printf('%d %lf %d %g', |
138 $dta{ENSEMBLE}[$e]->{NUMBER}, |
140 $dta{ENSEMBLE}[$e]->{NUMBER}, |
139 $dta{ENSEMBLE}[$e]->{UNIX_TIME}, |
141 $dta{ENSEMBLE}[$e]->{UNIX_TIME}, |
140 $dta{ENSEMBLE}[$e]->{XDUCER_FACING_UP} ? 1 : 0, |
142 $dta{ENSEMBLE}[$e]->{XDUCER_FACING_UP} ? 1 : 0, |
141 $dta{ENSEMBLE}[$e]->{TEMPERATURE}, |
143 $dta{ENSEMBLE}[$e]->{TEMPERATURE}, |
142 $dta{ENSEMBLE}[$e]->{HEADING}, |
144 ); |
143 $dta{ENSEMBLE}[$e]->{PITCH}, |
145 if (defined($dta{ENSEMBLE}[$e]->{HEADING})) { printf(' %g',$dta{ENSEMBLE}[$e]->{HEADING}); } |
144 $dta{ENSEMBLE}[$e]->{ROLL}, |
146 else { printf(' nan'); } |
|
147 if (defined($dta{ENSEMBLE}[$e]->{PITCH})) { printf(' %g',$dta{ENSEMBLE}[$e]->{PITCH}); } |
|
148 else { printf(' nan'); } |
|
149 if (defined($dta{ENSEMBLE}[$e]->{ROLL})) { printf(' %g',$dta{ENSEMBLE}[$e]->{ROLL}); } |
|
150 else { printf(' nan'); } |
|
151 printf(' %g %g', |
145 $dta{ENSEMBLE}[$e]->{ADC_XMIT_VOLTAGE}, |
152 $dta{ENSEMBLE}[$e]->{ADC_XMIT_VOLTAGE}, |
146 $dta{ENSEMBLE}[$e]->{ADC_XMIT_CURRENT}, |
153 $dta{ENSEMBLE}[$e]->{ADC_XMIT_CURRENT}, |
147 ); |
154 ); |
148 printf(' %08X',$dta{ENSEMBLE}[$e]->{ERROR_STATUS_WORD}) |
155 printf(' %08X',$dta{ENSEMBLE}[$e]->{ERROR_STATUS_WORD}) |
149 if ($dta{FIXED_LEADER_BYTES} >= 53); |
156 if ($dta{FIXED_LEADER_BYTES} >= 53); |
242 } |
249 } |
243 |
250 |
244 } else { # neither ANTS nor ens files |
251 } else { # neither ANTS nor ens files |
245 unless ($opt_Q) { |
252 unless ($opt_Q) { |
246 if ($dta{FIXED_LEADER_BYTES} >= 53) { |
253 if ($dta{FIXED_LEADER_BYTES} >= 53) { |
247 printf(" # Date Time XD Temp Headng Pitch Roll vels(bin1) ESW$addLayout\n"); |
254 printf(" # Date Time XD Temp Headng Pitch Roll #vv DSID ESW$addLayout\n"); |
248 printf("-----------------------------------------------------------------------\n"); |
255 printf("-----------------------------------------------------------------------\n"); |
249 } else { |
256 } else { |
250 printf(" # Date Time XD Temp Headng Pitch Roll vels(bin1)$addLayout\n"); |
257 printf(" # Date Time XD Temp Headng Pitch Roll #vv DSID$addLayout\n"); |
251 printf("-------------------------------------------------------------------\n"); |
258 printf("-------------------------------------------------------------------\n"); |
252 } |
259 } |
253 } |
260 } |
254 |
261 |
255 $dumpEns = sub ($) |
262 $dumpEns = sub ($) |
256 { |
263 { |
257 my($e) = @_; |
264 my($e) = @_; |
258 |
265 |
259 printf('%5d %s %s %s %5.1f %6.1f %5.1f %5.1f %3d', |
266 printf('%5d %s %s %s %5.1f', |
260 $dta{ENSEMBLE}[$e]->{NUMBER}, |
267 $dta{ENSEMBLE}[$e]->{NUMBER}, |
261 $dta{ENSEMBLE}[$e]->{DATE}, |
268 $dta{ENSEMBLE}[$e]->{DATE}, |
262 $dta{ENSEMBLE}[$e]->{TIME}, |
269 $dta{ENSEMBLE}[$e]->{TIME}, |
263 $dta{ENSEMBLE}[$e]->{XDUCER_FACING_UP} ? "UP" : "DN", |
270 $dta{ENSEMBLE}[$e]->{XDUCER_FACING_UP} ? "UP" : "DN", |
264 $dta{ENSEMBLE}[$e]->{TEMPERATURE}, |
271 $dta{ENSEMBLE}[$e]->{TEMPERATURE}, |
265 $dta{ENSEMBLE}[$e]->{HEADING}, |
272 ); |
266 $dta{ENSEMBLE}[$e]->{PITCH}, |
273 if (defined($dta{ENSEMBLE}[$e]->{HEADING})) { printf(' %6.1f',$dta{ENSEMBLE}[$e]->{HEADING}); } |
267 $dta{ENSEMBLE}[$e]->{ROLL}, |
274 else { printf(' nan'); } |
|
275 if (defined($dta{ENSEMBLE}[$e]->{PITCH})) { printf(' %5.1f',$dta{ENSEMBLE}[$e]->{PITCH}); } |
|
276 else { printf(' nan'); } |
|
277 if (defined($dta{ENSEMBLE}[$e]->{ROLL})) { printf(' %5.1f',$dta{ENSEMBLE}[$e]->{ROLL}); } |
|
278 else { printf(' nan'); } |
|
279 printf(' %3d 0x%02X', |
268 $dta{ENSEMBLE}[$e]->{BIN1VELS}, |
280 $dta{ENSEMBLE}[$e]->{BIN1VELS}, |
|
281 $dta{ENSEMBLE}[$e]->{DATA_SOURCE_ID}, |
269 ); |
282 ); |
270 printf(' 0x%08X',$dta{ENSEMBLE}[$e]->{ERROR_STATUS_WORD}) |
283 printf(' 0x%08X',$dta{ENSEMBLE}[$e]->{ERROR_STATUS_WORD}) |
271 if ($dta{FIXED_LEADER_BYTES} >= 53); |
284 if ($dta{FIXED_LEADER_BYTES} >= 53); |
272 foreach my $f (@addFields) { |
285 foreach my $f (@addFields) { |
273 my($fn,$fi) = ($f =~ m{([^[]*)(\[.*)}); |
286 my($fn,$fi) = ($f =~ m{([^[]*)(\[.*)}); |