equal
deleted
inserted
replaced
1 #====================================================================== |
1 #====================================================================== |
2 # L A D C P P R O C . L O A D C T D |
2 # L A D C P P R O C . L O A D C T D |
3 # doc: Thu Dec 9 18:39:01 2010 |
3 # doc: Thu Dec 9 18:39:01 2010 |
4 # dlm: Tue Apr 17 18:10:38 2012 |
4 # dlm: Fri Oct 19 11:27:44 2012 |
5 # (c) 2010 A.M. Thurnherr |
5 # (c) 2010 A.M. Thurnherr |
6 # uE-Info: 18 27 NIL 0 0 72 2 2 4 NIL ofnI |
6 # uE-Info: 76 46 NIL 0 0 72 2 2 4 NIL ofnI |
7 #====================================================================== |
7 #====================================================================== |
8 |
8 |
9 # HISTORY: |
9 # HISTORY: |
10 # Dec 9, 2010: - exported from LADCPproc |
10 # Dec 9, 2010: - exported from LADCPproc |
11 # - added support for ASCII files |
11 # - added support for ASCII files |
14 # Jan 22, 2011: - adapted to new -g |
14 # Jan 22, 2011: - adapted to new -g |
15 # Jul 15, 2011: - added $CTD{first_elapsed} |
15 # Jul 15, 2011: - added $CTD{first_elapsed} |
16 # Feb 5, 2012: - BUG: ASCII file did not deal with leading spaces correctly |
16 # Feb 5, 2012: - BUG: ASCII file did not deal with leading spaces correctly |
17 # Apr 11, 2012: - BUG: ASCII file did not handle nan latlons correctly |
17 # Apr 11, 2012: - BUG: ASCII file did not handle nan latlons correctly |
18 # Apr 17, 2012: - fiddled |
18 # Apr 17, 2012: - fiddled |
|
19 # Oct 19, 2012: - BUG: support for $CTD{first_elapsed} had not been implemented |
|
20 # for binary files |
|
21 # - BUG: CTD_badval had not been considered when setting $CTD{first_elapsed} |
|
22 # - BUG: CNV format error was not detected correctly any more |
19 |
23 |
20 sub readCTD_ASCII($$) |
24 sub readCTD_ASCII($$) |
21 { |
25 { |
22 my($fn,$dtaR) = @_; |
26 my($fn,$dtaR) = @_; |
23 |
27 |
67 |
71 |
68 open(F,$fn) || croak("$fn: $!\n"); |
72 open(F,$fn) || croak("$fn: $!\n"); |
69 while (1) { # parse header |
73 while (1) { # parse header |
70 my($hdr); |
74 my($hdr); |
71 chomp($hdr = <F>); |
75 chomp($hdr = <F>); |
|
76 croak(" unexpected EOF (format error)!\n") unless defined($hdr); |
72 $hdr =~ s/\r*$//; |
77 $hdr =~ s/\r*$//; |
73 croak("$0: unexpected EOF (format error)\n") unless defined($hdr); |
|
74 last if ($hdr eq '*END*'); |
78 last if ($hdr eq '*END*'); |
75 |
79 |
76 $CTD_nfields = $',next if ($hdr =~ /nquan = /); # Layout |
80 $CTD_nfields = $',next if ($hdr =~ /nquan = /); # Layout |
77 $CTD_nrecs = $',next if ($hdr =~ /nvalues = /); |
81 $CTD_nrecs = $',next if ($hdr =~ /nvalues = /); |
78 $elapsedF = $1,next if ($hdr =~ /name (\d+) = timeS:/); |
82 $elapsedF = $1,next if ($hdr =~ /name (\d+) = timeS:/); |
138 |
142 |
139 if ($CTD_file_type eq 'ascii') { |
143 if ($CTD_file_type eq 'ascii') { |
140 while (1) { |
144 while (1) { |
141 last unless (my(@rec) = &antsFileIn(F)); |
145 last unless (my(@rec) = &antsFileIn(F)); |
142 $dtaR->{first_elapsed} = $rec[$elapsedF] |
146 $dtaR->{first_elapsed} = $rec[$elapsedF] |
143 if defined($elapsedF) && !defined($dtaR->{first_elapsed}); |
147 if !defined($dtaR->{first_elapsed}) && defined($elapsedF) && $rec[$elapsedF]!=$CTD_badval; |
144 push(@{$dtaR->{press}},($rec[$pressF] == $CTD_badval) ? nan : $rec[$pressF]); |
148 push(@{$dtaR->{press}},($rec[$pressF] == $CTD_badval) ? nan : $rec[$pressF]); |
145 push(@{$dtaR->{temp}}, ($rec[$tempF] == $CTD_badval) ? nan : $rec[$tempF]); |
149 push(@{$dtaR->{temp}}, ($rec[$tempF] == $CTD_badval) ? nan : $rec[$tempF]); |
146 push(@{$dtaR->{salin}},($rec[$salinF] == $CTD_badval) ? nan : $rec[$salinF]); |
150 push(@{$dtaR->{salin}},($rec[$salinF] == $CTD_badval) ? nan : $rec[$salinF]); |
147 } |
151 } |
148 } elsif ($CTD_file_type eq 'binary') { |
152 } elsif ($CTD_file_type eq 'binary') { |
159 if (unpack('h*', pack('s', 1)) =~ /01/); # c.f. perlport(1) |
163 if (unpack('h*', pack('s', 1)) =~ /01/); # c.f. perlport(1) |
160 |
164 |
161 my(@dta) = unpack("f*",$dta); |
165 my(@dta) = unpack("f*",$dta); |
162 |
166 |
163 for (my($r)=0; $r<$CTD_nrecs; $r++) { |
167 for (my($r)=0; $r<$CTD_nrecs; $r++) { |
|
168 $dtaR->{first_elapsed} = $dta[$r*$CTD_nfields+$elapsedF] |
|
169 if !defined($dtaR->{first_elapsed}) && defined($elapsedF) && $dta[$r*$CTD_nfields+$elapsedF]!=$CTD_badval; |
164 push(@{$dtaR->{press}},($dta[$r*$CTD_nfields+$pressF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$pressF]); |
170 push(@{$dtaR->{press}},($dta[$r*$CTD_nfields+$pressF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$pressF]); |
165 push(@{$dtaR->{temp}}, ($dta[$r*$CTD_nfields+$tempF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$tempF]); |
171 push(@{$dtaR->{temp}}, ($dta[$r*$CTD_nfields+$tempF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$tempF]); |
166 push(@{$dtaR->{salin}},($dta[$r*$CTD_nfields+$salinF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$salinF]); |
172 push(@{$dtaR->{salin}},($dta[$r*$CTD_nfields+$salinF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$salinF]); |
167 } |
173 } |
168 } else { |
174 } else { |