Add function for searching HDF5
parent
489ebe13c0
commit
737ea7318b
|
@ -32,7 +32,7 @@ from typing import List
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import h5py
|
import h5py
|
||||||
|
|
||||||
__all__ = ["get_new_obsname", "write_hdf5", "merge_hdf5"]
|
__all__ = ["get_new_obsname", "write_hdf5", "merge_hdf5", "get_obsnums"]
|
||||||
|
|
||||||
|
|
||||||
def get_new_obsname(h5file: h5py.File):
|
def get_new_obsname(h5file: h5py.File):
|
||||||
|
@ -143,10 +143,46 @@ def merge_hdf5(src_filename: str, dest_filename: str, obslist: List[str] = None)
|
||||||
"""
|
"""
|
||||||
with h5py.File(dest_filename) as dest_file:
|
with h5py.File(dest_filename) as dest_file:
|
||||||
with h5py.File(src_filename, 'r') as src_file:
|
with h5py.File(src_filename, 'r') as src_file:
|
||||||
if obslist == None:
|
if obslist is None:
|
||||||
obslist = src_file
|
obslist = src_file
|
||||||
for src_obsname in obslist:
|
for src_obsname in obslist:
|
||||||
dest_obsname = get_new_obsname(dest_file)
|
dest_obsname = get_new_obsname(dest_file)
|
||||||
h5py.h5o.copy(src_file.id, bytes(src_obsname, 'utf-8'),
|
h5py.h5o.copy(src_file.id, bytes(src_obsname, 'utf-8'),
|
||||||
dest_file.id, bytes(dest_obsname, 'utf-8'))
|
dest_file.id, bytes(dest_obsname, 'utf-8'))
|
||||||
dest_file.flush()
|
dest_file.flush()
|
||||||
|
|
||||||
|
def get_obsnums(h5file: h5py.File,
|
||||||
|
start_date: datetime.datetime = None,
|
||||||
|
end_date: datetime.datetime = None,
|
||||||
|
rcu_modes: List[int] = None,
|
||||||
|
station_name: str = None,
|
||||||
|
subband: int = None,
|
||||||
|
extent: List[int] = None) -> List[str]:
|
||||||
|
"""
|
||||||
|
Find observations in an HDF5 file with many observations
|
||||||
|
"""
|
||||||
|
matching_obs = []
|
||||||
|
for obs in h5file:
|
||||||
|
if start_date is not None or end_date is not None:
|
||||||
|
obsdate = datetime.datetime.strptime(h5file[obs].attrs["obstime"], "%Y-%m-%d %H:%M:%S")
|
||||||
|
if start_date is not None and obsdate < start_date:
|
||||||
|
continue
|
||||||
|
if end_date is not None and obsdate > end_date:
|
||||||
|
continue
|
||||||
|
if rcu_modes is not None and h5file[obs].attrs["rcu_mode"] not in rcu_modes:
|
||||||
|
continue
|
||||||
|
if station_name is not None and h5file[obs].attrs["station_name"] != station_name:
|
||||||
|
continue
|
||||||
|
if subband is not None and h5file[obs].attrs["subband"] != subband:
|
||||||
|
continue
|
||||||
|
if extent is not None:
|
||||||
|
has_ground_image_with_extent = False
|
||||||
|
for groundimg in h5file[obs]["ground_images"]:
|
||||||
|
if list(h5file[obs]["ground_images"][groundimg].attrs["extent"]) == extent:
|
||||||
|
has_ground_image_with_extent = True
|
||||||
|
break
|
||||||
|
if not has_ground_image_with_extent:
|
||||||
|
continue
|
||||||
|
matching_obs.append(obs)
|
||||||
|
|
||||||
|
return matching_obs
|
||||||
|
|
Loading…
Reference in New Issue