Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
MetObs
AossCeilo
Commits
8df0e487
Unverified
Commit
8df0e487
authored
Sep 05, 2017
by
David Hoese
Browse files
Copy ceilometer code from old subversion repos
parent
af5bc944
Changes
10
Show whitespace changes
Inline
Side-by-side
AossCeilo/CONFIG.py
0 → 100644
View file @
8df0e487
"""This module holds all directory/path/URL information for metobs.ceilo
packages. This file should be the only place that holds this static information.
This file should not do any file manipulation at all, only return strings or pass
other static information such as what plot number goes with what data.
This module will check for environment variables to create constants of PATHS
and URL bases. It also has functions for getting file locations for any file
for a specified day.
"""
import
os
import
re
from
datetime
import
datetime
,
timedelta
from
metobs.util
import
RODict
,
CONFIG
as
c
CEILO_INCOMING_DIR
=
os
.
environ
.
get
(
'CEILO_INCOMING_DIR'
,
'/beach/incoming/Instrument_Data/METOBS/RIG/Ceilo/raw'
)
CEILO_PRAW_DIR
=
os
.
environ
.
get
(
'CEILO_PRAW_DIR'
,
'/beach/raw/aoss/ceilo'
)
CEILO_CACHE_DIR
=
os
.
environ
.
get
(
'CEILO_CACHE_DIR'
,
'/beach/cache/aoss/ceilo'
)
CEILO_LATEST_DIR
=
os
.
environ
.
get
(
'CEILO_LATEST_DIR'
,
'/beach/cache/aoss/ceilo'
)
CEILO_DIR_FORMAT
=
os
.
environ
.
get
(
'CEILO_DIR_FORMAT'
,
'%Y/%m'
)
CEILO_ASCII_LOC
=
os
.
environ
.
get
(
'CEILO_ASCII_LOC'
,
'/beach/cache/aoss/ceilo'
)
CEILO_NC_LOC
=
os
.
environ
.
get
(
'CEILO_NC_LOC'
,
'/beach/cache/aoss/ceilo'
)
CEILO_IMG_LOC
=
os
.
environ
.
get
(
'CEILO_IMG_LOC'
,
'http://metobs.ssec.wisc.edu/pub/cache/aoss/ceilo'
)
inst
=
'ceilo'
RE_DIGITS
=
re
.
compile
(
r
'\d+'
)
def
get_incoming_dir
():
"Return incoming directory for specified date"
return
os
.
path
.
join
(
CEILO_INCOMING_DIR
)
def
get_praw_dir
(
when
=
None
):
"Return raw directory for specified date and data_type"
when
=
when
or
datetime
.
now
()
return
os
.
path
.
join
(
CEILO_PRAW_DIR
,
when
.
strftime
(
CEILO_DIR_FORMAT
)
)
def
get_sraw_dir
(
when
=
None
):
"Return raw directory for specified date and data_type"
raise
NotImplementedError
(
"This function is not used anymore, there should only be one primary storage location"
)
#when = when or datetime.now()
#return os.path.join( CEILO_SRAW_DIR, when.strftime( CEILO_DIR_FORMAT ) )
def
get_cache_dir
(
data_type
,
when
=
None
):
"Return cache directory for specified date and data_type"
when
=
when
or
datetime
.
now
()
return
os
.
path
.
join
(
CEILO_CACHE_DIR
,
data_type
,
when
.
strftime
(
CEILO_DIR_FORMAT
)
)
def
get_latest_dir
():
"Return latest directory"
return
os
.
path
.
join
(
CEILO_LATEST_DIR
)
def
get_ascii_filename
(
when
=
None
,
site
=
"rig"
,
description
=
""
):
"Return the standard filename of the ascii file for the specified date"
when
=
when
or
datetime
.
now
()
return
c
.
get_filename
(
site
,
inst
,
when
,
ext
=
'ascii'
,
description
=
description
)
def
get_ascii_url
(
when
=
None
,
site
=
"rig"
,
description
=
""
):
"Return the standard url of the ascii file for the specified date"
when
=
when
or
datetime
.
now
()
return
os
.
path
.
join
(
CEILO_ASCII_LOC
,
'ascii'
,
when
.
strftime
(
CEILO_DIR_FORMAT
),
get_ascii_filename
(
when
,
site
=
site
,
description
=
description
))
def
get_nc_filename
(
when
=
None
,
site
=
"rig"
,
description
=
""
):
"Return the standard filename of the netCDF file for the specified date"
when
=
when
or
datetime
.
now
()
return
c
.
get_filename
(
site
,
inst
,
when
,
ext
=
'nc'
,
description
=
description
)
def
get_nc_url
(
when
=
None
,
site
=
"rig"
,
description
=
""
):
"Return the standard url of the netCDF file for the specified date"
when
=
when
or
datetime
.
now
()
return
os
.
path
.
join
(
CEILO_NC_LOC
,
'nc'
,
when
.
strftime
(
CEILO_DIR_FORMAT
),
get_nc_filename
(
when
,
site
=
site
,
description
=
description
))
def
get_img_filename
(
begin
,
end
,
ptype
=
1
,
tag
=
''
,
site
=
"rig"
,
description
=
""
):
"Return the standard filename of the image that goes from begin to end"
pname
=
_handle_plot_type
(
ptype
)
return
c
.
get_filename
(
site
,
inst
,
begin
,
end
=
end
,
ext
=
"png"
,
plotname
=
pname
,
description
=
description
,
tag
=
tag
)
def
get_quicklook_filename
(
begin
,
end
,
ptype
=
1
,
site
=
'rig'
,
description
=
''
):
return
get_img_filename
(
begin
,
end
,
ptype
,
tag
=
''
,
site
=
site
,
description
=
description
)
def
get_thumbnail_filename
(
begin
,
end
,
ptype
=
1
,
site
=
'rig'
,
description
=
''
):
return
get_img_filename
(
begin
,
end
,
ptype
,
tag
=
'tn'
,
site
=
site
,
description
=
description
)
def
get_img_url
(
begin
,
end
,
ptype
=
1
,
tag
=
''
,
site
=
"rig"
,
description
=
""
):
"Return the standard url of the image that goes from begin to end"
return
os
.
path
.
join
(
CEILO_IMG_LOC
,
'img'
,
begin
.
strftime
(
CEILO_DIR_FORMAT
),
get_img_filename
(
begin
,
end
,
ptype
,
tag
=
tag
,
site
=
site
,
description
=
description
))
def
get_quicklook_url
(
begin
,
end
,
ptype
=
1
,
site
=
'rig'
,
description
=
''
):
return
get_img_url
(
begin
,
end
,
ptype
,
tag
=
''
,
site
=
site
,
description
=
description
)
def
get_thumbnail_url
(
begin
,
end
,
ptype
=
1
,
site
=
'rig'
,
description
=
''
):
return
get_img_url
(
begin
,
end
,
ptype
,
tag
=
'tn'
,
site
=
site
,
description
=
description
)
def
rename_incoming
(
incoming_file
,
site
=
'rig'
,
description
=
''
):
file_date
=
datetime
(
*
tuple
(
[
int
(
x
)
for
x
in
RE_DIGITS
.
findall
(
incoming_file
)
]
))
present_date
=
datetime
.
now
()
praw
=
get_praw_dir
(
when
=
file_date
)
cache
=
get_cache_dir
(
'ascii'
,
when
=
file_date
)
rn
=
get_ascii_filename
(
when
=
file_date
,
site
=
site
,
description
=
description
)
remove
=
file_date
.
date
()
<
(
present_date
-
timedelta
(
days
=
30
)).
date
()
return
praw
,
cache
,
rn
,
remove
def
get_type_name
():
return
RODict
({
1
:
'Backscatter'
,
2
:
'Cloud Base Height'
,
3
:
'Vertical Visibility'
})
def
_handle_plot_type
(
plottype
=
1
):
if
plottype
==
1
:
return
''
elif
plottype
==
2
:
return
''
elif
plottype
==
3
:
return
''
else
:
raise
ValueError
(
"Plot type must be between 1-3"
)
AossCeilo/CONFIG.pyc
0 → 100644
View file @
8df0e487
File added
AossCeilo/__init__.py
0 → 100644
View file @
8df0e487
__import__
(
'pkg_resources'
).
declare_namespace
(
__name__
)
__docformat__
=
'Epytext'
import
os
from
metobs.ceilo
import
CONFIG
as
c
instrument_name
=
'ceilo'
def
get_ascii_name
(
dt
,
site
=
'rig'
):
"""
Make a standard filename for a tower ascii file.
@type dt: datetime
@param dt: datetime of the url to generate.
@type site: str
@param site: Name of an implemented instrument site
"""
return
c
.
get_ascii_filename
(
dt
)
def
get_nc_name
(
dt
,
site
=
'rig'
):
"""
Make a standard filename for a ceilometer netcdf file.
@type dt: datetime
@param dt: datetime of the url to generate.
@type site: str
@param site: Name of an implemented instrument site
"""
return
c
.
get_nc_filename
(
dt
)
def
get_thumbnail_name
(
begin
,
end
=
None
,
site
=
'rig'
,
plottype
=
1
):
"""Make a standard filename for a ceilometer image thumbnail file.
"""
return
c
.
get_image_filename
(
begin
,
end
,
ptype
=
plottype
,
tag
=
'tn'
)
def
get_nc_url
(
dt
,
site
=
'rig'
,
host
=
None
):
"""
Get a URL to a ceilometer NetCDF file.
@type dt: datetime
@param dt: datetime of the url to generate.
@type site: str
@param site: Name of an implemented instrument site
@rtype: str
@return: A full URL suitable for OPeNDAP access
"""
return
c
.
get_nc_url
(
dt
)
def
get_ascii_url
(
dt
,
site
=
"rig"
,
host
=
None
):
"""Get a URL to a ceilometer ASCII file on the opendap server
@type dt: datetime
@param dt: datetime of the url to generate.
@type site: str
@param site: Name of an implemented instrument site
@rtype: str
@return: A full URL suitible for HTTP access
"""
return
c
.
get_ascii_url
(
dt
)
def
get_thumbnail_url
(
begin
,
end
=
None
,
site
=
"rig"
,
host
=
None
,
plottype
=
1
):
return
c
.
get_image_url
(
begin
,
end
,
ptype
=
plottype
,
tag
=
'tn'
)
def
get_image_url
(
begin
,
end
=
None
,
site
=
"rig"
,
host
=
None
,
plottype
=
1
):
return
c
.
get_image_url
(
begin
,
end
,
ptype
=
plottype
,
tag
=
''
)
def
get_type_name
():
return
c
.
get_type_name
()
def
_handle_plottype
(
plottype
=
1
):
return
c
.
_handle_plot_type
(
plottype
)
AossCeilo/ceilo.ncml
0 → 100644
View file @
8df0e487
<?xml version="1.0" encoding="UTF-8"?>
<netcdf
xmlns=
"http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2"
>
<dimension
name=
"time"
isUnlimited=
"true"
/>
<dimension
name=
"range"
length=
"256"
/>
<dimension
name=
"string_len"
length=
"8"
/>
<attribute
name=
"Conventions"
type=
"String"
value=
"CF-1.3"
/>
<attribute
name=
"title"
type=
"String"
value=
"Rooftop Instrument Group(RIG) Ceilometer obervations"
/>
<attribute
name=
"institution"
type=
"String"
value=
"University of Wisconsin
Space Science and Engineering Center
1225 W. Dayton St.
Madison, WI 53706"
/>
<attribute
name=
"source"
type=
"String"
value=
"surface observation"
/>
<attribute
name=
"history"
type=
"String"
value=
""
/>
<attribute
name=
"references"
type=
"String"
value=
"http://metobs.ssec.wisc.edu"
/>
<attribute
name=
"comment"
type=
"String"
value=
""
/>
<attribute
name=
"site_id"
type=
"String"
value=
""
/>
<attribute
name=
"facility_id"
type=
"String"
value=
""
/>
<attribute
name=
"sample_int"
type=
"String"
value=
"15 seconds"
/>
<attribute
name=
"serial_number"
type=
"String"
value=
""
/>
<attribute
name=
"Mentor_QC_Field_Information"
type=
"String"
value=
"For each qc field interpret the values as follows:
Basic mentor QC checks (bit values):
==========================================
0x0 = value is within the specified range
0x1 = value is equal to 'missing_value'
0x2 = value is less than the 'valid_min'
0x4 = value is greater than the 'valid_max'
0x8 = value failed the 'valid_delta' check
If the value is a 'missing_value' no min, max, or delta checks are performed.
The delta checks are done by comparing each data value to the one just
prior to it in time. If a previous data value does not exist or is a
'missing_value' the delta check will not be performed.
Note that the delta computation for multi-dimensioned data compares the
absolute value between points in the same spatial location to the previous
point in time.
If the associated non-QC field does not contain any mentor-specified minimum,
maximum, or delta information a qc_field is not generated.
"
/>
<variable
name=
"base_time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Time of first record in Epoch"
/>
<attribute
name=
"units"
type=
"String"
value=
"seconds since 1970-1-1 0:00:00 0:00"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"time_offset"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Time offset from base_time"
/>
<attribute
name=
"units"
type=
"String"
value=
""
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"time"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Time offset from midnight"
/>
<attribute
name=
"units"
type=
"String"
value=
""
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"range"
shape=
"range"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Distance to the center of the corresponding range bin."
/>
<attribute
name=
"units"
type=
"String"
value=
"m"
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"accuracy"
type=
"String"
value=
"30 meters"
/>
</variable>
<variable
name=
"first_cbh"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Lowest cloud base height detected."
/>
<attribute
name=
"standard_name"
type=
"String"
value=
"cloud_base_altitude"
/>
<attribute
name=
"units"
type=
"String"
value=
"m"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"7620."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0"
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"7620."
/>
<attribute
name=
"description"
type=
"String"
value=
" If detection_status = 1, 2 or 3,
lowest cloud base height measured.
If detection_status = 4 this value
will be stored as -9999 and a value
for vertical_visibility will be stored.
If detection_status = 0 or 5, -9999 will
be stored for this value and vertical_visibility.
(5 slashes were read from field)."
/>
</variable>
<variable
name=
"vertical_visibility"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Vertical visibility"
/>
<attribute
name=
"standard_name"
type=
"String"
value=
"visibility_in_air"
/>
<attribute
name=
"units"
type=
"String"
value=
"m"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"7620."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"description"
type=
"String"
value=
"This field will only be stored if detection_status
is = 4. In all other cases, a value of -9999 will
be recorded."
/>
</variable>
<variable
name=
"second_cbh"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Second lowest cloud base height"
/>
<attribute
name=
"standard_name"
type=
"String"
value=
"cloud_base_altitude"
/>
<attribute
name=
"units"
type=
"String"
value=
"m"
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0"
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"7620."
/>
<attribute
name=
"description"
type=
"String"
value=
" If detection_status = 2 or 3, a second
cloud base was detected. This value is
the distance from the ground to the second
cloud base.
If detection_status = 4, -9999 will be recorded
here and a value for alt_highest_signal
will be recorded.
If detection_status = 5, -9999 will be recorded
for this value and for alt_highest_signal"
/>
</variable>
<variable
name=
"alt_highest_signal"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Altitude of highest signal"
/>
<attribute
name=
"units"
type=
"String"
value=
"m"
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0"
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"7620."
/>
<attribute
name=
"description"
type=
"String"
value=
" If detection_status = 4, this value is the
distance from the ground to the highest signal
detected.
If detection_status = 0, 1, 2, 3 or 5, -9999
will be recorded."
/>
</variable>
<variable
name=
"third_cbh"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Third cloud base height"
/>
<attribute
name=
"standard_name"
type=
"String"
value=
"cloud_base_altitude"
/>
<attribute
name=
"units"
type=
"String"
value=
"m"
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0"
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"7620."
/>
<attribute
name=
"description"
type=
"String"
value=
" If detection_status = 3, this is the distance
from the ground to the base of the highest
cloud.
If detection = 0, 1, 2, 4 or 5, -9999 will be
stored here. In this case, ///// was read from field."
/>
</variable>
<variable
name=
"sum_backscatter"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"SUM of detected and normalized backscatter"
/>
<attribute
name=
"units"
type=
"String"
value=
"1.0 sr-1"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"999."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"description"
type=
"String"
value=
"Multiplied by scaling factor
times 10^4. At scaling factor 100 the sum range,
which is 0 to 999, this corresponds to integrated
backscatter, which ranges from 0 to 0.0999 srad^-1"
/>
</variable>
<variable
name=
"backscatter"
shape=
"time range"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Backscatter"
/>
<attribute
name=
"units"
type=
"String"
value=
"1.0E-7 m-1.sr-1"
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"description"
type=
"String"
value=
"Data is range and sensitivity normalized backscatter, units, (10000 - srad - km)^-1 unless otherwise scaled by
scaling parameter.
The length of each range bin corresponds to
(c/2)*(200ns +/14 ns) = (approximately 30 m)."
/>
</variable>
<variable
name=
"detection_status"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Detection status."
/>
<attribute
name=
"missing_value"
type=
"int"
value=
"-9999"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
<attribute
name=
"valid_min"
type=
"int"
value=
"0"
/>
<attribute
name=
"valid_max"
type=
"int"
value=
"5"
/>
<attribute
name=
"description"
type=
"String"
value=
"0=No significant backscatter
1=One cloud base detected
2=Two cloud bases detected
3=Three cloud bases detected
4=Full obscuration determined but no cloud
base detected.
5=Some obscuration detected but determined
to be transparent."
/>
</variable>
<variable
name=
"status_flag"
shape=
"time"
type=
"char"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Ceilometer status indicator."
/>
<attribute
name=
"missing_value"
type=
"char"
value=
" "
/>
<attribute
name=
"description"
type=
"String"
value=
"Warning and alarm information as follows
0 = Self-check OK
W = At least one Warning active, no Alarms
A = At least one Alarm active"
/>
</variable>
<variable
name=
"laser_pulse_energy"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Laser pulse energy"
/>
<attribute
name=
"units"
type=
"String"
value=
"%"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"999."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"comment"
type=
"String"
value=
"Percentage of nominal factory setting."
/>
</variable>
<variable
name=
"laser_temperature"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Laser temperature"
/>
<attribute
name=
"units"
type=
"String"
value=
"degC"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"-50."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"99."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
</variable>
<variable
name=
"receiver_sensitivity"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Receiver sensitivity"
/>
<attribute
name=
"units"
type=
"String"
value=
"%"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"999."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"comment"
type=
"String"
value=
"Percentage of nominal factory setting."
/>
</variable>
<variable
name=
"window_contamination"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Window contamination"
/>
<attribute
name=
"units"
type=
"String"
value=
"0.0010 V"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"2500."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"comment"
type=
"String"
value=
"Millivolts measured at the internal ADC input"
/>
</variable>
<variable
name=
"tilt_angle"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Tilt angle"
/>
<attribute
name=
"units"
type=
"String"
value=
"degrees"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"-15."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"90."
/>
<attribute
name=
"valid_delta"
type=
"double"
value=
"1."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"description"
type=
"String"
value=
"If Angle Correction is Off detection values are distances not altitudes"
/>
</variable>
<variable
name=
"background_light"
shape=
"time"
type=
"double"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Background light"
/>
<attribute
name=
"units"
type=
"String"
value=
"0.0010 V"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"0."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"2500."
/>
<attribute
name=
"missing_value"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
<attribute
name=
"comment"
type=
"String"
value=
"Millivolts measured at the internal ADC input"
/>
</variable>
<variable
name=
"measurement_parameters"
shape=
"time string_len"
type=
"char"
>
<attribute
name=
"long_name"
type=
"String"
value=
"6 character string describing instrument measurement parameters"
/>
<attribute
name=
"missing_value"
type=
"String"
value=
"-"
/>
<attribute
name=
"comment"
type=
"String"
value=
"(L)ong/(S)hort - (F)req - pulse qty r ^(7) + 1
- gain (H)igh/(L)ow - bandwidth (N)arrow/(W)ide -
sampling (5) / (1)0 / (2)0 Mhz"
/>
</variable>
<variable
name=
"status_string"
shape=
"time string_len"
type=
"char"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Warning and alarm status bits"
/>
<attribute
name=
"missing_value"
type=
"String"
value=
"-"
/>
<attribute
name=
"comment1"
type=
"String"
value=
"Has Form FEDCBA98. Each character is a hexadecimal representation of
four bits, altogether 32 bits. See additional comments for interpretation."
/>
<attribute
name=
"commentF"
type=
"String"
value=
"(8000 0000) = Laser temperature shut-off(A)
(4000 0000)= Laser failure(A)
(2000 0000)= Receiver failure(A)
(1000 0000)= Voltage failure(A)"
/>
<attribute
name=
"commentE"
type=
"String"
value=
"(0800 0000) = Profile error(A)"
/>
<attribute
name=
"commentD"
type=
"String"
value=
"(0080 0000) = Window contaminated(W)
(0040 0000)= Battery low(W)
(0020 0000)= Laser power low(W)
(0010 0000)= Laser temperature high or low(W)"
/>
<attribute
name=
"commentC"
type=
"String"
value=
"(0008 0000) = Internal temperature high or low(W)
(0004 0000)= Voltage high or low(W)
(0002 0000)= Relative humidity is > 85 % (W)
(0001 0000)= Receiver optical cross-talk compensation poor(W)"
/>
<attribute
name=
"commentB"
type=
"String"
value=
"(0000 8000) = Fan suspect(W)
(0000 4000)= Profile warning(W)"
/>
<attribute
name=
"commentA"
type=
"String"
value=
"(0000 0800) = Blower is ON
(0000 0400)= Blower heater is ON
(0000 0200)= Internal heater is ON
(0000 0100)= Units are METERS if ON, else FEET."
/>
<attribute
name=
"comment9"
type=
"String"
value=
"(0000 0080) = Polling mode is ON
(0000 0040)= Working from battery
(0000 0020)= Single sequence mode is ON
(0000 0010)= Manual Settings are effective."
/>
<attribute
name=
"comment8"
type=
"String"
value=
"(0000 0008) = Tilt angle is > 45 degrees."
/>
</variable>
<variable
name=
"lat"
type=
"double"
>
<attribute
name=
"standard_name"
type=
"String"
value=
"latitude"
/>
<attribute
name=
"long_name"
type=
"String"
value=
"north latitude"
/>
<attribute
name=
"units"
type=
"String"
value=
"degrees_north"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"-90."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"90."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
</variable>
<variable
name=
"lon"
type=
"double"
>
<attribute
name=
"standard_name"
type=
"String"
value=
"longitude"
/>
<attribute
name=
"long_name"
type=
"String"
value=
"east longitude"
/>
<attribute
name=
"units"
type=
"String"
value=
"degrees_east"
/>
<attribute
name=
"valid_min"
type=
"double"
value=
"-180."
/>
<attribute
name=
"valid_max"
type=
"double"
value=
"180."
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
</variable>
<variable
name=
"alt"
type=
"double"
>
<attribute
name=
"standard_name"
type=
"String"
value=
"altitude"
/>
<attribute
name=
"long_name"
type=
"String"
value=
"altitude"
/>
<attribute
name=
"positive"
type=
"String"
value=
"up"
/>
<attribute
name=
"units"
type=
"String"
value=
"m"
/>
<attribute
name=
"_FillValue"
type=
"double"
value=
"-9999."
/>
</variable>
<variable
name=
"qc_time"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Results of quality checks on sample time"
/>
<attribute
name=
"description"
type=
"String"
value=
"The qc_time values are calculated by comparing each sample
time with the previous time (i.e. delta_t = t[n] - t[n-1]).
If the 'qc_check_prior' flag is set the first sample time
from a new raw file will be compared against the time just
previous to it in the stored data. If the 'qc_check_prior'
flag is not set the qc_time value for the first sample time
will be set to 0
The qc_time bit values are as follows:
=========================================================
0x0 = delta time is within the specified range
0x1 = delta time is equal to 0, duplicate sample times
0x2 = delta time is less than the 'delta_t_lower_limit'
0x4 = delta time is greater than the 'delta_t_upper_limit'
"
/>
<attribute
name=
"delta_t_lower_limit"
type=
"int"
value=
"12"
/>
<attribute
name=
"delta_t_upper_limit"
type=
"int"
value=
"18"
/>
<attribute
name=
"prior_sample_flag"
type=
"int"
value=
"1"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"qc_first_cbh"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Quality check results on field: Lowest cloud base height detected."
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"qc_vertical_visibility"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Quality check results on field: Vertical visibility"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"qc_second_cbh"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Quality check results on field: Second lowest cloud base height"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"qc_alt_highest_signal"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Quality check results on field: Altitude of highest signal"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"qc_third_cbh"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Quality check results on field: Third cloud base height"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"qc_laser_pulse_energy"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Quality check results on field: Laser pulse energy"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>
<variable
name=
"qc_laser_temperature"
shape=
"time"
type=
"int"
>
<attribute
name=
"long_name"
type=
"String"
value=
"Quality check results on field: Laser temperature"
/>
<attribute
name=
"_FillValue"
type=
"int"
value=
"-9999"
/>
</variable>