MODIS MAIAC surface BRF data suite (MCD19A1)

Description:

MAIAC is a new advanced algorithm which uses time series analysis and a combination of pixel- and image-based processing to improve accuracy of cloud detection, aerosol retrievals and atmospheric correction. Consistently with the entire C6 MODIS land processing, the top-of-atmosphere (TOA) L1B reflectance includes standard C6 calibration augmented with polarization correction for MODIS Terra, residual de-trending and MODIS Terra-to-Aqua cross-calibration (Lyapustin, A., Y. Wang, X. Xiong, G. Meister, S. Platnick, R. Levy, B. Franz, S. Korkin, T. Hilker, J. Tucker, F. Hall, P. Sellers, A. Wu, A. Angal (2014), Science Impact of MODIS C5 Calibration Degradation and C6+ Improvements, Atmos. Meas. Tech., 7, 4353-4365, doi:10.5194/amt-7-4353-2014).
The L1B data are first gridded into 1km MODIS sinusoid grid using area-weighted method. Due to cross-calibration, MAIAC processes MODIS Terra and Aqua jointly as a single sensor.
MAIAC provides a suite of atmospheric and surface products in three HDF-EOS 2.1.x files: daily MCD19A1 (spectral BRF, or surface reflectance), daily MCD19A2 (atmospheric properties), and 8-day MCD19A3 (spectral BRDF/albedo).

Point of Contact:
      Yujie Wang 
      yujie.wang@nasa.gov

Principal Investigator(s):
      Alexei Lyapustin
      Code 613
      NASA GSFC
      8800 Greenbelt Road
      Greenbelt, MD 20771 
      Phone: 301-614-5998
      Email:  alexei.i.lyapustin@nasa.gov

============================================================================
General Construct

Geographic Grid Projection Parameters:
     Sinusoidal Projection
     Projection            GCTP_SNSOID
     ProjParam[0]          6371007.181
     ProjParam[1 to 7]     0.0
     ProjParam[8]          0.0
     ProjParam[9]          0.0
     ProjParam[10]         0.0
     ProjParam[11 to 12]   0.0
     Spherecode            -1
     GridOrigin            HDFE_CENTER


dimensions:
	Orbits:grid5km = variable(defined by global attribute Orbit_amount)  ;
	YDim:grid5km = 240 ;
	XDim:grid5km = 240 ;
	Orbits:grid1km = variable (defined by global attribute Orbit_amount)  ;
        YDim:grid1km = 1200 ;
	XDim:grid1km = 1200 ;
	Orbits:grid500m = variable (defined by global attribute Orbit_amount)  ;
	YDim:grid500m = 2400 ;
	XDim:grid500m = 2400 ;

variables:
	short cosSZA(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		cosSZA:long_name = "cosine of Solar Zenith Angle" ;
		cosSZA:scale_factor = 0.0001 ;
		cosSZA:add_offset = 0. ;
		cosSZA:unit = "none" ;
		cosSZA:_FillValue = -28672s ;
		cosSZA:valid_range = 0s, 10000s ;
	short cosVZA(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		cosVZA:long_name = "cosine of View Zenith Angle" ;
		cosVZA:scale_factor = 0.0001 ;
		cosVZA:add_offset = 0. ;
		cosVZA:unit = "none" ;
		cosVZA:_FillValue = -28672s ;
		cosVZA:valid_range = 0s, 10000s ;
	short RelAZ(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		RelAZ:long_name = "Relative Azimuth Angle" ;
		RelAZ:scale_factor = 0.01 ;
		RelAZ:add_offset = 0. ;
		RelAZ:unit = "none" ;
		RelAZ:_FillValue = -28672s ;
		RelAZ:valid_range = -18000s, 18000s ;
	short Scattering_Angle(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		Scattering_Angle:long_name = "Scattering Angle" ;
		Scattering_Angle:scale_factor = 0.01 ;
		Scattering_Angle:add_offset = 0. ;
		Scattering_Angle:unit = "none" ;
		Scattering_Angle:_FillValue = -28672s ;
		Scattering_Angle:valid_range = -18000s, 18000s ;
	short SAZ(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		SAZ:long_name = "Solar Azimuth Angle" ;
		SAZ:scale_factor = 0.01 ;
		SAZ:add_offset = 0. ;
		SAZ:unit = "none" ;
		SAZ:_FillValue = -28672s ;
		SAZ:valid_range = -18000s, 18000s ;
	short VAZ(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		VAZ:long_name = "Solar Azimuth Angle" ;
		VAZ:scale_factor = 0.01 ;
		VAZ:add_offset = 0. ;
		VAZ:unit = "none" ;
		VAZ:_FillValue = -28672s ;
		VAZ:valid_range = -18000s, 18000s ;
	short Glint_Angle(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		Glint_Angle:long_name = "Glint Angle" ;
		Glint_Angle:scale_factor = 0.01 ;
		Glint_Angle:add_offset = 0. ;
		Glint_Angle:unit = "none" ;
		Glint_Angle:_FillValue = -28672s ;
		Glint_Angle:valid_range = -18000s, 18000s ;
	short sur_refl1(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl1:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band1" ;
		sur_refl1:scale_factor = 0.0001 ;
		sur_refl1:add_offset = 0. ;
		sur_refl1:unit = "none" ;
		sur_refl1:_FillValue = -28672s ;
		sur_refl1:valid_range = -100s, 16000s ;
	short sur_refl2(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl2:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band2" ;
		sur_refl2:scale_factor = 0.0001 ;
		sur_refl2:add_offset = 0. ;
		sur_refl2:unit = "none" ;
		sur_refl2:_FillValue = -28672s ;
		sur_refl2:valid_range = -100s, 16000s ;
	short sur_refl3(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl3:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band3" ;
		sur_refl3:scale_factor = 0.0001 ;
		sur_refl3:add_offset = 0. ;
		sur_refl3:unit = "none" ;
		sur_refl3:_FillValue = -28672s ;
		sur_refl3:valid_range = -100s, 16000s ;
	short sur_refl4(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl4:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band4" ;
		sur_refl4:scale_factor = 0.0001 ;
		sur_refl4:add_offset = 0. ;
		sur_refl4:unit = "none" ;
		sur_refl4:_FillValue = -28672s ;
		sur_refl4:valid_range = -100s, 16000s ;
	short sur_refl5(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl5:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band5" ;
		sur_refl5:scale_factor = 0.0001 ;
		sur_refl5:add_offset = 0. ;
		sur_refl5:unit = "none" ;
		sur_refl5:_FillValue = -28672s ;
		sur_refl5:valid_range = -100s, 16000s ;
	short sur_refl6(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl6:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band6" ;
		sur_refl6:scale_factor = 0.0001 ;
		sur_refl6:add_offset = 0. ;
		sur_refl6:unit = "none" ;
		sur_refl6:_FillValue = -28672s ;
		sur_refl6:valid_range = -100s, 16000s ;
	short sur_refl7(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl7:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band7" ;
		sur_refl7:scale_factor = 0.0001 ;
		sur_refl7:add_offset = 0. ;
		sur_refl7:unit = "none" ;
		sur_refl7:_FillValue = -28672s ;
		sur_refl7:valid_range = -100s, 16000s ;
	short sur_refl8(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl8:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band8" ;
		sur_refl8:scale_factor = 0.0001 ;
		sur_refl8:add_offset = 0. ;
		sur_refl8:unit = "none" ;
		sur_refl8:_FillValue = -28672s ;
		sur_refl8:valid_range = -100s, 16000s ;
	short sur_refl9(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl9:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band9" ;
		sur_refl9:scale_factor = 0.0001 ;
		sur_refl9:add_offset = 0. ;
		sur_refl9:unit = "none" ;
		sur_refl9:_FillValue = -28672s ;
		sur_refl9:valid_range = -100s, 16000s ;
	short sur_refl10(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl10:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band10" ;
		sur_refl10:scale_factor = 0.0001 ;
		sur_refl10:add_offset = 0. ;
		sur_refl10:unit = "none" ;
		sur_refl10:_FillValue = -28672s ;
		sur_refl10:valid_range = -100s, 16000s ;
	short sur_refl11(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl11:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band11" ;
		sur_refl11:scale_factor = 0.0001 ;
		sur_refl11:add_offset = 0. ;
		sur_refl11:unit = "none" ;
		sur_refl11:_FillValue = -28672s ;
		sur_refl11:valid_range = -100s, 16000s ;
	short sur_refl12(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		sur_refl12:long_name = "Surface_bidirectinal_reflectance_factor_1km, Band12" ;
		sur_refl12:scale_factor = 0.0001 ;
		sur_refl12:add_offset = 0. ;
		sur_refl12:unit = "none" ;
		sur_refl12:_FillValue = -28672s ;
		sur_refl12:valid_range = -100s, 16000s ;
	short Sigma_BRFn1(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		Sigma_BRFn1:long_name = "BRFn uncertainties over time, Band1" ;
		Sigma_BRFn1:scale_factor = 0.0001 ;
		Sigma_BRFn1:add_offset = 0. ;
		Sigma_BRFn1:unit = "none" ;
		Sigma_BRFn1:_FillValue = -28672s ;
		Sigma_BRFn1:valid_range = -100s, 16000s ;
	short Sigma_BRFn2(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		Sigma_BRFn2:long_name = "BRFn uncertainties over time, Band2" ;
		Sigma_BRFn2:scale_factor = 0.0001 ;
		Sigma_BRFn2:add_offset = 0. ;
		Sigma_BRFn2:unit = "none" ;
		Sigma_BRFn2:_FillValue = -28672s ;
		Sigma_BRFn2:valid_range = -100s, 16000s ;
	short Snow_Fraction(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		Snow_Fraction:long_name = "Snow Fraction in 1km pixel" ;
		Snow_Fraction:scale_factor = 0.0001 ;
		Snow_Fraction:add_offset = 0. ;
		Snow_Fraction:unit = "none" ;
		Snow_Fraction:_FillValue = -28672s ;
		Snow_Fraction:valid_range = 0s, 10000s ;
	short Snow_Grain_Size(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		Snow_Grain_Size:long_name = "Snow Grain Diameter (mm)" ;
		Snow_Grain_Size:scale_factor = 0.0001 ;
		Snow_Grain_Size:add_offset = 0. ;
		Snow_Grain_Size:unit = "mm" ;
		Snow_Grain_Size:_FillValue = -28672s ;
		Snow_Grain_Size:valid_range = 0s, 30000s ;
	short Snow_Fit(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		Snow_Fit:long_name = "Snow Reflectance RMSE in Band 1, 5 and 7" ;
		Snow_Fit:scale_factor = 0.0001 ;
		Snow_Fit:add_offset = 0. ;
		Snow_Fit:unit = "none" ;
		Snow_Fit:_FillValue = -28672s ;
		Snow_Fit:valid_range = 0s, 30000s ;
	short Status_QA(Orbits:grid1km, YDim:grid1km, XDim:grid1km) ;
		Status_QA:long_name = "Status_QA" ;
		Status_QA:unit = "none" ;
		Status_QA:data description = "Bits Definition",
    "0-2    Cloud Mask\n",
    "       000 --- Undefined\n",
    "       001 --- Clear\n",
    "       010 --- Possible Cloudy\n",
    "       011 --- Cloudy \n",
    "       101 --- Cloud shadow\n",
    "       110 --- Fire hotspot\n",
    "       111 --- Water Sediments\n",
    "3-4    Land Water Snow/ice  Mask\n",
    "       00 --- Land\n",
    "       01 --- Water\n",
    "       10 --- Snow\n",
    "       11 --- Ice\n",
    "5-7  Adjacency Maks\n",
    "       000 --- Normal condition\n",
    "       001 --- Adjacent to cloud\n",
    "       010 --- Surrounded by more than 8 cloudy pixels\n",
    "       011 --- Single cloudy pixel\n",
    "       100 --- Adjacent to snow\n",
    "       101 --- Snow was previously detected for this pixel\n",
    "8      AOT level\n",
    "       0  --- AOT is low (<=0.6)\n",
    "       1  ----  AOT is high (> 0.6) or undefined\n",
    "9     Algorithm Initialization Status\n",
    "       0  ---- Algorithm is initialized\n",
    "       1  ---- Algorithm is not initialized\n",
    "10    BRF retrieved over snow, use AOT = 0.05\n",
    "       0 --- no\n",
    "       1 --- yes\n",
    "11    Altitude >3.5km, BRF is retrieved with AOT =0.02\n",
    "       0 --- no\n",
    "       1 --- yes\n",
    "12-14 Surface Change  Mask\n",
    "       000 --- no change\n",
    "       001 --- Regular change Green up \n",
    "       010 --- Big  change Green up\n",
    "       011 --- Regular change Senescence\n",
    "       100 --- Big  change Senescence\n",
    "       101 --- Flooding\n",
    "       Regular Change: Relative change in Red and NIR nadir-normalized BRF is more than 5% but less than 15%\n",
    "       Big  Change   :      Relative change in Red and NIR nadir-normalized BRF is more than 15%  \n",
    " 15   Reserved    \n",
    "" ;
		Status_QA:_FillValue = 0s ;
		Status_QA:valid_range = 0s, 255s ;
	short sur_refl_500mB1(Orbits:grid500m, YDim:grid500m, XDim:grid500m) ;
		sur_refl_500mB1:long_name = "Surface_bidirectinal_reflectance_factor_500m, Band1" ;
		sur_refl_500mB1:scale_factor = 0.0001 ;
		sur_refl_500mB1:add_offset = 0. ;
		sur_refl_500mB1:unit = "none" ;
		sur_refl_500mB1:_FillValue = -28672s ;
		sur_refl_500mB1:valid_range = -100s, 16000s ;
	short sur_refl_500mB2(Orbits:grid500m, YDim:grid500m, XDim:grid500m) ;
		sur_refl_500mB2:long_name = "Surface_bidirectinal_reflectance_factor_500m, Band2" ;
		sur_refl_500mB2:scale_factor = 0.0001 ;
		sur_refl_500mB2:add_offset = 0. ;
		sur_refl_500mB2:unit = "none" ;
		sur_refl_500mB2:_FillValue = -28672s ;
		sur_refl_500mB2:valid_range = -100s, 16000s ;
	short sur_refl_500mB3(Orbits:grid500m, YDim:grid500m, XDim:grid500m) ;
		sur_refl_500mB3:long_name = "Surface_bidirectinal_reflectance_factor_500m, Band3" ;
		sur_refl_500mB3:scale_factor = 0.0001 ;
		sur_refl_500mB3:add_offset = 0. ;
		sur_refl_500mB3:unit = "none" ;
		sur_refl_500mB3:_FillValue = -28672s ;
		sur_refl_500mB3:valid_range = -100s, 16000s ;
	short sur_refl_500mB4(Orbits:grid500m, YDim:grid500m, XDim:grid500m) ;
		sur_refl_500mB4:long_name = "Surface_bidirectinal_reflectance_factor_500m, Band4" ;
		sur_refl_500mB4:scale_factor = 0.0001 ;
		sur_refl_500mB4:add_offset = 0. ;
		sur_refl_500mB4:unit = "none" ;
		sur_refl_500mB4:_FillValue = -28672s ;
		sur_refl_500mB4:valid_range = -100s, 16000s ;
	short sur_refl_500mB5(Orbits:grid500m, YDim:grid500m, XDim:grid500m) ;
		sur_refl_500mB5:long_name = "Surface_bidirectinal_reflectance_factor_500m, Band5" ;
		sur_refl_500mB5:scale_factor = 0.0001 ;
		sur_refl_500mB5:add_offset = 0. ;
		sur_refl_500mB5:unit = "none" ;
		sur_refl_500mB5:_FillValue = -28672s ;
		sur_refl_500mB5:valid_range = -100s, 16000s ;
	short sur_refl_500mB6(Orbits:grid500m, YDim:grid500m, XDim:grid500m) ;
		sur_refl_500mB6:long_name = "Surface_bidirectinal_reflectance_factor_500m, Band6" ;
		sur_refl_500mB6:scale_factor = 0.0001 ;
		sur_refl_500mB6:add_offset = 0. ;
		sur_refl_500mB6:unit = "none" ;
		sur_refl_500mB6:_FillValue = -28672s ;
		sur_refl_500mB6:valid_range = -100s, 16000s ;
	short sur_refl_500mB7(Orbits:grid500m, YDim:grid500m, XDim:grid500m) ;
		sur_refl_500mB7:long_name = "Surface_bidirectinal_reflectance_factor_500m, Band7" ;
		sur_refl_500mB7:scale_factor = 0.0001 ;
		sur_refl_500mB7:add_offset = 0. ;
		sur_refl_500mB7:unit = "none" ;
		sur_refl_500mB7:_FillValue = -28672s ;
		sur_refl_500mB7:valid_range = -100s, 16000s ;
	float Fv(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		Fv:long_name = "Volumetric kernel" ;
		Fv:unit = "none" ;
		Fv:_FillValue = -99999.f ;
		Fv:valid_range = 0.f, 0.f ;
	float Fg(Orbits:grid5km, YDim:grid5km, XDim:grid5km) ;
		Fg:long_name = "Geometric kernel" ;
		Fg:unit = "none" ;
		Fg:_FillValue = -99999.f ;
		Fg:valid_range = 0.f, 0.f ;