LADCPproc.loadCTD
changeset 17 343ba18738cf
parent 9 48b2d27aaebf
child 19 12aaf0962ee6
equal deleted inserted replaced
16:ff157f4445ce 17:343ba18738cf
     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 {