PATMOS-x AVHRR Pathfinder Atmospheres - Extended

Data Format

Documentation Home | List of Data File Contents | Data Format | Map Projection | Algorithms


The CLAVR-x/PATMOS-x gridded data is written in HDF4. Most parameters are stored as scaled integers. The IDL and MATLAB tools provided from this site automatically unscale the data. This page provides information on how to unscale the data without using the existing tools.

Shown below is the output from the hdp command on a CLAVR-x/PATMOS-x gridded file for one particular sds (cld_opd_ir).

Variable Name = cld_opd_ir
         Index = 175
         Type= 8-bit signed integer
         Ref. = 177
         Rank = 1
         Number of attributes = 7
         Dim0: Name=fakeDim175
                 Size = 165018
                 Scale Type = number-type not set
                 Number of attributes = 0
         Attr0: Name = SCALED
                 Type = 8-bit signed integer
                 Count= 1
                 Value = 2
         Attr1: Name = RANGE_MIN
                 Type = 32-bit floating point
                 Count= 1
                 Value = -1.000000
         Attr2: Name = RANGE_MAX
                 Type = 32-bit floating point
                 Count= 1
                 Value = 2.000000
         Attr3: Name = SCALED_MIN
                 Type = 32-bit signed integer
                 Count= 1
                 Value = -127
         Attr4: Name = SCALED_MAX
                 Type = 32-bit signed integer
                 Count= 1
                 Value = 127
         Attr5: Name = SCALED_MISSING
                 Type = 32-bit signed integer
                 Count= 1
                 Value = -128
         Attr6: Name = UNITS
                 Type = 8-bit signed char
                 Count= 4
                 Value = none


This attributes of this variable tell how to unscale it.  The SCALED flag set to something nonzero indicates that is parameter has been scaled.  The value of 1 for SCALED says it is linearly scaled.  A value of 2 would refer to log10 scaling and a value of 3 refers to square-root scaling. The type of this variable is an 8-bit signed integer which can have a value of -128 to 127.  There are some variables scaled to be 16-bit signed integers. 

The SCALED_MIN and SCALED_MAX give the valid range of the scaled numbers.  For this type, the valid range is -127 to 127.  The SCALED_MISSING tells the value assigned when the variable and in this case it is -128.  RANGE_MIN and RANGE_MAX provide the range of the valid unscaled data.   The missing value for the unscaled data is not provided and its assignment is up to the user. A value of -999.0 is appropriate.  Here is an example, let I be the scaled value and X be the unscaled value.  Because SCALED = 1 (linear), we can write

if  (I = SCALED_MISSING) then

     X = USER_DEFINED_MISSING_VALUE

else

    X = RANGE_MIN + (RANGE_MAX-RANGE_MIN) * (I - SCALED_MIN) / (SCALED_MAX - SCALED_MIN)

endif

If log10 scaling were used (SCALED =2), we would write the same relation

if  (I = SCALED_MISSING) then

     X = USER_DEFINED_MISSING_VALUE

else

    X = RANGE_MIN + (RANGE_MAX-RANGE_MIN) * (I - SCALED_MIN) / (SCALED_MAX - SCALED_MIN)

endif

but we would need to take the ani-log10 of X

X = 10^X

Note, for log10 scaling, the RANGE_MIN and RANGE_MAX are already converted to log10.

If square-root scaling were used (SCALED=3), we would write

if  (I = SCALED_MISSING) then

     X = USER_DEFINED_MISSING_VALUE

else

    X = RANGE_MIN + (RANGE_MAX-RANGE_MIN) * ((I - SCALED_MIN) / (SCALED_MAX - SCALED_MIN))^2

endif

Note, as opposed to log10 scaling, the RANGE_MIN and RANGE_MAX are not already converted to the square root.