
get_bitfield
Unpacks bit fields from an array.
Available in version 6.5.0 and later.
Prototype
function get_bitfield ( packedvar : numeric, ; byte, ubyte, short, ushort, integer startbit : integer, numbits : integer ) return_val : typeof(packedvar)
Arguments
packedvarThe array of any dimensionality to be unpacked. It can be of type byte, ubyte, short, ushort, or integer.
startbitThe bit number of the start of the bit-field. Bits are numbered from right-to-left, or least-significant to most-significant, starting with zero, as per common convention. startbit should be the most signficant bit of the bit-field.
numbitsThe length of the bit-field.
Return value
The return array will be the same type and shape as packedvar.
Description
Satellite data products, such as NASA's MODIS, often contain data packed as bitfields within a variable of integer type. By convention in these data products, the bits are numbered from right to left, or least-significant to most-significant, beginning with zero. get_bitfield is a convenience function for extracting such bit-fields. It is similar to (and implemented in terms of) dim_gbits, but is intended to be easier to use in this specific use-case.
See Also
Examples
Consider the following description of a packed variable, extracted from a MODIS file:
ushort 250m_16_days_VI_Quality ( YDim_MODIS_Grid_16DAY_250m_500m_VI, XDim_MODIS_Grid_16DAY_250m_500m_VI ) long_name : 250m 16 days VI Quality units : bit field valid_range : ( 0, 65534 ) _FillValue : 65535 Legend : Bit Fields Description (Right to Left): [0-1] : MODLAND_QA [2 bit range] 00: VI produced, good quality 01: VI produced, but check other QA 10: Pixel produced, but most probably cloudy 11: Pixel not produced due to other reasons than clouds [2-5] : VI usefulness [4 bit range] 0000: Highest quality 0001: Lower quality 0010..1010: Decreasing quality 1100: Lowest quality 1101: Quality so low that it is not useful 1110: L1B data faulty 1111: Not useful for any other reason/not processed [6-7] : Aerosol quantity [2 bit range] 00: Climatology 01: Low 10: Average 11: High (11) [8] : Adjacent cloud detected; [1 bit range] 1: Yes 0: No [9] : Atmosphere BRDF correction performed [1 bit range] 1: Yes 0: No [10] : Mixed clouds [1 bit range] 1: Yes 0: No [11-13] : Land/Water Flag [3 bit range] 000: Shallow ocean 001: Land (Nothing else but land) 010: Ocean coastlines and lake shorelines 011: Shallow inland water 100: Ephemeral water 101: Deep inland water 110: Moderate or continental ocean 111: Deep ocean [14] : Possible snow/ice [1 bit range] 1: Yes 0: No [15] : Possible shadow [1 bit range] 1: Yes 0: No hdf_name : 250m 16 days VI QualityNine channels of information are packed Within this unsigned-short 2D variable. To extract the "Land/Water Flag":
lwFlag = get_bitfield(250m_16_days_VI_Quality, 13, 3)Contrast this usage with the equivalent call to the more flexible and general dim_gbits:
dimq = dimsizes(250m_16_days_VI_Quality) lwFlag_1d = dim_gbits(ndtooned(250m_16_days_VI_Quality), 2, 3, 13, dimq) lwFlag = onedtond(lwFlag_1d, dimq)