libSBE.pl
author A.M. Thurnherr <athurnherr@yahoo.com>
Thu, 05 Mar 2015 12:56:34 -0500
changeset 14 4097040ad31c
child 21 6555d203e0da
permissions -rwxr-xr-x
?
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    L I B S B E . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Mon Nov  3 12:42:14 2014
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Mon Nov  3 19:35:53 2014
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2014 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 83 13 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
#	Nov  3, 2014: - exported from [importCNV]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
# fname_SBE2std($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
#	- standardize field names (also adds correct unit %PARAMs)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
sub fname_SBE2std($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
	$_ = $_[0];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
	return 'lat' 		if /^lat/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
	return 'lon' 		if /^lon/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
	return 'press'		if /^prDM/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
	return 'depth'		if /^depSM/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
	return 'O2' 		if /^sbeox0/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
	return 'alt_O2' 	if /^sbeox1/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
	return 'salin' 		if /^sal00/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
	return 'alt_salin' 	if /^sal11/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
	return 'elapsed'	if /^timeS/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
	if (/^t090/) {											# temperatures with different scales
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
			if defined($P{ITS}) && ($P{ITS} != 90);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
		&antsAddParams('ITS',90); $P{ITS} = 90;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
		return 'temp';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
	} elsif (/^t068/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
			if defined($P{ITS}) && ($P{ITS} != 68);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
		&antsAddParams('ITS',68); $P{ITS} = 68;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
		return 'temp';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
	if (/^t190/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
			if defined($P{ITS}) && ($P{ITS} != 90);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
		&antsAddParams('ITS',90); $P{ITS} = 90;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
		return 'alt_temp';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
	} elsif (/^t168/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
			if defined($P{ITS}) && ($P{ITS} != 68);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
		&antsAddParams('ITS',68); $P{ITS} = 68;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
		return 'alt_temp';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
	if (m{^c0S/m}) {										# conductivity with different units
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
			if defined($P{cond.unit}) && ($P{cond.unit} ne 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
		&antsAddParams('cond.unit','S/m'); $P{cond.unit} = 'S/m';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
		return 'cond';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
	} elsif (m{^c0mS/cm}) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
			if defined($P{cond.unit}) && ($P{cond.unit} != 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
		&antsAddParams('cond.unit','mS/cm'); $P{cond.unit} = 'mS/cm';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
		return 'cond';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    67
	if (m{^c1S/m}) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
			if defined($P{cond.unit}) && ($P{cond.unit} != 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
		&antsAddParams('cond.unit','S/m'); $P{cond.unit} = 'S/m';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
		return 'alt_cond';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
	} elsif (m{^c1mS/cm}) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
			if defined($P{cond.unit}) && ($P{cond.unit} != 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
		&antsAddParams('cond.unit','mS/cm'); $P{cond.unit} = 'mS/cm';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
		return 'alt_cond';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    78
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    79
	return $_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    80
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    81
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    82
# same as above but leaving names in place (only setting %PARAMs)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    83
sub fname_SBE($)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    84
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    85
	$_ = $_[0];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    86
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    87
	if (/^t090/) {											# temperatures with different scales
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    88
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    89
			if defined($P{ITS}) && ($P{ITS} != 90);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    90
		&antsAddParams('ITS',90); $P{ITS} = 90;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    91
	} elsif (/^t068/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    92
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    93
			if defined($P{ITS}) && ($P{ITS} != 68);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    94
		&antsAddParams('ITS',68); $P{ITS} = 68;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    95
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    96
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    97
	if (/^t190/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    98
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    99
			if defined($P{ITS}) && ($P{ITS} != 90);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   100
		&antsAddParams('ITS',90); $P{ITS} = 90;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   101
	} elsif (/^t168/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   102
		croak("$0: inconsistent temperature scales\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   103
			if defined($P{ITS}) && ($P{ITS} != 68);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   104
		&antsAddParams('ITS',68); $P{ITS} = 68;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   105
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   106
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   107
	if (m{^c0S/m}) {										# conductivity with different units
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   108
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   109
			if defined($P{cond.unit}) && ($P{cond.unit} ne 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   110
		&antsAddParams('cond.unit','S/m'); $P{cond.unit} = 'S/m';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   111
	} elsif (m{^c0mS/cm}) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   112
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   113
			if defined($P{cond.unit}) && ($P{cond.unit} != 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   114
		&antsAddParams('cond.unit','mS/cm'); $P{cond.unit} = 'mS/cm';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   115
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   116
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   117
	if (m{^c1S/m}) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   118
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   119
			if defined($P{cond.unit}) && ($P{cond.unit} != 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   120
		&antsAddParams('cond.unit','S/m'); $P{cond.unit} = 'S/m';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   121
	} elsif (m{^c1mS/cm}) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   122
		croak("$0: inconsistent conductivity units\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   123
			if defined($P{cond.unit}) && ($P{cond.unit} != 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   124
		&antsAddParams('cond.unit','mS/cm'); $P{cond.unit} = 'mS/cm';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   125
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   126
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   127
	return $_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   128
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   129
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   130
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   131
# SBE_checkTime($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   132
# 	- make sure all times are (roughly) the same
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   133
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   134
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   135
{ # static scope
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   136
	my($target_month,$target_day,$target_year,$target_time);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   137
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   138
sub SBE_checkTime($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   139
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   140
	return unless $_[1];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   141
	my($mo,$dy,$yr,$tm) = split('\s+',$_[0]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   142
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   143
	unless (defined($target_month)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   144
		$target_month = $mo;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   145
		$target_day   = $dy;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   146
		$target_year  = $yr;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   147
		$target_time  = $tm;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   148
		return;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   149
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   150
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   151
	croak("$0: inconsistent dates in header ($target_month $target_day $target_year vs $mo $dy $yr)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   152
		unless ($target_month eq $mo && $target_day == $dy && $target_year == $yr);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   153
	croak("$0: inconsistent times in header ($target_time vs $tm)\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   154
		unless (abs(frac_day(split(':',$target_time))-frac_day(split(':',$tm))) < 1/60/24);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   155
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   156
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   157
} # static scope
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   158
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   159
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   160
# sub SBE_parseHeader(FP,std-field-names,time-check)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   161
#	- parse header information
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   162
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   163
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   164
sub SBE_parseHeader($$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   165
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   166
	my($FP,$sfn,$tc) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   167
	my($hdr,$nfields,$nrecs,$deg,$min,$NS,$EW,$lat,$lon,$sampint,$badval,$ftype);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   168
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   169
	while (1) { 										# parse header
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   170
		chomp($hdr = <$FP>);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   171
		$hdr =~ s/\r*$//;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   172
		die("$0: unexpected EOF (format error)\n") unless defined($hdr);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   173
		last if ($hdr eq '*END*');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   174
	    
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   175
		$nfields = $',next if ($hdr =~ /nquan = /); 	# Layout
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   176
		$nrecs = $',next if ($hdr =~ /nvalues = /);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   177
		if ($hdr =~ /name (\d+) = ([^:]+):/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   178
			$antsNewLayout[$1] = $sfn ? fname_SBE2std($2) : fname_SBE($2);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   179
			next;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   180
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   181
		    
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   182
		SBE_checkTime($1,$tc),next 							# sanity time check
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   183
			if ($hdr =~ /NMEA UTC \(Time\) = (.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   184
		SBE_checkTime($1,$tc),next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   185
			if ($hdr =~ /System UpLoad Time = (.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   186
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   187
		&antsAddParams('CNV_File',$1),next				# selected metadata
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   188
			if ($hdr =~ /FileName = (.*)$/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   189
		SBE_checkTime($1,$tc),&antsAddParams('start_time',$1),next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   190
			if ($hdr =~ /start_time = (.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   191
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   192
		&antsAddParams('station',$1),next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   193
			if ($hdr =~ /Station\s*:\s*(.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   194
		&antsAddParams('ship',$1),next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   195
			if ($hdr =~ /Ship\s*:\s*(.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   196
		&antsAddParams('cruise',$1),next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   197
			if ($hdr =~ /Cruise\s*:\s*(.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   198
		&antsAddParams('time',$1),next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   199
			if ($hdr =~ /Time\s*:\s*(.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   200
		&antsAddParams('date',$1),next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   201
			if ($hdr =~ /Date\s*:\s*(.*)/);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   202
	
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   203
		if (($hdr =~ /Latitude\s*[:=]\s*/) && !defined($lat)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   204
			($deg,$min,$NS) = split(/\s+/,$');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   205
			croak("$0: cannot decode latitude ($')\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   206
				unless ($NS eq 'N' || $NS eq 'S');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   207
			$lat = $deg + $min/60;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   208
			$lat *= -1 if ($NS eq 'S');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   209
			&antsAddParams('lat',$lat);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   210
			next;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   211
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   212
		if (($hdr =~ /Longitude\s*[:=]\s*/) && !defined($lon)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   213
			($deg,$min,$EW) = split(/\s+/,$');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   214
			croak("$0: cannot decode longitude ($')\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   215
				unless ($EW eq 'E' || $EW eq 'W');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   216
			$lon = $deg + $min/60;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   217
			$lon *= -1 if ($EW eq 'W');
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   218
			&antsAddParams('lon',$lon);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   219
			next;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   220
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   221
	    
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   222
		if ($hdr =~ /interval = seconds: /) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   223
			$sampint = 1*$';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   224
			&antsAddParams('sampling_frequency',1/$sampint);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   225
			next;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   226
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   227
		if ($hdr =~ /interval = decibars: /) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   228
			$sampint = 1*$';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   229
			&antsAddParams('sampling_press_interval',$sampint);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   230
			next;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   231
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   232
	    
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   233
		$badval = $',next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   234
			if ($hdr =~ /bad_flag = /); 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   235
		$ftype = $',next
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   236
			if ($hdr =~ /file_type = /);    
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   237
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   238
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   239
	croak("$0: cannot determine file layout\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   240
		unless (@antsNewLayout && defined($nfields) && defined($nrecs));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   241
	croak("$0: cannot determine missing value\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   242
	    unless defined($badval);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   243
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   244
	@antsLayout = @antsNewLayout;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   245
	return ($nfields,$nrecs,$sampint,$badval,$ftype,$lat,$lon);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   246
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   247
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   248
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   249
# SBEin($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   250
#	- read SBE CTD data
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   251
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   252
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   253
{ my(@dta); my($nextR)=0;										# static scope
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   254
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   255
sub SBEin($$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   256
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   257
	my($FP,$ftype,$nf,$nr,$bad) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   258
	my(@add);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   259
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   260
	splice(@ants_,0,$antsBufSkip);								# shift buffers
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   261
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   262
	if ($ftype eq 'ascii') {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   263
		until ($#ants_>=0 && &antsBufFull()) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   264
			return undef unless (@add = &antsFileIn($FP));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   265
			for (my($f)=0; $f<$nf; $f++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   266
				$add[$f] = nan if ($add[$f] == $bad);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   267
			}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   268
			push(@ants_,[@add]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   269
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   270
	} elsif ($ftype eq 'binary') {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   271
		unless (@dta) {											# read binary data once
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   272
			my($fbits) = 8 * length(pack('f',0));
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   273
			croak(sprintf("$0: incompatible native CPU float representation (%d instead of 32bits)\n",fbits))
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   274
				unless ($fbits == 32);  
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   275
			my($dta);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   276
			croak("$0: can't read binary data\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   277
				unless (read($FP,$dta,4*$nf*$nr) == 4*$nf*$nr);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   278
			print(STDERR "WARNING: extraneous data at EOF\n")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   279
				unless eof($FP);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   280
			$dta = pack('V*',unpack('N*',$dta)) 				# big-endian CPU
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   281
				if (unpack('h*', pack('s', 1)) =~ /01/);		# c.f. perlport(1)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   282
			@dta = unpack("f*",$dta);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   283
			for ($r=0; $r<$nr; $r++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   284
				for ($f=0; $f<$nf; $f++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   285
					@add[$f] = $dta[$r*$nf+$f] == $bad ? nan : $dta[$r*$nf+$f];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   286
				}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   287
	        }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   288
	    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   289
		until ($#ants_>=0 && &antsBufFull()) {					# copy next out
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   290
			return undef unless ($nextR < $nr);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   291
			@add = $dta[$nextR*$nf..($nextR+1)*$nr+$nf];
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   292
			push(@ants_,[@add]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   293
			$nextR++;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   294
        }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   295
    } else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   296
		croak("$0: unknown file type $ftype\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   297
    }
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   298
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   299
	return $#ants_+1;											# ok
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   300
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   301
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   302
} # static scope
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   303
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   304
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   305
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   306
1;																# return true