Source code for pymodaq_data.h5modules.exporters.flimj

# -*- coding: utf-8 -*-
"""
Created the 02/03/2023

@author: Sebastien Weber
"""
import numpy as np


# project imports
from pymodaq_data.h5modules.backends import Node
from pymodaq_data.h5modules.exporter import ExporterFactory, H5Exporter


[docs] @ExporterFactory.register_exporter() class H5asciiExporter(H5Exporter): """ Exporter object for saving nodes as txt files""" FORMAT_DESCRIPTION = "Ascii flimj file" FORMAT_EXTENSION = "ascii"
[docs] def export_data(self, node: Node, filename: str) -> None: if 'ARRAY' in node.attrs['CLASS']: data = node.read() if not isinstance(data, np.ndarray): # in case one has a list of same objects (array of strings for instance, logger or other) data = np.array(data) np.savetxt(filename, data.T if len(data.shape) > 1 else [data], '%s', '\t') else: np.savetxt(filename, data.T if len(data.shape) > 1 else [data], '%.6e', '\t') elif 'GROUP' in node.attrs['CLASS']: data_tot = [] header = [] dtypes = [] fmts = [] for subnode_name, subnode in node.children().items(): if 'ARRAY' in subnode.attrs['CLASS']: if len(subnode.attrs['shape']) == 1: data = subnode.read() if not isinstance(data, np.ndarray): # in case one has a list of same objects (array of strings for instance, logger or other) data = np.array(data) data_tot.append(data) dtypes.append((subnode_name, data.dtype)) header.append(subnode_name) if data.dtype.char == 'U': fmt = '%s' # for strings elif data.dtype.char == 'l': fmt = '%d' # for integers else: fmt = '%.6f' # for decimal numbers fmts.append(fmt) data_trans = np.array(list(zip(*data_tot)), dtype=dtypes) np.savetxt(filename, data_trans, fmts, '\t', header='#' + '\t'.join(header))