libSBE.pl
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 38 15c603bc4f70
child 51 14ce2387de5e
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    L I B S B E . P L 
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Mon Nov  3 12:42:14 2014
38
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
     4
#                    dlm: Thu Jan  3 14:06:25 2019
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2014 A.M. Thurnherr
38
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
     6
#                    uE-Info: 17 30 NIL 0 0 72 2 2 4 NIL ofnI
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# HISTORY:
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
#	Nov  3, 2014: - exported from [importCNV]
21
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 10
diff changeset
    11
#	Jun 16, 2015: - cosmetics
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 10
diff changeset
    12
#	Jun 17, 2015: - ensured numeric retvals of SBE_parseheader are returned as numbers
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 10
diff changeset
    13
#	Jun 18, 2015: - BUG: binary code had several bugs
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    14
#	Sep 29, 2015: - added potemp and sigma standard field names
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    15
#	Mar 19, 2016: - BUG: conductivity unit checking on input had multiple bugs
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    16
#				  - solution for files with multiple conductivity units: ignore
38
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
    17
#				    all conductivities with units not equal to the first cond var
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    18
#				  - added $libSBE_quiet to suppress diagnostic messages
29
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
    19
#	May 31, 2016: - made successfully decoding lat/lon optional
30
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 29
diff changeset
    20
#	Mar 10, 2017: - made lat/lon decoding more flexible
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
    21
#	Mar  3, 2018: - adapted SBE37 fields (multiple changes)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
    22
#				  - added default field name for sound speed (sspd)
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
    23
#	Mar  8, 2018: - BUG: SBE_parseHeader() did not correctly detect missing lat/lon
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
    24
#				  - suppressed warnings in SBE_parseHeader()
38
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
    25
#	Apr 23, 2018: - BUG: header lat/lon was incorrectly parsed when there was no space
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
    26
#						 before hemisphere
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
    27
#	Jan  3, 2019: - BUG: SBE_parseHeader() did not correctly detect missing lat/lon
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
# fname_SBE2std($)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
#	- standardize field names (also adds correct unit %PARAMs)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
sub fname_SBE2std($)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
{
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
	$_ = $_[0];
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
	return 'lat' 		if /^lat/;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
	return 'lon' 		if /^lon/;
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
    40
	return 'press'		if /^pr[dD]M/;
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
    41
	return 'sspd'		if /^sv[dD]M/;
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
	return 'depth'		if /^depSM/;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
	return 'O2' 		if /^sbeox0/;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
	return 'alt_O2' 	if /^sbeox1/;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
	return 'salin' 		if /^sal00/;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
	return 'alt_salin' 	if /^sal11/;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
	return 'elapsed'	if /^timeS/;
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
    48
	return 'time_jday'	if /^timeJV2/;
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    49
	return 'sigma0' 	if /^sigma.*00/;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    50
	return 'alt_sigma0' if /^sigma.*11/;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    51
	return 'rho0' 		if /^density00/;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    52
	return 'alt_rho0'	if /^density11/;
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
	
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
	if (/^t090/) {											# temperatures with different scales
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    55
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
			if defined($P{ITS}) && ($P{ITS} != 90);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
		&antsAddParams('ITS',90); $P{ITS} = 90;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
		return 'temp';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
	} elsif (/^t068/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    60
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
			if defined($P{ITS}) && ($P{ITS} != 68);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
		&antsAddParams('ITS',68); $P{ITS} = 68;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
		return 'temp';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
		
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
	if (/^t190/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    67
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
			if defined($P{ITS}) && ($P{ITS} != 90);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
		&antsAddParams('ITS',90); $P{ITS} = 90;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
		return 'alt_temp';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
	} elsif (/^t168/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    72
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
			if defined($P{ITS}) && ($P{ITS} != 68);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
		&antsAddParams('ITS',68); $P{ITS} = 68;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
		return 'alt_temp';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    78
	if (/^potemp090/) {											# potential temperatures with different scales
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    79
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    80
			if defined($P{ITS}) && ($P{ITS} != 90);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    81
		&antsAddParams('ITS',90); $P{ITS} = 90;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    82
		return 'theta0';
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    83
	} elsif (/^potemp068/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    84
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    85
			if defined($P{ITS}) && ($P{ITS} != 68);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    86
		&antsAddParams('ITS',68); $P{ITS} = 68;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    87
		return 'theta0';
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    88
	}
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    89
		
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    90
	if (/^potemp190/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    91
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    92
			if defined($P{ITS}) && ($P{ITS} != 90);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    93
		&antsAddParams('ITS',90); $P{ITS} = 90;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    94
		return 'alt_theta0';
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    95
	} elsif (/^potemp168/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
    96
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    97
			if defined($P{ITS}) && ($P{ITS} != 68);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    98
		&antsAddParams('ITS',68); $P{ITS} = 68;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
    99
		return 'alt_theta0';
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   100
	}
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   101
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   102
	if (m{^c0S/m} || m{^cond0S/m}) {										# conductivity with different units
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   103
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   104
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   105
		&antsAddParams('cond.unit','S/m');
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   106
		return 'cond';
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   107
	} elsif (m{^c0mS/cm} || m{^cond0mS/cm}) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   108
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   109
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   110
		&antsAddParams('cond.unit','mS/cm');
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   111
		return 'cond';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   112
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   113
		
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   114
	if (m{^c1S/m} || m{^cond1S/m}) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   115
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   116
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   117
		&antsAddParams('cond.unit','S/m');
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   118
		return 'alt_cond';
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   119
	} elsif (m{^c1mS/cm} || m{^cond1mS/cm}) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   120
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   121
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   122
		&antsAddParams('cond.unit','mS/cm');
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   123
		return 'alt_cond';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   124
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   125
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   126
	return $_;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   127
}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   128
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   129
# same as above but leaving names in place (only setting %PARAMs)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   130
sub fname_SBE($)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   131
{
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   132
	$_ = $_[0];
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   133
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   134
	if (/^t090/) {											# temperatures with different scales
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   135
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   136
			if defined($P{ITS}) && ($P{ITS} != 90);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   137
		&antsAddParams('ITS',90); $P{ITS} = 90;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   138
	} elsif (/^t068/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   139
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   140
			if defined($P{ITS}) && ($P{ITS} != 68);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   141
		&antsAddParams('ITS',68); $P{ITS} = 68;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   142
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   143
		
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   144
	if (/^t190/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   145
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   146
			if defined($P{ITS}) && ($P{ITS} != 90);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   147
		&antsAddParams('ITS',90); $P{ITS} = 90;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   148
	} elsif (/^t168/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   149
		return undef
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   150
			if defined($P{ITS}) && ($P{ITS} != 68);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   151
		&antsAddParams('ITS',68); $P{ITS} = 68;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   152
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   153
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   154
	if (/^potemp090/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   155
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   156
			if defined($P{ITS}) && ($P{ITS} != 90);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   157
		&antsAddParams('ITS',90); $P{ITS} = 90;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   158
	} elsif (/^potemp068/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   159
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   160
			if defined($P{ITS}) && ($P{ITS} != 68);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   161
		&antsAddParams('ITS',68); $P{ITS} = 68;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   162
	}
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   163
		
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   164
	if (/^potemp190/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   165
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   166
			if defined($P{ITS}) && ($P{ITS} != 90);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   167
		&antsAddParams('ITS',90); $P{ITS} = 90;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   168
	} elsif (/^potemp168/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   169
		return undef
23
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   170
			if defined($P{ITS}) && ($P{ITS} != 68);
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   171
		&antsAddParams('ITS',68); $P{ITS} = 68;
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   172
	}
a4fef65fd959 V6.2 release candidate
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 21
diff changeset
   173
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   174
	if (m{^c0S/m} || m{^cond0S/m}) {										# conductivity with different units
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   175
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   176
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   177
		&antsAddParams('cond.unit','S/m');
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   178
	} elsif (m{^c0mS/cm} || m{^cond0mS/cm}) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   179
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   180
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   181
		&antsAddParams('cond.unit','mS/cm');
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   182
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   183
		
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   184
	if (m{^c1S/m} || m{^cond1S/m}) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   185
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   186
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'S/m');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   187
		&antsAddParams('cond.unit','S/m');
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   188
	} elsif (m{^c1mS/cm} || m{^cond1mS/cm}) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   189
		return undef
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   190
			if defined($P{'cond.unit'}) && ($P{'cond.unit'} ne 'mS/cm');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   191
		&antsAddParams('cond.unit','mS/cm');
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   192
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   193
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   194
	return $_;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   195
}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   196
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   197
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   198
# SBE_checkTime($$)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   199
# 	- make sure all times are (roughly) the same
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   200
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   201
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   202
{ # static scope
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   203
	my($target_month,$target_day,$target_year,$target_time);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   204
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   205
sub SBE_checkTime($$)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   206
{
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   207
	return unless $_[1];
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   208
	my($mo,$dy,$yr,$tm) = split('\s+',$_[0]);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   209
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   210
	unless (defined($target_month)) {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   211
		$target_month = $mo;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   212
		$target_day   = $dy;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   213
		$target_year  = $yr;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   214
		$target_time  = $tm;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   215
		return;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   216
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   217
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   218
	croak("$0: inconsistent dates in header ($target_month $target_day $target_year vs $mo $dy $yr)\n")
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   219
		unless ($target_month eq $mo && $target_day == $dy && $target_year == $yr);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   220
	croak("$0: inconsistent times in header ($target_time vs $tm)\n")
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   221
		unless (abs(frac_day(split(':',$target_time))-frac_day(split(':',$tm))) < 1/60/24);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   222
}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   223
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   224
} # static scope
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   225
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   226
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   227
# sub SBE_parseHeader(FP,std-field-names,time-check)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   228
#	- parse header information
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   229
#	- set @ignore_input_fields with fields with inconsistent units
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   230
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   231
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   232
my(@ignore_input_fields);								# in reverse order!!!
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   233
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   234
sub SBE_parseHeader($$$)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   235
{
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   236
	my($FP,$sfn,$tc) = @_;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   237
	my($hdr,$nfields,$nrecs,$deg,$min,$NS,$EW,$lat,$lon,$sampint,$badval,$ftype);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   238
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   239
	while (1) { 										# parse header
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   240
		chomp($hdr = <$FP>);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   241
		$hdr =~ s/\r*$//;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   242
		die("$0: unexpected EOF (format error)\n") unless defined($hdr);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   243
		last if ($hdr eq '*END*');
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   244
	    
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   245
		$nfields = $',next if ($hdr =~ /nquan = /); 	# Layout
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   246
		$nrecs = $',next if ($hdr =~ /nvalues = /);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   247
		if ($hdr =~ /name (\d+) = ([^:]+):/) {
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   248
			my($fn) = $sfn ? fname_SBE2std($2) : fname_SBE($2);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   249
			if (defined($fn)) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   250
				push(@antsNewLayout,$fn);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   251
			} else {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   252
				unshift(@ignore_input_fields,$1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   253
				&antsInfo("CNV input field \#$1 ($2) ignored, because of unit inconsistency")
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   254
					unless defined($libSBE_quiet);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   255
			}
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   256
		}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   257
		    
21
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 10
diff changeset
   258
		SBE_checkTime($1,$tc),next 						# sanity time check
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   259
			if ($hdr =~ /NMEA UTC \(Time\) = (.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   260
		SBE_checkTime($1,$tc),next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   261
			if ($hdr =~ /System UpLoad Time = (.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   262
	
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   263
		&antsAddParams('CNV_File',$1),next				# selected metadata
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   264
			if ($hdr =~ /FileName = (.*)$/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   265
		SBE_checkTime($1,$tc),&antsAddParams('start_time',$1),next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   266
			if ($hdr =~ /start_time = (.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   267
	
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   268
		&antsAddParams('station',$1),next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   269
			if ($hdr =~ /Station\s*:\s*(.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   270
		&antsAddParams('ship',$1),next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   271
			if ($hdr =~ /Ship\s*:\s*(.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   272
		&antsAddParams('cruise',$1),next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   273
			if ($hdr =~ /Cruise\s*:\s*(.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   274
		&antsAddParams('time',$1),next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   275
			if ($hdr =~ /Time\s*:\s*(.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   276
		&antsAddParams('date',$1),next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   277
			if ($hdr =~ /Date\s*:\s*(.*)/);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   278
	
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   279
		if (($hdr =~ /Latitude\s*[:=]\s*/) && !defined($lat)) {
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   280
#			($deg,$min,$NS) = split(/\s+/,$');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   281
			($deg,$min,$NS) = ($' =~ m{([^\s]+)\s+(\d+\.\d*)\s*([NS])});
29
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   282
			if ($NS eq 'N' || $NS eq 'S') {
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   283
				$lat = $deg + $min/60;
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   284
				$lat *= -1 if ($NS eq 'S');
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   285
			} elsif (!defined($NS) && defined($deg) && abs($deg)<=90 && ($min >= 0) && ($min <= 60)) {
30
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 29
diff changeset
   286
				$lat = $deg + $min/60;
29
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   287
			} else {
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   288
#				print(STDERR "$0: WARNING: cannot decode latitude ($')\n");
29
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   289
				$lat = nan;
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   290
			}
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   291
			&antsAddParams('lat',$lat);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   292
			next;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   293
		}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   294
		if (($hdr =~ /Longitude\s*[:=]\s*/) && !defined($lon)) {
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   295
#			($deg,$min,$EW) = split(/\s+/,$');
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   296
			($deg,$min,$EW) = ($' =~ m{([^\s]+)\s+(\d+\.\d*)\s*([EW])});
29
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   297
			if ($EW eq 'E' || $EW eq 'W') {
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   298
				$lon = $deg + $min/60;
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   299
				$lon *= -1 if ($EW eq 'W');
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   300
			} elsif (!defined($EW) && defined($deg) && abs($deg)<=360 && ($min >= 0) && ($min <= 60)) {
30
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 29
diff changeset
   301
				$lon = $deg + $min/60;
29
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   302
			} else {
36
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 30
diff changeset
   303
#				print(STDERR "$0: WARNING: cannot decode longitude ($')\n");
29
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   304
				$lon= nan;
f41d125405a6 version after ECOGIG EN586 cruise
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 28
diff changeset
   305
			}
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   306
			&antsAddParams('lon',$lon);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   307
			next;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   308
		}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   309
	    
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   310
		if ($hdr =~ /interval = seconds: /) {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   311
			$sampint = 1*$';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   312
			&antsAddParams('sampling_frequency',1/$sampint);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   313
			next;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   314
		}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   315
		if ($hdr =~ /interval = decibars: /) {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   316
			$sampint = 1*$';
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   317
			&antsAddParams('sampling_press_interval',$sampint);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   318
			next;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   319
		}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   320
	    
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   321
		$badval = $',next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   322
			if ($hdr =~ /bad_flag = /); 
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   323
		$ftype = $',next
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   324
			if ($hdr =~ /file_type = /);    
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   325
	}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   326
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   327
	croak("$0: cannot determine file layout\n")
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   328
		unless (@antsNewLayout && defined($nfields) && defined($nrecs));
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   329
	croak("$0: cannot determine missing value\n")
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   330
	    unless defined($badval);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   331
38
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
   332
	$lat = nan unless defined($lat);
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
   333
	$lon = nan unless defined($lon);
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
   334
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   335
	@antsLayout = @antsNewLayout;
38
15c603bc4f70 after UK cruise
Andreas Thurnherr <ant@ldeo.columbia.edu>
parents: 36
diff changeset
   336
	return (1*$nfields,1*$nrecs,1*$sampint,1*$badval,$ftype,$lat,$lon);
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   337
}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   338
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   339
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   340
# SBEin($$)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   341
#	- read SBE CTD data
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   342
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   343
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   344
{ my(@dta); my($nextR)=0;										# static scope
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   345
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   346
sub SBEin($$$$$)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   347
{
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   348
	my($FP,$ftype,$nf,$nr,$bad) = @_;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   349
	my(@add);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   350
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   351
	splice(@ants_,0,$antsBufSkip);								# shift buffers
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   352
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   353
	if ($ftype eq 'ascii') {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   354
		until ($#ants_>=0 && &antsBufFull()) {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   355
			return undef unless (@add = &antsFileIn($FP));
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   356
			for (my($f)=0; $f<=$nf; $f++) {
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   357
				$add[$f] = nan if ($add[$f] == $bad);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   358
			}
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   359
			foreach my $sf (@ignore_input_fields) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   360
				splice(@add,$sf,1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   361
			}
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   362
			push(@ants_,[@add]);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   363
		}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   364
	} elsif ($ftype eq 'binary') {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   365
		unless (@dta) {											# read binary data once
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   366
			my($fbits) = 8 * length(pack('f',0));
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   367
			croak(sprintf("$0: incompatible native CPU float representation (%d instead of 32bits)\n",fbits))
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   368
				unless ($fbits == 32);  
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   369
			my($dta);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   370
			croak("$0: can't read binary data\n")
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   371
				unless (read($FP,$dta,4*$nf*$nr) == 4*$nf*$nr);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   372
			print(STDERR "WARNING: extraneous data at EOF\n")
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   373
				unless eof($FP);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   374
			$dta = pack('V*',unpack('N*',$dta)) 				# big-endian CPU
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   375
				if (unpack('h*', pack('s', 1)) =~ /01/);		# c.f. perlport(1)
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   376
			@dta = unpack("f*",$dta);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   377
			for ($r=0; $r<$nr; $r++) {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   378
				for ($f=0; $f<$nf; $f++) {
21
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 10
diff changeset
   379
					$dta[$r*$nf+$f] = nan if ($dta[$r*$nf+$f] == $bad);
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   380
				}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   381
	        }
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   382
	    }
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   383
		until ($#ants_>=0 && &antsBufFull()) {					# copy next out
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   384
			return undef unless ($nextR < $nr);
21
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 10
diff changeset
   385
			@add = @dta[$nextR*$nf..($nextR+1)*$nf-1];
28
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   386
			foreach my $sf (@ignore_input_fields) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   387
				splice(@add,$sf,1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents: 23
diff changeset
   388
			}
10
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   389
			push(@ants_,[@add]);
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   390
			$nextR++;
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   391
        }
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   392
    } else {
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   393
		croak("$0: unknown file type $ftype\n");
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   394
    }
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   395
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   396
	return $#ants_+1;											# ok
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   397
}
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   398
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   399
} # static scope
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   400
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   401
#----------------------------------------------------------------------
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   402
3dfa16523886 whoosher version
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   403
1;																# return true