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