listBT
changeset 45 5767cbe470a0
parent 43 b63fa355644c
equal deleted inserted replaced
44:b7654ea68af6 45:5767cbe470a0
     1 #!/usr/bin/perl
     1 #!/usr/bin/perl
     2 #======================================================================
     2 #======================================================================
     3 #                    L I S T B T 
     3 #                    L I S T B T 
     4 #                    doc: Sat Jan 18 18:41:49 2003
     4 #                    doc: Sat Jan 18 18:41:49 2003
     5 #                    dlm: Mon Nov 25 18:30:11 2013
     5 #                    dlm: Mon Apr  2 18:31:18 2018
     6 #                    (c) 2003 A.M. Thurnherr
     6 #                    (c) 2003 A.M. Thurnherr
     7 #                    uE-Info: 42 44 NIL 0 0 72 11 2 4 NIL ofnI
     7 #                    uE-Info: 43 61 NIL 0 0 72 11 2 4 NIL ofnI
     8 #======================================================================
     8 #======================================================================
     9 
     9 
    10 # Extract Bottom-Track Data
    10 # Extract Bottom-Track Data
    11 
    11 
    12 # NOTE: NO SOUND-SPEED CORRECTION APPLIED YET!!!
    12 # NOTE: NO SOUND-SPEED CORRECTION APPLIED YET!!!
    38 #	Aug 25, 2006: - fiddled
    38 #	Aug 25, 2006: - fiddled
    39 #	Sep 19, 2007: - adapted to new [RDI_BB_Read.pl] (not tested)
    39 #	Sep 19, 2007: - adapted to new [RDI_BB_Read.pl] (not tested)
    40 #	Nov  1, 2008: - BUG: sig(u) was reported instead of sig(v)
    40 #	Nov  1, 2008: - BUG: sig(u) was reported instead of sig(v)
    41 #	Jul 30, 2009: - NaN => nan
    41 #	Jul 30, 2009: - NaN => nan
    42 #	Nov 25, 2013: - checkEnsemble() expunged
    42 #	Nov 25, 2013: - checkEnsemble() expunged
       
    43 #	Apr  2, 2018: - BUG: velBeamToInstrument() used old usage
    43 
    44 
    44 # NOTES:
    45 # NOTES:
    45 #	- the RDI BT data contains ranges that are greater than the
    46 #	- the RDI BT data contains ranges that are greater than the
    46 #	  WT ping ranges. I don't know if those data are valid!
    47 #	  WT ping ranges. I don't know if those data are valid!
    47 #	- there is a fair bit of heuristic used, especially in the 
    48 #	- there is a fair bit of heuristic used, especially in the 
   162 			next if ($dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][0] < 100 ||
   163 			next if ($dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][0] < 100 ||
   163 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][1] < 100 ||
   164 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][1] < 100 ||
   164 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][2] < 100 ||
   165 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][2] < 100 ||
   165 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][3] < 100);
   166 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][3] < 100);
   166 			@v = velInstrumentToEarth(\%dta,$ens,
   167 			@v = velInstrumentToEarth(\%dta,$ens,
   167 					velBeamToInstrument(\%dta,
   168 					velBeamToInstrument(\%dta,$ens,
   168 	                    @{$dta{ENSEMBLE}[$ens]->{VELOCITY}[$b]}));
   169 	                    @{$dta{ENSEMBLE}[$ens]->{VELOCITY}[$b]}));
   169 	    } else {
   170 	    } else {
   170 			next if ($dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][0] > 0 ||
   171 			next if ($dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][0] > 0 ||
   171 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][1] > 0 ||
   172 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][1] > 0 ||
   172 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][2] > 0 ||
   173 					 $dta{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$b][2] > 0 ||
   296 					 defined($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][3]));
   297 					 defined($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][3]));
   297 		my($dz) = $dta{DISTANCE_TO_BIN1_CENTER} + $b*$dta{BIN_LENGTH};
   298 		my($dz) = $dta{DISTANCE_TO_BIN1_CENTER} + $b*$dta{BIN_LENGTH};
   298 		last if ($dta{ENSEMBLE}[$e]->{BT_MEAN_RANGE}-$dz <= $slc);
   299 		last if ($dta{ENSEMBLE}[$e]->{BT_MEAN_RANGE}-$dz <= $slc);
   299 		my(@v) = $beamCoords
   300 		my(@v) = $beamCoords
   300 			   ? velInstrumentToEarth(\%dta,$e,
   301 			   ? velInstrumentToEarth(\%dta,$e,
   301 					velBeamToInstrument(\%dta,
   302 					velBeamToInstrument(\%dta,$e,
   302 						@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]}))
   303 						@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]}))
   303 			   : velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]});
   304 			   : velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]});
   304 		next unless defined($v[0]);
   305 		next unless defined($v[0]);
   305 		next if (abs($v[3]) > $opt_e ||
   306 		next if (abs($v[3]) > $opt_e ||
   306 				 abs($v[2]-$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[2]) > 0.1);
   307 				 abs($v[2]-$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[2]) > 0.1);
   336 					 defined($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][3]));
   337 					 defined($dta{ENSEMBLE}[$e]->{VELOCITY}[$b][3]));
   337 		my($dz) = $dta{DISTANCE_TO_BIN1_CENTER} + $b*$dta{BIN_LENGTH};
   338 		my($dz) = $dta{DISTANCE_TO_BIN1_CENTER} + $b*$dta{BIN_LENGTH};
   338 		last if ($dta{ENSEMBLE}[$e]->{BT_MEAN_RANGE}-$dz <= $slc);
   339 		last if ($dta{ENSEMBLE}[$e]->{BT_MEAN_RANGE}-$dz <= $slc);
   339 		my(@v) = $beamCoords
   340 		my(@v) = $beamCoords
   340 			   ? velInstrumentToEarth(\%dta,$e,
   341 			   ? velInstrumentToEarth(\%dta,$e,
   341 					velBeamToInstrument(\%dta,
   342 					velBeamToInstrument(\%dta,$e,
   342 						@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]}))
   343 						@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]}))
   343 			   : velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]});
   344 			   : velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{VELOCITY}[$b]});
   344 		next unless defined($v[0]);
   345 		next unless defined($v[0]);
   345 		next if (abs($v[3]) > $opt_e ||
   346 		next if (abs($v[3]) > $opt_e ||
   346 				 abs($v[2]-$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[2]) > 0.1);
   347 				 abs($v[2]-$dta{ENSEMBLE}[$e]->{BT_VELOCITY}[2]) > 0.1);
   482 			+ $CC_bias
   483 			+ $CC_bias
   483 				if defined($opt_C);
   484 				if defined($opt_C);
   484 
   485 
   485 	@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}} = $beamCoords	# xform BT vel
   486 	@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}} = $beamCoords	# xform BT vel
   486 	    ? velInstrumentToEarth(\%dta,$e,
   487 	    ? velInstrumentToEarth(\%dta,$e,
   487 			velBeamToInstrument(\%dta,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}}))
   488 			velBeamToInstrument(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}}))
   488 		: velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}});
   489 		: velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}});
   489 
   490 
   490  	$dta{ENSEMBLE}[$e]->{BT_MEAN_RANGE} =				# mean vals
   491  	$dta{ENSEMBLE}[$e]->{BT_MEAN_RANGE} =				# mean vals
   491 		$dta{ENSEMBLE}[$e]->{BT_RANGE}[0]/4 +
   492 		$dta{ENSEMBLE}[$e]->{BT_RANGE}[0]/4 +
   492 		$dta{ENSEMBLE}[$e]->{BT_RANGE}[1]/4 +
   493 		$dta{ENSEMBLE}[$e]->{BT_RANGE}[1]/4 +
   553 			$dta{ENSEMBLE}[$e]->{WT_RANGE}[3]/4;
   554 			$dta{ENSEMBLE}[$e]->{WT_RANGE}[3]/4;
   554 	
   555 	
   555 		my($btm_e) = int($btm_e[0]/4+$btm_e[1]/4+$btm_e[2]/4+$btm_e[3]/4+0.5);
   556 		my($btm_e) = int($btm_e[0]/4+$btm_e[1]/4+$btm_e[2]/4+$btm_e[3]/4+0.5);
   556 		@{$dta{ENSEMBLE}[$btm_e]->{BTFWT_VELOCITY}} = $beamCoords # BT from WT
   557 		@{$dta{ENSEMBLE}[$btm_e]->{BTFWT_VELOCITY}} = $beamCoords # BT from WT
   557 			? velInstrumentToEarth(\%dta,$e,
   558 			? velInstrumentToEarth(\%dta,$e,
   558 				velBeamToInstrument(\%dta,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}}))
   559 				velBeamToInstrument(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}}))
   559 	        : velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}});
   560 	        : velApplyHdgBias(\%dta,$e,@{$dta{ENSEMBLE}[$e]->{BT_VELOCITY}});
   560 	}
   561 	}
   561 
   562 
   562 	dumpEns($e) if defined($opt_E);						# output BT profiles
   563 	dumpEns($e) if defined($opt_E);						# output BT profiles
   563 	if ($opt_B) { dumpBT($e); }
   564 	if ($opt_B) { dumpBT($e); }