FY4B_C_SPMS/AGRI/2_ARMS_convert_HDF.py

73 lines
2.9 KiB
Python

#!/usr/bin/python
# coding=utf-8
import os
import sys
import numpy as np
import h5py
import datetime
import time
import glob
def hdfmake_agri(L1Filename):
if '1330E' in L1Filename:
l1_time = datetime.datetime.strptime(os.path.basename(L1Filename),'FY4B-_AGRI--_N_DISK_1330E_L1-_GEO-_MULT_NOM_%Y%m%d%H%M00_4000M_cloudy_profiles.dat')
if '1235E' in L1Filename:
l1_time = datetime.datetime.strptime(os.path.basename(L1Filename),'FY4B-_AGRI--_N_DISK_1235E_L1-_GEO-_MULT_NOM_%Y%m%d%H%M00_4000M_cloudy_profiles.dat')
outpath = l1_time.strftime('/4B_AS/sim/FY4B/AGRI/ARMS/GRAPES/%Y/%Y%m%d/')
if '1330E' in L1Filename:
save_file = l1_time.strftime('/4B_AS/sim/FY4B/AGRI/ARMS/GRAPES/%Y/%Y%m%d/FY4B-_AGRI--_N_DISK_1330E_L1-_GEO-_MULT_NOM_%Y%m%d%H%M00_4000M_BT.HDF')
if '1235E' in L1Filename:
save_file = l1_time.strftime('/4B_AS/sim/FY4B/AGRI/ARMS/GRAPES/%Y/%Y%m%d/FY4B-_AGRI--_N_DISK_1235E_L1-_GEO-_MULT_NOM_%Y%m%d%H%M00_4000M_BT.HDF')
h5filename = l1_time.strftime('/fy4_ads_data/stss_v2.0/Simulator/temp/FY4B/AGRI/ARMS/GRAPES/%Y/%Y%m%d/FY4B-_AGRI--_N_DISK_1330E_L1-_GEO-_MULT_NOM_%Y%m%d%H%M00_4000M.h5')
try:os.makedirs(os.path.dirname(save_file))
except:pass
N_Channel = 8
with h5py.File(h5filename,'r') as f:
BT_SIM = f['Sim'][:]
x_data = f['X'][:]
y_data = f['Y'][:]
lat = f['LAT'][:]
lon = f['LON'][:]
N_X = 2748
N_Y = 2748
N_Profiles = x_data.size
BT_SIM1 = np.reshape(BT_SIM,(N_Profiles,N_Channel))
BT_SIM_Used = np.full((N_Y,N_X,N_Channel),65535,dtype=np.uintc)
lat_Used = np.full((N_Y,N_X),-9999.9,dtype=np.float32)
lon_Used = np.full((N_Y,N_X),-9999.9,dtype=np.float32)
for iprofile in range(N_Profiles):
iX = int(x_data[iprofile])
iY = int(y_data[iprofile])
BT_SIM_Used[iY-1,iX-1,0:N_Channel] = (BT_SIM1[iprofile,0:N_Channel]*100).astype(np.uintc)
lat_Used[iY-1,iX-1] = lat[iprofile].astype(np.float32)
lon_Used[iY-1,iX-1] = lon[iprofile].astype(np.float32)
print(iX)
print(BT_SIM_Used.shape)
with h5py.File(save_file, 'w') as f:
f.create_dataset('BT_SIM', data=BT_SIM_Used)
f.create_dataset('lat',data=lat_Used)
f.create_dataset('lon',data= lon_Used)
print" >>", save_file, 'saved ! '
if (os.path.exists(h5filename)):
os.remove(h5filename)
files1 = sys.argv[1:] #/fy4_ads_data/stss_v2.0/ProduceBackgroundData/output/FY4B/AGRI/GRAPES/2024/20240125/FY4B-_AGRI--_N_DISK_1330E_L1-_GEO-_MULT_NOM_20240125200000_4000M_cloudy_profiles.dat
if not files1: #
print(
"""
usage:
python {0} /fy4_ads_data/stss_v2.0/ProduceBackgroundData/output/FY4B/AGRI/GRAPES/2024/*/FY4B-_AGRI--_N_DISK_1330E_L1-_GEO-_MULT_NOM_202401*_4000M_cloudy_profiles.dat
""".format(__file__))
else:
import traceback
for k in files1:
hdfmake_agri(k)