RDI_Utils.pl
changeset 8 7ad053ea1742
parent 6 603221e51c6f
child 10 c835cd613f3e
--- a/RDI_Utils.pl
+++ b/RDI_Utils.pl
@@ -1,9 +1,9 @@
 #======================================================================
 #                    R D I _ U T I L S . P L 
 #                    doc: Wed Feb 12 10:21:32 2003
-#                    dlm: Thu May 12 11:02:26 2011
+#                    dlm: Wed Sep 21 18:48:23 2011
 #                    (c) 2003 A.M. Thurnherr
-#                    uE-Info: 304 3 NIL 0 0 72 2 2 4 NIL ofnI
+#                    uE-Info: 378 0 NIL 0 0 72 2 2 4 NIL ofnI
 #======================================================================
 
 # miscellaneous RDI-specific utilities
@@ -38,6 +38,7 @@
 #	Dec 16, 2010: - BUG: gaps at end caused mk_prof to throw away profile
 #	May 12, 2011: - added code to skip ensembles with built-in-test errors in mk_prof()
 #				  - immediately disabled this code becasue it does appear to make matters worse
+#	Sep 21, 2011: - added calculation of RMS heave acceleration
 
 use strict;
 
@@ -295,6 +296,7 @@
 {
 	my($dta,$check,$filter,$lr_b0,$lr_b1,$min_corr,$max_e,$max_gap) = @_;
 	my($firstgood,$lastgood,$atbottom,$w_gap_time,$zErr,$maxz);
+	my($rms_heave_accel_ssq,$rms_heave_accel_nsamp);
 	
 	for (my($z)=0,my($e)=0; $e<=$#{$dta->{ENSEMBLE}}; $e++) {
 		checkEnsemble($dta,$e) if ($check);
@@ -346,16 +348,19 @@
 			$z = $zErr = $maxz = 0;
 			$dta->{ENSEMBLE}[$e]->{DEPTH} = $dta->{ENSEMBLE}[$e]->{DEPTH_ERR} = 0;
 			$w_gap_time = 0;
+			$rms_heave_accel_ssq = $rms_heave_accel_nsamp = 0;
 			next;
 		}
 
 		#-----------------------------------
 		# The current ensemble has a valid w
 		#-----------------------------------
-	
-		if ($dt < 5) {
-			$z += $dta->{ENSEMBLE}[$lastgood]->{W} * $dt;			# integrate
+
+		if ($dt < 5) {												# no or short gap
+			$z += $dta->{ENSEMBLE}[$lastgood]->{W} * $dt;			# integrate w to get depth
 			$zErr += ($dta->{ENSEMBLE}[$lastgood]->{W_ERR} * $dt)**2;
+			$rms_heave_accel_ssq += (($dta->{ENSEMBLE}[$e]->{W}-$dta->{ENSEMBLE}[$lastgood]->{W})/$dt)**2;
+			$rms_heave_accel_nsamp++;
 		} elsif ($dt > 15) {
 	       	printf(STDERR "WARNING: long-ish w gap (dt=%.1fs)\n",$dt);
 		}
@@ -370,7 +375,7 @@
 	
 	filterEnsembleStats() if defined($filter);
 
-	return ($firstgood,$lastgood,$atbottom,$w_gap_time,$zErr,$maxz);
+	return ($firstgood,$lastgood,$atbottom,$w_gap_time,$zErr,$maxz,sqrt($rms_heave_accel_ssq/$rms_heave_accel_nsamp));
 }
 
 #----------------------------------------------------------------------