HDF-EOS V2 MODIS CMG Surface Reflectance HDF File Specification Revision 6.0.1, 15-OCT-09 Product ID(s): MOD09CMA (Terra Aerosol Optical Thickness Daily Climate Modeling Grid) Point of Contact: Jim Ray Sigma Space Corp. MODIS Land Science Team 4321 Hartwick Rd., Suite 209 College Park, MD 20742 301-405-8120 jim@ltdri.org Principal Investigator: Eric Vermote University of Maryland, College Park NASA's Goddard Space Flight Center, Code 614.5 Greenbelt, MD 20771 301-405-8052 eric@ltdri.org SDST: Gang Ye MODIS SDST 7501 Forbes Blvd., Suite 103 Seabrook, MD 20706 301-352-2109 gye@ltpmail.gsfc.nasa.gov ECS Metadata CoreMetadata.0: The following is the MCF section that will be used to create the core metadata string. Items labeled as "NOTE" will not be part of the MCF, but have been added for clarity. GROUP = INVENTORYMETADATA GROUPTYPE = MASTERGROUP GROUP = ECSDataGranule OBJECT = LocalGranuleID Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = LocalGranuleID OBJECT = SizeMBECSDataGranule Mandatory = "FALSE" Data_Location = "DSS" NUM_VAL = 1 TYPE = "DOUBLE" END_OBJECT = SizeMBECSDataGranule OBJECT = ProductionDateTime Mandatory = "TRUE" Data_Location = "TK" NUM_VAL = 1 TYPE = "DATETIME" END_OBJECT = ProductionDateTime OBJECT = DayNightFlag Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = DayNightFlag OBJECT = ReprocessingActual Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = ReprocessingActual OBJECT = LocalVersionID Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = LocalVersionID OBJECT = ReprocessingPlanned Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = ReprocessingPlanned END_GROUP = ECSDataGranule GROUP = MeasuredParameter OBJECT = MeasuredParameterContainer Data_Location = "NONE" Mandatory = "TRUE" CLASS = "M" GROUP = QAFlags CLASS = "M" OBJECT = ScienceQualityFlag Mandatory = "FALSE" Data_Location = "DP" NUM_VAL = 1 TYPE = "STRING" Value = "Not Investigated" END_OBJECT = ScienceQualityFlag OBJECT = AutomaticQualityFlagExplanation Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = AutomaticQualityFlagExplanation OBJECT = AutomaticQualityFlag Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = AutomaticQualityFlag OBJECT = OperationalQualityFlagExplanation Mandatory = "FALSE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = OperationalQualityFlagExplanation OBJECT = OperationalQualityFlag Mandatory = "FALSE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = OperationalQualityFlag OBJECT = ScienceQualityFlagExplanation Mandatory = "FALSE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = ScienceQualityFlagExplanation END_GROUP = QAFlags GROUP = QAStats CLASS = "M" OBJECT = QAPercentMissingData Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "INTEGER" END_OBJECT = QAPercentMissingData END_GROUP = QAStats OBJECT = ParameterName Mandatory = "TRUE" CLASS = "M" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = ParameterName END_OBJECT = MeasuredParameterContainer END_GROUP = MeasuredParameter NOTE: There will be 1 OrbitCalculatedSpatialDomain field per orbit in this file GROUP = OrbitCalculatedSpatialDomain OBJECT = OrbitCalculatedSpatialDomainContainer Data_Location = "NONE" Mandatory = "TRUE" CLASS = "M" OBJECT = EquatorCrossingDate Mandatory = "TRUE" CLASS = "M" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DATE" END_OBJECT = EquatorCrossingDate OBJECT = EquatorCrossingTime Mandatory = "TRUE" CLASS = "M" Data_Location = "PGE" NUM_VAL = 1 TYPE = "TIME" END_OBJECT = EquatorCrossingTime OBJECT = OrbitNumber Mandatory = "TRUE" CLASS = "M" Data_Location = "PGE" NUM_VAL = 1 TYPE = "INTEGER" END_OBJECT = OrbitNumber OBJECT = EquatorCrossingLongitude Mandatory = "TRUE" CLASS = "M" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DOUBLE" END_OBJECT = EquatorCrossingLongitude END_OBJECT = OrbitCalculatedSpatialDomainContainer END_GROUP = OrbitCalculatedSpatialDomain GROUP = CollectionDescriptionClass OBJECT = VersionID Mandatory = "TRUE" Data_Location = "MCF" NUM_VAL = 1 TYPE = "INTEGER" Value = 6 END_OBJECT = VersionID OBJECT = ShortName Mandatory = "TRUE" Data_Location = "MCF" NUM_VAL = 1 TYPE = "STRING" Value = "MOD09CMA" END_OBJECT = ShortName END_GROUP = CollectionDescriptionClass GROUP = InputGranule OBJECT = InputPointer Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 75 TYPE = "STRING" END_OBJECT = InputPointer END_GROUP = InputGranule GROUP = SpatialDomainContainer GROUP = HorizontalSpatialDomainContainer GROUP = BoundingRectangle OBJECT = EastBoundingCoordinate Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DOUBLE" END_OBJECT = EastBoundingCoordinate OBJECT = WestBoundingCoordinate Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DOUBLE" END_OBJECT = WestBoundingCoordinate OBJECT = SouthBoundingCoordinate Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DOUBLE" END_OBJECT = SouthBoundingCoordinate OBJECT = NorthBoundingCoordinate Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DOUBLE" END_OBJECT = NorthBoundingCoordinate END_GROUP = BoundingRectangle END_GROUP = HorizontalSpatialDomainContainer GROUP = GranuleLocality OBJECT = LocalityValue Mandatory = "TRUE" Data_Location = "MCF" NUM_VAL = 1 TYPE = "STRING" Value = "Global" END_OBJECT = LocalityValue END_GROUP = GranuleLocality END_GROUP = SpatialDomainContainer GROUP = RangeDateTime OBJECT = RangeEndingDate Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DATE" END_OBJECT = RangeEndingDate OBJECT = RangeEndingTime Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "TIME" END_OBJECT = RangeEndingTime OBJECT = RangeBeginningDate Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "DATE" END_OBJECT = RangeBeginningDate OBJECT = RangeBeginningTime Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "TIME" END_OBJECT = RangeBeginningTime END_GROUP = RangeDateTime GROUP = PGEVersionClass OBJECT = PGEVersion Mandatory = "TRUE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = PGEVersion END_GROUP = PGEVersionClass GROUP = AssociatedPlatformInstrumentSensor OBJECT = AssociatedPlatformInstrumentSensorContainer Data_Location = "NONE" Mandatory = "TRUE" CLASS = "1" OBJECT = AssociatedSensorShortName Mandatory = "TRUE" CLASS = "1" Data_Location = "MCF" NUM_VAL = 1 TYPE = "STRING" Value = "MODIS" END_OBJECT = AssociatedSensorShortName OBJECT = AssociatedPlatformShortName Mandatory = "TRUE" CLASS = "1" Data_Location = "MCF" NUM_VAL = 1 TYPE = "STRING" Value = "Terra" END_OBJECT = AssociatedPlatformShortName OBJECT = AssociatedInstrumentShortName Mandatory = "TRUE" CLASS = "1" Data_Location = "MCF" NUM_VAL = 1 TYPE = "STRING" Value = "MODIS" END_OBJECT = AssociatedInstrumentShortName END_OBJECT = AssociatedPlatformInstrumentSensorContainer END_GROUP = AssociatedPlatformInstrumentSensor NOTE: There are no AdditionalAttributes in this file GROUP = AdditionalAttributes OBJECT = AdditionalAttributesContainer Data_Location = "NONE" Mandatory = "FALSE" CLASS = "M" OBJECT = AdditionalAttributeName Mandatory = "FALSE" CLASS = "M" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = AdditionalAttributeName GROUP = InformationContent CLASS = "M" OBJECT = ParameterValue Mandatory = "FALSE" Data_Location = "PGE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = ParameterValue END_GROUP = InformationContent END_OBJECT = AdditionalAttributesContainer END_GROUP = AdditionalAttributes END_GROUP = INVENTORYMETADATA ArchiveMetadata.0: The following is the MCF section that will be used to create the archive metadata string. GROUP = ARCHIVEDMETADATA GROUPTYPE = MASTERGROUP OBJECT = AlgorithmPackageAcceptanceDate Mandatory = "FALSE" Data_Location = "PGE" TYPE = "STRING" NUM_VAL = 1 END_OBJECT = AlgorithmPackageAcceptanceDate OBJECT = AlgorithmPackageMaturityCode Mandatory = "FALSE" Data_Location = "PGE" TYPE = "STRING" NUM_VAL = 1 END_OBJECT = AlgorithmPackageMaturityCode OBJECT = AlgorithmPackageName Mandatory = "FALSE" Data_Location = "PGE" TYPE = "STRING" NUM_VAL = 1 END_OBJECT = AlgorithmPackageName OBJECT = AlgorithmPackageVersion Mandatory = "FALSE" Data_Location = "PGE" TYPE = "STRING" NUM_VAL = 1 END_OBJECT = AlgorithmPackageVersion OBJECT = LongName DATA_LOCATION = "MCF" TYPE = "STRING" NUM_VAL = 1 MANDATORY = "TRUE" Value = "MODIS/Terra Aerosol Optical Thickness Daily L3 Global 0.05Deg CMA" END_OBJECT = LongName OBJECT = SPSOPARAMETERS DATA_LOCATION = "MCF" TYPE = "STRING" NUM_VAL = 1 MANDATORY = "TRUE" Value = "None" END_OBJECT = SPSOPARAMETERS OBJECT = PROCESSINGCENTER DATA_LOCATION = "MCF" TYPE = "STRING" NUM_VAL = 1 MANDATORY = "TRUE" Value = "MODAPS" END_OBJECT = PROCESSINGCENTER OBJECT = ProcessingEnvironment Data_Location = "PGE" Mandatory = "FALSE" TYPE = "STRING" NUM_VAL = 1 END_OBJECT = ProcessingEnvironment OBJECT = DESCRrevision Data_Location = "MCF" Mandatory = "TRUE" NUM_VAL = 1 TYPE = "STRING" VALUE = "5.0" END_OBJECT = DESCRrevision OBJECT = ProductionHistory Data_Location = "PGE" Mandatory = "FALSE" NUM_VAL = 1 TYPE = "STRING" END_OBJECT = ProductionHistory OBJECT = SystemFileName Data_Location = "PGE" Mandatory = "FALSE" NUM_VAL = 75 TYPE = "STRING" END_OBJECT = SystemFileName END_GROUP = ARCHIVEDMETADATA END Dimensions: Dimension Name Value Dimension_1 Data Lines 3600 Dimension_2 Data Samples Per Line 7200 DataFields: The exact contents of this file depends upon the contents of the IDS inputs that are read by MOD_PR09C.exe. For collection 6 this file is anticipated to contain: "Coarse Resolution AOT Model Residual Values" "Coarse Resolution AOT at 550 nm" "Coarse Resolution Water Vapor" "Coarse Resolution Air Temperature (2m)" "Coarse Resolution Atmospheric Optical Depth QA" "Coarse Resolution Atmospheric Optical Depth Model" All data stored within DataFields that contain the HDF attributes "scale_factor" and "add_offset" are scaled according to the following data conversion: parameter = scale_factor * (file data - add_offset) file data = (parameter / scale_factor) + add_offset DataField DataField_1 Name Coarse Resolution AOT Model Residual Values Data Type INT16 Dimensions Dimension_1, Dimension_2 DataField_1 HDF Attributes: Attribute Data Type Quantity Value long_name STRING 1 Coarse Resolution AOT Model Residual Values units STRING 1 (unitless) valid_range INT16 2 0, 3000 _FillValue INT16 1 60 scale_factor FLOAT64 1 0.001 scale_factor_err FLOAT64 1 0.0 add_offset FLOAT64 1 0.0 add_offset_err FLOAT64 1 0.0 calibrated_nt INT32 1 5 DataField DataField_2 Name Coarse Resolution AOT at 550 nm Data Type INT16 Dimensions Dimension_1, Dimension_2 DataField_2 HDF Attributes: Attribute Data Type Quantity Value long_name STRING 1 Coarse Resolution AOT at 550 nm units STRING 1 (unitless) valid_range INT16 2 0, 3000 _FillValue INT16 1 60 scale_factor FLOAT64 1 0.001 scale_factor_err FLOAT64 1 0.0 add_offset FLOAT64 1 0.0 add_offset_err FLOAT64 1 0.0 calibrated_nt INT32 1 5 DataField DataField_3 Name Coarse Resolution Water Vapor Data Type UINT16 Dimensions Dimension_1, Dimension_2 DataField_3 HDF Attributes: Attribute Data Type Quantity Value long_name STRING 1 Coarse Resolution Water Vapor units STRING 1 g/cm^2 valid_range INT16 2 0, 255 _FillValue INT16 1 0 scale_factor FLOAT64 1 0.01 scale_factor_err FLOAT64 1 0.0 add_offset FLOAT64 1 0.0 add_offset_err FLOAT64 1 0.0 calibrated_nt INT32 1 5 DataField DataField_4 Name Coarse Resolution Air Temperature (2m) Data Type UINT16 Dimensions Dimension_1, Dimension_2 DataField_4 HDF Attributes: Attribute Data Type Quantity Value long_name STRING 1 Coarse Resolution Air Temperature (2m) units STRING 1 degrees K valid_range INT16 2 0, 40000 _FillValue INT16 1 0 scale_factor FLOAT64 1 0.01 scale_factor_err FLOAT64 1 0.0 add_offset FLOAT64 1 0.0 add_offset_err FLOAT64 1 0.0 calibrated_nt INT32 1 5 DataField DataField_5 Name Coarse Resolution Atmospheric Optical Depth QA Data Type UINT8 Dimensions Dimension_1, Dimension_2 Not bitmapped, but with the following values: 0 inital value; 1 None of the 500m pixels that correspond to this 1km pixel has data that reaches either criteria for containing aerosols; 2 Pixel is over water; 3 One or more of the retrieved aerosol values has saturated (and then all are set to a fill value); 4 Pixel is cloudy or mixed or has a high band 26 value; 5 Pixel had been flagged as water, but also had positive NDVI; 6 Pixel is flagged as water and tests clear; 7 Pixel is flagged as water and tests for turbidity; 8 Snow (set in aot_filter()); 9 Bad geolocation, or high solar zenith; 10 Snow, or sunglint, or fire; 11 Bad 500m data, no aerosol retrieval; 12 Subpixel cloud (set in aot_filter()); 13 Aerosol retrieval anomalies; 14 Possible salt-pan; 15 Desert; 16 Aerosol retrieval rejection (from global_AOTR_rejection_mask.hdf); 17 Anomalous atmospheric correction in 500m cloud test; 18 AOT set to zero in routine check_correction(); 19 Adjacent to cloud; 127 Fill value (no data) DataField_5 HDF Attributes: Attribute Data Type Quantity Value long_name STRING 1 Coarse Resolution Atmospheric Optical Depth QA units STRING 1 (unitless) valid_range INT16 2 0, 19 _FillValue INT16 1 127 QA index STRING * (an index of Coarse Resolution Atmospheric Optical Depth QA values, like the description above.) DataField DataField_6 Name Coarse Resolution Atmospheric Optical Depth Model Data Type UINT8 Dimensions Dimension_1, Dimension_2 DataField_6 HDF Attributes: Attribute Data Type Quantity Value long_name STRING 1 Coarse Resolution Atmospheric Optical Depth Model units STRING 1 (unitless) valid_range UINT8 2 1, 5 _FillValue UINT8 1 0 scale_factor FLOAT64 1 1 scale_factor_err FLOAT64 1 0.0 add_offset FLOAT64 1 0.0 add_offset_err FLOAT64 1 0.0 calibrated_nt UINT8 1 5 Model_values STRING 1 "0 = no AOTR, 1 = SMKL, 2 = SMKH, 3 = DUST, 4 = URBANPOLU, 5 = URBANCLEAN"