LADCPproc.loadCTD
author A.M. Thurnherr <athurnherr@yahoo.com>
Tue, 20 May 2014 09:08:19 -0400
changeset 27 ec8873454890
parent 24 40756f8aff85
child 29 f72cd642972c
permissions -rw-r--r--
1) merge with laptop version; 2) add comments about PPI
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     1
#======================================================================
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     2
#                    L A D C P P R O C . L O A D C T D 
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     3
#                    doc: Thu Dec  9 18:39:01 2010
24
40756f8aff85 after DIMES US5
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
     4
#                    dlm: Thu Nov 21 10:14:37 2013
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     5
#                    (c) 2010 A.M. Thurnherr
24
40756f8aff85 after DIMES US5
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
     6
#                    uE-Info: 170 0 NIL 0 0 72 2 2 4 NIL ofnI
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     7
#======================================================================
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     8
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
     9
# HISTORY:
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    10
#	Dec  9, 2010: - exported from LADCPproc
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    11
#				  - added support for ASCII files
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    12
#	Dec 16, 2010: - BUG cnv read did not work any more
2
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
    13
#	Jan 10, 2011: - added code to skip ANTS header
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
    14
#	Jan 22, 2011: - adapted to new -g
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 2
diff changeset
    15
#	Jul 15, 2011: - added $CTD{first_elapsed}
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 2
diff changeset
    16
#	Feb  5, 2012: - BUG: ASCII file did not deal with leading spaces correctly
9
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    17
#	Apr 11, 2012: - BUG: ASCII file did not handle nan latlons correctly
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    18
#	Apr 17, 2012: - fiddled
17
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
    19
#	Oct 19, 2012: - BUG: support for $CTD{first_elapsed} had not been implemented
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
    20
#						 for binary files
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
    21
#				  - BUG: CTD_badval had not been considered when setting $CTD{first_elapsed}
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
    22
#				  - BUG: CNV format error was not detected correctly any more
19
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    23
#   Jan  8, 2013: - added CTD_ASCII_header_lines
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
    24
#   Jun 25, 2013: - adapted to :: %PARAM convention
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    25
#	Sep 25, 2013: - renamed "std" %PARAMs %lat, %lon, %ITS to conform to new convention
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    26
#				  - added support for carry-through of lat/lon info
23
85c8e2ea2a5b after DIMES US5
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 22
diff changeset
    27
#	Nov 11, 2013: - BUG: lat/lon did not work any more?!?
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    28
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    29
sub readCTD_ASCII($$)
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    30
{
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    31
	my($fn,$dtaR) = @_;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    32
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    33
	croak("$fn: unknown pressure field\n")    unless defined($CTD_ASCII_press_field);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    34
	croak("$fn: unknown temperature field\n") unless defined($CTD_ASCII_temp_field);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    35
	croak("$fn: unknown salinity field\n")    unless defined($CTD_ASCII_salin_field);
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    36
	unless (numberp($dtaR->{stn_lat})) {
2
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
    37
		croak("$fn: unknown latitude field\n")    unless defined($CTD_ASCII_lat_field);
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
    38
		croak("$fn: unknown longitude field\n")   unless defined($CTD_ASCII_lon_field);
16726a31a399 pre IWISE
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 1
diff changeset
    39
	}
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    40
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    41
	$CTD_ASCII_badval = 9e99 unless defined($CTD_ASCII_badval);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    42
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    43
	open(F,$fn) || croak("$fn: $!\n");
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    44
	my($sumLat,$sumLon); my($nPos) = 0;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    45
	my($ds);
19
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    46
	my($skip) = $CTD_ASCII_header_lines;
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    47
	while (chomp($ds = <F>)) {
19
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    48
		if (defined($CTD_ASCII_header_lines)) {							# fixed header
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    49
			next if ($skip-- > 0);
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    50
		} else {														# comments beginning with # allowed
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    51
			next if ($ds =~ /^#/);
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    52
		}
12aaf0962ee6 before EGU 2013
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 17
diff changeset
    53
		$ds =~ s/^\s+//;												# strip leading spaces
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    54
		my(@rec) = split('\s+',$ds);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    55
		push(@{$dtaR->{press}},($rec[$CTD_ASCII_press_field-1] == $CTD_ASCII_badval) ? nan : $rec[$CTD_ASCII_press_field-1]);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    56
		push(@{$dtaR->{temp}}, ($rec[$CTD_ASCII_temp_field-1]  == $CTD_ASCII_badval) ? nan : $rec[$CTD_ASCII_temp_field-1]);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    57
		push(@{$dtaR->{salin}},($rec[$CTD_ASCII_salin_field-1] == $CTD_ASCII_badval) ? nan : $rec[$CTD_ASCII_salin_field-1]);
9
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    58
		if (defined($CTD_ASCII_lat_field) &&
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    59
		    numberp($rec[$CTD_ASCII_lat_field-1]) &&
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    60
			$rec[$CTD_ASCII_lat_field-1] != $CTD_ASCII_badval) {
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    61
				push(@{$dtaR->{lat}},$rec[$CTD_ASCII_lat_field-1]);
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    62
				push(@{$dtaR->{lon}},$rec[$CTD_ASCII_lon_field-1]);
9
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    63
				$nPos++;
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    64
				$sumLat += $rec[$CTD_ASCII_lat_field-1];
48b2d27aaebf after fixing bad magdec bug
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 6
diff changeset
    65
				$sumLon += $rec[$CTD_ASCII_lon_field-1];
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    66
		} else {
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    67
			push(@{$dtaR->{lat}},nan);
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    68
			push(@{$dtaR->{lon}},nan);
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    69
		}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    70
	}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    71
	close(F);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    72
	
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    73
	if ($nPos > 0) {
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    74
		$dtaR->{stn_lat} = $sumLat / $nPos;
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
    75
		$dtaR->{stn_lon} = $sumLon / $nPos;
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    76
	}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    77
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    78
	$dtaR->{sampint} = 1 / $CTD_ASCII_sampfreq;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    79
}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    80
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    81
sub readCTD_CNV($$)
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    82
{
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    83
	my($fn,$dtaR) = @_;
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 2
diff changeset
    84
	my($CTD_nrecs,$CTD_nfields,$pressF,$tempF,$salinF,$elapsedF);
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    85
	my($CTD_badval,$CTD_file_type);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    86
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    87
	open(F,$fn) || croak("$fn: $!\n");
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    88
	while (1) { 														# parse header
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    89
		my($hdr);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    90
		chomp($hdr = <F>);
17
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
    91
		croak(" unexpected EOF (format error)!\n") unless defined($hdr);
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    92
		$hdr =~ s/\r*$//;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    93
		last if ($hdr eq '*END*');
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    94
	    
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    95
		$CTD_nfields = $',next if ($hdr =~ /nquan = /); 				# Layout
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    96
		$CTD_nrecs = $',next if ($hdr =~ /nvalues = /);
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 2
diff changeset
    97
		$elapsedF = $1,next if ($hdr =~ /name (\d+) = timeS:/);
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    98
		$pressF = $1,next if ($hdr =~ /name (\d+) = prDM:/);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
    99
		if ($opt_2) {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   100
			$tempF	= $1,next if ($hdr =~ /name (\d+) = t190C:/);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   101
			$salinF = $1,next if ($hdr =~ /name (\d+) = sal11:/);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   102
		} else {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   103
			$tempF	= $1,next if ($hdr =~ /name (\d+) = t090C:/);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   104
			$salinF = $1,next if ($hdr =~ /name (\d+) = sal00:/);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   105
		}
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   106
		$latF = $1,next if ($hdr =~ /name (\d+) = latitude:/);
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   107
		$lonF = $1,next if ($hdr =~ /name (\d+) = longitude:/);
23
85c8e2ea2a5b after DIMES US5
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 22
diff changeset
   108
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   109
		&antsAddParams('LADCPproc::CTD_start_time',$1),next				# selected metadata
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   110
			if ($hdr =~ /start_time = (.*)/);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   111
	
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   112
		&antsAddParams('LADCPproc::CTD_station',$1),next
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   113
			if ($hdr =~ /Station\s*:\s*(.*)/);
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   114
		&antsAddParams('LADCPproc::ship',$1),next
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   115
			if ($hdr =~ /Ship\s*:\s*(.*)\s*$/);
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   116
		&antsAddParams('LADCPproc::cruise',$1),next
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   117
			if ($hdr =~ /Cruise\s*:\s*(.*)\s*$/);
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   118
		&antsAddParams('LADCPproc::CTD_time',$1),next
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   119
			if ($hdr =~ /Time\s*:\s*(.*)/);
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   120
		&antsAddParams('LADCPproc::CTD_date',$1),next
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   121
			if ($hdr =~ /Date\s*:\s*(.*)/);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   122
	
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   123
		if ($hdr =~ /Latitude\s*[=:]\s*/) {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   124
			($deg,$min,$NS) = split(/ /,$');
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   125
			$dtaR->{stn_lat} = $deg + $min/60;
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   126
			$dtaR->{stn_lat} *= -1 if ($NS eq 'S');
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   127
			next;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   128
		}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   129
		if ($hdr =~ /Longitude\s*[=:]\s*/) {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   130
			($deg,$min,$EW) = split(/ /,$');
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   131
			$dtaR->{stn_lon} = $deg + $min/60;
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   132
			$dtaR->{stn_lon} *= -1 if ($EW eq 'W');
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   133
			next;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   134
		}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   135
	    
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   136
		if ($hdr =~ /interval = seconds: /) {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   137
			$dtaR->{sampint} = 1*$';
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   138
			next;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   139
		}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   140
	    
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   141
		$CTD_badval = $',next
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   142
			if ($hdr =~ /bad_flag = /); 
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   143
		$CTD_file_type = $',next
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   144
			if ($hdr =~ /file_type = /);    
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   145
	}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   146
	
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   147
	croak("$CTD_file: cannot determine CTD file layout\n")
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   148
		unless ($CTD_nfields && $CTD_nrecs);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   149
	croak("$CTD_file: cannot determine missing value\n")
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   150
		unless defined($CTD_badval);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   151
	croak("$CTD_file: not a CTD time series file\n")
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   152
		unless ($dtaR->{sampint});
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   153
	croak("$CTD_file: no pressure field\n")
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   154
		unless defined($pressF);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   155
	croak("$CTD_file: no suitable temperature field\n")
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   156
		unless defined($tempF);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   157
	croak("$CTD_file: no suitable salinity field\n")
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   158
		unless defined($salinF);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   159
	
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   160
	if ($CTD_file_type eq 'ascii') {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   161
		while (1) {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   162
			last unless (my(@rec) = &antsFileIn(F));
6
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 2
diff changeset
   163
			$dtaR->{first_elapsed} = $rec[$elapsedF]
17
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
   164
				if !defined($dtaR->{first_elapsed}) && defined($elapsedF) &&  $rec[$elapsedF]!=$CTD_badval;
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   165
			push(@{$dtaR->{press}},($rec[$pressF] == $CTD_badval) ? nan : $rec[$pressF]);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   166
			push(@{$dtaR->{temp}}, ($rec[$tempF]  == $CTD_badval) ? nan : $rec[$tempF]);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   167
			push(@{$dtaR->{salin}},($rec[$salinF] == $CTD_badval) ? nan : $rec[$salinF]);
23
85c8e2ea2a5b after DIMES US5
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 22
diff changeset
   168
			push(@{$dtaR->{lat}},(!defined($latF) || ($rec[$latF] == $CTD_badval)) ? nan : $rec[$latF]);
85c8e2ea2a5b after DIMES US5
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 22
diff changeset
   169
			push(@{$dtaR->{lon}},(!defined($lonF) || ($rec[$lonF] == $CTD_badval)) ? nan : $rec[$lonF]);
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   170
		}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   171
	} elsif ($CTD_file_type eq 'binary') {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   172
	
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   173
		my($fbits) = 8 * length(pack('f',0));
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   174
		croak(sprintf("$0: incompatible native CPU float representation (%d instead of 32bits)\n",fbits))
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   175
			unless ($fbits == 32);  
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   176
		    
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   177
		croak("$fn: can't read binary data\n")
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   178
			unless (read(F,my($dta),4*$CTD_nfields*$CTD_nrecs) == 4*$CTD_nfields*$CTD_nrecs);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   179
		print(STDERR "$fn: WARNING: extraneous data at EOF\n") unless eof(F);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   180
	
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   181
		$dta = pack('V*',unpack('N*',$dta)) 			# big-endian CPU
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   182
			if (unpack('h*', pack('s', 1)) =~ /01/);	# c.f. perlport(1)
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   183
	    
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   184
		my(@dta) = unpack("f*",$dta);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   185
	
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   186
		for (my($r)=0; $r<$CTD_nrecs; $r++) {
17
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
   187
			$dtaR->{first_elapsed} = $dta[$r*$CTD_nfields+$elapsedF]
343ba18738cf V1.0beta8
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 9
diff changeset
   188
                if !defined($dtaR->{first_elapsed}) && defined($elapsedF) && $dta[$r*$CTD_nfields+$elapsedF]!=$CTD_badval;
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   189
			push(@{$dtaR->{press}},($dta[$r*$CTD_nfields+$pressF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$pressF]);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   190
			push(@{$dtaR->{temp}}, ($dta[$r*$CTD_nfields+$tempF]  == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$tempF]);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   191
			push(@{$dtaR->{salin}},($dta[$r*$CTD_nfields+$salinF] == $CTD_badval) ? nan : $dta[$r*$CTD_nfields+$salinF]);
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   192
			push(@{$dtaR->{lat}},(!defined($latF) || ($dta[$r*$CTD_nfields+$latF] == $CTD_badval)) ? nan : $dta[$r*$CTD_nfields+$latF]);
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   193
			push(@{$dtaR->{lon}},(!defined($lonF) || ($dta[$r*$CTD_nfields+$lonF] == $CTD_badval)) ? nan : $dta[$r*$CTD_nfields+$lonF]);
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   194
		}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   195
	} else {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   196
		croak("$fn: unknown CTD file type $CTD_file_type\n");
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   197
	}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   198
	close(F);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   199
}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   200
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   201
sub readCTD($$)
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   202
{
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   203
	my($fn,$dtaR) = @_;
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   204
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   205
	if (defined($CTD_ASCII_sampfreq)) {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   206
		readCTD_ASCII($fn,$dtaR);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   207
	} else {
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   208
		readCTD_CNV($fn,$dtaR);
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   209
	}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   210
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   211
	croak("$0: unknown latitude\n") unless defined($dtaR->{stn_lat});
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   212
	&antsAddParams('LADCPproc::CTD_lat',$dtaR->{stn_lat});
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   213
	croak("$0: unknown longitude\n") unless defined($dtaR->{stn_lon});
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   214
	&antsAddParams('LADCPproc::CTD_lon',$dtaR->{stn_lon});
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   215
20
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 19
diff changeset
   216
	&antsAddParams('LADCPproc::CTD_sampfreq',1/$dtaR->{sampint});
22
f6635c0384b7 beginning of DIMES US5 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 20
diff changeset
   217
	&antsAddParams('LADCPproc::CTD_ITS',$P{ITS} = 90);
1
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   218
}
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   219
54222c82435f after DIMES UK2
A.M. Thurnherr <ant@ldeo.columbia.edu>
parents:
diff changeset
   220
1;