Files
psss/script/Lib/data_utils.py
2022-11-28 11:16:40 +01:00

76 lines
2.7 KiB
Python

###################################################################################################
# Data utilities
###################################################################################################
from startup import *
from ijutils import load_array, save_image
def save_as_tiff(data, filename, parallel=True, metadata={}):
"""
Save data as tiff file
Args:
data(array, Data or ImageProcessor): Data to be saved
filename(str): File Name
parallel(bool, optiona): if True image is saved in separated thread.
metadata(dict, optional): written to tiff info property.
"""
def _save_as_tiff(data, filename, metadata={}):
try:
if isinstance(data,PyArray):
ip = load_array(data)
elif type(data) == Data:
ip = load_array(data.matrix)
else:
ip = data
#Metadata
info = "Timestamp: " + time.strftime("%y/%m/%d %H:%M:%S",time.localtime())
for key,val in metadata.items():
info = info + "\n" + str(key) + ": " + str(val)
ip.setProperty("Info", info)
if not os.path.exists(os.path.dirname(filename)):
os.makedirs(os.path.dirname(filename))
save_image(ip, filename,"tiff")
except:
print sys.exc_info()
if parallel:
return fork((_save_as_tiff,(data, filename, metadata)),)
else:
_save_as_tiff(data, filename, metadata)
def save_as_hdf5(data, filename=None, dm=None, path="/data", parallel=True, metadata={}):
"""
Save data as hdf5 file
Args:
data(array, Data): Data to be saved
filename(str, optional): File to save to (if equals None then dm must be set )
dm(str, optional): DataManager to save to
parallel(bool, optional): if True image is saved in separated thread.
metadata(dict, optional): written to tiff info property.
"""
def _save_as_hdf5(data, filename, dm, path, metadata={}):
try:
if type(data) == Data:
data = data.matrix
if filename is not None:
if not os.path.exists(os.path.dirname(filename)):
os.makedirs(os.path.dirname(filename))
dm = DataManager(filename, "h5")
try:
dm.setDataset(path, data)
for key,val in metadata.items():
dm.setAttribute(path, key, val)
finally:
if filename is not None:
dm.close()
except:
print sys.exc_info()
if parallel:
return fork((_save_as_hdf5,(data, filename, dm, path, metadata)),)
else:
_save_as_hdf5(data, filename, dm, path, metadata)