diff --git a/mkProfile b/mkProfile --- a/mkProfile +++ b/mkProfile @@ -2,9 +2,9 @@ #====================================================================== # M K P R O F I L E # doc: Sun Jan 19 18:55:26 2003 -# dlm: Thu Feb 13 15:45:20 2014 +# dlm: Sat May 24 22:50:02 2014 # (c) 2003 A.M. Thurnherr -# uE-Info: 283 0 NIL 0 0 72 2 2 4 NIL ofnI +# uE-Info: 797 76 NIL 0 0 72 10 2 4 NIL ofnI #====================================================================== # Make an LADCP Profile by Integrating W (similar to Firing's scan*). @@ -85,6 +85,9 @@ # - finally removed -d/-g # Nov 25, 2013: - expunged checkEnsemble # Feb 13, 2014: - added support set_range_lim() +# Mar 4, 2014: - added support to allow missing PITCH/ROLL/HEADING values +# May 24, 2014: - finally added (gimbal-)pitch & roll to default output +# - renamed heading to hdg and pitchroll to tilt # NOTES: # - the battery values are based on transmission voltages (different @@ -564,12 +567,19 @@ # Step 6: Pitch, Roll, Rotation #====================================================================== +# in case of PITCH/ROLL/HEADING data gaps (IMP data), the calculations +# are not entirely correct, as +# i) the rotation implied by the pre-/post-gap headings is not counted +# ii) the gappy ensembles are counted for calculating the rms vals + my($prrms,$dnprrms,$upprrms) = (0,0,0); my($rotrms,$prerot,$dnrot,$uprot,$postrot) = (0,0,0,0,0); sub rot($) { my($e) = @_; + return 0 + unless defined($dta{ENSEMBLE}[$e]->{HEADING}) && defined($dta{ENSEMBLE}[$e-1]->{HEADING}); my($rot) = $dta{ENSEMBLE}[$e]->{HEADING} - $dta{ENSEMBLE}[$e-1]->{HEADING}; $rot -= 360 if ($rot > 180); @@ -582,10 +592,11 @@ } for (; $e<= $atbottom; $e++) { # downcast - $dta{ENSEMBLE}[$e]->{PITCHROLL} = + $dta{ENSEMBLE}[$e]->{TILT} = &angle_from_vertical($dta{ENSEMBLE}[$e]->{PITCH}, $dta{ENSEMBLE}[$e]->{ROLL}); - $prrms += $dta{ENSEMBLE}[$e]->{PITCHROLL}**2; + $prrms += $dta{ENSEMBLE}[$e]->{TILT}**2 + if numberp($dta{ENSEMBLE}[$e]->{TILT}); $dta{ENSEMBLE}[$e]->{ROTATION} = rot($e); $dnrot += $dta{ENSEMBLE}[$e]->{ROTATION}; @@ -594,10 +605,11 @@ $dnprrms = $prrms; for (; $e<=$lastgood; $e++) { # upcast - $dta{ENSEMBLE}[$e]->{PITCHROLL} = + $dta{ENSEMBLE}[$e]->{TILT} = &angle_from_vertical($dta{ENSEMBLE}[$e]->{PITCH}, $dta{ENSEMBLE}[$e]->{ROLL}); - $prrms += $dta{ENSEMBLE}[$e]->{PITCHROLL}**2; + $prrms += $dta{ENSEMBLE}[$e]->{TILT}**2 + if numberp($dta{ENSEMBLE}[$e]->{TILT}); $dta{ENSEMBLE}[$e]->{ROTATION} = rot($e); $uprot += $dta{ENSEMBLE}[$e]->{ROTATION}; @@ -689,7 +701,7 @@ if defined($opt_M); print("#ANTS#FIELDS# {ens} {time} {elapsed} {secno} {downcast} " . "{w} {w_err} {err_vel} {depth} {depth_err} {seabed} " . - "{pitchroll} {heading} {rotation} " . + "{pitch} {roll} {tilt} {hdg} {rotation} " . "$uFields $addFields\n"); printf("#ANTS#PARAMS# date{$dta{ENSEMBLE}[$firstgood]->{DATE}} " . @@ -704,18 +716,18 @@ "0.8_valid_range{%.1f} " . "max_depth{%.1f} " . "depth_error{%.1f} " . - "min_range{%d} " . - "n_ensembles{%d} " . - "w_gap_time{%d} " . + "min_range{%d} " . + "n_ensembles{%d} " . + "w_gap_time{%d} " . "stderr_w{%.4f} " . - "rms_pitchroll{%.1f} " . - "downcast_rms_pitchroll{%.1f} " . - "upcast_rms_pitchroll{%.1f} " . + "rms_tilt{%.1f} " . + "downcast_rms_tilt{%.1f} " . + "upcast_rms_tilt{%.1f} " . "rms_rotation{%.2f} " . - "deployment_rotations{%d} " . - "downcast_rotations{%d} " . - "upcast_rotations{%d} " . - "recovery_rotations{%d} " . + "deployment_rotations{%d} " . + "downcast_rotations{%d} " . + "upcast_rotations{%d} " . + "recovery_rotations{%d} " . "rms_heave_acceleration{%.2f} " . "bin1_dist{%.1f} " . "bin_length{%.1f} " . @@ -782,7 +794,9 @@ p($dta{ENSEMBLE}[$e]->{DEPTH}); p($dta{ENSEMBLE}[$e]->{DEPTH_ERR}); p($dta{ENSEMBLE}[$e]->{seabed}); - p($dta{ENSEMBLE}[$e]->{PITCHROLL}); + p(&gimbal_pitch($dta{ENSEMBLE}[$e]->{PITCH},$dta{ENSEMBLE}[$e]->{ROLL})); + p($dta{ENSEMBLE}[$e]->{ROLL}); + p($dta{ENSEMBLE}[$e]->{TILT}); p($dta{ENSEMBLE}[$e]->{HEADING}); p($dta{ENSEMBLE}[$e]->{ROTATION}); if (defined($opt_M)) {