MODIS Land Surface Temperature and Emissivity (MOD21)

Description:

The new MODIS Land Surface Temperature and Emissivity (LST&E) product (MOD21) available in Collection 6 uses a physics-based algorithm to dynamically retrieve both the LST and Emissivity simultaneously for the three MODIS thermal infrared bands (29, 31 and 32) at a spatial resolution of 1 km at nadir. The MOD21 product address the documented cold bias of 3-5 K in the MOD11 heritage split-window products. The MOD21 algorithm is based on the ASTER Temperature Emissivity Separation (TES) algorithm, which uses full radiative transfer simulations for the atmospheric correction, and an emissivity model based on the variability in the surface radiance data to dynamically retrieve both LST and spectral emissivity. The TES algorithm is combined with an improved Water Vapor Scaling (WVS) atmospheric correction scheme to stabilize the retrieval during very warm and humid conditions. Simulations and validation results available in the ATBD have shown consistent accuracies at the 1 K level over all land surface types including vegetation, water, and deserts.

Point of Contact:
      Glynn C. Hulley (PI) 
      glynn.hulley@jpl.nasa.gov 

Principal Investigator(s):
      Glynn C. Hulley (PI) 
      MS 183-509 
      Jet Propulsion Laboratory 
      4800 Oak Grove Dr. 
      Pasadena, CA 91109 
      Email: glynn.hulley@jpl.nasa.gov 
      Office: (818) 354-2979 

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

dimensions:
	YDim:swath_lines_5km = 406 ;
	XDim:swath_pixels_5km = 271 ;
    YDim:swath_lines_1km = 2030 ;
	XDim:swath_pixels_1km = 1354 ;

variables:
	float32 Latitude(YDim:swath_lines_5km, XDim:swath_pixels_5km) ;
		Latitude:long_name = "Latitude of every 5 scan lines and 5 pixels" ;
		Latitude:scale_factor = n/a ;
		Latitude:add_offset = n/a ;
		Latitude:units = "degree" ;
		Latitude:_FillValue = -999.0 ;
		Latitude:valid_range = -90.0, 90.0 ;
	float32 Longitude(YDim:swath_lines_5km, XDim:swath_pixels_5km) ;
		Longitude:long_name = "Longitude of every 5 scan lines and 5 pixels" ;
		Longitude:scale_factor = n/a ;
		Longitude:add_offset = n/a ;
		Longitude:units = "degree" ;
		Longitude:_FillValue = -999.0 ;
		Longitude:valid_range = -180.0, 180.0 ;
	uint16 LST(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		LST:long_name = "Land Surface Temperature" ;
		LST:scale_factor = 0.02 ;
		LST:add_offset = 0.0 ;
		LST:units = "K" ;
		LST:_FillValue = 0 ;
		LST:valid_range = 7500, 65535 ;
	uint16 QC(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		QC:long_name = "Quality control for LST and emissivity" ;
		QC:scale_factor = n/a ;
		QC:add_offset = n/a ;
		QC:units = "none" ;
		QC:data description = "Quality Assurance (QA)",
    "0-1    Mandatory QA flags\n",
    "       00 --- Pixel produced, good quality, no further QA info necessary\n",
    "       01 --- Pixel produced but unreliable quality. Either one or more of the following conditions are met: emissivity in both bands 31 and 32 < 0.95, retrieval affected by nearby cloud, low transmissivity due to high water vapor loading (<0.4), sensor view angles > 55 degrees. Recommend more detailed analysis of other QC information\n",
    "       10 --- Pixel not produced due to cloud\n",
    "       11 --- Pixel not produced due to reasons other than cloud (e.g. ocean pixel, poorly calibrated input radiance, TES algorithm divergence flag) \n",
    "2-3    Data quality flag\n",
    "       00 --- Good data quality of L1B bands 29, 31, 32\n",
    "       01 --- Missing pixel\n",
    "       10 --- Fairly calibrated\n",
    "       11 --- Poorly calibrated, TES processing skipped\n",
    "4-5    Cloud flag\n",
    "       00 --- Cloud free pixel\n",
    "       01 --- Thin cirrus\n",
    "       10 --- Pixel within 2 pixels of nearest cloud (~2km)\n",
    "       11 --- Cloud pixel\n",
    "6-7    TES Iterations (k)\n",
    "       00 --- = >= 7 (Slow convergence)\n",
    "       01 --- = 6 (Nominal)\n",
    "       10 --- = 5 (Nominal)\n",
    "       11 --- = <5 (Fast)\n",
    "8-9    Atmospheric Opacity\n",
    "       00 --- = >= 0.3 (Warm, humid air; or cold land)\n",
    "       01 --- = 0.2 - 0.3 (Nominal value)\n",
    "       10 --- = 0.1 - 0.2 (Nominal value)\n",
    "       11 --- = <0.1 (Dry, or high altitude pixel)\n",
    "10-11  Min-Max Difference (MMD). Difference between minimum and maximum emissivity for bands 29, 31, 32\n",
    "       00 --- = >0.15 (Most silicate rocks)\n",
    "       01 --- = 0.1 - 0.15 (Rocks, sand, some soils)\n",
    "       10 --- = 0.03 - 0.1 (Mostly soils, mixed pixel)\n",
    "       11 --- = <0.03 (Vegetation, snow, water, ice)\n",
    "12-13  Emissivity accuracy\n",
    "       00 --- = >0.017 (Poor performance)\n",
    "       01 --- = 0.015 - 0.017 (Marginal performance)\n",
    "       10 --- = 0.013 - 0.015 (Good performance)\n",
    "       11 --- = <0.013 (Excellent performance)\n",
    "14-15  LST accuracy\n",
    "       00 --- = >2.5 K (Poor performance)\n",
    "       01 --- = 1.5 - 2.5 K (Marginal performance)\n",
    "       10 --- = 1 - 1.5 K (Good performance)\n",
    "       11 --- = <1 K (Excellent performance)\n",
    "" ;
		QC:valid_range = 0, 65535 ;
	uint8 Emis_29(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		Emis_29:long_name = "Band 29 emissivity" ;
		Emis_29:scale_factor = 0.002 ;
		Emis_29:add_offset = 0.49 ;
		Emis_29:units = "n/a" ;
		Emis_29:_FillValue = 0 ;
		Emis_29:valid_range = 1, 255 ;
	uint8 Emis_31(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		Emis_31:long_name = "Band 31 emissivity" ;
		Emis_31:scale_factor = 0.002 ;
		Emis_31:add_offset = 0.49 ;
		Emis_31:units = "n/a" ;
		Emis_31:_FillValue = 0 ;
		Emis_31:valid_range = 1, 255 ;
	uint8 Emis_32(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		Emis_32:long_name = "Band 32 emissivity" ;
		Emis_32:scale_factor = 0.002 ;
		Emis_32:add_offset = 0.49 ;
		Emis_32:units = "n/a" ;
		Emis_32:_FillValue = 0 ;
		Emis_32:valid_range = 1, 255 ;
	uint8 LST_err(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		LST_err:long_name = "Land Surface Temperature error" ;
		LST_err:scale_factor = 0.04 ;
		LST_err:add_offset = 0.0 ;
		LST_err:units = "K" ;
		LST_err:_FillValue = 0 ;
		LST_err:valid_range = 1, 255 ;
	uint16 Emis_29_err(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		Emis_29_err:long_name = "Band 29 emissivity error" ;
		Emis_29_err:scale_factor = 0.0001 ;
		Emis_29_err:add_offset = 0.0 ;
		Emis_29_err:units = "n/a" ;
		Emis_29_err:_FillValue = 0 ;
		Emis_29_err:valid_range = 1, 65535 ;
	uint16 Emis_31_err(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		Emis_31_err:long_name = "Band 31 emissivity error" ;
		Emis_31_err:scale_factor = 0.0001 ;
		Emis_31_err:add_offset = 0.0 ;
		Emis_31_err:units = "n/a" ;
		Emis_31_err:_FillValue = 0 ;
		Emis_31_err:valid_range = 1, 65535 ;
	uint16 Emis_32_err(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		Emis_32_err:long_name = "Band 32 emissivity error" ;
		Emis_32_err:scale_factor = 0.0001 ;
		Emis_32_err:add_offset = 0.0 ;
		Emis_32_err:units = "n/a" ;
		Emis_32_err:_FillValue = 0 ;
		Emis_32_err:valid_range = 1, 65535 ;
	int16 PWV(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		PWV:long_name = "Precipitable Water Vapor" ;
		PWV:scale_factor = 0.001 ;
		PWV:add_offset = 0.0 ;
		PWV:units = "cm" ;
		PWV:_FillValue = 0 ;
		PWV:valid_range = -32767, 32767 ;
	uint8 Emis_ASTER(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		Emis_ASTER:long_name = "ASTER GED emissivity" ;
		Emis_ASTER:scale_factor = 0.002 ;
		Emis_ASTER:add_offset = 0.49 ;
		Emis_ASTER:units = "n/a" ;
		Emis_ASTER:_FillValue = 0 ;
		Emis_ASTER:valid_range = 1, 255 ;
	uint8 oceanpix(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		oceanpix:long_name = "ocean pixels" ;
		oceanpix:scale_factor = 1.0 ;
		oceanpix:add_offset = 0.0 ;
		oceanpix:units = "n/a" ;
		oceanpix:_FillValue = 0 ;
		oceanpix:valid_range = 0, 1 ;
	uint8 View_angle(YDim:swath_lines_1km, XDim:swath_pixels_1km) ;
		View_angle:long_name = "MODIS view angle for current pixel" ;
		View_angle:scale_factor = 0.5 ;
		View_angle:add_offset = 0.0 ;
		View_angle:units = "degrees" ;
		View_angle:_FillValue = 0 ;
		View_angle:valid_range = 0, 180 ;