#! /usr/bin/env python # encoding: utf-8 ''' @author: nick.bearson@ssec.wisc.edu Copyright (c) 2012 University of Wisconsin SSEC. All rights reserved. ''' from ctypes import * # --------------------- VIIRS_RDR_SCANS = 48 M_DETECTORS = 16 I_DETECTORS = 32 M_VIIRS_SDR_ROWS = VIIRS_RDR_SCANS * M_DETECTORS # 768 M_VIIRS_SDR_COLS = 3200 I_VIIRS_SDR_ROWS = VIIRS_RDR_SCANS * I_DETECTORS # 1536 I_VIIRS_SDR_COLS = 6400 VIIRS_MODERATE_PIXEL_COUNT = M_VIIRS_SDR_ROWS * M_VIIRS_SDR_COLS VCM_FLAG_PIXEL_COUNT = VIIRS_MODERATE_PIXEL_COUNT """ These structures are just for placeholders now - they should get set when we call the C init function! """ class IngMsdCoefficients_ViirsCloudMaskStruct(Structure): pass class VIIRS_ACTIVE_FIRES_TYPE(Structure): pass class VIIRS_IMG_REFL_TYPE(Structure): _fields_ = [('reflect', (c_float * I_VIIRS_SDR_COLS) * I_VIIRS_SDR_ROWS)] class VIIRS_IMG_BT_TYPE(Structure): _fields_ = [('Btemp', (c_float * I_VIIRS_SDR_COLS) * I_VIIRS_SDR_ROWS)] class VIIRS_MOD_BT_TYPE(Structure): _fields_ = [('Btemp', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS)] class VIIRS_MOD_RAD_TYPE(Structure): _fields_ = [('radiance', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS)] class VIIRS_MOD_REFL_TYPE(Structure): _fields_ = [('reflect', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS)] class VIIRS_MOD_INT16_TYPE(Structure): _fields_ = [('data', (c_int16 * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS)] class VIIRS_MOD_FLOAT32_TYPE(Structure): _fields_ = [('data', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS)] class VIIRS_MOD_UINT8_TYPE(Structure): _fields_ = [('data', (c_uint8 * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS)] """ alg21inc/ProEdrViirsCMStruct.h """ """ Float32 lat[M_VIIRS_SDR_ROWS + (CM_CROSS_GRANULE_ROWS * 2)] [M_VIIRS_SDR_COLS]; Float32 lon[M_VIIRS_SDR_ROWS + (CM_CROSS_GRANULE_ROWS * 2)] [M_VIIRS_SDR_COLS]; Float32 satazm[M_VIIRS_SDR_ROWS + (CM_CROSS_GRANULE_ROWS * 2)] [M_VIIRS_SDR_COLS]; Float32 satzen[M_VIIRS_SDR_ROWS + (CM_CROSS_GRANULE_ROWS * 2)] [M_VIIRS_SDR_COLS]; Float32 sunazm[M_VIIRS_SDR_ROWS + (CM_CROSS_GRANULE_ROWS * 2)] [M_VIIRS_SDR_COLS]; Float32 sunzen[M_VIIRS_SDR_ROWS + (CM_CROSS_GRANULE_ROWS * 2)] [M_VIIRS_SDR_COLS]; Int64 scanStartTime[VIIRS_RDR_SCANS]; """ #class TMP_VIIRS_SDR_MOD_FGEOLOC_TYPE(Structure): # _fields_ = [('lat', (c_float * M_VIIRS_SDR_ROWS) * M_VIIRS_SDR_COLS), # ('lon', (c_float * M_VIIRS_SDR_ROWS) * M_VIIRS_SDR_COLS), # ('satazm', (c_float * M_VIIRS_SDR_ROWS) * M_VIIRS_SDR_COLS), # ('satzen', (c_float * M_VIIRS_SDR_ROWS) * M_VIIRS_SDR_COLS), # ('sunazm', (c_float * M_VIIRS_SDR_ROWS) * M_VIIRS_SDR_COLS), # ('sunzen', (c_float * M_VIIRS_SDR_ROWS) * M_VIIRS_SDR_COLS), # ('scanStartTime', (c_int64 * VIIRS_RDR_SCANS))] class TMP_VIIRS_SDR_MOD_FGEOLOC_TYPE(Structure): _fields_ = [('lat', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS), ('lon', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS), ('satazm', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS), ('satzen', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS), ('sunazm', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS), ('sunzen', (c_float * M_VIIRS_SDR_COLS) * M_VIIRS_SDR_ROWS), ('scanStartTime', (c_int64 * VIIRS_RDR_SCANS))] """ NEED THIS - WHERE THE RESULTS COME FROM! defined in: include/ipoinc/ProEdrViirsCMIPGbl.h """ class VIIRS_CLOUD_MASK_IP_TYPE(Structure): _fields_ = [('vcm0', c_uint8 * VIIRS_MODERATE_PIXEL_COUNT ), ('vcm1', c_uint8 * VIIRS_MODERATE_PIXEL_COUNT ), ('vcm2', c_uint8 * VIIRS_MODERATE_PIXEL_COUNT ), ('vcm3', c_uint8 * VIIRS_MODERATE_PIXEL_COUNT ), ('vcm4', c_uint8 * VIIRS_MODERATE_PIXEL_COUNT ), ('vcm5', c_uint8 * VIIRS_MODERATE_PIXEL_COUNT ), ('vcmScanAllOcean', c_uint8 * M_VIIRS_SDR_ROWS), ('vcmScanNoOcean', c_uint8 * M_VIIRS_SDR_ROWS ), ('vcmGranuleAllOcean', c_uint8 ), ('vcmGranuleNoOcean', c_uint8 )] """ alg21/include/alg21inc/vcm.h """ class vcm_flags_t(Structure): _fields_ = [('cc_quality', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('cloud_confidence', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('day_night_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('snow_ice_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('sun_glint_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('land_water_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('shadow_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('heavy_aerosol_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('fire_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M9_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M15_M16_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M15_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M12_M16_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M14_M15_M16_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M15_M12_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M12_M13_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M5_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M7_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('M5_M7_Test_Result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('cloud_adjacency', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('CBforest_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('spatial_var_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('dustCand', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('smokeCand', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('dustVolcAsh', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('byte4_spare', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('byte5_spare', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('cloud_phase', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('thin_cirrus_test_result', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('ephemeral_water_flag', c_uint8 * VCM_FLAG_PIXEL_COUNT), ('byte6_spare', c_uint8 * VCM_FLAG_PIXEL_COUNT) ] """ alg21/include/alg21inc/ProEdrViirsCMStruct.h """ class vcm_data_type(Structure): _fields_ = [('act_scans' , c_int), ('lastModRow' , c_int), ('lastImgRow' , c_int), ('threshCoeffs' , POINTER(IngMsdCoefficients_ViirsCloudMaskStruct)), ('btI4' , POINTER(VIIRS_IMG_BT_TYPE)), ('btI5' , POINTER(VIIRS_IMG_BT_TYPE)), ('btM12' , POINTER(VIIRS_MOD_BT_TYPE)), ('btM13' , POINTER(VIIRS_MOD_BT_TYPE)), ('btM14' , POINTER(VIIRS_MOD_BT_TYPE)), ('btM15' , POINTER(VIIRS_MOD_BT_TYPE)), ('btM16' , POINTER(VIIRS_MOD_BT_TYPE)), ('radM12' , POINTER(VIIRS_MOD_RAD_TYPE)), ('reflI1' , POINTER(VIIRS_IMG_REFL_TYPE)), ('reflI2' , POINTER(VIIRS_IMG_REFL_TYPE)), ('reflM1' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM4' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM5' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM7' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM8' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM9' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM10' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM11' , POINTER(VIIRS_MOD_REFL_TYPE)), ('reflM12' , POINTER(VIIRS_MOD_REFL_TYPE)), ('geoData' , POINTER(TMP_VIIRS_SDR_MOD_FGEOLOC_TYPE)), ('terrainHeight' , POINTER(VIIRS_MOD_INT16_TYPE)), ('tpwIP' , POINTER(VIIRS_MOD_FLOAT32_TYPE)), ('windSpeed' , POINTER(VIIRS_MOD_FLOAT32_TYPE)), ('snow' , POINTER(VIIRS_MOD_UINT8_TYPE)), ('qstLwm' , POINTER(VIIRS_MOD_UINT8_TYPE)), ('toc_ndvi' , POINTER(VIIRS_MOD_FLOAT32_TYPE)), ('sfc_temp' , POINTER(VIIRS_MOD_FLOAT32_TYPE)), ('activeFire' , POINTER(VIIRS_ACTIVE_FIRES_TYPE)), ('viirsCloudMaskIP', POINTER(VIIRS_CLOUD_MASK_IP_TYPE))]