RDI_Utils.pl
changeset 48 cdc74ebada81
parent 43 b63fa355644c
child 49 8f4fbdaf0102
--- a/RDI_Utils.pl
+++ b/RDI_Utils.pl
@@ -1,9 +1,9 @@
 #======================================================================
 #                    R D I _ U T I L S . P L 
 #                    doc: Wed Feb 12 10:21:32 2003
-#                    dlm: Sat Jun  9 12:11:01 2018
+#                    dlm: Wed Jun 26 09:05:05 2019
 #                    (c) 2003 A.M. Thurnherr
-#                    uE-Info: 61 58 NIL 0 0 72 2 2 4 NIL ofnI
+#                    uE-Info: 300 27 NIL 0 0 72 0 2 4 NIL ofnI
 #======================================================================
 
 # miscellaneous RDI-specific utilities
@@ -59,6 +59,12 @@
 #	Nov 27, 2017: - BUG: profile-restart heuristic did not work with P6#001
 #	Mar 18, 2018: - added -ve dt consistency check
 #	Jun  9, 2018: - added support for ENV{NO_GAP_WARNINGS}
+#	Jun 16, 2019: - adapted (partiall) to support RTI ADCPs:
+#					- made ambiguity_velocity() return nan (missing TL_distance)
+#					- skip missing velocities in reference-layer calculation
+#					- disable %-good screening with $min_pctg == 0
+# 	Jun 26, 2019: - increased short-gap in mk_prof from 5s to 6s to allow processing
+#					of RTi test file with 5s ensembles
 
 use strict;
 
@@ -271,6 +277,7 @@
 sub ambiguity_velocity($$$$)
 {
 	my($xd_freq,$beam_angle,$speed_of_sound,$TL_distance) = @_;
+	return 'nan' unless ($TL_distance > 0);
 	my($lambda) = $speed_of_sound / (1000*$xd_freq);
 	my($D) = $speed_of_sound * cos(rad($beam_angle)) / 2;
 	return $lambda * $D / (4 * $TL_distance);
@@ -290,6 +297,7 @@
 	my($w,$e,$nvi,$vi12,$vi43,@vbp,@velbp,@nbp,$w12,$w34,@w12,@w34);
 
 	for ($i=$rl_b0; $i<=$rl_b1; $i++) {
+		next unless defined($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]);
 		undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][0])
 			if ($dta->{ENSEMBLE}[$ens]->{CORRELATION}[$i][0] < $min_corr);
 		undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][1])
@@ -311,10 +319,12 @@
 			@v = velInstrumentToEarth($dta,$ens,@vi);
 			@vbp = velBeamToBPEarth($dta,$ens,@{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]});
 		} else {
-			next if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][0] > 0 ||
-					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] > 0 ||
-					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] > 0 ||
-					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg);
+			if ($min_pctg > 0) {
+				next if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][0] > 0 ||
+						 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] > 0 ||
+						 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] > 0 ||
+	                     $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg);
+            }
 			@v = @{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]};
 		}
 		next if (defined($v[3]) && abs($v[3]) > $max_e);		# allow 3-beam solutions
@@ -496,7 +506,7 @@
 		# The current ensemble has a valid w
 		#-----------------------------------
 
-		if ($dt < 5) {												# no or short gap
+		if ($dt < 6) {												# no or short gap
 			$z += $dta->{ENSEMBLE}[$lastgood]->{W} * $dt;			# integrate w to get depth
 			$zErr += ($dta->{ENSEMBLE}[$lastgood]->{W_ERR} * $dt)**2;
 			$rms_heave_accel_ssq += (($dta->{ENSEMBLE}[$e]->{W}-$dta->{ENSEMBLE}[$lastgood]->{W})/$dt)**2;