; ; This example code illustrates how to access and visualize LaRC ; CERES ES8 NOAA20 HDF4 Grid file in IDL. ; ; If you have any questions, suggestions, comments on this example, ; please use the HDF-EOS Forum (http://hdfeos.org/forums). ; ; If you would like to see an example of any other NASA HDF/HDF-EOS ; data product that is not listed in the HDF-EOS Comprehensive Examples page ; (http://hdfeos.org/zoo), feel free to contact us at eoshelp@hdfgroup.org ; or post it at the HDF-EOS Forum (http://hdfeos.org/forums). ; ; Usage: ; ; $idl CER_ES8_NOAA20-FM6_Edition1_101109.20220201.hdf.idl ; ; Tested under: IDL 8.8.3 ; Last updated: 2022-12-01 ; Open file. file_name='CER_ES8_NOAA20-FM6_Edition1_101109.20220201.hdf' file_id_hdf=HDF_SD_START(file_name, /READ) ; Read data. datafield_name='CERES LW flux at TOA' index = HDF_SD_NAMETOINDEX(file_id_hdf, datafield_name) sds_id=HDF_SD_SELECT(file_id_hdf, index) HDF_SD_GETDATA, sds_id, data fillvalue_index=HDF_SD_ATTRFIND(sds_id, '_FillValue') HDF_SD_ATTRINFO, sds_id, fillvalue_index, data=fillvalue long_name_index=HDF_SD_ATTRFIND(sds_id, 'long_name') HDF_SD_ATTRINFO, sds_id, long_name_index, DATA=long_name units_index=HDF_SD_ATTRFIND(sds_id, 'units') HDF_SD_ATTRINFO, sds_id, units_index, DATA=units HDF_SD_ENDACCESS, sds_id ; Retrieve latitude. datafield_name='Colatitude of CERES FOV at TOA' index = HDF_SD_NAMETOINDEX(file_id_hdf, datafield_name) sds_id=HDF_SD_SELECT(file_id_hdf, index) fillvalue_index=HDF_SD_ATTRFIND(sds_id, '_FillValue') HDF_SD_ATTRINFO, sds_id, fillvalue_index, data=fv_lat HDF_SD_GETDATA, sds_id, colat HDF_SD_ENDACCESS, sds_id ; Retrieve longitude. datafield_name='Longitude of CERES FOV at TOA' index = HDF_SD_NAMETOINDEX(file_id_hdf, datafield_name) sds_id=HDF_SD_SELECT(file_id_hdf, index) fillvalue_index=HDF_SD_ATTRFIND(sds_id, '_FillValue') HDF_SD_ATTRINFO, sds_id, fillvalue_index, data=fv_lon HDF_SD_GETDATA, sds_id, lon HDF_SD_ENDACCESS, sds_id ; Close file. HDF_SD_END, file_id_hdf ; Convert data type. dataf=FLOAT(data) lon=FLOAT(lon) colat=FLOAT(colat) ; Process fill value. idx=WHERE(data EQ fillvalue(0), cnt) if cnt gt 0 then dataf[idx]=!Values.F_NAN idx = where(lon eq fv_lon(0), cnt) if cnt gt 0 then lon[idx] = !Values.F_NAN idx = where(colat eq fv_lat(0), cnt) if cnt gt 0 then colat[idx] = !Values.F_NAN ; Adjust lat/lon. lat=90-colat lon[WHERE(FINITE(lon) GT 180)] = lon[WHERE(FINITE(lon) GT 180)] - 360 ; Filter NaN data for SCATTERPLOT() and faster processing. idx=where(dataf eq dataf, cnt) datar = dataf[idx] latr = lat[idx] lonr = lon[idx] ; Compute data min/max for colorbar. datamin=MIN(data, /NAN) datamax=MAX(data, /NAN) ; Generate the plot. m = MAP('Geographic', TITLE=file_name, FONT_SIZE=9, /BUFFER) ct = COLORTABLE(72, /reverse) c1 = SCATTERPLOT(lonr[*], latr[*], OVERPLOT=m, $ MAGNITUDE = datar[*], $ RGB_TABLE=ct, $ POSITION=[0.1, 0.1, 0.83, 0.9],$ /SYM_FILLED, SYMBOL='o', SYM_SIZE=0.1) mc = MAPCONTINENTS() t1 = TEXT(0.01, 0.05, FONT_SIZE=8, long_name) cb = COLORBAR(RGB_TABLE=ct, RANGE=[datamin, datamax], /BORDER, ORIENTATION=1, $ TEXTPOS=1, POSITION=[0.85,0.2,0.87,0.8], TITLE=units) png = file_name + '.idl.png' c1.save, png, WIDTH=800, HEIGHT=600 EXIT