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