Optics

Optics data is the most complicated and has additional non-singleton dimensions of wavelength, angle, and percent. So far there have been no cases where depth has had more than one value, but it's possible. In that case we could have 3D variables. As an example, the optics_s buffer for E0106 (an ocean color mooring) is shown below.


ncdump: Variable not found
netcdf E0106.optics_s.realtime {
dimensions:
	lon = 1 ;
	lat = 1 ;
	depth = 1 ;
	OCR504_wavelength = 4 ;
	OCR507_wavelength = 7 ;
	ac9_wavelength = 9 ;
	vsf_wavelength = 3 ;
	vsf_angle = 3 ;
	time = UNLIMITED ; // (955 currently)
variables:
	double lat(lat) ;
		lat:long_name = "Latitude" ;
		lat:standard_name = "latitude" ;
		lat:short_name = "lat" ;
		lat:units = "degrees_north" ;
		lat:scale_factor = 1. ;
		lat:add_offset = 0. ;
		lat:_FillValue = -999. ;
		lat:valid_range = -90., 90. ;
		lat:Comment = "Coordinate variable" ;
		lat:epic_code = 500 ;
	double lon(lon) ;
		lon:long_name = "Longitude" ;
		lon:standard_name = "longitude" ;
		lon:short_name = "lon" ;
		lon:modulo = 360. ;
		lon:units = "degrees_east" ;
		lon:scale_factor = 1. ;
		lon:add_offset = 0. ;
		lon:_FillValue = -999. ;
		lon:valid_range = -180., 180. ;
		lon:Comment = "Coordinate variable" ;
		lon:epic_code = 502 ;
	double depth(depth) ;
		depth:long_name = "Depth" ;
		depth:standard_name = "depth" ;
		depth:short_name = "D" ;
		depth:units = "meters" ;
		depth:positive = "down" ;
		depth:scale_factor = 1. ;
		depth:add_offset = 0. ;
		depth:_FillValue = -999. ;
		depth:valid_range = -10000., 100. ;
		depth:Comment = "Coordinate variable" ;
		depth:epic_code = 3. ;
	double OCR504_wavelength(OCR504_wavelength) ;
		OCR504_wavelength:long_name = "Wavelength" ;
		OCR504_wavelength:short_name = "nu" ;
		OCR504_wavelength:units = "nanometers" ;
		OCR504_wavelength:scale_factor = 1. ;
		OCR504_wavelength:add_offset = 0. ;
		OCR504_wavelength:_FillValue = -999. ;
		OCR504_wavelength:valid_range = 0., 1000. ;
		OCR504_wavelength:Comment = "Coordinate variable" ;
	double OCR507_wavelength(OCR507_wavelength) ;
		OCR507_wavelength:long_name = "Wavelength" ;
		OCR507_wavelength:short_name = "nu" ;
		OCR507_wavelength:units = "nanometers" ;
		OCR507_wavelength:scale_factor = 1. ;
		OCR507_wavelength:add_offset = 0. ;
		OCR507_wavelength:_FillValue = -999. ;
		OCR507_wavelength:valid_range = 0., 1000. ;
		OCR507_wavelength:Comment = "Coordinate variable" ;
	double ac9_wavelength(ac9_wavelength) ;
		ac9_wavelength:long_name = "AC9 Meter Wavelength" ;
		ac9_wavelength:short_name = "nu" ;
		ac9_wavelength:units = "nanometers" ;
		ac9_wavelength:scale_factor = 1. ;
		ac9_wavelength:add_offset = 0. ;
		ac9_wavelength:_FillValue = -999. ;
		ac9_wavelength:valid_range = 0., 1000. ;
		ac9_wavelength:Comment = "Coordinate variable" ;
	double vsf_wavelength(vsf_wavelength) ;
		vsf_wavelength:long_name = "VSF Sensor Wavelength" ;
		vsf_wavelength:short_name = "nu" ;
		vsf_wavelength:units = "nanometers" ;
		vsf_wavelength:scale_factor = 1. ;
		vsf_wavelength:add_offset = 0. ;
		vsf_wavelength:_FillValue = -999. ;
		vsf_wavelength:valid_range = 0., 1000. ;
		vsf_wavelength:Comment = "Coordinate variable" ;
	double vsf_angle(vsf_angle) ;
		vsf_angle:long_name = "VSF Sensor Wavelength" ;
		vsf_angle:short_name = "ang" ;
		vsf_angle:units = "angular_degrees" ;
		vsf_angle:scale_factor = 1. ;
		vsf_angle:add_offset = 0. ;
		vsf_angle:_FillValue = -999. ;
		vsf_angle:valid_range = 0., 1000. ;
		vsf_angle:Comment = "Coordinate variable" ;
	double time(time) ;
		time:long_name = "Time" ;
		time:standard_name = "time" ;
		time:short_name = "time" ;
		time:units = "days since -4713-01-01 00:00:00" ;
		time:scale_factor = 1. ;
		time:add_offset = 0. ;
		time:_FillValue = -999. ;
		time:valid_range = 0., 2460000. ;
		time:Comment = "Coordinate variable" ;
		time:epic_code = 624 ;
	float Ed(time, OCR504_wavelength, depth, lat, lon) ;
		Ed:long_name = "Downwelling Irradiance" ;
		Ed:short_name = "Ed" ;
		Ed:scale_factor = 1. ;
		Ed:add_offset = 0. ;
		Ed:_FillValue = -999.f ;
		Ed:units = "microwatts/cm^2/nm" ;
		Ed:valid_range = 0.f, 200.f ;
	byte Ed_qc(time, OCR504_wavelength, depth, lat, lon) ;
		Ed_qc:long_name = "Downwelling Irradiance Quality" ;
		Ed_qc:short_name = "EdQ" ;
		Ed_qc:scale_factor = 1. ;
		Ed_qc:add_offset = 0. ;
		Ed_qc:_FillValue = -128b ;
		Ed_qc:units = "none" ;
		Ed_qc:valid_range = -127s, 127s ;
		Ed_qc:flag_values = 0b, 1b ;
		Ed_qc:flag_meanings = "quality_good quality_bad" ;
	float Lu(time, OCR507_wavelength, depth, lat, lon) ;
		Lu:long_name = "Upwelling Radiance" ;
		Lu:short_name = "Lu" ;
		Lu:scale_factor = 1. ;
		Lu:add_offset = 0. ;
		Lu:_FillValue = -999.f ;
		Lu:units = "microwatts/cm^2/nm/steradian" ;
		Lu:valid_range = 0.f, 100.f ;
	byte Lu_qc(time, OCR507_wavelength, depth, lat, lon) ;
		Lu_qc:long_name = "Upwelling Radiance Quality" ;
		Lu_qc:short_name = "LuQ" ;
		Lu_qc:scale_factor = 1. ;
		Lu_qc:add_offset = 0. ;
		Lu_qc:_FillValue = -128b ;
		Lu_qc:units = "none" ;
		Lu_qc:valid_range = -127s, 127s ;
		Lu_qc:flag_values = 0b, 1b ;
		Lu_qc:flag_meanings = "quality_good quality_bad" ;
	float Ed_PAR(time, depth, lat, lon) ;
		Ed_PAR:long_name = "Downwelling Irradiance of PAR (400-700nm)" ;
		Ed_PAR:short_name = "EdPAR" ;
		Ed_PAR:scale_factor = 1. ;
		Ed_PAR:add_offset = 0. ;
		Ed_PAR:_FillValue = -999.f ;
		Ed_PAR:units = "microE/m^2/s" ;
		Ed_PAR:valid_range = 0.f, 100.f ;
	byte Ed_PAR_qc(time, depth, lat, lon) ;
		Ed_PAR_qc:long_name = "Downwelling Irradiance of Par (400-700nm) Quality" ;
		Ed_PAR_qc:short_name = "EdPARQ" ;
		Ed_PAR_qc:scale_factor = 1. ;
		Ed_PAR_qc:add_offset = 0. ;
		Ed_PAR_qc:_FillValue = -128b ;
		Ed_PAR_qc:units = "none" ;
		Ed_PAR_qc:valid_range = -127s, 127s ;
		Ed_PAR_qc:flag_values = 0b, 1b ;
		Ed_PAR_qc:flag_meanings = "quality_good quality_bad" ;
	float beta_uncorrected(time, vsf_wavelength, vsf_angle, depth, lat, lon) ;
		beta_uncorrected:long_name = "Uncorrected Volume Scattering Function" ;
		beta_uncorrected:short_name = "VSF" ;
		beta_uncorrected:scale_factor = 1. ;
		beta_uncorrected:add_offset = 0. ;
		beta_uncorrected:_FillValue = -999.f ;
		beta_uncorrected:units = "1/m/steradian" ;
		beta_uncorrected:valid_range = 0.f, 0.5f ;
	byte beta_uncorrected_qc(time, vsf_wavelength, vsf_angle, depth, lat, lon) ;
		beta_uncorrected_qc:long_name = "Volume Scattering Function Quality" ;
		beta_uncorrected_qc:short_name = "VSFQ" ;
		beta_uncorrected_qc:scale_factor = 1. ;
		beta_uncorrected_qc:add_offset = 0. ;
		beta_uncorrected_qc:_FillValue = -128b ;
		beta_uncorrected_qc:units = "none" ;
		beta_uncorrected_qc:valid_range = -127s, 127s ;
		beta_uncorrected_qc:flag_values = 0b, 1b ;
		beta_uncorrected_qc:flag_meanings = "quality_good quality_bad" ;
	float absorption_TS(time, ac9_wavelength, depth, lat, lon) ;
		absorption_TS:long_name = "Temperature and Salinity Corrected Absorption" ;
		absorption_TS:short_name = "ATS" ;
		absorption_TS:scale_factor = 1. ;
		absorption_TS:add_offset = 0. ;
		absorption_TS:_FillValue = -999.f ;
		absorption_TS:units = "1/m" ;
		absorption_TS:valid_range = 0.f, 100.f ;
	byte absorption_TS_qc(time, ac9_wavelength, depth, lat, lon) ;
		absorption_TS_qc:long_name = "Temperature and Salinity Corrected Absorption Quality" ;
		absorption_TS_qc:short_name = "ATSQ" ;
		absorption_TS_qc:scale_factor = 1. ;
		absorption_TS_qc:add_offset = 0. ;
		absorption_TS_qc:_FillValue = -128b ;
		absorption_TS_qc:units = "none" ;
		absorption_TS_qc:valid_range = -127s, 127s ;
		absorption_TS_qc:flag_values = 0b, 1b ;
		absorption_TS_qc:flag_meanings = "quality_good quality_bad" ;
	float beam_attenuation_TS(time, ac9_wavelength, depth, lat, lon) ;
		beam_attenuation_TS:long_name = "Temperature and Salinity Corrected Beam Attenuation Coefficient" ;
		beam_attenuation_TS:short_name = "C" ;
		beam_attenuation_TS:scale_factor = 1. ;
		beam_attenuation_TS:add_offset = 0. ;
		beam_attenuation_TS:_FillValue = -999.f ;
		beam_attenuation_TS:units = "1/m" ;
		beam_attenuation_TS:valid_range = 0.f, 100.f ;
	byte beam_attenuation_TS_qc(time, ac9_wavelength, depth, lat, lon) ;
		beam_attenuation_TS_qc:long_name = "Temperature and Salinity Corrected Beam Attenuation Coefficient" ;
		beam_attenuation_TS_qc:short_name = "CQ" ;
		beam_attenuation_TS_qc:scale_factor = 1. ;
		beam_attenuation_TS_qc:add_offset = 0. ;
		beam_attenuation_TS_qc:_FillValue = -128b ;
		beam_attenuation_TS_qc:units = "none" ;
		beam_attenuation_TS_qc:valid_range = -127s, 127s ;
		beam_attenuation_TS_qc:flag_values = 0b, 1b ;
		beam_attenuation_TS_qc:flag_meanings = "quality_good quality_bad" ;

// global attributes:
		:title = "Gulf of Maine Ocean Observing System: Realtime Buoy Observations" ;
		:institution = "Department of Physical Oceanography, School of Marine Sciences, University of Maine" ;
		:institution_url = "http://gyre.umeoce.maine.edu" ;
		:history = "" ;
		:source = "realtime observations" ;
		:references = "http://gyre.umeoce.maine.edu/data/gomoos/doc/buoy_system_doc/buoy_system/book1.html" ;
		:comment = "processed with MATLAB" ;
		:Conventions = "CF-1.0" ;
		:latitude = 43.714451 ;
		:longitude = -69.359253 ;
		:project = "GOMOOS" ;
		:project_url = "http://gomoos.org" ;
		:contact = "nealp@maine.edu,ljm@umeoce.maine.edu,jevans@umeoce.maine.edu" ;
		:time_zone = "UTC" ;
		:julian_day_convention = "Julian date convention starts at 00:00:00 UTC on 1 January 4713 BC" ;
		:buffer_type = "optics_s" ;
		:instrument_number = 0 ;
		:processing = "realtime" ;
		:water_depth = 100. ;
		:mooring_site_id = "E0106" ;
		:mooring_site_desc = "Central Maine Shelf" ;
		:breakout_id = 22 ;
		:delta_t = 60 ;
		:magnetic_variation = -17.8 ;
		:last_mysql_update_index = -1 ;
		:starting_julian_day_number = 2452730. ;
		:starting_julian_day_string = "2003-3-31 00:00:00" ;
		:ending_julian_day_number = 2452779.70833333 ;
		:ending_julian_day_string = "2003-5-19 17:00:00" ;
data:

 lat = 43.714451 ;

 lon = -69.359253 ;

 depth = 3 ;

 OCR504_wavelength = 412, 443, 490, 555 ;

 OCR507_wavelength = 412, 443, 490, 510, 555, 665, 670 ;

 ac9_wavelength = 412, 440, 488, 510, 532, 555, 650, 676, 715 ;

 vsf_wavelength = 440, 530, 650 ;

 vsf_angle = 100, 125, 150 ;
}