40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
1 |
#!/usr/bin/perl
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
2 |
#======================================================================
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
3 |
# P A T C H P D 0
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
4 |
# doc: Tue Aug 23 20:00:15 2016
|
42
|
5 |
# dlm: Sat Dec 23 16:12:01 2017
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
6 |
# (c) 2010 A.M. Thurnherr
|
42
|
7 |
# uE-Info: 51 24 NIL 0 0 72 0 2 4 NIL ofnI
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
8 |
#======================================================================
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
9 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
10 |
$antsSummary = 'patch TRDI PD0 file with external attitude data';
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
11 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
12 |
# History:
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
13 |
# Aug 23, 2016: - exported from IMP+LADCP
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
14 |
# Aug 25, 2016: - completed basic structure
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
15 |
# Nov 20, 2017: - major code cleanup
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
16 |
# - added -d) to keep original data source id
|
42
|
17 |
# Dec 9, 2017: - added $antsSuppressCommonOptions = 1;
|
|
18 |
# Dec 23, 2017: - added support for -c
|
|
19 |
# - BUG: not backward compatible with old IMP files any more
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
20 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
21 |
# PATCH-FILE REQUIREMENTS (ANTS format)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
22 |
# - %LADCP_pitch.mu %LADCP_roll.mu mean LADCP pitch and roll
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
23 |
# - %IMU_hdg_offset heading offset of external IMU
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
24 |
# - LADCP_ens ADCP ensemble number
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
25 |
# - pitch, roll external pitch/roll *anomalies*
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
26 |
# - hdg external heading rotated into ADCP coord system
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
27 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
28 |
# PATCHED PD0 FILE:
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
29 |
#
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
30 |
# - pitch = RDI_pitch(mean_LADCP_gimbal_pitch + rotated_external_pitch_anomaly)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
31 |
# - roll = mean_LADCP_roll + rotated_external_roll_anomaly
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
32 |
# - hdg = external_hdg - heading_offset
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
33 |
#
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
34 |
# - unless -d is used, every patched ensemble has set the DATA_SOURCE_ID as follows;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
35 |
# PROCESSING SOFTWARE NEEDS TO BE ABLE TO DEAL WITH DSID values != 0x7F
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
36 |
# 0xA0 no values patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
37 |
# 0xA1 heading patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
38 |
# 0xA2 roll patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
39 |
# 0xA3 roll & heading patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
40 |
# 0xA4 pitch patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
41 |
# 0xA5 pitch & heading patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
42 |
# 0xA6 pitch & roll patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
43 |
# 0xA7 pitch, roll & heading patched
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
44 |
#
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
45 |
# - additionally, all velocities from ensembles with missing pitch/roll/heading
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
46 |
# values are removed unless -k is set
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
47 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
48 |
($ANTS) = (`which ANTSlib` =~ m{^(.*)/[^/]*$});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
49 |
($ADCP_TOOLS) = ($0 =~ m{^(.*)/[^/]*$});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
50 |
|
42
|
51 |
$antsMinLibVersion = 7.0;
|
|
52 |
$ADCP_tools_minVersion = 2.1;
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
53 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
54 |
require "$ANTS/ants.pl";
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
55 |
require "$ANTS/libvec.pl";
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
56 |
require "$ANTS/libstats.pl";
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
57 |
require "$ADCP_TOOLS/ADCP_tools_lib.pl";
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
58 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
59 |
$antsParseHeader = 0;
|
42
|
60 |
$antsSuppressCommonOptions = 1;
|
|
61 |
&antsUsage('cdhko:pr',2,
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
62 |
'[patch -p)itch] [-r)oll] [-h)eading] (none patches all)',
|
42
|
63 |
'[patch -c)lock with pre-Y2K RTC calues]',
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
64 |
'[-o) <heading-offset>] [-k)eep velocities of unpatched ensembles]',
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
65 |
'[keep original -d)ata-source id]',
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
66 |
'<original PD0 file> <patched PD0 file> [external attitude file]');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
67 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
68 |
$opt_p = $opt_r = $opt_h = 1
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
69 |
unless ($opt_p || $opt_r || $opt_h);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
70 |
|
42
|
71 |
$RDI_PD0_IO::OVERRIDE_Y2K_CLOCK = $opt_c;
|
|
72 |
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
73 |
$LADCP_file = &antsFileArg();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
74 |
$outPD0 = $ARGV[0]; shift;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
75 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
76 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
77 |
# Step 1: Read LADCP Data
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
78 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
79 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
80 |
readData($LADCP_file,\%LADCP);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
81 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
82 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
83 |
# Step 2: Process External Attidue Input to Patch PD0 file
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
84 |
#----------------------------------------------------------------------
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
85 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
86 |
my($pr_missing,$hdg_missing) = (0,0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
87 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
88 |
&antsIn();
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
89 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
90 |
my($ensF) = &fnr('LADCP_ens');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
91 |
my($pitchF) = &fnr('pitch');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
92 |
my($rollF) = &fnr('roll');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
93 |
my($hdgF) = &fnr('hdg');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
94 |
my($LADCP_pitch_mean) = &antsRequireParam('LADCP_pitch.mu');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
95 |
my($LADCP_roll_mean) = &antsRequireParam('LADCP_roll.mu');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
96 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
97 |
my($rho,$crho,$srho);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
98 |
if (defined($opt_o)) {
|
42
|
99 |
&antsAddParams('IMU_hdg_offset',$P{IMP_hdg_offset}) # backward compatibility
|
|
100 |
if defined($P{IMP_hdg_offset});
|
40
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
101 |
$rho = $opt_o - &antsRequireParam('IMU_hdg_offset');
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
102 |
$crho = cos(rad($rho));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
103 |
$srho = sin(rad($rho));
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
104 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
105 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
106 |
do {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
107 |
my($ens) = $P{RECNO};
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
108 |
die("assertion failed [$ants_[0][$ensF] != $LADCP{ENSEMBLE}[$ens]->{NUMBER} --- 1-$LADCP{ENSEMBLE}[0]->{NUMBER} + $P{RECNO} + $d]")
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
109 |
unless ($ants_[0][$ensF] == $LADCP{ENSEMBLE}[$ens]->{NUMBER});
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
110 |
$LADCP{ENSEMBLE}[$ens]->{DATA_SOURCE_ID} = 0xA0;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
111 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
112 |
if (numbersp($ants_[0][$pitchF],$ants_[0][$rollF])) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
113 |
if (defined($opt_o)) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
114 |
my($rot_p) = ($ants_[$r][$pitchF] * $crho +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
115 |
$ants_[$r][$rollF] * $srho);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
116 |
my($rot_r) = (-$ants_[$r][$pitchF] * $srho +
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
117 |
$ants_[$r][$rollF] * $crho);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
118 |
$ants_[$r][$pitchF] = $rot_p;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
119 |
$ants_[$r][$rollF] = $rot_r;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
120 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
121 |
if ($opt_p) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
122 |
$LADCP{ENSEMBLE}[$ens]->{DATA_SOURCE_ID} |= ($opt_p<<2);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
123 |
$LADCP{ENSEMBLE}[$ens]->{PITCH} = RDI_pitch($LADCP_pitch_mean + $ants_[0][$pitchF],
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
124 |
$LADCP_roll_mean + $ants_[0][$rollF]);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
125 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
126 |
if ($opt_r) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
127 |
$LADCP{ENSEMBLE}[$ens]->{DATA_SOURCE_ID} |= ($opt_r<<1);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
128 |
$LADCP{ENSEMBLE}[$ens]->{ROLL} = $LADCP_roll_mean + $ants_[0][$rollF];
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
129 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
130 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
131 |
$pr_missing++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
132 |
unless ($opt_k) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
133 |
clearEns(\%LADCP,$ens);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
134 |
$LADCP{ENSEMBLE}[$ens]->{DATA_SOURCE_ID}= 0xA0;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
135 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
136 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
137 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
138 |
if (numberp($ants_[0][$hdgF])) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
139 |
$LADCP{ENSEMBLE}[$ens]->{DATA_SOURCE_ID} |= $opt_h;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
140 |
if (defined($opt_o)) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
141 |
$ants_[0][$hdgF] -= $rho;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
142 |
$ants_[0][$hdgF] += 360 if ($ants_[0][$hdgF] < 0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
143 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
144 |
$LADCP{ENSEMBLE}[$ens]->{HEADING} = $ants_[0][$hdgF]
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
145 |
if $opt_h;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
146 |
} else {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
147 |
$hdg_missing++;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
148 |
unless ($opt_k) {
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
149 |
clearEns(\%LADCP,$ens);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
150 |
$LADCP{ENSEMBLE}[$ens]->{DATA_SOURCE_ID}= 0xA0;
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
151 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
152 |
}
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
153 |
} while (&antsIn());
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
154 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
155 |
$LADCP{ENSEMBLE}[0]->{DATA_SOURCE_ID} = 0x7F; # ensure correct DSID (1st ens: orig; 2nd ens: this prog)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
156 |
$LADCP{ENSEMBLE}[1]->{DATA_SOURCE_ID} = 0xA0
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
157 |
unless ($LADCP{ENSEMBLE}[1]->{DATA_SOURCE_ID}&0xF0 == 0xA0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
158 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
159 |
writeData($outPD0,\%LADCP);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
160 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
161 |
my($verb) = $opt_k ? 'retained' : 'cleared';
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
162 |
printf(STDERR "$outPD0: %d pitch/roll & %d heading values $verb\n",$pr_missing,$hdg_missing)
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
163 |
if ($pr_missing+$hdg_missing);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
164 |
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
165 |
exit(0);
|
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents:
diff
changeset
|
166 |
|