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"