1 #====================================================================== |
1 #====================================================================== |
2 # R D I _ U T I L S . P L |
2 # R D I _ U T I L S . P L |
3 # doc: Wed Feb 12 10:21:32 2003 |
3 # doc: Wed Feb 12 10:21:32 2003 |
4 # dlm: Sat Jan 9 16:36:52 2016 |
4 # dlm: Thu May 19 10:23:48 2016 |
5 # (c) 2003 A.M. Thurnherr |
5 # (c) 2003 A.M. Thurnherr |
6 # uE-Info: 55 41 NIL 0 0 72 0 2 4 NIL ofnI |
6 # uE-Info: 56 62 NIL 0 0 72 0 2 4 NIL ofnI |
7 #====================================================================== |
7 #====================================================================== |
8 |
8 |
9 # miscellaneous RDI-specific utilities |
9 # miscellaneous RDI-specific utilities |
10 |
10 |
11 # History: |
11 # History: |
51 # - Earth coord beam-pair warning removed |
51 # - Earth coord beam-pair warning removed |
52 # May 29, 2014: - removed unused code (disabled warning) from ref_lr_w |
52 # May 29, 2014: - removed unused code (disabled warning) from ref_lr_w |
53 # Mar 22, 2015: - BUG: mk_prof could bomb because of division-by-zero in return statement |
53 # Mar 22, 2015: - BUG: mk_prof could bomb because of division-by-zero in return statement |
54 # Jan 9, 2016: - renamed ref_lr_w to mk_prof_ref_lr_w because the old name conflicts |
54 # Jan 9, 2016: - renamed ref_lr_w to mk_prof_ref_lr_w because the old name conflicts |
55 # with a sub in LADCP_w |
55 # with a sub in LADCP_w |
|
56 # May 19, 2016: - adapted to new velBeamToInstrument() usage |
56 |
57 |
57 use strict; |
58 use strict; |
58 |
59 |
59 #====================================================================== |
60 #====================================================================== |
60 # fake_BT_RANGE(dta ptr) |
61 # fake_BT_RANGE(dta ptr) |
131 next unless (defined($d->{ENSEMBLE}[$i]->{DEPTH}) && |
132 next unless (defined($d->{ENSEMBLE}[$i]->{DEPTH}) && |
132 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[0]) && |
133 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[0]) && |
133 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[1]) && |
134 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[1]) && |
134 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[2]) && |
135 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[2]) && |
135 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[3])); |
136 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[3])); |
136 my(@BT) = $beamCoords |
137 my(@BT) = $beamCoords ? velBeamToEarth($d,$i,@{$d->{ENSEMBLE}[$i]->{BT_VELOCITY}}) |
137 ? velInstrumentToEarth($d,$i, |
138 : velApplyHdgBias($d,$i,@{$d->{ENSEMBLE}[$i]->{BT_VELOCITY}}); |
138 velBeamToInstrument($d, |
|
139 @{$d->{ENSEMBLE}[$i]->{BT_VELOCITY}})) |
|
140 : velApplyHdgBias($d,$i,@{$d->{ENSEMBLE}[$i]->{BT_VELOCITY}}); |
|
141 next unless (abs($BT[3]) < 0.05); |
139 next unless (abs($BT[3]) < 0.05); |
142 $d->{ENSEMBLE}[$i]->{seabed} = |
140 $d->{ENSEMBLE}[$i]->{seabed} = |
143 $d->{ENSEMBLE}[$i]->{BT_RANGE}[0]/4 + |
141 $d->{ENSEMBLE}[$i]->{BT_RANGE}[0]/4 + |
144 $d->{ENSEMBLE}[$i]->{BT_RANGE}[1]/4 + |
142 $d->{ENSEMBLE}[$i]->{BT_RANGE}[1]/4 + |
145 $d->{ENSEMBLE}[$i]->{BT_RANGE}[2]/4 + |
143 $d->{ENSEMBLE}[$i]->{BT_RANGE}[2]/4 + |
287 if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] < $min_pctg); |
285 if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] < $min_pctg); |
288 undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][2]) |
286 undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][2]) |
289 if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] < $min_pctg); |
287 if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] < $min_pctg); |
290 undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][3]) |
288 undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][3]) |
291 if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg); |
289 if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg); |
292 @vi = velBeamToInstrument($dta,@{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]}); |
290 @vi = velBeamToInstrument($dta,$ens,@{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]}); |
293 @v = velInstrumentToEarth($dta,$ens,@vi); |
291 @v = velInstrumentToEarth($dta,$ens,@vi); |
294 @vbp = velBeamToBPEarth($dta,$ens,@{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]}); |
292 @vbp = velBeamToBPEarth($dta,$ens,@{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]}); |
295 } else { |
293 } else { |
296 next if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][0] > 0 || |
294 next if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][0] > 0 || |
297 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] > 0 || |
295 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] > 0 || |
298 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] > 0 || |
296 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] > 0 || |
299 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg); |
297 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg); |
300 @v = @{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]}; |
298 @v = @{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]}; |
301 } |
299 } |
302 ### next if (!defined($v[3]) || abs($v[3]) > $max_e); # disallow 3-beam solutions |
|
303 next if (defined($v[3]) && abs($v[3]) > $max_e); # allow 3-beam solutions |
300 next if (defined($v[3]) && abs($v[3]) > $max_e); # allow 3-beam solutions |
304 |
301 |
305 if (defined($v[2])) { # valid vertical velocity |
302 if (defined($v[2])) { # valid vertical velocity |
306 $vel[2] += $v[2]; $n[2]++; # vertical velocity |
303 $vel[2] += $v[2]; $n[2]++; # vertical velocity |
307 $vel[3] += $v[3], $n[3]++ if defined($v[3]); # error velocity |
304 $vel[3] += $v[3], $n[3]++ if defined($v[3]); # error velocity |