libNODC.pl
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 0 a5233793bf69
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    L I B N O D C . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Mon Aug 28 11:07:47 2000
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Sun Jul  2 00:16:26 2006
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 2000 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 117 0 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
#	Aug 28, 2000: - created
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
#	Sep 05, 2000: - allow spaces instead of 0es in lat/lon to accomodate
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
#					for Talley's OCEANUS 24S files
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
#	Oct 16, 2000: - added &DD[D]MMSSh2d()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
#	Feb 28, 2001: - changed &depth to &obs_depth to remove clash with
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
#					[libEOS83]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
#	Aug  1, 2001: - BUG: obs() could not handle Reid and Mantyla -ve values
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
#					correctly (such as -80 with precision 3!)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
#   Jul  1, 2006: - Version 3.3 [HISTORY]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
require "$ANTS/libconv.pl";
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
# Lat/Lon
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
sub DDMMXh2d(@)			# NODC SD2 header info
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
	my($DDMMX,$H) = &antsFunUsage(2,"51","DDMMX H",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
	$DDMMX =~ s/ /0/g;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
	return &dmh2d(substr($DDMMX,0,2),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
				  substr($DDMMX,2,2) . "." . substr($DDMMX,4,1),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
				  $H);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
sub DDDMMXh2d(@)		# NODC SD2 header info
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
	my($DDDMMX,$H) = &antsFunUsage(2,"61","DDDMMX H",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
	$DDDMMX =~ s/ /0/g;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
	return &dmh2d(substr($DDDMMX,0,3),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
				  substr($DDDMMX,3,2) . "." . substr($DDDMMX,5,1),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
				  $H);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
sub DDMMSSh2d(@)		# NODC detailed inventory info
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
	my($DDMMSS,$H) = &antsFunUsage(2,"61","DDMMSS H",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
	$DDMMSS =~ s/ /0/g;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
	return &dmsh2d(substr($DDMMSS,0,2),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
				   substr($DDMMSS,2,2),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
				   substr($DDMMSS,4,2),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
				   $H);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
sub DDDMMSSh2d(@)		# NODC detailed inventory info
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
	my($DDDMMSS,$H) = &antsFunUsage(2,"71","DDDMMSS H",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
	$DDDMMSS =~ s/ /0/g;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
	return &dmsh2d(substr($DDDMMSS,0,3),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
				   substr($DDDMMSS,3,2),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
				   substr($DDDMMSS,5,2),
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
				   $H);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
		
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
# date/time
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    67
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
sub YYMMDD(@)		# 6 digit date
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
	my($YYMMDD) = &antsFunUsage(1,"6","YYMMDD",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
	return substr($YYMMDD,2,2) . "/" .
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
		   substr($YYMMDD,4,2) . "/19" . substr($YYMMDD,0,2);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
sub HHt(@)			# 3 digits (hours to tenths)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
	my($HHt) = &antsFunUsage(1,"3","HHt",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    78
	return sprintf("%02d:%02d",substr($HHt,0,2),substr($HHt,2,1)*6);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    79
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    80
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    81
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    82
# depth
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    83
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    84
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    85
sub obs_depth(@)									# good depth only
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    86
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    87
	my($obs,$quality,$t_flag) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    88
		&antsFunUsage(3,"c..","obs quality t_flag",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    89
	return (isnan($quality) && ($t_flag ne 'T'))
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    90
		? $obs : nan;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    91
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    92
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    93
sub wire_out(@)										# wire-out
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    94
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    95
	my($obs,$quality,$t_flag) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    96
		&antsFunUsage(3,"c..","obs quality t_flag",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    97
	return (($quality == 6) && ($t_flag ne 'T'))
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    98
		? $obs : nan;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    99
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   100
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   101
sub t_depth(@)										# good thermometric depth
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   102
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   103
	my($obs,$quality,$t_flag) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   104
		&antsFunUsage(3,"c..","obs quality t_flag",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   105
	return (isnan($quality) && ($t_flag eq 'T'))
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   106
		? $obs : nan;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   107
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   108
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   109
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   110
# temp, salin, O2, ...
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   111
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   112
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   113
sub obs(@)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   114
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   115
	my($obs,$prec,$qual) =
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   116
		&antsFunUsage(3,".1.","obs prec qual",@_);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   117
	return nan if isnan($obs);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   118
	return nan if isnan($qual);						# spc->nan==OK
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   119
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   120
	my($fac) = 1;									# Reid and Mantyla weird fmt
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   121
	if ($obs =~ /^-/) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   122
		$fac = -1;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   123
		$obs = $';
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   124
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   125
	$obs = sprintf("%0${prec}d",$obs);				# pre-pad missing 0es
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   126
	substr($obs,-$prec,0) = ".";					# PERL is wonderful...
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   127
	return $fac * $obs;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   128
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   129
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
   130
1;