HDF-EOS V2 MODIS L2G Land Surface Reflectance Data State File Specification Revision 3.x (October 31, 2001) Product ID(s): MOD09 L2G 1DY 1KM (MOD09GST) Description: The MODIS 1KM Resolution Level 2G (L2G) Land Surface Reflectance Data state file contains the restructured Level 2 (L2) Land Surface Reflectance Data state which intersects a geographic area, a tile in the Level 3 (L3) grid. The actual data stored is based on a set of pointers to observations which intersect each cell (pixel) in the corresponding L2G 1KM Observation Pointer file. A single 1KM Land Surface Reflectance Data state observation consist of 1km Reflectance Data State QA data only. Nominally, a entire data-day's (24 hours GMT) worth of data, which intersects the tile, is stored in the file. The global L3 grid is divided into a number of tiles, areas with a nominal size of 1100 km by 1100 km (10 deg. by 10 deg.). The Land Surface Reflectance data is stored at a nominal grid resolution of 500m. For each pixel in the output tile, the 1KM observation pointer is used to find the location of the spatial element in each of the L2 Land Surface Reflectance files. The surface reflectance information for each observation is extracted from the corresponding locations in the surface reflectance files. A one-to-one correspondence is kept between the information in the observation pointer file and the surface reflectance file. There are two ways to which the observation data can be stored in a L2G grid file, full and compact. The actual method is specified by the L2G Storage Format metadatum. In both methods, the first layer of observations is stored in a 2 dimensional array. In the full method, all of the values are stored in a 3 dimensional array with the slowest varying dimension specifying the observation layer. This is an inefficient storage method because typically a large number of cells are empty. For the compact method, the additional observation values are stored in a single dimensional array, with the dimension corresponding to the number of additional observations since the beginning of the file. Essentially, the additional observations are run-length encoded with each observation stored sequentially for each cell. Only the full format is meant for distribution. In addition, for initial production after launch, the user may specify that only the first layer be stored, in which case the additional arrays are not stored. Point of Contact: Jim Ray Science Systems and Applications Inc. NASA's Goddard Space Flight Center, Code 923 Greenbelt, MD 20771 (301) 614-6684 jim@cratmos.gsfc.nasa.gov Kai Yang Science Systems and Applications Inc. NASA's Goddard Space Flight Center, Code 922 Greenbelt, MD 20771 (301) 614-5452 kyang@ltpmail.gsfc.nasa.gov Robert Wolfe Hughes STX NASA's Goddard Space Flight Center, Code 922 Greenbelt, MD 20771 (301) 614-5508 robert.wolfe@gsfc.nasa.gov Principal Investigator: Eric Vermote University of Maryland, College Park NASA's Goddard Space Flight Center, Code 923 Greenbelt, MD 20771 (301) 286-6232 vermote@kratmos.gsfc.nasa.gov =========================================================================== Generic Constructs ECS Metadata Strings: Notes: "FR" is an abbreviation for "FREE_RANGE". "D/T" is an abbreviation for "DATE/TIME" (A) implies that multiple values are stored within a single array. A value of "Variable" indicates that this value will vary according to the granule being processed. "M" means class M. CoreMetadata.0 This string will contain the following PVL fields: # of Field Name Data Value Value Type s GROUP = INVENTORYMETADATA GROUP = CollectionDescriptionClass SHORTNAME STRING 1 "MOD09GST" VERSIONID STRING 1 Variable END_GROUP = CollectionDescriptionClass GROUP = ECSDataGranule REPROCESSINGPLANNED STRING 1 "no further update anticipated" REPROCESSINGACTUAL STRING 1 "processed once" LOCALGRANULEID STRING 1 Variable DAYNIGHTFLAG STRING 1 Variable PRODUCTIONDATETIME D/T 1 Variable LOCALVERSIONID STRING 1 Variable SIZEMBECSDATAGRANULE FLOAT 1 Variable END_GROUP = ECSDataGranule GROUP = PGEVersionClass PGEVERSION STRING 1 "2.1" END_GROUP = PGEVersionClass GROUP = InputGranule INPUTPOINTER STRING FR (A) Variable END_GROUP = InputGranule GROUP = RangeDateTime RANGEBEGINNINGDATE DATE 1 Variable RANGEBEGINNINGTIME TIME 1 Variable RANGEENDINGDATE DATE 1 Variable RANGEENDINGTIME TIME 1 Variable END_GROUP = RangeDateTime GROUP = GRing EXCLUSIONGRINGFLAG STRING 1 "N" END_GROUP = GRing GROUP = GRingPoint GRINGPOINTLATITUDE DOUBLE 4 (A) Variable GRINGPOINTLONGITUDE DOUBLE 4 (A) Variable GRINGPOINTSEQUENCENO INTEGER 4 (A) Variable END_GROUP = GRingPoint GROUP = OrbitCalculatedSpatialDomain ORBITNUMBER INTEGER "NumberofGranules" Variable EQUATORCROSSINGLONGITUDE DOUBLE "NumberofGranules" Variable EQUATORCROSSINGDATE DATE "NumberofGranules" Variable EQUATORCROSSINGTIME TIME "NumberofGranules" Variable END_GROUP = OrbitCalculatedSpatialDomain GROUP = MeasuredParameter PARAMETERNAME STRING FR (A) Variable GROUP = QAFlags AUTOMATICQUALITYFLAG STRING 1 Variable AUTOMATICQUALITYFLAGEXPLANATION STRING 1 Variable OPERATIONALQUALITYFLAG STRING 1 Variable OPERATIONALQUALITYFLAGEXPLANATION STRING 1 Variable SCIENCEQUALITYFLAG STRING 1 Variable SCIENCEQUALITYFLAGEXPLANATION STRING 1 Variable END_GROUP = QAFlags GROUP = QAStats QAPERCENTMISSINGDATA INTEGER 1 Variable END_GROUP = QAStats END_GROUP = MeasuredParameter ****************************************************************** * Note that MeasuredParameter group has * Class = "M" (see sample MCF file). * Basically one needs to put DataField (SDS) names to PARAMETERNAME * and put corresponding QA metadata to QAFlags and QAStats. * If one has only QA metadata for whole product, instead for each * and individual DatFiels (SDS), it's suggested to put product * name to PARAMETERNAME. ******************************************************************* GROUP = AssociatedPlatformInstrumentSensor ASSOCIATEDPLATFORMSHORTNAME STRING 1 "AM-1" ASSOCIATEDINSTRUMENTSHORTNAME STRING 1 "MODIS" ASSOCIATEDSENSORSHORTNAME STRING 1 "CCD" END_GROUP = AssociatedPlatformInstrumentSensor GROUP = AdditionalAttributes ADDITIONALATTRIBUTENAME STRING FR (A) Variable PARAMETERVALUE STRING FR (A) Variable ADDITIONALATTRIBUTENAME.1 = "QAPERCENTGOODQUALITY" ADDITIONALATTRIBUTENAME.2 = "QAPERCENTOTHERQUALITY" ADDITIONALATTRIBUTENAME.3 = "QAPERCENTNOTPRODUCEDCLOUD" ADDITIONALATTRIBUTENAME.4 = "QAPERCENTNOTPRODUCEDOTHER" ADDITIONALATTRIBUTENAME.5 = "HORIZONTALTILENUMBER" ADDITIONALATTRIBUTENAME.6 = "VERTICALTILENUMBER" ADDITIONALATTRIBUTENAME.7 = "TileID" ******************************************************* * Other SCF defined PSA attributes: ******************************************************* END_GROUP = AdditionalAttributes END_GROUP = INVENTORYMETADATA ArchiveMetadata.0 This string will contain the following PVL fields: # of Field Name Data Value Value Type s GROUP = ARCHIVEMETADATA GROUP = BoundingRectangle WESTBOUNDINGCOORDINATE DOUBLE 1 Variable NORTHBOUNDINGCOORDINATE DOUBLE 1 Variable EASTBOUNDINGCOORDINATE DOUBLE 1 Variable SOUTHBOUNDINGCOORDINATE DOUBLE 1 Variable END_GROUP = BoundingRectangle ALGORITHMPACKAGEACCEPTANCEDATE STRING 1 "TBD" ALGORITHMPACKAGEMATURITYCODE STRING 1 "Preliminary" ALGORITHMPACKAGENAME STRING 1 "MOD_PRMGR" ALGORITHMPACKAGEVERSION STRING 1 "2.1" GEOANYABNORMAL STRING 1 Variable GEOESTMAXRMSERROR DOUBLE 1 Variable LONGNAME STRING 1 "MODIS Level 2G 1KM Resolution L2G Surface Reflectance Data State QA" SPSOPARAMETERS STRING 1 "none" PROCESSINGCENTER STRING 1 "GSFC" NUMBEROFOVERLAPGRANULES INTEGER 1 Variable NUMBEROFINPUTGRANULES INTEGER 1 Variable GRANULENUMBERARRAY INTEGER "NumberofGranules" Variable ORBITNUMBERARRAY INTEGER "NumberofGranules" Variable GRANULEBEGINNINGDATETIME STRING "NumberofGranules" Variable GRANULEENDINGDATETIME STRING "NumberofGranules" Variable GRANULEDAYNIGHTFLAG STRING "NumberofGranules" Variable MINIMUMLINEINDEX INTEGER "NumberofGranules" Variable MAXIMUMLINEINDEX INTEGER "NumberofGranules" Variable MINIMUMSAMPLEINDEX INTEGER "NumberofGranules" Variable MAXIMUMSAMPLEINDEX INTEGER "NumberofGranules" Variable GRANULEPOINTERARRAY INTEGER "NumberofGranules" Variable NADIRDATARESOLUTION STRING 1 Variable CHARACTERISTICBINANGULARSIZE DOUBLE 1 Variable CHARACTERISTICBINSIZE DOUBLE 1 Variable DATACOLUMNS INTEGER 1 Variable DATAROWS INTEGER 1 Variable GLOBALGRIDCOLUMNS INTEGER 1 Variable GLOBALGRIDROWS INTEGER 1 Variable MAXIMUMOBSERVATIONS INTEGER 1 Variable ADDITIONALLAYERS INTEGER 1 Variable TOTALOBSERVATIONS INTEGER 1 Variable TOTALADDITIONALOBSERVATIONS INTEGER 1 Variable COVERAGECALCULATIONMETHOD STRING 1 Variable FIRSTLAYERSELECTIONCRITERIA STRING 1 Variable L2GSTORAGEFORMAT STRING 1 Variable REFERENCEORBITNUMBER INTEGER 1 Variable ****************************************************************** * 1. The field "L2GStorageFormat" is either "full", * "compact" or "one layer only". * 2. The field "CoverageCalculationMethod" is either * "area" or "simple PSF". * 3. The field "FirstLayerSelectionCriteria" is either * "nearest neighbor" or "maximum observation coverage". ****************************************************************** END_GROUP = ARCHIVEMETADATA StructuralMetadata.0 This string will be populated automatically by HDF-EOS. Grid Structure: MOD_Grid_L2g_2d Dimensions: Dimension Name Value YDim:MOD_Grid_L2g_2d "Data Rows" XDim:MOD_Grid_L2g_2d "Data Columns" Corner Locations: Corner Values UpperLeftPointMtrs (Variable, Variable) LowerRightPointMtrs (Variable, Variable) Geographic Grid Projection Parameters: Note that all grid parameters are currently under development and may need to be revised prior to V2.0 code delivery. Supported Grids: Integerized Sinusoidal (GCTP_ISINUS) Interrupted Goodes Homolosine (GCTP_GOOD) Lambert Azimuthal Equal Area (GCTP_LAMAZ) Projection gridID = GCTP_ISINUS ProjParam[0] 6371007.181 ProjParam[1 to 7] 0.0 ProjParam[8] 86400 ProjParam[9] 0.0 ProjParam[10] 1.0 ProjParam[11 to 12] 0.0 Spherecode -1 GridOrigin HDFE_GD_UL Projection gridID = GCTP_GOOD ProjParam[0 to 12] 0.0 Spherecode 19 GridOrigin HDFE_GD_UL Projection gridID = GCTP_LAMAZ ProjParam[0] 6371228.0 ProjParam[1 to 5] 0.0 ProjParam[6] Variable ProjParam[7 to 12] 0.0 Spherecode 19 GridOrigin HDFE_GD_UL Grid Structure: MOD_Grid_L2g_3d Dimensions: Dimension Name Value Additional Layers:MOD_Grid_L2g_3d "Additional Layers" YDim:MOD_Grid_L2g_3d "Data Rows" XDim:MOD_Grid_L2g_3d "Data Columns" Corner Locations: (same as MOD_Grid_L2g_2d) Geographic Grid Projection: (same as MOD_Grid_L2g_2d) =========================================================================== DataFields: The following datafields are always in this file: num_observations state_1km_1 If the metadatum "L2GStorageFormat" is "full", the following datafields are also present: state_1km_f If the metadatum "L2GStorageFormat" is "compact", the following datafields are also present: state_1km_c nadd_obs_row Each datafield has at least the following 4 attributes: long_name (STRING) units (STRING) valid_range (agrees with data type of SDS) _FillValue (agrees with data type of SDS) =========================================================================== Name Data Dimensions Type num_observations INT8 "YDim:MOD_Grid_L2g_2d", "XDim:MOD_Grid_L2g_2d" Description: The number of observations per pixel contained within this L2G file. In addition, if the value is less than zero, it means that intersections were not computed for this cell. If it is -1, it is part of the fill region of the grid. If it is -2, it is in the area identified as 'non-production' in the Land Production Mask. HDF Attributes: Number of Values or Max. Attribute Data String Value Type Length long_name STRING 22 Number of observations units STRING 4 none valid_range INT8 2 0, 127 _FillValue INT8 1 -1 =========================================================================== Name Data Dimensions Type state_1km_1 UINT16 "YDim:MOD_Grid_L2g_2d", "XDim:MOD_Grid_L2g_2d" state_1km_f UINT16 "Additional Layers:MOD_Grid_L2g_3d", "YDim:MOD_Grid_L2g_3d", "XDim:MOD_Grid_L2g_3d" state_1km_c UINT16 metadatum "TotalAdditionalObservations" Description: 1km Reflectance Data State QA "state_1km_1" is for storing the first layer of observations and is always stored. "state_1km_f" and "state_1km_c" are for storing the additional layers of observations. "state_1km_f" is for the full format and is stored only if the metadatum "L2GStorageFormat" is "full". "state_1km_c" is for the compact format and is stored only if the metadatum "L2GStorageFormat" is "compact". Bit Description 0-1 cloud state; clear (00), cloudy (01), mixed (10), not set, assumed clear (11) 2 cloud shadow; yes (1) or no (0) 3-5 land/water flag; class definitions: 000 -- shallow ocean 001 -- land 010 -- ocean coastlines and land shorelines 011 -- shallow inland water 100 -- ephemeral water 101 -- deep inland water 110 -- continental/moderate ocean 111 -- deep ocean 6-7 aerosol quantity; climatology (00), low (01) average (10), high (11) 8-9 cirrus detected; none (00), small (01), average (10), high (11) 10 internal cloud mask; cloudy (1) or clear (0) 11 internal fire mask; fire (1) or no fire (0) 12 MOD35 snow/ice flag; yes(1) or no(0) 13-14 BRDF correction performed; no (00), Montana methodology (01), Boston methodology (10). 15 internal snow mask; snow (1) or no snow (0) Note that all bit flags in this SDS can be applied to the respective 500m and 250m reflectance data. HDF Attributes: Attribute Data Quantity Value Type long_name STRING 1 Variable units STRING 1 bit field valid_range UINT16 2 0, 57335 _FillValue UINT16 1 65535 Nadir Data Resolution STRING 3 1km Note: The attribute "long_name" is "1km Reflectance Data State QA - - first layer" for "state_1km_1", "1km Reflectance Data State QA - - additional layers, full" for "state_1km__f", or "1km Reflectance Data State QA - additional layers, compact" for "state_1km_c". =========================================================================== Name Data Dimensions Type nadd_obs_row INT32 metadatum "DataRows" Description: The number of additional observations in each row in the compact storage form of the L2G grid. This field is only stored if the metadatum "L2GStorageFormat" is "compact". HDF Attributes: Number of Values or Max. Attribute Data String Value Type Length long_name STRING 41 Number of additional observations per row units STRING 4 none valid_range INT32 2 0, INT32_MAX _FillValue INT32 1 -1 =========================================================================