33
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
1 |
#======================================================================
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
2 |
# L I B I M P . P L
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
3 |
# doc: Tue Nov 26 21:59:40 2013
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
4 |
# dlm: Wed Nov 22 11:17:51 2017
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
5 |
# (c) 2017 A.M. Thurnherr
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
6 |
# uE-Info: 437 47 NIL 0 0 70 2 2 4 NIL ofnI
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
7 |
#======================================================================
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
8 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
9 |
# HISTORY:
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
10 |
# Nov 26, 2013: - created
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
11 |
# Dec 1, 2013: - removed HDG_ROT
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
12 |
# - added support for IMP data gaps
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
13 |
# Mar 4, 2014: - added support for DATA_SOURCE_ID
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
14 |
# May 22, 2014: - use +/-2deg to assess quality of heading offset
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
15 |
# May 23, 2014: - added $dhist_binsize, $dhist_min_pirom
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
16 |
# Jul 27, 2016: - updated variable names for consistency
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
17 |
# Jul 28, 2016: - major re-write if merging routines
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
18 |
# Jul 29, 2016: - cosmetics
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
19 |
# - increased heading-offset resolution from 2 to 1 degrees
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
20 |
# - BUG: inconsistent heading definition used (from old IMP with
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
21 |
# confused coordinates)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
22 |
# - modified initial timelag guess (there was a bug and it is
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
23 |
# likely more robust based on end time rather than start time)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
24 |
# Aug 5, 2016: - BUG: weird statement accessing LADCP_begin-1
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
25 |
# - BUG: DSID of first ensemble was not left original
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
26 |
# Aug 22, 2016: - major changes to timelagging
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
27 |
# Aug 23, 2016: - changed semantics for removing ensembles with bad attitudes:
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
28 |
# instead of setting attitude to undef (or large pitch/roll),
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
29 |
# clearEns() is used
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
30 |
# Aug 24, 2016: - overhauled time-lagging
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
31 |
# Aug 25, 2016: - significant code cleanup
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
32 |
# Aug 26, 2016: - added _hdg_err.ps output plot
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
33 |
# Oct 13, 2016: - made hdg nan for invalid records (BUG with current versions of IMP+LADCP, IMPatchPD0)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
34 |
# Nov 22, 2016: - added heading-offset plot
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
35 |
# - added sensor info to plots
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
36 |
# Nov 29, 2016: - added stats to compass error plot
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
37 |
# Dec 29, 2016: - improved histogram plot
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
38 |
# Nov 16, 2017: - adapted rot_vecs() to KVM coordinates
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
39 |
# - made sensor information optional in
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
40 |
# Nov 20, 2017: - major code cleanup
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
41 |
# Nov 22, 2017: - replaced "IMP" output in routines used by KVH by "IMU"
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
42 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
43 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
44 |
# gRef() library
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
45 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
46 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
47 |
sub pl_mag_calib_begin($$$) # initialize mag_calib plot
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
48 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
49 |
my($pfn,$plotsize,$axlim) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
50 |
my($xmin,$xmax) = (-$axlim,$axlim);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
51 |
my($ymin,$ymax) = (-$axlim,$axlim);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
52 |
GMT_begin($pfn,"-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
53 |
GMT_psxy('-Sc0.05');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
54 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
55 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
56 |
sub pl_mag_calib_plot($$$) # plot data point
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
57 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
58 |
my($valid,$magX,$magY) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
59 |
if ($valid) { print(GMT "> -Wred -Gred\n$magX $magY\n"); }
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
60 |
else { print(GMT "> -Wgreen -Ggreen\n$magX $magY\n"); }
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
61 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
62 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
63 |
sub pl_mag_calib_end($$) # finish mag_calib plot
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
64 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
65 |
my($axlim,$HF_mag,$sensor_info) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
66 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
67 |
GMT_psxy('-Sc0.1 -Gblue'); # calibration circle
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
68 |
for (my($a)=0; $a<2*$pi; $a+=0.075) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
69 |
printf(GMT "%f %f\n",$HF_mag*sin($a),$HF_mag*cos($a));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
70 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
71 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
72 |
if ($axlim <= 0.1) { # axes labels
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
73 |
GMT_psbasemap('-Bg1a.04f.001:"X Magnetic Field [Gauss]":/g1a0.02f0.001:"Y Magnetic Field [Gauss]":WeSn');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
74 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
75 |
GMT_psbasemap('-Bg1a.1f.01:"X Magnetic Field [Gauss]":/g1a0.1f0.01:"Y Magnetic Field [Gauss]":WeSn');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
76 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
77 |
GMT_unitcoords(); # sensor info
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
78 |
if ($sensor_info ne '') {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
79 |
GMT_pstext('-F+f12,Helvetica,blue+jTR -N');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
80 |
printf(GMT "0.98 0.98 $sensor_info\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
81 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
82 |
GMT_pstext('-F+f14,Helvetica,blue+jTL -N');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
83 |
printf(GMT "0.01 1.06 $P{profile_id}\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
84 |
GMT_end();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
85 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
86 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
87 |
sub rot_vecs($) # rotate & output IMU vector data
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
88 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
89 |
my($neg_piro) = @_; # negate KVH pitch/roll data
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
90 |
while (&antsIn()) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
91 |
my($cpiro) = -1; # current pitch/roll accelerometer
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
92 |
my(@R); # rotation matrix
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
93 |
for (my($i)=0; $i<@vecs; $i++) { # rotate vector data
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
94 |
if ($piro[$i][0] != $cpiro) { # next sensor chip
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
95 |
$cpiro = $piro[$i][0];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
96 |
my($pitch) = atan2($ants_[0][$vecs[$cpiro][0]], # eqn 25 from Freescale AN3461
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
97 |
sqrt($ants_[0][$vecs[$cpiro][1]]**2+$ants_[0][$vecs[$cpiro][2]]**2));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
98 |
my($roll) = atan2($ants_[0][$vecs[$cpiro][1]], # eqn 26
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
99 |
$ants_[0][$vecs[$cpiro][2]]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
100 |
if ($neg_piro) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
101 |
$pitch *= -1;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
102 |
$roll *= -1;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
103 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
104 |
$ants_[0][$piro[$i][1]] = deg($pitch); # add pitch/roll to data
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
105 |
$ants_[0][$piro[$i][2]] = deg($roll);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
106 |
my($sp) = sin($pitch); my($cp) = cos($pitch); # define rotation matrix
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
107 |
my($sr) = sin($roll); my($cr) = cos($roll);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
108 |
@R = ([ $cp, 0, -$sp ],
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
109 |
[-$sp*$sr, $cr, -$cp*$sr],
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
110 |
[ $sp*$cr, $sr, $cp*$cr]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
111 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
112 |
my($newX) = ($ants_[0][$vecs[$i][0]]-$bias[$i][0]) * $R[0][0] +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
113 |
($ants_[0][$vecs[$i][1]]-$bias[$i][1]) * $R[0][1] +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
114 |
($ants_[0][$vecs[$i][2]]-$bias[$i][2]) * $R[0][2];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
115 |
my($newY) = ($ants_[0][$vecs[$i][0]]-$bias[$i][0]) * $R[1][0] +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
116 |
($ants_[0][$vecs[$i][1]]-$bias[$i][1]) * $R[1][1] +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
117 |
($ants_[0][$vecs[$i][2]]-$bias[$i][2]) * $R[1][2];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
118 |
my($newZ) = ($ants_[0][$vecs[$i][0]]-$bias[$i][0]) * $R[2][0] +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
119 |
($ants_[0][$vecs[$i][1]]-$bias[$i][1]) * $R[2][1] +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
120 |
($ants_[0][$vecs[$i][2]]-$bias[$i][2]) * $R[2][2];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
121 |
$ants_[0][$vecs[$i][0]] = $newX;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
122 |
$ants_[0][$vecs[$i][1]] = $newY;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
123 |
$ants_[0][$vecs[$i][2]] = $newZ;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
124 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
125 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
126 |
my($magX) = $ants_[0][$magXF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
127 |
my($magY) = $ants_[0][$magYF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
128 |
my($magZ) = $ants_[0][$magZF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
129 |
my($HF) = sqrt($magX**2+$magY**2);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
130 |
my($valid)= ($HF >= $minfac*$HF_mag) && ($HF <= $maxfac*$HF_mag);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
131 |
my($hdg) = $valid ? mag_heading($magX,$magY) : nan;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
132 |
&antsOut($ants_[0][$elapsedF],$ants_[0][$tempF],
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
133 |
RDI_pitch($ants_[0][$pitchF],$ants_[0][$rollF]),$ants_[0][$rollF],
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
134 |
$hdg,$ants_[0][$accXF],$ants_[0][$accYF],$ants_[0][$accZF],
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
135 |
$magX,$magY,$magZ,vel_u($HF,$hdg),vel_v($HF,$hdg),$valid);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
136 |
pl_mag_calib_plot($valid,$magX,$magY)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
137 |
if defined($P{profile_id});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
138 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
139 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
140 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
141 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
142 |
# LADCP merging library
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
143 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
144 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
145 |
#-----------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
146 |
# Instrument Offset Estimation
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
147 |
#
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
148 |
# 1: resolution of histogram in deg
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
149 |
# 1 deg okay for good sensors
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
150 |
# 2 deg sometimes required (2016 P18 003 2nd sensor)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
151 |
# 2: min tilt anom to consider for offset estimation
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
152 |
# 0.3 deg works even for calm casts
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
153 |
# increased values improve histogram
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
154 |
# 2.0 deg is too high for quiet casts (2016 P18 003)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
155 |
# 3: minimum fraction of hist mode required
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
156 |
# 10% default
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
157 |
# decreasing histogram resolution is better than
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
158 |
# decreasing this value, I think
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
159 |
#-----------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
160 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
161 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
162 |
# trim_out_of_water()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
163 |
# - attempt to remove out-of-water records from time-series of
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
164 |
# horizontal acceleration
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
165 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
166 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
167 |
sub trim_out_of_water($)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
168 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
169 |
my($verbose) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
170 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
171 |
#--------------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
172 |
# first-difference horizontal acceleration at full resolution to pass-filter
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
173 |
# dangling motion
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
174 |
#--------------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
175 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
176 |
$IMP{Ah}[0] = sqrt($ants_[0][$accXF]**2+$ants_[0][$accYF]**2);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
177 |
$IMP{dAhdt}[0] = nan;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
178 |
for (my($r)=1; $r<@ants_; $r++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
179 |
$IMP{Ah}[$r] = sqrt($ants_[$r][$accXF]**2+$ants_[$r][$accYF]**2);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
180 |
$IMP{dAhdt}[$r] = ($IMP{Ah}[$r]-$IMP{Ah}[$r-1]) / ($ants_[$r][$elapsedF]-$ants_[$r-1][$elapsedF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
181 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
182 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
183 |
#--------------------------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
184 |
# create 10-s binned time series to calculate rms values of this quantity (dAhdt), and
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
185 |
# scale this with cos(sqrt($$pitch**2+$$roll**2)) to dampen underwater peaks (when the
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
186 |
# instrument has a large tilt because it is being dragged)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
187 |
# NB: dAhdt, pitch and roll are only set up to last full bin (not so, sum and n)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
188 |
#--------------------------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
189 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
190 |
my(@dAhdt,@pitch,@roll,@dAhdt_rms);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
191 |
my(@sum) = my(@sume) = my(@sump) = my(@sumr) = my(@n) = (0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
192 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
193 |
my($bin_start) = $ants_[0][$elapsedF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
194 |
for (my($r)=1; $r<@ants_; $r++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
195 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
196 |
if ($ants_[$r][$elapsedF] - $bin_start <= 10) { # within 10-s bin
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
197 |
$sum[$#sum] += $IMP{dAhdt}[$r]; # sums
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
198 |
$sume[$#sume] += $ants_[$r][$elapsedF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
199 |
$sump[$#sump] += $ants_[$r][$pitchF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
200 |
$sumr[$#sumr] += $ants_[$r][$rollF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
201 |
$n[$#n]++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
202 |
next;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
203 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
204 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
205 |
$dAhdt[$#sum] = $sum[$#sum] / $n[$#n]; # bin done => means
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
206 |
$elapsed[$#sum] = $sume[$#sume] / $n[$#n];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
207 |
$pitch[$#sum] = $sump[$#sump] / $n[$#n];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
208 |
$roll[$#sum] = $sumr[$#sumr] / $n[$#n];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
209 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
210 |
my($sumsq) = 0; # sum of squares for rms(accel)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
211 |
for (my($rr)=$r-$n[$#n]; $rr<$r; $rr++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
212 |
$sumsq += ($IMP{dAhdt}[$rr] - $dAhdt[$#sum])**2;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
213 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
214 |
$dAhdt_rms[$#sum] = sqrt($sumsq / $n[$#n]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
215 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
216 |
push(@sum,$IMP{dAhdt}[$r]); # begin next bin
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
217 |
push(@sume,$ants_[$r][$elapsedF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
218 |
push(@sump,$ants_[$r][$pitchF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
219 |
push(@sumr,$ants_[$r][$rollF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
220 |
push(@n,1);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
221 |
$bin_start = $ants_[$r][$elapsedF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
222 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
223 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
224 |
#--------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
225 |
# trim beginning/end when IMP is out of water
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
226 |
#--------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
227 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
228 |
my($i,$si);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
229 |
for ($i=int(@dAhdt_rms/2); $i>0; $i--) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
230 |
last if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
231 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
232 |
if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
233 |
for ($si=0; $ants_[$si][$elapsedF]<=$elapsed[$i]; $si++) {}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
234 |
splice(@ants_,0,$si);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
235 |
printf(STDERR "\n\t\t%5d leading out-of-water IMP records removed",$si)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
236 |
if ($si>0 && $verbose);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
237 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
238 |
print(STDERR "\n\t\tWARNING: no leading out-of-water IMP records detected/removed") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
239 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
240 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
241 |
for ($i=int(@dAhdt_rms/2); $i<@dAhdt_rms; $i++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
242 |
last if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
243 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
244 |
if ($dAhdt_rms[$i] * cos(rad(sqrt($pitch[$i]**2+$roll[$i]**2))) > 1.0) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
245 |
for ($si=$#ants_; $ants_[$si][$elapsedF]>=$elapsed[$i]; $si--) {}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
246 |
my($rem) = @ants_ - $si;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
247 |
splice(@ants_,$si);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
248 |
printf(STDERR "\n\t\t%5d trailing out-of-water IMU records removed",$rem)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
249 |
if ($rem>0 && $verbose);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
250 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
251 |
print(STDERR "\n\t\tWARNING: no trailing out-of-water IMU records detected/removed") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
252 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
253 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
254 |
printf(STDERR "\n\t\tcast duration : %.1f min",
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
255 |
($ants_[$#ants_][$elapsedF] - $ants_[0][$elapsedF]) / 60)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
256 |
if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
257 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
258 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
259 |
#--------------------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
260 |
# prep_piro_IMP()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
261 |
# - calculate pitch/roll offsets & tilt azimuth for IMP
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
262 |
# - during an attempt to improve time lagging for the 2015 IOPAS data set,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
263 |
# it was noticed that one particular instrument, WHM300#12973 maxes out
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
264 |
# pitch at 27.36 degrees, whereas the roll may not be maxed out at 28.76 deg,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
265 |
# the max observed during the cruise.
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
266 |
# - therefore, IMP{TILT_AZIM} and IMP{TILT_ANOM} are calculated here, first,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
267 |
# with a pitch/roll cutoff value of 29 degrees
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
268 |
# - after the time lagging, when the LADCP start and end times are known,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
269 |
# the TILT values are re-calculated without the pitch/roll limit, and
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
270 |
# using only the correct time range
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
271 |
#---------------------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
272 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
273 |
sub prep_piro_IMP($)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
274 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
275 |
my($verbose) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
276 |
my($RDI_max_tilt) = 29;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
277 |
my($IMP_pitch_mean,$IMP_roll_mean,$nPR) = (0,0,0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
278 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
279 |
for (my($r)=0; $r<@ants_; $r++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
280 |
next unless numbersp($ants_[$r][$pitchF],$ants_[$r][$rollF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
281 |
$nPR++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
282 |
$IMP_pitch_mean += min($ants_[$r][$pitchF],$RDI_max_tilt);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
283 |
$IMP_roll_mean += min($ants_[$r][$rollF],$RDI_max_tilt);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
284 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
285 |
$IMP_pitch_mean /= $nPR;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
286 |
$IMP_roll_mean /= $nPR;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
287 |
printf(STDERR "\n\t\tIMU mean pitch/roll : %.1f/%.1f deg",$IMP_pitch_mean,$IMP_roll_mean)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
288 |
if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
289 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
290 |
for (my($r)=0; $r<@ants_; $r++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
291 |
next unless numbersp($ants_[$r][$pitchF],$ants_[$r][$rollF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
292 |
$IMP{TILT_AZIMUTH}[$r] = tilt_azimuth(min($ants_[$r][$pitchF],$RDI_max_tilt)-$IMP_pitch_mean,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
293 |
min($ants_[$r][$rollF],$RDI_max_tilt) -$IMP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
294 |
$IMP{TILT_ANOM}[$r] = angle_from_vertical(min($ants_[$r][$pitchF],$RDI_max_tilt)-$IMP_pitch_mean,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
295 |
min($ants_[$r][$rollF],$RDI_max_tilt) -$IMP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
296 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
297 |
return ($IMP_pitch_mean,$IMP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
298 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
299 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
300 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
301 |
# prep_piro_LADCP()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
302 |
# - calculate pitch/roll offsets & tilt azimuth of LADCP
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
303 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
304 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
305 |
sub prep_piro_LADCP($)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
306 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
307 |
my($verbose) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
308 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
309 |
my($LADCP_pitch_mean,$LADCP_roll_mean) = (0,0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
310 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
311 |
$LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH} =
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
312 |
gimbal_pitch($LADCP{ENSEMBLE}[$ens]->{PITCH},$LADCP{ENSEMBLE}[$ens]->{ROLL});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
313 |
$LADCP_pitch_mean += $LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
314 |
$LADCP_roll_mean += $LADCP{ENSEMBLE}[$ens]->{ROLL};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
315 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
316 |
$LADCP_pitch_mean /= ($LADCP_end-$LADCP_begin+1);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
317 |
$LADCP_roll_mean /= ($LADCP_end-$LADCP_begin+1);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
318 |
printf(STDERR "\n\t\tLADCP mean pitch/roll : %.1f/%.1f deg",$LADCP_pitch_mean,$LADCP_roll_mean)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
319 |
if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
320 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
321 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
322 |
$LADCP{ENSEMBLE}[$ens]->{TILT_AZIMUTH} =
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
323 |
tilt_azimuth($LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH}-$LADCP_pitch_mean,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
324 |
$LADCP{ENSEMBLE}[$ens]->{ROLL}-$LADCP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
325 |
$LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} =
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
326 |
angle_from_vertical($LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH}-$LADCP_pitch_mean,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
327 |
$LADCP{ENSEMBLE}[$ens]->{ROLL}-$LADCP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
328 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
329 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
330 |
print(STDERR "\n") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
331 |
return ($LADCP_pitch_mean,$LADCP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
332 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
333 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
334 |
#------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
335 |
# sub calc_hdg_offset()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
336 |
# - estimate heading offset from tilt time series
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
337 |
# - returns heading offset and updated IMP mean tilts
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
338 |
# - also creates diagnostic plot with pl_hdg_offset()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
339 |
#------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
340 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
341 |
sub pl_hdg_offset($@)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
342 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
343 |
my($dhist_binsize,$modefrac,@dhist) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
344 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
345 |
my($plotsize) = '13c';
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
346 |
my($xmin,$xmax) = (-180.5,180.5);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
347 |
my($ymin) = 0;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
348 |
my($ymax) = 1.05 * $dhist[$HDG_offset];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
349 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
350 |
GMT_begin("$P{profile_id}${opt_a}_hdg_offset.ps","-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
351 |
GMT_psxy("-Sb${dhist_binsize}u -GCornFlowerBlue");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
352 |
for (my($i)=0; $i<@dhist; $i++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
353 |
next unless $dhist[$i];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
354 |
printf(GMT "%f $dhist[$i]\n",$i*$dhist_binsize>180 ? $i*$dhist_binsize-360 : $i*$dhist_binsize);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
355 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
356 |
GMT_psbasemap('-Bg45a90f15:"IMP Heading Offset [\260]":/ga100f10:"Frequency":WeSn');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
357 |
GMT_unitcoords();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
358 |
GMT_pstext('-F+f14,Helvetica,CornFlowerBlue+jTR -N');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
359 |
printf(GMT "0.99 1.06 %g \260 offset (%d%% agreement)\n",angle($HDG_offset),100*$modefrac);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
360 |
GMT_pstext('-F+f14,Helvetica,blue+jTL -N');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
361 |
printf(GMT "0.01 1.06 $P{profile_id} $opt_a\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
362 |
GMT_end();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
363 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
364 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
365 |
sub calc_hdg_offset($)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
366 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
367 |
my($verbose) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
368 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
369 |
print(STDERR "\n\tRe-calculating IMP pitch/roll anomalies") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
370 |
($IMP_pitch_mean,$IMP_roll_mean,$nPR) = (0,0,0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
371 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
372 |
my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
373 |
if ($r < 0 && $ens == $LADCP_begin) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
374 |
$r = int(($LADCP{ENSEMBLE}[++$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT})
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
375 |
while ($r < 0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
376 |
printf(STDERR "\n\tIMP data begin with instrument already in water => skipping %ds of LADCP data",
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
377 |
$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME})
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
378 |
if ($verbose);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
379 |
$LADCP_begin = $ens;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
380 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
381 |
if ($r > $#ants_) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
382 |
printf(STDERR "\n\tIMP data end while instrument is still in water => truncating %ds of LADCP data",
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
383 |
$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME})
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
384 |
if ($verbose);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
385 |
$LADCP_end = $ens - 1;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
386 |
last;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
387 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
388 |
next unless numberp($IMP{TILT_AZIMUTH}[$r]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
389 |
$nPR++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
390 |
$IMP_pitch_mean += $ants_[$r][$pitchF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
391 |
$IMP_roll_mean += $ants_[$r][$rollF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
392 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
393 |
$IMP_pitch_mean /= $nPR;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
394 |
$IMP_roll_mean /= $nPR;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
395 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
396 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
397 |
my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
398 |
next unless numberp($IMP{TILT_AZIMUTH}[$r]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
399 |
$LADCP{ENSEMBLE}[$ens]->{IMP_TILT_AZIMUTH} =
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
400 |
$IMP{TILT_AZIMUTH}[$r] = tilt_azimuth($ants_[$r][$pitchF]-$IMP_pitch_mean,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
401 |
$ants_[$r][$rollF] -$IMP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
402 |
$LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} =
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
403 |
$IMP{TILT_ANOM}[$r] = angle_from_vertical($ants_[$r][$pitchF]-$IMP_pitch_mean,
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
404 |
$ants_[$r][$rollF] -$IMP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
405 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
406 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
407 |
printf(STDERR "\n\t\tIMP mean pitch/roll: %.1f/%.1f deg",$IMP_pitch_mean,$IMP_roll_mean)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
408 |
if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
409 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
410 |
if (defined($opt_s)) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
411 |
$HDG_offset = $opt_s;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
412 |
printf(STDERR "\n\tHEADING_OFFSET = %.1f (set by -s)\n",$HDG_offset) if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
413 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
414 |
my($dhist_binsize,$dhist_min_pirom,$dhist_min_mfrac) = split(/,/,$opt_e);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
415 |
croak("$0: cannot decode -e $opt_e\n")
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
416 |
unless ($dhist_binsize > 0 && $dhist_min_pirom > 0 && $dhist_min_mfrac > 0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
417 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
418 |
my(@dhist); my($nhist) = my($modeFreq) = 0;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
419 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
420 |
my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
421 |
next unless numberp($IMP{TILT_AZIMUTH}[$r]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
422 |
next unless (abs($ants_[$r][$pitchF]-$IMP_pitch_mean) >= $dhist_min_pirom &&
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
423 |
abs($ants_[$r][$rollF] -$IMP_roll_mean) >= $dhist_min_pirom);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
424 |
$dhist[int(angle_pos($LADCP{ENSEMBLE}[$ens]->{TILT_AZIMUTH}-$IMP{TILT_AZIMUTH}[$r])/$dhist_binsize+0.5)]++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
425 |
$nhist++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
426 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
427 |
croak("$0: empty histogram\n")
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
428 |
unless ($nhist);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
429 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
430 |
$HDG_offset = 0;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
431 |
for (my($i)=1; $i<@dhist-1; $i++) { # make sure mode is not on edge
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
432 |
$HDG_offset = $i if ($dhist[$i] >= $dhist[$HDG_offset]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
433 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
434 |
my($modefrac) = ($dhist[$HDG_offset]+$dhist[$HDG_offset-1]+$dhist[$HDG_offset+1]) / $nhist;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
435 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
436 |
$HDG_offset *= $dhist_binsize;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
437 |
pl_hdg_offset($dhist_binsize,$modefrac,@dhist);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
438 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
439 |
if ($opt_f) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
440 |
printf(STDERR "\n\nIGNORED WARNING (-f): Cannot determine reliable heading offset; $HDG_offset+/-$dhist_binsize deg accounts for only %f%% of total\n",$modefrac*100)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
441 |
if ($modefrac < $dhist_min_mfrac);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
442 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
443 |
croak(sprintf("\n$0: Cannot determine reliable heading offset; $HDG_offset+/-$dhist_binsize deg accounts for only %f%% of total\n",$modefrac*100))
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
444 |
if ($modefrac < $dhist_min_mfrac);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
445 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
446 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
447 |
printf(STDERR "\n\t") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
448 |
printf(STDERR "IMP heading offset = %g deg (%d%% agreement)\n",angle($HDG_offset),100*$modefrac) if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
449 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
450 |
return ($HDG_offset,$IMP_pitch_mean,$IMP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
451 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
452 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
453 |
#-----------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
454 |
# rot_IMP()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
455 |
# - rotate IMP Data Into LADCP Instrument Coords
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
456 |
# - also replaced pitch/roll by corresponding anomalies!!!
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
457 |
#-----------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
458 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
459 |
sub rot_IMP($)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
460 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
461 |
my($verbose) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
462 |
my($crho) = cos(rad($HDG_offset));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
463 |
my($srho) = sin(rad($HDG_offset));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
464 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
465 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
466 |
my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
467 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
468 |
if (numbersp($ants_[$r][$pitchF],$ants_[$r][$rollF])) { # pitch/roll
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
469 |
my($rot_p) = (($ants_[$r][$pitchF]-$IMP_pitch_mean)*$crho +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
470 |
($ants_[$r][$rollF]-$IMP_roll_mean)*$srho);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
471 |
my($rot_r) = (-($ants_[$r][$pitchF]-$IMP_pitch_mean)*$srho +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
472 |
($ants_[$r][$rollF]-$IMP_roll_mean)*$crho);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
473 |
$ants_[$r][$pitchF] = $rot_p;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
474 |
$ants_[$r][$rollF] = $rot_r;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
475 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
476 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
477 |
$ants_[$r][$hdgF] = angle_pos($ants_[$r][$hdgF] - $HDG_offset)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
478 |
if numberp($ants_[$r][$hdgF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
479 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
480 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
481 |
my($rot_p) = $IMP_pitch_mean * $crho + $IMP_roll_mean * $srho; # mean pitch roll
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
482 |
my($rot_r) = -$IMP_pitch_mean * $srho + $IMP_roll_mean * $crho;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
483 |
$IMP_pitch_mean = $rot_p;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
484 |
$IMP_roll_mean = $rot_r;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
485 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
486 |
print(STDERR "\n") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
487 |
return ($IMP_pitch_mean,$IMP_roll_mean);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
488 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
489 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
490 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
491 |
# create_merge_plots()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
492 |
# - tilt time series (*_time_lag.ps)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
493 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
494 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
495 |
sub create_merge_plots($$$)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
496 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
497 |
my($basename,$plotsize,$verbose) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
498 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
499 |
#---------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
500 |
# Tilt Time Series (*_time_lag.ps)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
501 |
#---------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
502 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
503 |
my($mint,$maxt) = (99,-99);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
504 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
505 |
if (($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME} <= 180) ||
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
506 |
($LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} <= 180)) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
507 |
$mint = $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} < $mint);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
508 |
$maxt = $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM} > $maxt);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
509 |
$mint = $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} < $mint);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
510 |
$maxt = $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} if ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} > $maxt);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
511 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
512 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
513 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
514 |
my($xmin,$xmax) = (-90,90);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
515 |
my($ymin) = round($mint-0.5);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
516 |
my($ymax) = round($maxt+0.5);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
517 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
518 |
GMT_begin("${basename}_time_lag.ps","-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
519 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
520 |
GMT_psxy('-W2,coral');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
521 |
for (my($ens) = $LADCP_begin + 5;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
522 |
$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME} <= 90;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
523 |
$ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
524 |
printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME},
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
525 |
$LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
526 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
527 |
GMT_psxy('-W1');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
528 |
for (my($ens) = $LADCP_begin + 5;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
529 |
$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME} <= 90;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
530 |
$ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
531 |
printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_begin]->{ELAPSED_TIME},
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
532 |
$LADCP{ENSEMBLE}[$ens]->{TILT_ANOM});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
533 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
534 |
GMT_psxy('-W2,SeaGreen');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
535 |
for (my($ens) = $LADCP_end - 5;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
536 |
$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} <= 90;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
537 |
$ens--) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
538 |
printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME},
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
539 |
$LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
540 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
541 |
GMT_psxy('-W1');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
542 |
for (my($ens) = $LADCP_end - 5;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
543 |
$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} <= 90;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
544 |
$ens--) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
545 |
printf(GMT "%f %f\n",$LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME}-$LADCP{ENSEMBLE}[$LADCP_end]->{ELAPSED_TIME},
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
546 |
$LADCP{ENSEMBLE}[$ens]->{TILT_ANOM});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
547 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
548 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
549 |
GMT_psbasemap('-Bg30a30f10:"Elapsed Time [sec]":/g5a5f1:"Tilt Magnitude [\260]":WeSn');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
550 |
GMT_unitcoords();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
551 |
GMT_pstext('-F+f14,Helvetica,Coral+jTL');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
552 |
printf(GMT "0.52 0.98 downcast\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
553 |
GMT_pstext('-F+f14,Helvetica,SeaGreen+jTR');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
554 |
printf(GMT "0.48 0.98 upcast\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
555 |
GMT_psxy('-W4,LightSkyBlue');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
556 |
printf(GMT "0.5 0\n0.5 1\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
557 |
GMT_pstext('-F+f14,Helvetica,blue+jTL -N');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
558 |
printf(GMT "0.01 1.06 $P{profile_id} $opt_a\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
559 |
GMT_end();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
560 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
561 |
#------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
562 |
# Heading Errors (*_hdg_err.ps)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
563 |
#------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
564 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
565 |
my(@err_binned,@err_nsamp);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
566 |
my($sumErr) = 0; my($nErr) = $LADCP_end - $LADCP_begin + 1;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
567 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
568 |
next unless ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} < 10);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
569 |
my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
570 |
my($bi) = int($ants_[$r][$hdgF]/5);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
571 |
my($err) = angle_diff($ants_[$r][$hdgF],$LADCP{ENSEMBLE}[$ens]->{HEADING});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
572 |
next unless numberp($err);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
573 |
$err_binned[$bi] += $err; $sumErr += $err;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
574 |
$err_nsamp[$bi]++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
575 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
576 |
for (my($bi)=0; $bi<@err_nsamp; $bi++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
577 |
$err_binned[$bi] = ($err_nsamp[$bi] >= 5)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
578 |
? $err_binned[$bi]/$err_nsamp[$bi]
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
579 |
: undef;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
580 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
581 |
my(@err_dssq);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
582 |
for (my($ens)=$LADCP_begin; $ens<=$LADCP_end; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
583 |
next unless ($LADCP{ENSEMBLE}[$ens]->{TILT_ANOM} < 10);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
584 |
my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
585 |
my($bi) = int($ants_[$r][$hdgF]/5);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
586 |
my($err) = angle_diff($ants_[$r][$hdgF],$LADCP{ENSEMBLE}[$ens]->{HEADING});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
587 |
next unless numberp($err);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
588 |
$err_dssq[$bi] += ($err-$err_binned[$bi])**2;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
589 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
590 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
591 |
my($xmin,$xmax) = (0,360);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
592 |
my($ymin,$ymax) = (-45,45);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
593 |
GMT_begin("${basename}_hdg_err.ps","-JX${plotsize}","-R$xmin/$xmax/$ymin/$ymax",'-X6 -Y4 -P');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
594 |
GMT_psxy('-Ey/3,CornFlowerBlue');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
595 |
my($sumSq,$sumBe) = my($nSq,$nBe) = (0,0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
596 |
for (my($bi)=0; $bi<@err_binned; $bi++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
597 |
next unless ($err_nsamp[$bi] >= 2);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
598 |
next unless numberp($err_binned[$bi]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
599 |
$sumSq += $err_binned[$bi]**2; $nSq++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
600 |
$sumBe += $err_binned[$bi]; $nBe++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
601 |
# printf(GMT "%f %f\n",2.5+5*$bi,$err_binned[$bi]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
602 |
printf(GMT "%f %f %f\n",2.5+5*$bi,$err_binned[$bi],sqrt($err_dssq[$bi]/($err_nsamp[$bi]-1)));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
603 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
604 |
GMT_psbasemap('-Bg90a45f5:"ADCP Heading [\260]":/g15a15f5:"ADCP Compass Error [\260]":WeSn');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
605 |
GMT_unitcoords();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
606 |
GMT_pstext('-F+f12,Helvetica,CornFlowerBlue+jTR -Gwhite -C25%');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
607 |
printf(GMT "0.98 0.98 rms error = %7.1f \260\n",sqrt($sumSq/$nSq));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
608 |
printf(GMT "0.98 0.94 time-averaged error = %7.1f \260\n",$sumErr/$nErr);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
609 |
printf(GMT "0.98 0.90 heading-averaged error = %7.1f \260\n",$sumBe/$nBe);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
610 |
GMT_pstext('-F+f14,Helvetica,blue+jTL -N');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
611 |
printf(GMT "0.01 1.06 $P{profile_id} $opt_a\n");
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
612 |
GMT_end();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
613 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
614 |
print(STDERR "\n") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
615 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
616 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
617 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
618 |
# output_merged()
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
619 |
# - output merged data
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
620 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
621 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
622 |
sub output_merged($)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
623 |
{
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
624 |
my($verbose) = @_;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
625 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
626 |
my($tazimF) = &antsNewField('tilt_azimuth');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
627 |
my($tanomF) = &antsNewField('tilt_magnitude');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
628 |
my($L_tazimF) = &antsNewField('LADCP_tilt_azimuth');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
629 |
my($L_tanomF) = &antsNewField('LADCP_tilt_magnitude');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
630 |
my($L_elapsedF) = &antsNewField('LADCP_elapsed');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
631 |
my($L_ensF) = &antsNewField('LADCP_ens');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
632 |
my($L_depthF) = &antsNewField('LADCP_depth_estimate');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
633 |
my($L_pitchF) = &antsNewField('LADCP_pitch');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
634 |
my($L_rollF) = &antsNewField('LADCP_roll');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
635 |
my($L_hdgF) = &antsNewField('LADCP_hdg');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
636 |
my($dcF) = &antsNewField('downcast');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
637 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
638 |
for (my($ens)=0; $ens<=$#{$LADCP{ENSEMBLE}}; $ens++) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
639 |
my($r) = int(($LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG} - $ants_[0][$elapsedF]) / $IMP{DT});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
640 |
if ($r<0 || $r>$#ants_) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
641 |
my(@out);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
642 |
$out[$elapsedF] = $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME} + $IMP{TIME_LAG};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
643 |
$out[$L_elapsedF] = $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
644 |
$out[$L_ensF] = $LADCP{ENSEMBLE}[$ens]->{NUMBER};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
645 |
$out[$dcF] = ($ens <= $LADCP_bottom);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
646 |
&antsOut(@out);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
647 |
} elsif ($ens < $LADCP_begin || $ens > $LADCP_end) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
648 |
$ants_[$r][$L_elapsedF] = $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
649 |
$ants_[$r][$L_ensF] = $LADCP{ENSEMBLE}[$ens]->{NUMBER};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
650 |
$ants_[$r][$L_pitchF] = undef;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
651 |
$ants_[$r][$L_rollF] = undef;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
652 |
$ants_[$r][$L_hdgF] = undef;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
653 |
$ants_[$r][$pitchF] = undef;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
654 |
$ants_[$r][$rollF] = undef;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
655 |
$ants_[$r][$hdgF] = undef;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
656 |
$ants_[$r][$dcF] = ($ens <= $LADCP_bottom);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
657 |
&antsOut(@{$ants_[$r]});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
658 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
659 |
$ants_[$r][$tazimF] = angle($LADCP{ENSEMBLE}[$ens]->{IMP_TILT_AZIMUTH} + $HDG_offset);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
660 |
$ants_[$r][$tanomF] = $LADCP{ENSEMBLE}[$ens]->{IMP_TILT_ANOM};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
661 |
$ants_[$r][$L_tazimF] = $LADCP{ENSEMBLE}[$ens]->{TILT_AZIMUTH};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
662 |
$ants_[$r][$L_tanomF] = $LADCP{ENSEMBLE}[$ens]->{TILT_ANOM};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
663 |
$ants_[$r][$L_elapsedF] = $LADCP{ENSEMBLE}[$ens]->{ELAPSED_TIME};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
664 |
$ants_[$r][$L_ensF] = $LADCP{ENSEMBLE}[$ens]->{NUMBER};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
665 |
$ants_[$r][$L_depthF] = $LADCP{ENSEMBLE}[$ens]->{DEPTH};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
666 |
$ants_[$r][$L_pitchF] = $LADCP{ENSEMBLE}[$ens]->{GIMBAL_PITCH} - $LADCP_pitch_mean;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
667 |
$ants_[$r][$L_rollF] = $LADCP{ENSEMBLE}[$ens]->{ROLL} - $LADCP_roll_mean;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
668 |
$ants_[$r][$L_hdgF] = $LADCP{ENSEMBLE}[$ens]->{HEADING};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
669 |
$ants_[$r][$dcF] = ($ens <= $LADCP_bottom);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
670 |
&antsOut(@{$ants_[$r]});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
671 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
672 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
673 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
674 |
print(STDERR "\n") if $verbose;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
675 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
676 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
677 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
678 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
679 |
1; # return true for all the world to see
|