|
|
from datetime import datetime, timedelta |
|
|
import glob |
|
|
import os |
|
|
|
|
|
from fire import Fire |
|
|
import h5py |
|
|
from matplotlib import pyplot as plt |
|
|
import numpy as np |
|
|
import pyart |
|
|
import pathlib |
|
|
import cartopy |
|
|
import wradlib as wrl |
|
|
import dask.array as da |
|
|
import pandas as pd |
|
|
import xarray as xr |
|
|
import re |
|
|
|
|
|
from ldcast import forecast |
|
|
from ldcast.visualization import plots |
|
|
|
|
|
|
|
|
MAP_PROJECTION = cartopy.crs.PlateCarree() |
|
|
|
|
|
def convert_to_datetime(filename=""): |
|
|
year = int(filename[0:4]) |
|
|
month = int(filename[5:7]) |
|
|
day = int(filename[8:10]) |
|
|
hour = int(filename[11:13]) |
|
|
minute = int(filename[14:16]) |
|
|
return datetime(year,month,day,hour,minute) |
|
|
|
|
|
def filter_files_by_format(directory, pattern): |
|
|
filtered_files = [] |
|
|
regex = re.compile(pattern) |
|
|
for filename in os.listdir(directory): |
|
|
if regex.match(filename): |
|
|
|
|
|
|
|
|
if filename.endswith("0"): |
|
|
filtered_files.append(filename) |
|
|
return filtered_files |
|
|
|
|
|
def read_multiple_data( |
|
|
data_dir, |
|
|
path_file |
|
|
): |
|
|
path_file = os.path.join(data_dir, path_file) |
|
|
radar = pyart.io.read(path_file) |
|
|
processed_grid = pyart.map.grid_from_radars( |
|
|
radar, |
|
|
|
|
|
grid_shape=(20, 640, 640), |
|
|
grid_limits=((1000, 5000), (-300_000, 300_000), (-300_000, 300_000)), |
|
|
) |
|
|
reflectivity_data = processed_grid.fields['reflectivity']['data'].data |
|
|
cmax_data = np.array(np.max(reflectivity_data, axis=0)) |
|
|
radar_Z = wrl.trafo.idecibel(cmax_data) |
|
|
R = wrl.zr.z_to_r(radar_Z, a=200.0, b=1.6) |
|
|
processed_grid.fields['reflectivity']['data'].data[:] = R |
|
|
R = processed_grid.fields['reflectivity']['data'].data[0] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return R |
|
|
|
|
|
|
|
|
|
|
|
def demo( |
|
|
out_dir="/data/data_WF/ldcast_precipitation/reflectivity/train_GT", |
|
|
data_dir="/data/data_WF/NhaBe/2022", |
|
|
t0=datetime(2023,6,25,0,0), |
|
|
interval=timedelta(minutes=10), |
|
|
past_timesteps=4, |
|
|
): |
|
|
temp = [ 'T02-2022Pro-Raw (01-19)', 'T02-2022Pro-Raw (20-28)', 'T03-2022Pro-Raw (20-31)', 'T04-2022Pro-Raw (01-16)-', |
|
|
'T04-2022Pro-Raw (17-30)-', 'T05-2022Pro-Raw (01-11)', 'T05-2022Pro-Raw (12-22)', 'T05-2022Pro-Raw (23-31)' , 'T06- 2022Pro-Raw (01-13)', 'T06- 2022Pro-Raw (14-23)', 'T06- 2022Pro-Raw (24-30)'] |
|
|
|
|
|
for subdir in temp: |
|
|
|
|
|
subdir_path = os.path.join(data_dir, subdir) |
|
|
if os.path.isdir(subdir_path): |
|
|
temp2 = os.listdir(subdir_path) |
|
|
temp2.sort() |
|
|
for subsubdir in temp2: |
|
|
subsubdir_path = os.path.join(subdir_path, subsubdir) |
|
|
pattern_to_filter = r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}" |
|
|
filtered_files = filter_files_by_format(subsubdir_path, pattern_to_filter) |
|
|
sorted_files = sorted(filtered_files) |
|
|
print("Filtered Files:", len(filtered_files)) |
|
|
for i in range(0, len(sorted_files)): |
|
|
t = convert_to_datetime(sorted_files[i]) |
|
|
print(t) |
|
|
R_gt = read_multiple_data(subsubdir_path, sorted_files[i]) |
|
|
fn = os.path.join(out_dir, f"{t:%Y%m%d%H%M}.npy") |
|
|
np.save(fn, R_gt) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
Fire(demo) |
|
|
|