RDI_Utils.pl
changeset 34 3b4bcd55e1ea
parent 31 b6ca27a1d19c
child 36 515b06dae59c
equal deleted inserted replaced
33:307630665c6c 34:3b4bcd55e1ea
     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