.
--- a/LADCPintsh
+++ b/LADCPintsh
@@ -2,9 +2,9 @@
#======================================================================
# L A D C P I N T S H
# doc: Thu Oct 14 21:22:50 2010
-# dlm: Wed Jul 27 18:51:49 2011
+# dlm: Sun Feb 19 22:49:28 2012
# (c) 2010 A.M. Thurnherr & E. Firing
-# uE-Info: 221 0 NIL 0 0 72 2 2 4 NIL ofnI
+# uE-Info: 50 93 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================
$antsSummary = 'integrate LADCP shear';
@@ -17,7 +17,9 @@
# not been implemented (yet?)
# - low-pass-filtered shear code has not yet been implemented
# - currently, shear gaps are assumed to have vanishing shear;
-# better solutions are possible
+# better solutions are possible
+# - elapsed time is simply copied from shear elapsed time (i.e.
+# it is not interpolated onto the new depth grid)
# WEIRDNESSES IN Eric's CODE:
# - in Eric's [avg_sh.m] the calculation of output shear stddev incorrectly assumes that the 4th column
@@ -43,6 +45,9 @@
# - removed shear sigma output
# - replaced ndata by nsamp
# - removed -w (Eric's way of dealing with dc/uc temporal variability)
+# Feb 19, 2012: - added processing of elapsed time
+# - adapted to new shear file layout (nsamp instead of nshear)
+# - BUG: uplooker data was not used for downcasts and and only partially for combo data
($ANTS) = (`which list` =~ m{^(.*)/[^/]*$});
require "$ANTS/ants.pl";
@@ -61,7 +66,6 @@
&antsCardOpt(\$opt_n,10); ## minimum number of samples for shear
&antsCardOpt(\$opt_m,10); # minimum number of samples for BT data
-#&antsCardOpt(\$opt_s,20); ## minimum number of samples for smoothed shear
&antsFileOpt($opt_b); # BT file
@@ -86,33 +90,31 @@
}
-$depthF = fnr('depth'); # layout of [LADCPproc] output
-$dc_nshF = fnr('dc_nshear');
+$depthF = fnr('depth'); # layout of [LADCPproc] output
+$dc_nshF = fnrNoErr('dc_nshear');
+$dc_nshF = fnr('dc_nsamp') unless defined($dc_nshF);
$dc_uzF = fnr('dc_u_z');
$dc_uzsF = fnrNoErr('dc_u_z.sig');
-$dc_uzsF = fnr('dc_u_z_sig')
- unless defined($dc_uzsF);
+$dc_uzsF = fnr('dc_u_z_sig') unless defined($dc_uzsF);
$dc_vzF = fnr('dc_v_z');
$dc_vzsF = fnrNoErr('dc_v_z.sig');
-$dc_vzsF = fnr('dc_v_z_sig')
- unless defined($dc_vzsF);
+$dc_vzsF = fnr('dc_v_z_sig') unless defined($dc_vzsF);
$dc_wzF = fnr('dc_w_z');
$dc_wzsF = fnrNoErr('dc_w_z.sig');
-$dc_wzsF = fnr('dc_w_z_sig')
- unless defined($dc_wzsF);
-$uc_nshF = fnr('uc_nshear');
+$dc_wzsF = fnr('dc_w_z_sig') unless defined($dc_wzsF);
+$dc_elapsedF = fnr('dc_elapsed');
+$uc_nshF = fnrNoErr('uc_nshear');
+$uc_nshF = fnr('uc_nsamp') unless defined($uc_nshF);
$uc_uzF = fnr('uc_u_z');
$uc_uzsF = fnrNoErr('uc_u_z.sig');
-$uc_uzsF = fnr('uc_u_z_sig')
- unless defined($uc_uzsF);
+$uc_uzsF = fnr('uc_u_z_sig') unless defined($uc_uzsF);
$uc_vzF = fnr('uc_v_z');
$uc_vzsF = fnrNoErr('uc_v_z.sig');
-$uc_vzsF = fnr('uc_v_z_sig')
- unless defined($uc_vzsF);
+$uc_vzsF = fnr('uc_v_z_sig') unless defined($uc_vzsF);
$uc_wzF = fnr('uc_w_z');
$uc_wzsF = fnrNoErr('uc_w_z.sig');
-$uc_wzsF = fnr('uc_w_z_sig')
- unless defined($uc_wzsF);
+$uc_wzsF = fnr('uc_w_z_sig') unless defined($uc_wzsF);
+$uc_elapsedF = fnr('uc_elapsed');
my(@gaps); my($curGap) = 0;
@@ -147,21 +149,24 @@
if ($dc_nsamp > 0) { # downcast shear
my($DLf) = $ants_[0][$dc_nshF] / $dc_nsamp;
my($ULf) = $UL_[$dc_nshF] / $dc_nsamp;
- if ($DLf>0 && $Ulf>0) {
+ if ($DLf>0 && $ULf>0) {
$dc_uz[$r] = $DLf*$ants_[0][$dc_uzF] + $ULf*$UL_[$dc_uzF];
$dc_vz[$r] = $DLf*$ants_[0][$dc_vzF] + $ULf*$UL_[$dc_vzF];
$dc_wz[$r] = $DLf*$ants_[0][$dc_wzF] + $ULf*$UL_[$dc_wzF];
+ $dc_elapsed[$r] = $DLf*$ants_[0][$dc_elapsedF] + $ULf*$UL_[$dc_elapsedF];
} elsif ($DLf > 0) {
$dc_uz[$r] = $ants_[0][$dc_uzF];
$dc_vz[$r] = $ants_[0][$dc_vzF];
$dc_wz[$r] = $ants_[0][$dc_wzF];
+ $dc_elapsed[$r] = $ants_[0][$dc_elapsedF];
} else {
$dc_uz[$r] = $UL_[$dc_uzF];
$dc_vz[$r] = $UL_[$dc_vzF];
$dc_wz[$r] = $UL_[$dc_wzF];
+ $dc_elapsed[$r] = $UL_[$dc_elapsedF];
}
} else {
- $dc_uz[$r] = $dc_vz[$r] = $dc_wz[$r] = nan;
+ $dc_uz[$r] = $dc_vz[$r] = $dc_wz[$r] = $dc_elapsed[$r] = nan;
}
if ($uc_nsamp > 0) { # upcast shear
my($DLf) = $ants_[0][$uc_nshF] / $uc_nsamp;
@@ -170,32 +175,37 @@
$uc_uz[$r] = $DLf*$ants_[0][$uc_uzF] + $ULf*$UL_[$uc_uzF];
$uc_vz[$r] = $DLf*$ants_[0][$uc_vzF] + $ULf*$UL_[$uc_vzF];
$uc_wz[$r] = $DLf*$ants_[0][$uc_wzF] + $ULf*$UL_[$uc_wzF];
+ $uc_elapsed[$r] = $DLf*$ants_[0][$uc_elapsedF] + $ULf*$UL_[$uc_elapsedF];
} elsif ($DLf > 0) {
$uc_uz[$r] = $ants_[0][$uc_uzF];
$uc_vz[$r] = $ants_[0][$uc_vzF];
$uc_wz[$r] = $ants_[0][$uc_wzF];
+ $uc_elapsed[$r] = $ants_[0][$uc_elapsedF];
} else {
$uc_uz[$r] = $UL_[$uc_uzF];
$uc_vz[$r] = $UL_[$uc_vzF];
$uc_wz[$r] = $UL_[$uc_wzF];
+ $uc_elapsed[$r] = $UL_[$uc_elapsedF];
}
} else {
- $uc_uz[$r] = $uc_vz[$r] = $uc_wz[$r] = nan;
+ $uc_uz[$r] = $uc_vz[$r] = $uc_wz[$r] = $uc_elapsed[$r] = nan;
}
} else { # downlooker only
if ($dc_nsamp > 0) { # downcast shear
$dc_uz[$r] = $ants_[0][$dc_uzF];
$dc_vz[$r] = $ants_[0][$dc_vzF];
$dc_wz[$r] = $ants_[0][$dc_wzF];
+ $dc_elapsed[$r] = $ants_[0][$dc_elapsedF];
} else {
- $dc_uz[$r] = $dc_vz[$r] = $dc_wz[$r] = nan;
+ $dc_uz[$r] = $dc_vz[$r] = $dc_wz[$r] = $dc_elapsed[$r] = nan;
}
if ($uc_nsamp > 0) { # upcast shear
$uc_uz[$r] = $ants_[0][$uc_uzF];
$uc_vz[$r] = $ants_[0][$uc_vzF];
$uc_wz[$r] = $ants_[0][$uc_wzF];
+ $uc_elapsed[$r] = $ants_[0][$uc_elapsedF];
} else {
- $uc_uz[$r] = $uc_vz[$r] = $uc_wz[$r] = nan;
+ $uc_uz[$r] = $uc_vz[$r] = $uc_wz[$r] = $uc_elapsed[$r] = nan;
}
}
@@ -206,17 +216,20 @@
$uz[$r] = $dcf*$dc_uz[$r] + $ucf*$uc_uz[$r];
$vz[$r] = $dcf*$dc_vz[$r] + $ucf*$uc_vz[$r];
$wz[$r] = $dcf*$dc_wz[$r] + $ucf*$uc_wz[$r];
+ $elapsed[$r] = $dcf*$dc_elapsed[$r] + $ucf*$uc_elapsed[$r];
} elsif ($dcf > 0) {
$uz[$r] = $dc_uz[$r];
$vz[$r] = $dc_vz[$r];
$wz[$r] = $dc_wz[$r];
+ $elapsed[$r] = $dc_elapsed[$r];
} else {
$uz[$r] = $uc_uz[$r];
$vz[$r] = $uc_vz[$r];
$wz[$r] = $uc_wz[$r];
+ $elapsed[$r] = $uc_elapsed[$r];
}
} else {
- $uz[$r] = $vz[$r] = $wz[$r] = nan;
+ $uz[$r] = $vz[$r] = $wz[$r] = $elapsed[$r] = nan;
}
if (numberp($uz[$r]) && $curGap>0) { # end of gap
@@ -490,15 +503,15 @@
# Output Velocity Profile
#======================================================================
-@antsNewLayout = ('depth','u','v','w','nsamp',
- 'dc_u','dc_v','dc_w','dc_nsamp',
- 'uc_u','uc_v','uc_w','uc_nsamp');
+@antsNewLayout = ('depth','elapsed','u','v','w','nsamp',
+ 'dc_elapsed','dc_u','dc_v','dc_w','dc_nsamp',
+ 'uc_elapsed','uc_u','uc_v','uc_w','uc_nsamp');
for (my($r)=0; $r<@depth; $r++) {
&antsOut($depth[$r]+$DZ/2,
- $u[$r],$v[$r],$w[$r],$nsamp[$r],
- $dc_u[$r],$dc_v[$r],$dc_w[$r],$dc_nsamp[$r],
- $uc_u[$r],$uc_v[$r],$uc_w[$r],$uc_nsamp[$r]);
+ $elapsed[$r],$u[$r],$v[$r],$w[$r],$nsamp[$r],
+ $dc_elapsed[$r],$dc_u[$r],$dc_v[$r],$dc_w[$r],$dc_nsamp[$r],
+ $uc_elapsed[$r],$uc_u[$r],$uc_v[$r],$uc_w[$r],$uc_nsamp[$r]);
}
#======================================================================
@@ -506,16 +519,16 @@
#======================================================================
if (defined($opt_s)) {
- @antsNewLayout = ('depth','u_z','v_z','w_z','u_z.sig','v_z.sig','w_z.sig','nsamp',
- 'dc_u_z','dc_v_z','dc_w_z','dc_u_z.sig','dc_v_z.sig','dc_w_z.sig','dc_nsamp',
- 'uc_u_z','uc_v_z','uc_w_z','uc_u_z.sig','uc_v_z.sig','uc_w_z.sig','uc_nsamp');
+ @antsNewLayout = ('depth','elapsed','u_z','v_z','w_z','u_z.sig','v_z.sig','w_z.sig','nsamp',
+ 'dc_elapsed','dc_u_z','dc_v_z','dc_w_z','dc_u_z.sig','dc_v_z.sig','dc_w_z.sig','dc_nsamp',
+ 'uc_elapsed','uc_u_z','uc_v_z','uc_w_z','uc_u_z.sig','uc_v_z.sig','uc_w_z.sig','uc_nsamp');
&antsOut('EOF');
close(STDOUT);
open(STDOUT,">$opt_s") || croak("$opt_s: $!\n");
for (my($r)=0; $r<@depth; $r++) {
- &antsOut($depth[$r],$uz[$r],$vz[$r],$wz[$r],$uzsig[$r],$vzsig[$r],$wzsig[$r],$nsamp[$r],
- $dc_uz[$r],$dc_vz[$r],$dc_wz[$r],$dc_uzsig[$r],$dc_vzsig[$r],$dc_wzsig[$r],$dc_nsamp[$r],
- $uc_uz[$r],$uc_vz[$r],$uc_wz[$r],$uc_uzsig[$r],$uc_vzsig[$r],$uc_wzsig[$r],$uc_nsamp[$r]);
+ &antsOut($depth[$r],$elapsed[$r],$uz[$r],$vz[$r],$wz[$r],$uzsig[$r],$vzsig[$r],$wzsig[$r],$nsamp[$r],
+ $dc_elapsed[$r],$dc_uz[$r],$dc_vz[$r],$dc_wz[$r],$dc_uzsig[$r],$dc_vzsig[$r],$dc_wzsig[$r],$dc_nsamp[$r],
+ $uc_elapsed[$r],$uc_uz[$r],$uc_vz[$r],$uc_wz[$r],$uc_uzsig[$r],$uc_vzsig[$r],$uc_wzsig[$r],$uc_nsamp[$r]);
}
}
--- a/LADCPproc
+++ b/LADCPproc
@@ -2,9 +2,9 @@
#======================================================================
# L A D C P P R O C
# doc: Thu Sep 16 20:36:10 2010
-# dlm: Sun Feb 5 12:28:54 2012
+# dlm: Sun Feb 19 22:37:57 2012
# (c) 2010 A.M. Thurnherr & E. Firing
-# uE-Info: 61 44 NIL 0 0 72 2 2 4 NIL ofnI
+# uE-Info: 65 88 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================
$antsSummary = 'process LADCP data to get shear, time series';
@@ -59,6 +59,10 @@
# - added $CTD{first_elapsed}
# Jul 27, 2011: - replaced ndata by nsamp
# Feb 5, 2012: - added profile max depth consistency check
+# Feb 19, 2912: - added elapsed time to shear profile output
+# - replaced "nshear" output field by "nsamp"
+# - BUG: bottom of profiles was incorrect when dc max depth > uc max depth
+# - BUG: profile depth consistency check did not work for partial-depth yoyo casts
($ANTS) = (`which list` =~ m{^(.*)/[^/]*$});
($PERL_TOOLS) = (`which mkProfile` =~ m{^(.*)/[^/]*$});
@@ -205,18 +209,23 @@
print(STDERR "\n\t\t$pSpikes pressure spikes removed")
if ($pSpikes>0 && $opt_d);
-#------------------------------------
-# calculate w and find deepest record
-#------------------------------------
+#--------------------------------------------------
+# calculate w and find deepest & shallowest records
+#--------------------------------------------------
$CTD{maxpress} = -9e99;
+$CTD{minpress} = 9e99;
for (my($r)=1; $r<@{$CTD{press}}-1; $r++) {
$CTD{w}[$r] = 0.99*($CTD{press}[$r+1] - $CTD{press}[$r-1]) / (2*$CTD{sampint});
if ($CTD{press}[$r] > $CTD{maxpress}) {
$CTD{maxpress} = $CTD{press}[$r];
$CTD{atbottom} = $r;
}
+ if ($CTD{press}[$r] < $CTD{minpress}) {
+ $CTD{minpress} = $CTD{press}[$r];
+ $CTD{attop} = $r;
+ }
}
-printf(STDERR "\n\t\tmax pressure [%ddbar] at scan#%d",$CTD{maxpress},$CTD{atbottom})
+printf(STDERR "\n\t\tmin/max pressure [%d/%ddbar] at scans#%d/%d",$CTD{minpress},$CTD{maxpress},$CTD{attop},$CTD{atbottom})
if $opt_d;
#----------------------------------------------------------------------
@@ -306,9 +315,9 @@
print(STDERR "\n");
-croak(sprintf("$0: LADCP bottom depth (%dm) inconsistent with max CTD pressure (%ddbar)\n",
- $LADCP{ENSEMBLE}[$LADCP_bottom]->{DEPTH},$CTD{maxpress}))
- if (abs($LADCP{ENSEMBLE}[$LADCP_bottom]->{DEPTH}-$CTD{maxpress})/$CTD{maxpress} > 0.05);
+croak(sprintf("$0: LADCP profile depth range (%dm) inconsistent with max CTD pressure range (%ddbar)\n",
+ $LADCP{ENSEMBLE}[$LADCP_bottom]->{DEPTH},$CTD{maxpress}-$CTD{minpress}))
+ if (abs($LADCP{ENSEMBLE}[$LADCP_bottom]->{DEPTH}-($CTD{maxpress}-$CTD{minpress}))/($CTD{maxpress}-$CTD{minpress}) > 0.1);
#----------------------------------------------------------------------
# Step 5: Add CTD to LADCP Data & correct velocities for sound speed
@@ -501,6 +510,7 @@
@dc_ush_mu = @ush_mu; @dc_ush_sig = @ush_sig;
@dc_vsh_mu = @vsh_mu; @dc_vsh_sig = @vsh_sig;
@dc_wsh_mu = @wsh_mu; @dc_wsh_sig = @wsh_sig;
+@dc_esh_mu = @esh_mu;
print(STDERR "\n\tupcast...") if ($opt_d);
edit_velocity($LADCP_end,$LADCP_bottom); # upcast
@@ -511,28 +521,31 @@
@uc_ush_mu = @ush_mu; @uc_ush_sig = @ush_sig;
@uc_vsh_mu = @vsh_mu; @uc_vsh_sig = @vsh_sig;
@uc_wsh_mu = @wsh_mu; @uc_wsh_sig = @wsh_sig;
+@uc_esh_mu = @esh_mu;
print(STDERR "\n\tcombined...") if ($opt_d);
-for (my($gi)=0; $gi<@dc_ush_mu; $gi++) {
- if ($dc_sh_n[$gi]>0 && $uc_sh_n[$gi]>0) {
+my($nsh) = (@dc_ush_mu > @uc_ush_mu) ? scalar(@dc_ush_mu) : scalar(@uc_ush_mu);
+for (my($gi)=0; $gi<$nsh; $gi++) {
+ if (($gi<@dc_ush_mu&&$dc_sh_n[$gi]>0) && ($gi<@uc_ush_mu&&$uc_sh_n[$gi]>0)) {
$sh_n[$gi] = $dc_sh_n[$gi] + $uc_sh_n[$gi];
$ush_mu[$gi] = ($dc_sh_n[$gi]*$dc_ush_mu[$gi] + $uc_sh_n[$gi]*$uc_ush_mu[$gi]) / $sh_n[$gi];
$vsh_mu[$gi] = ($dc_sh_n[$gi]*$dc_vsh_mu[$gi] + $uc_sh_n[$gi]*$uc_vsh_mu[$gi]) / $sh_n[$gi];
$wsh_mu[$gi] = ($dc_sh_n[$gi]*$dc_wsh_mu[$gi] + $uc_sh_n[$gi]*$uc_wsh_mu[$gi]) / $sh_n[$gi];
+ $esh_mu[$gi] = ($dc_sh_n[$gi]*$dc_esh_mu[$gi] + $uc_sh_n[$gi]*$uc_esh_mu[$gi]) / $sh_n[$gi];
$ush_sig[$gi] = sqrt(($dc_sh_n[$gi]*$dc_ush_sig[$gi]**2 + $uc_sh_n[$gi]*$uc_ush_sig[$gi]**2) / $sh_n[$gi]);
$vsh_sig[$gi] = sqrt(($dc_sh_n[$gi]*$dc_vsh_sig[$gi]**2 + $uc_sh_n[$gi]*$uc_vsh_sig[$gi]**2) / $sh_n[$gi]);
$wsh_sig[$gi] = sqrt(($dc_sh_n[$gi]*$dc_wsh_sig[$gi]**2 + $uc_sh_n[$gi]*$uc_wsh_sig[$gi]**2) / $sh_n[$gi]);
- } elsif ($dc_sh_n[$gi] > 0) {
+ } elsif ($gi < @dc_ush_mu && $dc_sh_n[$gi] > 0) {
$sh_n[$gi] = $dc_sh_n[$gi];
- $ush_mu[$gi] = $dc_ush_mu[$gi]; $vsh_mu[$gi] = $dc_vsh_mu[$gi]; $wsh_mu[$gi] = $dc_wsh_mu[$gi];
- $ush_sig[$gi] = $dc_ush_sig[$gi]; $vsh_sig[$gi] = $dc_vsh_sig[$gi]; $wsh_sig[$gi] = $dc_wsh_sig[$gi];
- } elsif ($uc_sh_n[$gi] > 0) {
+ $ush_mu[$gi] = $dc_ush_mu[$gi]; $vsh_mu[$gi] = $dc_vsh_mu[$gi]; $wsh_mu[$gi] = $dc_wsh_mu[$gi]; $esh_mu[$gi] = $dc_esh_mu[$gi];
+ $ush_sig[$gi] = $dc_ush_sig[$gi]; $vsh_sig[$gi] = $dc_vsh_sig[$gi]; $wsh_sig[$gi] = $dc_wsh_sig[$gi];
+ } elsif ($gi < @uc_ush_mu && $uc_sh_n[$gi] > 0) {
$sh_n[$gi] = $uc_sh_n[$gi];
- $ush_mu[$gi] = $uc_ush_mu[$gi]; $vsh_mu[$gi] = $uc_vsh_mu[$gi]; $wsh_mu[$gi] = $uc_wsh_mu[$gi];
- $ush_sig[$gi] = $uc_ush_sig[$gi]; $vsh_sig[$gi] = $uc_vsh_sig[$gi]; $wsh_sig[$gi] = $uc_wsh_sig[$gi];
+ $ush_mu[$gi] = $uc_ush_mu[$gi]; $vsh_mu[$gi] = $uc_vsh_mu[$gi]; $wsh_mu[$gi] = $uc_wsh_mu[$gi]; $esh_mu[$gi] = $uc_esh_mu[$gi];
+ $ush_sig[$gi] = $uc_ush_sig[$gi]; $vsh_sig[$gi] = $uc_vsh_sig[$gi]; $wsh_sig[$gi] = $uc_wsh_sig[$gi];
} else {
$sh_n[$gi] = 0;
- $ush_mu[$gi] = $vsh_mu[$gi] = $wsh_mu[$gi] = nan;
+ $ush_mu[$gi] = $vsh_mu[$gi] = $wsh_mu[$gi] = $esh_mu[$gi] = nan;
$ush_sig[$gi] = $vsh_sig[$gi] = $wsh_sig[$gi] = nan;
}
}
@@ -557,9 +570,9 @@
print(STDERR "Writing shear profiles...");
- @antsNewLayout = ('depth','dc_nshear','dc_u_z','dc_u_z.sig','dc_v_z','dc_v_z.sig','dc_w_z','dc_w_z.sig',
- 'uc_nshear','uc_u_z','uc_u_z.sig','uc_v_z','uc_v_z.sig','uc_w_z','uc_w_z.sig',
- 'nshear','u_z','u_z.sig','v_z','v_z.sig','w_z','w_z.sig','Sv','Sv.n');
+ @antsNewLayout = ('depth','dc_elapsed','dc_nsamp','dc_u_z','dc_u_z.sig','dc_v_z','dc_v_z.sig','dc_w_z','dc_w_z.sig',
+ 'uc_elapsed','uc_nsamp','uc_u_z','uc_u_z.sig','uc_v_z','uc_v_z.sig','uc_w_z','uc_w_z.sig',
+ 'elapsed','nsamp','u_z','u_z.sig','v_z','v_z.sig','w_z','w_z.sig','Sv','Sv.n');
&antsOut('EOF');
close(STDOUT);
@@ -567,17 +580,19 @@
$antsCurParams = $fullParams;
- for (my($gi)=0; $gi<@ush_mu; $gi++) {
+ for (my($gi)=0; $gi<$nsh; $gi++) {
&antsOut(depthOfGI($gi), # depth in center of bin
- numberp($dc_sh_n[$gi])?$dc_sh_n[$gi]:0, # downcast
+ $dc_esh_mu[$gi], # downcast
+ numberp($dc_sh_n[$gi])?$dc_sh_n[$gi]:0,
$dc_ush_mu[$gi],$dc_ush_sig[$gi],
$dc_vsh_mu[$gi],$dc_vsh_sig[$gi],
$dc_wsh_mu[$gi],$dc_wsh_sig[$gi],
- numberp($uc_sh_n[$gi])?$uc_sh_n[$gi]:0, # upcast
+ $uc_esh_mu[$gi], # upcast
+ numberp($uc_sh_n[$gi])?$uc_sh_n[$gi]:0,
$uc_ush_mu[$gi],$uc_ush_sig[$gi],
$uc_vsh_mu[$gi],$uc_vsh_sig[$gi],
$uc_wsh_mu[$gi],$uc_wsh_sig[$gi],
- $sh_n[$gi], # combined
+ $esh_mu[$gi],$sh_n[$gi], # combined
$ush_mu[$gi],$ush_sig[$gi],
$vsh_mu[$gi],$vsh_sig[$gi],
$wsh_mu[$gi],$wsh_sig[$gi],
--- a/LADCPproc.UHcode
+++ b/LADCPproc.UHcode
@@ -1,9 +1,9 @@
#======================================================================
# L A D C P P R O C . U H C O D E
# doc: Fri Sep 17 20:27:53 2010
-# dlm: Tue Jul 12 21:59:07 2011
+# dlm: Sun Feb 19 21:05:16 2012
# (c) 2010 A.M. Thurnherr & E. Firing
-# uE-Info: 392 0 NIL 0 0 72 2 2 4 NIL ofnI
+# uE-Info: 413 0 NIL 0 0 72 2 2 4 NIL ofnI
#======================================================================
# PERLified functions from Eric's [merge.c]; with mods
@@ -34,6 +34,7 @@
# Dec 10, 2010: - modified assertion to allow processing of UL data
# Jul 10, 2011: - added outTDseries() call
# Jul 12, 2011: - replaced -p by $PPI_editing_enabled flag
+# Feb 19, 2012: - added elapsed time to binned shear output
#======================================================================
# VELOCITY EDITING
@@ -273,10 +274,16 @@
#======================================================================
# CALCULATE VELOCITY SHEAR
-# - output in @ush_mu,@vsh_mu,@wsh_mu,@ush_sig,@vsh_sig,@wsh_sig
+# - final output in @ush_mu,@vsh_mu,@wsh_mu,@ush_sig,@vsh_sig,@wsh_sig
+# NEW (ant): elapsed time output in @esh_mu
# - @sh_i0, @sh_i1, @dsh, @ush, @vsh, @wsh are defined "local" in calc_shear
#======================================================================
+#----------------------------------------------------------------------
+# uv_to_shear(ens)
+# - sets @sh_i0, @sh_i1, @dsh, @ush, @vsh, @wsh for a given ensemble
+#----------------------------------------------------------------------
+
sub uv_to_shear($)
{
my($ens) = @_;
@@ -391,11 +398,11 @@
outTDseries($De==1) if ($edit_shear); # output depth-time time series
- @ush_mu = @vsh_mu = @wsh_mu = ();
+ @ush_mu = @vsh_mu = @wsh_mu = @esh_mu = ();
@ush_sig = @vsh_sig = @wsh_sig = ();
for (my($gi)=0; $gi<@ush_vals; $gi++) { # calc grid means & stddev
- my($sum_ush,$sum_vsh,$sum_wsh);
+ my($sum_ush,$sum_vsh,$sum_wsh,$sum_esh);
$sh_n[$gi] = @{$ush_vals[$gi]};
@@ -403,10 +410,12 @@
$sum_ush += $ush_vals[$gi][$vi];
$sum_vsh += $vsh_vals[$gi][$vi];
$sum_wsh += $wsh_vals[$gi][$vi];
+ $sum_esh += $LADCP{ENSEMBLE}[$ens_vals[$gi][$vi]]->{ELAPSED_TIME}+$CTD{first_elapsed}-$opt_l;
}
$ush_mu[$gi] = $sh_n[$gi] ? $sum_ush/$sh_n[$gi] : nan;
$vsh_mu[$gi] = $sh_n[$gi] ? $sum_vsh/$sh_n[$gi] : nan;
$wsh_mu[$gi] = $sh_n[$gi] ? $sum_wsh/$sh_n[$gi] : nan;
+ $esh_mu[$gi] = $sh_n[$gi] ? $sum_esh/$sh_n[$gi] : nan;
}
for (my($gi)=0; $gi<@ush_vals; $gi++) { # calc & grid stddevs