finish reading from hdf5
This commit is contained in:
commit
8aa180c276
0
Analyser/AbsoprtionImaging.py
Normal file
0
Analyser/AbsoprtionImaging.py
Normal file
153
DataContainer/ReadData.py
Normal file
153
DataContainer/ReadData.py
Normal file
@ -0,0 +1,153 @@
|
||||
import xarray as xr
|
||||
import numpy as np
|
||||
from collections import OrderedDict
|
||||
from functools import partial
|
||||
import copy
|
||||
|
||||
|
||||
def _read_globals_attrs(variable_attrs, context=None):
|
||||
"""Combine attributes from different variables according to combine_attrs"""
|
||||
if not variable_attrs:
|
||||
# no attributes to merge
|
||||
return None
|
||||
|
||||
from xarray.core.utils import equivalent
|
||||
|
||||
result = {}
|
||||
dropped_attrs = OrderedDict()
|
||||
for attrs in variable_attrs:
|
||||
result.update(
|
||||
{
|
||||
key: value
|
||||
for key, value in attrs.items()
|
||||
if key not in result and key not in dropped_attrs.keys()
|
||||
}
|
||||
)
|
||||
result = {
|
||||
key: value
|
||||
for key, value in result.items()
|
||||
if key not in attrs or equivalent(attrs[key], value)
|
||||
}
|
||||
dropped_attrs.update(
|
||||
{
|
||||
key: []
|
||||
for key in attrs if key not in result
|
||||
}
|
||||
)
|
||||
|
||||
for attrs in variable_attrs:
|
||||
dropped_attrs.update(
|
||||
{
|
||||
key: np.append(dropped_attrs[key], attrs[key])
|
||||
for key in dropped_attrs.keys()
|
||||
}
|
||||
)
|
||||
|
||||
scan_attrs = OrderedDict()
|
||||
scan_length = []
|
||||
for attrs_key in dropped_attrs.keys():
|
||||
flag = True
|
||||
for key in scan_attrs.keys():
|
||||
if equivalent(scan_attrs[key], dropped_attrs[attrs_key]):
|
||||
flag = False
|
||||
|
||||
result.update({attrs_key: key})
|
||||
|
||||
break
|
||||
if flag:
|
||||
scan_attrs.update({
|
||||
attrs_key: dropped_attrs[attrs_key]
|
||||
})
|
||||
scan_length = np.append(scan_length, len(dropped_attrs[attrs_key]))
|
||||
|
||||
result.update(
|
||||
{
|
||||
key: value
|
||||
for key, value in scan_attrs.items()
|
||||
}
|
||||
)
|
||||
|
||||
result.update(
|
||||
{
|
||||
"scanAxis": list(scan_attrs.keys()),
|
||||
"scanAxisLength": scan_length,
|
||||
}
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def _read_shot_number_from_hdf5(x):
|
||||
filePath = x.encoding["source"]
|
||||
shotNum = filePath.split("_")[-1].split("_")[-1].split(".")[0]
|
||||
return x.assign(shotNum=shotNum)
|
||||
|
||||
|
||||
def _assign_scan_axis_partial(x, datesetOfGlobal):
|
||||
scanAxis = datesetOfGlobal.scanAxis
|
||||
filePath = x.encoding["source"]
|
||||
shotNum = filePath.split("_")[-1].split("_")[-1].split(".")[0]
|
||||
x = x.assign(shotNum=shotNum)
|
||||
x = x.expand_dims(list(scanAxis))
|
||||
|
||||
return x.assign_coords(
|
||||
{
|
||||
key: np.atleast_1d(datesetOfGlobal.attrs[key][int(shotNum)])
|
||||
for key in scanAxis
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
def read_hdf5_file(filePath, group=None, datesetOfGlobal=None, preprocess=None, join="outer", parallel=True, engine="h5netcdf", phony_dims="access", **kwargs):
|
||||
|
||||
kwargs.update(
|
||||
{
|
||||
'join': join,
|
||||
'parallel': parallel,
|
||||
'engine': engine,
|
||||
'phony_dims': phony_dims,
|
||||
'group': group
|
||||
}
|
||||
)
|
||||
|
||||
if datesetOfGlobal is None:
|
||||
datesetOfGlobal = xr.open_mfdataset(
|
||||
filePath,
|
||||
group="globals",
|
||||
concat_dim="fileNum",
|
||||
combine="nested",
|
||||
preprocess=_read_shot_number_from_hdf5,
|
||||
engine="h5netcdf",
|
||||
phony_dims="access",
|
||||
combine_attrs=_read_globals_attrs,
|
||||
parallel=True, )
|
||||
|
||||
_assgin_scan_axis = partial(_assign_scan_axis_partial, datesetOfGlobal=datesetOfGlobal)
|
||||
|
||||
if preprocess is None:
|
||||
kwargs.update({'preprocess':_assgin_scan_axis})
|
||||
else:
|
||||
kwargs.update({'preprocess':preprocess})
|
||||
|
||||
ds = xr.open_mfdataset(filePath, **kwargs)
|
||||
|
||||
newDimKey = np.append(['x', 'y', 'z'], [ chr(i) for i in range(97, 97+23)])
|
||||
|
||||
oldDimKey = np.sort(
|
||||
[
|
||||
key
|
||||
for key in ds.dims
|
||||
if not key in datesetOfGlobal.scanAxis
|
||||
]
|
||||
)
|
||||
|
||||
renameDict = {
|
||||
oldDimKey[j]: newDimKey[j]
|
||||
for j in range(len(oldDimKey))
|
||||
}
|
||||
|
||||
ds = ds.rename_dims(renameDict)
|
||||
|
||||
ds.attrs = copy.deepcopy(datesetOfGlobal.attrs)
|
||||
|
||||
return ds
|
||||
BIN
DataContainer/__pycache__/ReadData.cpython-38.pyc
Normal file
BIN
DataContainer/__pycache__/ReadData.cpython-38.pyc
Normal file
Binary file not shown.
850
test.ipynb
Normal file
850
test.ipynb
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user