after adapting RDI_Coords to calc w even without valid heading
authorA.M. Thurnherr <athurnherr@yahoo.com>
Tue, 03 Jun 2014 16:14:14 -0400
changeset 19 e23a5fd2923a
parent 18 bb7bb9f83db9
child 20 16197fdefdb1
child 21 0b5bbe60131c
after adapting RDI_Coords to calc w even without valid heading
RDI_Coords.pl
RDI_Utils.pl
--- a/RDI_Coords.pl
+++ b/RDI_Coords.pl
@@ -1,9 +1,9 @@
 #======================================================================
 #                    R D I _ C O O R D S . P L 
 #                    doc: Sun Jan 19 17:57:53 2003
-#                    dlm: Tue Mar  4 13:35:21 2014
+#                    dlm: Thu May 29 09:19:54 2014
 #                    (c) 2003 A.M. Thurnherr
-#                    uE-Info: 273 60 NIL 0 0 72 0 2 4 NIL ofnI
+#                    uE-Info: 282 0 NIL 0 0 72 0 2 4 NIL ofnI
 #======================================================================
 
 # RDI Workhorse Coordinate Transformations
@@ -34,7 +34,11 @@
 #	Aug  7, 2013: - BUG: &velBeamToBPInstrument did not return any val unless
 #						 all beam velocities are defined
 #	Nov 27, 2013: - added &RDI_pitch(), &tilt_azimuth()
-#	Mar  4, 2014: - added support for missing PITCH/ROLL/HEADING
+#	Mar  4, 2014: - added support for ensembles with missing PITCH/ROLL/HEADING
+#	May 29, 2014: - BUG: vertical velocity can be calculated even without
+#						 heading
+#				  - removed some old debug statements
+#				  - removed unused code from &velBeamToBPInstrument
 
 use strict;
 use POSIX;
@@ -65,7 +69,6 @@
 								>= $RDI_Coords::minValidVels);
 
 		unless (@B2I) {
-#			print(STDERR "RDI_Coords::minValidVels = $RDI_Coords::minValidVels\n");
 			my($a) = 1 / (2 * sin(rad($dta->{BEAM_ANGLE})));
 			my($b) = 1 / (4 * cos(rad($dta->{BEAM_ANGLE})));
 			my($c) = $dta->{CONVEX_BEAM_PATTERN} ? 1 : -1;
@@ -74,7 +77,6 @@
 				    [0,		0,		-$c*$a,	$c*$a],
 				    [$b,	$b,		$b,		$b	 ],
 				    [$d,	$d,		-$d,	-$d	 ]);
-#			print(STDERR "@{$B2I[0]}\n@{$B2I[1]}\n@{$B2I[2]}\n@{$B2I[3]}\n");
 		}
 
 		if (!defined($v1)) {					# 3-beam solutions
@@ -114,22 +116,21 @@
 		return undef unless (defined($v1) && defined($v2) &&
 					   		 defined($v3) && defined($v4) &&
 							 defined($dta->{ENSEMBLE}[$ens]->{PITCH}) &&
-							 defined($dta->{ENSEMBLE}[$ens]->{ROLL}) &&
-							 defined($dta->{ENSEMBLE}[$ens]->{HEADING}));
+							 defined($dta->{ENSEMBLE}[$ens]->{ROLL}));
 	
 		unless (@I2E &&
-				$hdg   == $dta->{ENSEMBLE}[$ens]->{HEADING}
-							- $dta->{HEADING_BIAS} &&
 				$pitch == $dta->{ENSEMBLE}[$ens]->{PITCH} &&
 				$roll  == $dta->{ENSEMBLE}[$ens]->{ROLL}) {
 			printf(STDERR "$0: warning HEADING_ALIGNMENT == %g ignored\n",
 						  $dta->{HEADING_ALIGNMENT})
 				if ($dta->{HEADING_ALIGNMENT});
-			$hdg   = $dta->{ENSEMBLE}[$ens]->{HEADING} - $dta->{HEADING_BIAS};
+			$hdg   = $dta->{ENSEMBLE}[$ens]->{HEADING} - $dta->{HEADING_BIAS}
+				if defined($dta->{ENSEMBLE}[$ens]->{HEADING});
 			$pitch = $dta->{ENSEMBLE}[$ens]->{PITCH};
 			$roll  = $dta->{ENSEMBLE}[$ens]->{ROLL};
 			my($rad_gimbal_pitch) = atan(tan(rad($pitch)) * cos(rad($roll)));
-			my($sh,$ch) = (sin(rad($hdg)),	cos(rad($hdg)));
+			my($sh,$ch) = (sin(rad($hdg)),cos(rad($hdg)))
+				if defined($hdg);				
 			my($sp,$cp) = (sin($rad_gimbal_pitch),cos($rad_gimbal_pitch));
 			my($sr,$cr) = (sin(rad($roll)),	cos(rad($roll)));
 			@I2E = $dta->{ENSEMBLE}[$ens]->{XDUCER_FACING_UP}
@@ -143,11 +144,14 @@
 					[-$cp*$sr,				$sp,	 $cp*$cr,			],
 				 );
 		}
-		return ($v1*$I2E[0][0]+$v2*$I2E[0][1]+$v3*$I2E[0][2],
-				$v1*$I2E[1][0]+$v2*$I2E[1][1]+$v3*$I2E[1][2],
-				$v1*$I2E[2][0]+$v2*$I2E[2][1]+$v3*$I2E[2][2],
-				$v4);
-		
+		return defined($dta->{ENSEMBLE}[$ens]->{HEADING})
+			   ? ($v1*$I2E[0][0]+$v2*$I2E[0][1]+$v3*$I2E[0][2],
+				  $v1*$I2E[1][0]+$v2*$I2E[1][1]+$v3*$I2E[1][2],
+				  $v1*$I2E[2][0]+$v2*$I2E[2][1]+$v3*$I2E[2][2],
+				  $v4)
+			   : (undef,undef,
+				  $v1*$I2E[2][0]+$v2*$I2E[2][1]+$v3*$I2E[2][2],
+				  $v4);
 	}
 } # STATIC SCOPE
 
@@ -168,8 +172,7 @@
 
 		return (undef,undef,undef,undef) 
 			unless (defined($dta->{ENSEMBLE}[$ens]->{PITCH}) &&
-                    defined($dta->{ENSEMBLE}[$ens]->{ROLL}) &&
-                    defined($dta->{ENSEMBLE}[$ens]->{HEADING}));
+                    defined($dta->{ENSEMBLE}[$ens]->{ROLL}));
 
 		unless (defined($TwoCosBAngle)) {
 			$TwoCosBAngle = 2 * cos(rad($dta->{BEAM_ANGLE}));
@@ -227,17 +230,12 @@
 
 		return (undef,undef,undef,undef) 
 			unless (defined($dta->{ENSEMBLE}[$ens]->{PITCH}) &&
-                    defined($dta->{ENSEMBLE}[$ens]->{ROLL}) &&
-                    defined($dta->{ENSEMBLE}[$ens]->{HEADING}));
+                    defined($dta->{ENSEMBLE}[$ens]->{ROLL}));
 
 		unless (defined($TwoCosBAngle)) {
 			$TwoCosBAngle = 2 * cos(rad($dta->{BEAM_ANGLE}));
 			$TwoSinBAngle = 2 * sin(rad($dta->{BEAM_ANGLE}));
 		}
-		my($roll)  = rad($dta->{ENSEMBLE}[$ens]->{ROLL});							
-		my($sr) = sin($roll); my($cr) = cos($roll);
-		my($pitch) = atan(tan(rad($dta->{ENSEMBLE}[$ens]->{PITCH})) * $cr);	# gimbal pitch
-		my($sp) = sin($pitch); my($cp) = cos($pitch);
 
 		# Sign convention:
 		#	- refer to Coord manual Fig. 3
--- 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 Feb 22 16:57:30 2014
+#                    dlm: Thu May 29 09:23:46 2014
 #                    (c) 2003 A.M. Thurnherr
-#                    uE-Info: 463 0 NIL 0 0 72 10 2 4 NIL ofnI
+#                    uE-Info: 302 0 NIL 0 0 72 10 2 4 NIL ofnI
 #======================================================================
 
 # miscellaneous RDI-specific utilities
@@ -49,6 +49,7 @@
 #				  - added set_range_lim()
 #	Feb 22, 2014: - changed gap heuristic
 #			      - Earth coord beam-pair warning removed
+#	May 29, 2014: - removed unused code (disabled warning) from ref_lr_w
 
 use strict;
 
@@ -261,8 +262,6 @@
 
 # calculate reference-layer vertical and incident velocities
 
-{ my($warned);	# static scope
-
 sub ref_lr_w($$$$$$$)
 {
 	my($dta,$ens,$rl_b0,$rl_b1,$min_corr,$max_e,$min_pctg) = @_;
@@ -296,15 +295,11 @@
 					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] > 0 ||
 					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg);
 			@v = @{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]};
-			unless ($warned) {
-###				print(STDERR "WARNING: incident-flow & beam-pair velocities not yet implemented for earth coordinates");
-				$warned = 1;
-			}
 		}
 ###		next if (!defined($v[3]) || abs($v[3]) > $max_e);		# disallow 3-beam solutions
 		next if (defined($v[3]) && abs($v[3]) > $max_e);		# allow 3-beam solutions
 
-		if (defined($v[2])) {									# valid velocity
+		if (defined($v[2])) {									# valid vertical velocity
 			$vel[2] += $v[2]; $n[2]++;							# vertical velocity
 			$vel[3] += $v[3], $n[3]++ if defined($v[3]);		# error velocity
 			push(@w,$v[2]); 									# save for stderr calculation
@@ -407,8 +402,6 @@
 
 }
 
-} # static scope
-
 
 sub mk_prof(...)											# make profile
 {