RDI_Utils.pl
author A.M. Thurnherr <athurnherr@yahoo.com>
Wed, 06 Dec 2017 12:42:48 -0500
changeset 41 d7ab920c1de6
parent 39 3bddaa514ef5
child 43 b63fa355644c
permissions -rw-r--r--
V2.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     1
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     2
#                    R D I _ U T I L S . P L 
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     3
#                    doc: Wed Feb 12 10:21:32 2003
41
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 39
diff changeset
     4
#                    dlm: Mon Nov 27 10:32:50 2017
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     5
#                    (c) 2003 A.M. Thurnherr
41
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 39
diff changeset
     6
#                    uE-Info: 59 75 NIL 0 0 72 2 2 4 NIL ofnI
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     7
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     8
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     9
# miscellaneous RDI-specific utilities
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    10
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    11
# History:
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    12
#	Feb 12, 2003: - created
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    13
#	Feb 14, 2003: - added check for short (bad) data files
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    14
#	Feb 26, 2004: - added Earth-coordinate support
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    15
#				  - added ensure_BT_RANGE()
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    16
#	Mar 17, 2004: - set bad BT ranges to undef in ensure_BT_RANGE
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    17
#				  - calc mean/stddev in ensure_BT_RANGE
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    18
#	Mar 20, 2004: - BUG: find_seabed() could bomb when not enough
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    19
#					bottom guesses passed the mode_width test
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    20
#	Mar 30, 2004: - added &soundSpeed()
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    21
#	Nov  8, 2005: - WATER_DEPTH => Z_BT
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    22
#	Dec  1, 2005: - renamed to RDI_Utils.pl
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    23
#				  - folded in mk_prof from [mkProfile]
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    24
#	Nov 30, 2007: - adapted ref_lr_w() to 3-beam solutions
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    25
#	Feb  1, 2008: - added comment
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    26
#	Feb 22, 2008: - added ssCorr()
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    27
#	Apr  9, 2008: - BUG: duplicate line of code (without effect) in find_seabed() 
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    28
#				  - BUG: seabed < max depth was possible
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    29
#	Jan     2010: - fiddled with seabed detection params (no conclusion)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    30
#	May 23, 2010: - renamed Z to DEPTH
2
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
    31
#	Sep 27, 2010: - made sure coord flags are changed correctly when data
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
    32
#					are transferred to earth coords in mk_prof
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
    33
#	Sep 29, 2010: - BUG: previous change was wrong, as ref_lr_w does
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
    34
#						 not overwrite velocities
3
ladcp@ladcp-mac.local
parents: 2
diff changeset
    35
#	Oct 20, 2010: - BUG: w is now not integrated any more across gaps longer than 5s
ladcp@ladcp-mac.local
parents: 2
diff changeset
    36
#	Dec  8, 2010: - changed missing w warning to happen only if gap is longer than 15s
ladcp@ladcp-mac.local
parents: 2
diff changeset
    37
#	Dec 10, 2010: - beautified gap warning
5
29faa9e6226c after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 4
diff changeset
    38
#	Dec 16, 2010: - BUG: gaps at end caused mk_prof to throw away profile
6
603221e51c6f pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 5
diff changeset
    39
#	May 12, 2011: - added code to skip ensembles with built-in-test errors in mk_prof()
603221e51c6f pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 5
diff changeset
    40
#				  - immediately disabled this code becasue it does appear to make matters worse
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    41
#	Sep 21, 2011: - added calculation of RMS heave acceleration
10
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
    42
#	Mar 27, 2013: - BUG: 3-beam solutions were not used in ref_lr_w
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
    43
#				  - disabled apparently unused code
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
    44
#	Apr 12, 2013: - added $min_pctg as optional parameter to mk_prof
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
    45
#	May 14, 2013: - added incident-velocity, w12 & w34 to mkProfile
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
    46
#	Jun  5, 2013: - BUG: incident-flow warning was printed repeatedly
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
    47
#	Jun 20, 2013: - BUG: warning had used &antsInfo()
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
    48
#	Feb 13, 2014: - replaced {DEPTH_BT} by {seabed}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
    49
#				  - added set_range_lim()
17
591779f6df30 changed mkProfile gap heuristics & removed warning
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    50
#	Feb 22, 2014: - changed gap heuristic
591779f6df30 changed mkProfile gap heuristics & removed warning
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
    51
#			      - Earth coord beam-pair warning removed
19
e23a5fd2923a after adapting RDI_Coords to calc w even without valid heading
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    52
#	May 29, 2014: - removed unused code (disabled warning) from ref_lr_w
23
fb0c269b1eaa V1.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
    53
#	Mar 22, 2015: - BUG: mk_prof could bomb because of division-by-zero in return statement
31
b6ca27a1d19c pre Tampa
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    54
#	Jan  9, 2016: - renamed ref_lr_w to mk_prof_ref_lr_w because the old name conflicts
b6ca27a1d19c pre Tampa
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    55
#				    with a sub in LADCP_w
34
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 31
diff changeset
    56
#   May 19, 2016: - adapted to new velBeamToInstrument() usage
39
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    57
#	Aug  7, 2017: - added abmiguity velocity
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
    58
#	Aug  8, 2017: - changed transducer frequency to kHz
41
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 39
diff changeset
    59
#	Nov 27, 2017: - BUG: profile-restart heuristic did not work with P6#001
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    60
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    61
use strict;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    62
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    63
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    64
# fake_BT_RANGE(dta ptr)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    65
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    66
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    67
# During cruise NBP0204 it was found that one of Visbeck's RDIs consistently
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    68
# returns zero as the bottom-track range, even thought the BT velocities
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    69
# are good. This functions calculates the ranges if they are missing.
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    70
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    71
sub cBTR($$$)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    72
{
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    73
	my($d,$e,$b) = @_;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    74
	my($maxamp) = -9e99;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    75
	my($maxi);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    76
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    77
	for (my($i)=0; $i<$d->{N_BINS}; $i++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    78
		next unless ($d->{ENSEMBLE}[$e]->{ECHO_AMPLITUDE}[$i][$b] > $maxamp);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    79
		$maxamp = $d->{ENSEMBLE}[$e]->{ECHO_AMPLITUDE}[$i][$b];
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    80
		$maxi = $i;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    81
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    82
	$d->{ENSEMBLE}[$e]->{BT_RANGE}[$b] =
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    83
		$d->{DISTANCE_TO_BIN1_CENTER} + $maxi * $d->{BIN_LENGTH};
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    84
}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    85
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    86
sub ensure_BT_RANGE($)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    87
{
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    88
	my($d) = @_;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    89
	for (my($e)=0; $e<=$#{$d->{ENSEMBLE}}; $e++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    90
		my($sum) = my($n) = 0;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    91
		if (defined($d->{ENSEMBLE}[$e]->{BT_VELOCITY}[0])) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    92
			for (my($b)=0; $b<4; $b++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    93
				cBTR($d,$e,$b)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    94
					unless defined($d->{ENSEMBLE}[$e]->{BT_RANGE}[$b]);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    95
				$sum += $d->{ENSEMBLE}[$e]->{BT_RANGE}[$b]; $n++;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    96
			}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    97
		} else {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    98
			for (my($b)=0; $b<4; $b++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    99
				$d->{ENSEMBLE}[$e]->{BT_RANGE}[$b] = undef;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   100
			}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   101
		}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   102
		$d->{ENSEMBLE}[$e]->{BT_MEAN_RANGE} = $sum/$n if ($n == 4);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   103
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   104
}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   105
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   106
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   107
# (seabed depth, stddev) = find_seabed(dta ptr, btm ensno, coord flag)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   108
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   109
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   110
# NOTE FOR YOYOS:
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   111
#	- this routine only detects the BT around the depeest depth!
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   112
#	- this is on purpose, because it is used for [listBT]
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   113
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   114
# This is a PAIN:
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   115
# 	if the instrument is too close to the bottom, the BT_RANGE
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   116
#	readings are all out; the only solution is to have a sufficiently
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   117
#	large search width (around the max(depth) ensemble) so that
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   118
#	a part of the up (oops, I forgot to finish this comment one year
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   119
#	ago during A0304 and now I don't understand it any more :-)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   120
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   121
my($search_width) = 200;	# # of ensembles around bottom to search
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   122
my($mode_width) = 10;		# max range of bottom around mode
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   123
my($min_dist) = 20;			# min dist to seabed for good data
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   124
my($z_offset) = 10000;		# shift z to ensure +ve array indices
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   125
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   126
sub find_seabed($$$)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   127
{
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   128
	my($d,$be,$beamCoords) = @_;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   129
	my($i,$dd,$sd,$nd);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   130
	my(@guesses);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   131
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   132
	return undef unless ($be-$search_width >= 0 &&
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   133
						 $be+$search_width <= $#{$d->{ENSEMBLE}});
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   134
	for ($i=$be-$search_width; $i<=$be+$search_width; $i++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   135
		next unless (defined($d->{ENSEMBLE}[$i]->{DEPTH}) &&
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   136
					 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[0]) &&
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   137
					 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[1]) &&
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   138
					 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[2]) &&
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   139
					 defined($d->{ENSEMBLE}[$i]->{BT_RANGE}[3]));
34
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 31
diff changeset
   140
		my(@BT) = $beamCoords ? velBeamToEarth($d,$i,@{$d->{ENSEMBLE}[$i]->{BT_VELOCITY}})
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 31
diff changeset
   141
							  : velApplyHdgBias($d,$i,@{$d->{ENSEMBLE}[$i]->{BT_VELOCITY}});
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   142
		next unless (abs($BT[3]) < 0.05);
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   143
		$d->{ENSEMBLE}[$i]->{seabed} =
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   144
			 $d->{ENSEMBLE}[$i]->{BT_RANGE}[0]/4 +
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   145
			 $d->{ENSEMBLE}[$i]->{BT_RANGE}[1]/4 +
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   146
 			 $d->{ENSEMBLE}[$i]->{BT_RANGE}[2]/4 +
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   147
			 $d->{ENSEMBLE}[$i]->{BT_RANGE}[3]/4;
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   148
		next
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   149
			unless ($d->{ENSEMBLE}[$i]->{seabed} >= $min_dist);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   150
		$d->{ENSEMBLE}[$i]->{seabed} *= -1
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   151
			if ($d->{ENSEMBLE}[$i]->{XDUCER_FACING_UP});
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   152
		$d->{ENSEMBLE}[$i]->{seabed} += $d->{ENSEMBLE}[$i]->{DEPTH};
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   153
		if ($d->{ENSEMBLE}[$i]->{seabed} > $d->{ENSEMBLE}[$be]->{DEPTH}) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   154
			$guesses[int($d->{ENSEMBLE}[$i]->{seabed})+$z_offset]++;
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   155
			$nd++;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   156
		} else {
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   157
			undef($d->{ENSEMBLE}[$i]->{seabed});
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   158
		}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   159
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   160
	return undef unless ($nd>5);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   161
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   162
	my($mode,$nmax);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   163
	for ($i=0; $i<=$#guesses; $i++) {			# find mode
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   164
	$nmax=$guesses[$i],$mode=$i-$z_offset
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   165
			if ($guesses[$i] > $nmax);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   166
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   167
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   168
	$nd = 0;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   169
	for ($i=$be-$search_width; $i<=$be+$search_width; $i++) {
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   170
		next unless defined($d->{ENSEMBLE}[$i]->{seabed});
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   171
		if (abs($d->{ENSEMBLE}[$i]->{seabed}-$mode) <= $mode_width) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   172
			$dd += $d->{ENSEMBLE}[$i]->{seabed};
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   173
			$nd++;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   174
		} else {
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   175
			$d->{ENSEMBLE}[$i]->{seabed} = undef;
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   176
		}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   177
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   178
	return undef unless ($nd >= 2);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   179
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   180
	$dd /= $nd;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   181
	for ($i=$be-$search_width; $i<=$be+$search_width; $i++) {
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   182
		next unless defined($d->{ENSEMBLE}[$i]->{seabed});
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   183
		$sd += ($d->{ENSEMBLE}[$i]->{seabed}-$dd)**2;
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   184
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   185
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   186
	return ($dd, sqrt($sd/($nd-1)));
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   187
}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   188
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   189
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   190
# set_range_lim(d)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   191
#	- set field range_lim
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   192
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   193
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   194
sub set_range_lim($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   195
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   196
	my($d) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   197
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   198
	for (my($e)=0; $e<=$#{$d->{ENSEMBLE}}; $e++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   199
		my($lastGood) = 1; my($b);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   200
		for ($b=0; $b<$d->{N_BINS}; $b++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   201
			if (defined($d->{ENSEMBLE}[$e]->{VELOCITY}[$b][0]) &&
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   202
				defined($d->{ENSEMBLE}[$e]->{VELOCITY}[$b][1]) &&
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   203
				defined($d->{ENSEMBLE}[$e]->{VELOCITY}[$b][2]) &&
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   204
				defined($d->{ENSEMBLE}[$e]->{VELOCITY}[$b][3])) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   205
					$lastGood = 1;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   206
			} elsif ($lastGood) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   207
				$lastGood = 0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   208
			} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   209
				last;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   210
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   211
	    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   212
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   213
		next unless ($b>=2) && defined($d->{ENSEMBLE}[$e]->{DEPTH});
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   214
	    $d->{ENSEMBLE}[$e]->{range_lim} =
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   215
			$d->{DISTANCE_TO_BIN1_CENTER} + ($b-2) * $d->{BIN_LENGTH};
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   216
		$d->{ENSEMBLE}[$e]->{range_lim} *= -1
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   217
			if ($d->{ENSEMBLE}[$e]->{XDUCER_FACING_UP});
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   218
		$d->{ENSEMBLE}[$e]->{range_lim} += $d->{ENSEMBLE}[$e]->{DEPTH};
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   219
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   220
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 12
diff changeset
   221
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   222
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   223
# c = soundSpeed($salin,$temp,$depth)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   224
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   225
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   226
# Taken from the RDI BroadBand primer manual. The reference given there
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   227
# is Urick (1983).
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   228
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   229
sub soundSpeed($$$)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   230
{
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   231
	my($salin,$temp,$depth) = @_;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   232
	die("ERROR: soundSpeed($salin,$temp,$depth): non-numeric parameter\n")
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   233
		unless numberp($salin) && numberp($temp) && numberp($depth);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   234
	return 1449.2 + 4.6*$temp -0.055*$temp**2  + 0.00029*$temp**3 +
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   235
				(1.34 - 0.01*$temp) * ($salin - 35) + 0.016*$depth;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   236
}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   237
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   238
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   239
# fac = ssCorr($eRef,$salin,$temp,$depth)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   240
#	$eRef :	reference to current ensemble
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   241
#	$salin: * -> use instrument salinity
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   242
#	$temp : * -> use instrument temperature
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   243
#	$depth: * -> use instrument PRESSURE(!)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   244
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   245
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   246
{ my($warned);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   247
	sub ssCorr($$$$)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   248
	{
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   249
		my($eRef,$S,$T,$D) = @_;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   250
		$S = $eRef->{SALINITY} if ($S eq '*');
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   251
		$T = $eRef->{TEMPERATURE} if ($T eq '*');
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   252
		if ($D eq '*') {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   253
			print(STDERR "WARNING: soundspeed correction using instrument pressure instead of depth!\n")
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   254
				unless ($warned);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   255
			$warned = 1;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   256
			$D = $eRef->{PRESSURE};
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   257
		}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   258
		return soundSpeed($S,$T,$D) / $eRef->{SPEED_OF_SOUND};
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   259
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   260
}
39
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   261
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   262
#======================================================================
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   263
# ambiguity_velocity(transducer_freq,beam_angle,sound_speed,transmit_lag_dist)
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   264
# 	- recipe provied by Jerry Mullison in August 2017
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   265
#	- transducer_freq in kHz
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   266
#	- sound speed can vary with ensemble
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   267
#======================================================================
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   268
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   269
sub ambiguity_velocity($$$$)
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   270
{
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   271
	my($xd_freq,$beam_angle,$speed_of_sound,$TL_distance) = @_;
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   272
	my($lambda) = $speed_of_sound / (1000*$xd_freq);
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   273
	my($D) = $speed_of_sound * cos(rad($beam_angle)) / 2;
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   274
	return $lambda * $D / (4 * $TL_distance);
3bddaa514ef5 before Hamburg
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 36
diff changeset
   275
}
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   276
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   277
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   278
# ($firstgood,$lastgood,$atbottom,$w_gap_time,$zErr,$maxz) =
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   279
#	mk_prof($dta,$check,$filter,$lr_b0,$lr_b1,$min_corr,$max_e,$max_gap);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   280
#======================================================================
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   281
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   282
# calculate reference-layer vertical and incident velocities
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   283
31
b6ca27a1d19c pre Tampa
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   284
sub mk_prof_ref_lr_w($$$$$$$)
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   285
{
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   286
	my($dta,$ens,$rl_b0,$rl_b1,$min_corr,$max_e,$min_pctg) = @_;
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   287
	my($i,@n,@bn,@v,@vi,@vel,@veli,@bv,@w);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   288
	my($w,$e,$nvi,$vi12,$vi43,@vbp,@velbp,@nbp,$w12,$w34,@w12,@w34);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   289
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   290
	for ($i=$rl_b0; $i<=$rl_b1; $i++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   291
		undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][0])
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   292
			if ($dta->{ENSEMBLE}[$ens]->{CORRELATION}[$i][0] < $min_corr);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   293
		undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][1])
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   294
			if ($dta->{ENSEMBLE}[$ens]->{CORRELATION}[$i][1] < $min_corr);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   295
		undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][2])
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   296
			if ($dta->{ENSEMBLE}[$ens]->{CORRELATION}[$i][2] < $min_corr);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   297
		undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][3])
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   298
			if ($dta->{ENSEMBLE}[$ens]->{CORRELATION}[$i][3] < $min_corr);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   299
		if ($dta->{BEAM_COORDINATES}) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   300
			undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][0])
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   301
				if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][0] < $min_pctg);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   302
			undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][1])
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   303
				if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] < $min_pctg);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   304
			undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][2])
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   305
				if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] < $min_pctg);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   306
			undef($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][3])
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   307
	            if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg);
34
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 31
diff changeset
   308
	        @vi = velBeamToInstrument($dta,$ens,@{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]});
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   309
			@v = velInstrumentToEarth($dta,$ens,@vi);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   310
			@vbp = velBeamToBPEarth($dta,$ens,@{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]});
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   311
		} else {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   312
			next if ($dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][0] > 0 ||
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   313
					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][1] > 0 ||
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   314
					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][2] > 0 ||
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   315
					 $dta->{ENSEMBLE}[$ens]->{PERCENT_GOOD}[$i][3] < $min_pctg);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   316
			@v = @{$dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i]};
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   317
		}
10
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   318
		next if (defined($v[3]) && abs($v[3]) > $max_e);		# allow 3-beam solutions
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   319
19
e23a5fd2923a after adapting RDI_Coords to calc w even without valid heading
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
   320
		if (defined($v[2])) {									# valid vertical velocity
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   321
			$vel[2] += $v[2]; $n[2]++;							# vertical velocity
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   322
			$vel[3] += $v[3], $n[3]++ if defined($v[3]);		# error velocity
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   323
			push(@w,$v[2]); 									# save for stderr calculation
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   324
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   325
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   326
		if (defined($vbp[1])) {									# beam-pair vertical velocities
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   327
			$velbp[0] += $vbp[1]; $nbp[0]++;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   328
			push(@w12,$vbp[1]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   329
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   330
		if (defined($vbp[3])) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   331
			$velbp[1] += $vbp[3]; $nbp[1]++;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   332
			push(@w34,$vbp[1]);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   333
		}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   334
		
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   335
		if (defined($vi[0])) { 									# incident velocity
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   336
			$veli[0] += $vi[0];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   337
			$veli[1] += $vi[1];
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   338
			$nvi++;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   339
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   340
10
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   341
#	The following code calculates beam-averaged ref-lr velocities.
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   342
#	I do not recall what this was implemented for. Disabled Mar 27, 2013.
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   343
#
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   344
#		if ($dta->{BEAM_COORDINATES}) {
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   345
#			$bv[0] += $dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][0], $bn[0]++
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   346
#				if defined($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][0]);
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   347
#			$bv[1] += $dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][1], $bn[1]++
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   348
#				if defined($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][1]);
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   349
#			$bv[2] += $dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][2], $bn[2]++
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   350
#				if defined($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][2]);
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   351
#			$bv[3] += $dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][3], $bn[3]++
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   352
#	            if defined($dta->{ENSEMBLE}[$ens]->{VELOCITY}[$i][3]);
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   353
#	    }
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   354
	} # loop over ref-lr bins
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   355
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   356
	$w = ($n[2] > 0) ? $vel[2]/$n[2] : undef;					# calc means
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   357
	$e = ($n[3] > 0) ? $vel[3]/$n[3] : undef;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   358
	if ($nvi > 0) {						
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   359
		$vi12 = $veli[0] / $nvi;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   360
		$vi43 = $veli[1] / $nvi;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   361
	} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   362
		$vi12 = $vi43 = undef;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   363
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   364
	$w12 = ($nbp[0] > 0) ? $velbp[0]/$nbp[0] : undef;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   365
	$w34 = ($nbp[1] > 0) ? $velbp[1]/$nbp[1] : undef;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   366
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   367
	if (@w12) {													# w uncertainty
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   368
		my($sumsq) = 0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   369
		for ($i=0; $i<=$#w12; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   370
			$sumsq += ($w12-$w12[$i])**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   371
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   372
		$dta->{ENSEMBLE}[$ens]->{W12} = $w12;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   373
		$dta->{ENSEMBLE}[$ens]->{W12_ERR} = sqrt($sumsq)/($nbp[0]-1)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   374
			if ($nbp[0]>=2);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   375
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   376
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   377
	if (@w34) {													# w uncertainty
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   378
		my($sumsq) = 0;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   379
		for ($i=0; $i<=$#w34; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   380
			$sumsq += ($w34-$w34[$i])**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   381
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   382
		$dta->{ENSEMBLE}[$ens]->{W34} = $w34;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   383
		$dta->{ENSEMBLE}[$ens]->{W34_ERR} = sqrt($sumsq)/($nbp[1]-1)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   384
			if ($nbp[1]>=2);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   385
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   386
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   387
	my($sumsq) = 0;												# w uncertainty
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   388
	for ($i=0; $i<=$#w; $i++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   389
		$sumsq += ($w-$w[$i])**2;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   390
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   391
	my($stderr) = $n[2]>=2 ? sqrt($sumsq)/($n[2]-1) : undef;
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   392
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   393
#	The following stderr test introduces a huge gap near the bottom of
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   394
#	the profiles. Without it, they seem more reasonable.
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   395
#	next if ($stderr > 0.05);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   396
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   397
	if (defined($w)) {											# valid velocity
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   398
		$dta->{ENSEMBLE}[$ens]->{W} = $w;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   399
		$dta->{ENSEMBLE}[$ens]->{W_ERR} = $stderr;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   400
	}
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   401
	$dta->{ENSEMBLE}[$ens]->{ERR_VEL} = $e if (defined($e));
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   402
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   403
	$dta->{ENSEMBLE}[$ens]->{W12} = $w12 if (defined($w12));
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   404
	$dta->{ENSEMBLE}[$ens]->{W34} = $w34 if (defined($w34));
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   405
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   406
	if (defined($vi12)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   407
		$dta->{ENSEMBLE}[$ens]->{INCIDENT_VEL_T12} = $vi12;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   408
		$dta->{ENSEMBLE}[$ens]->{INCIDENT_VEL_T43} = $vi43;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   409
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   410
10
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   411
#	The following code calculates beam-averaged ref-lr velocities.
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   412
#	I do not recall what this was implemented for. Disabled Mar 27, 2013.
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   413
#
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   414
#	if ($dta->{BEAM_COORDINATES}) {
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   415
#		$dta->{ENSEMBLE}[$ens]->{V1} = $bn[0]>=2 ? $bv[0]/$bn[0] : undef;
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   416
#		$dta->{ENSEMBLE}[$ens]->{V2} = $bn[1]>=2 ? $bv[1]/$bn[1] : undef;
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   417
#		$dta->{ENSEMBLE}[$ens]->{V3} = $bn[2]>=2 ? $bv[2]/$bn[2] : undef;
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   418
#	    $dta->{ENSEMBLE}[$ens]->{V4} = $bn[3]>=2 ? $bv[3]/$bn[3] : undef;
c835cd613f3e before EGU Vienna
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 8
diff changeset
   419
#	}
12
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 11
diff changeset
   420
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   421
}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   422
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   423
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   424
sub mk_prof(...)											# make profile
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   425
{
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   426
	my($dta,$check,$filter,$lr_b0,$lr_b1,$min_corr,$max_e,$max_gap,$min_pctg) = @_;
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   427
	my($firstgood,$lastgood,$atbottom,$w_gap_time,$zErr,$maxz);
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   428
	my($rms_heave_accel_ssq,$rms_heave_accel_nsamp);
11
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   429
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 10
diff changeset
   430
	$min_pctg = 100 unless defined($min_pctg);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   431
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   432
	for (my($z)=0,my($e)=0; $e<=$#{$dta->{ENSEMBLE}}; $e++) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   433
		checkEnsemble($dta,$e) if ($check);
6
603221e51c6f pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 5
diff changeset
   434
###		The following line of code, which can only have an effect if check is disabled,
603221e51c6f pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 5
diff changeset
   435
###		seems reasonable but has been found to make matters worse with one particular
603221e51c6f pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 5
diff changeset
   436
###		data file from a BB150. 
603221e51c6f pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 5
diff changeset
   437
###		next if ($dta->{ENSEMBLE}[$e]->{BUILT_IN_TEST_ERROR});
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   438
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   439
		filterEnsemble($dta,$e)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   440
			if (defined($filter) &&
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   441
				$dta->{ENSEMBLE}[$e]->{PERCENT_GOOD}[0][0] > 0);
31
b6ca27a1d19c pre Tampa
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   442
		mk_prof_ref_lr_w($dta,$e,$lr_b0,$lr_b1,$min_corr,$max_e,$min_pctg);	# ref. layer w
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   443
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   444
		if (defined($firstgood)) {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   445
			$dta->{ENSEMBLE}[$e]->{ELAPSED_TIME} =			# time since start
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   446
				$dta->{ENSEMBLE}[$e]->{UNIX_TIME} -
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   447
				$dta->{ENSEMBLE}[$firstgood]->{UNIX_TIME};
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   448
		} else {
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   449
			if (defined($dta->{ENSEMBLE}[$e]->{W})) {		# start of prof.
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   450
				$firstgood = $lastgood = $e;		    
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   451
				$dta->{ENSEMBLE}[$e]->{ELAPSED_TIME} = 0;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   452
				$dta->{ENSEMBLE}[$e]->{DEPTH} = $dta->{ENSEMBLE}[$e]->{DEPTH_ERR} = 0;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   453
			}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   454
			next;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   455
		}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   456
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   457
		#--------------------------------------------------
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   458
		# within profile: both $firstgood and $lastgood set
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   459
		#--------------------------------------------------
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   460
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   461
		if (!defined($dta->{ENSEMBLE}[$e]->{W})) {			# gap
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   462
			$w_gap_time += $dta->{ENSEMBLE}[$e]->{UNIX_TIME} -
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   463
						   $dta->{ENSEMBLE}[$e-1]->{UNIX_TIME};
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   464
			next;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   465
		}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   466
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   467
		my($dt) = $dta->{ENSEMBLE}[$e]->{UNIX_TIME} -		# time step since
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   468
				  $dta->{ENSEMBLE}[$lastgood]->{UNIX_TIME}; # ... last good ens
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   469
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   470
		if ($dt > $max_gap) {
41
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 39
diff changeset
   471
			# 2nd heuristic test added Nov 2017 for P06 profile #001
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 39
diff changeset
   472
			if ((@{$dta->{ENSEMBLE}}-$e < @{$dta->{ENSEMBLE}}/2) &&
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 39
diff changeset
   473
				($maxz > 25 && $z < $maxz/2)) {
17
591779f6df30 changed mkProfile gap heuristics & removed warning
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
   474
					printf(STDERR "WARNING: %.1f-s gap in 2nd half of profile is too long; profile ended at ensemble $lastgood\n",$dt);
41
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 39
diff changeset
   475
#					printf(STDERR "\t[#ens = %d, end-of-gap = $e]\n",scalar(@{$dta->{ENSEMBLE}}));
5
29faa9e6226c after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 4
diff changeset
   476
					last;
29faa9e6226c after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 4
diff changeset
   477
			}
17
591779f6df30 changed mkProfile gap heuristics & removed warning
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 14
diff changeset
   478
			printf(STDERR "WARNING: %.1f-s gap in first half of profile is too long; profile restarted at ensemble $e\n",$dt);
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   479
			$firstgood = $lastgood = $e;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   480
			$dta->{ENSEMBLE}[$e]->{ELAPSED_TIME} = 0;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   481
			$z = $zErr = $maxz = 0;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   482
			$dta->{ENSEMBLE}[$e]->{DEPTH} = $dta->{ENSEMBLE}[$e]->{DEPTH_ERR} = 0;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   483
			$w_gap_time = 0;
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   484
			$rms_heave_accel_ssq = $rms_heave_accel_nsamp = 0;
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   485
			next;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   486
		}
2
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   487
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   488
		#-----------------------------------
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   489
		# The current ensemble has a valid w
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   490
		#-----------------------------------
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   491
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   492
		if ($dt < 5) {												# no or short gap
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   493
			$z += $dta->{ENSEMBLE}[$lastgood]->{W} * $dt;			# integrate w to get depth
2
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   494
			$zErr += ($dta->{ENSEMBLE}[$lastgood]->{W_ERR} * $dt)**2;
8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   495
			$rms_heave_accel_ssq += (($dta->{ENSEMBLE}[$e]->{W}-$dta->{ENSEMBLE}[$lastgood]->{W})/$dt)**2;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
   496
			$rms_heave_accel_nsamp++;
3
ladcp@ladcp-mac.local
parents: 2
diff changeset
   497
		} elsif ($dt > 15) {
5
29faa9e6226c after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents: 4
diff changeset
   498
	       	printf(STDERR "WARNING: long-ish w gap (dt=%.1fs)\n",$dt);
2
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   499
		}
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   500
	
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   501
		$dta->{ENSEMBLE}[$e]->{DEPTH} = $z;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   502
		$dta->{ENSEMBLE}[$e]->{DEPTH_ERR} = sqrt($zErr);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   503
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   504
		$atbottom = $e, $maxz = $z if ($z > $maxz); 
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   505
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   506
		$lastgood = $e;
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   507
	}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   508
	
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   509
	filterEnsembleStats() if defined($filter);
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   510
23
fb0c269b1eaa V1.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   511
	return ($firstgood,$lastgood,$atbottom,$w_gap_time,$zErr,$maxz,
fb0c269b1eaa V1.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   512
			($rms_heave_accel_nsamp>0) ? sqrt($rms_heave_accel_ssq/$rms_heave_accel_nsamp) : 'nan');
0
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   513
}
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   514
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   515
#----------------------------------------------------------------------
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   516
# (true|false) = numberp(var)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   517
#----------------------------------------------------------------------
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   518
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   519
sub numberp(@)
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   520
{ return  $_[0] =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/; }
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   521
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   522
229a0d72d2ab first hg version
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   523
1;
2
065ea9ce12fc before DIMES UK2 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 0
diff changeset
   524