Source code for E200.E200_load_data

from .E200_dataset2str import *     # NOQA
from .classes import *              # NOQA
from .get_valid_filename import *   # NOQA
from .get_matlab import get_matlab
import logging
import os as _os
on_rtd = _os.environ.get('READTHEDOCS', None) == 'True'
if not on_rtd:
    import h5py as _h5
import shlex as _shlex
import subprocess as _subprocess
import tempfile as _tempfile
loggerlevel = logging.DEBUG
logger      = logging.getLogger(__name__)

__all__ = ['E200_load_data']


[docs]def E200_load_data(filename, savefile=None, matlab_verbose=False): """ Loads dataset file where *filename* is a :code:`str` of the relative location of the file (i.e. ``nas/nas-li20-pm00/E200/2015/20150602/E200_17712``). If specified, saves the intermediate h5py file to *savefile*. *matlab_verbose* determines whether Matlab's output while loading the file is printed to the terminal. Returns an instance of :class:`E200.Data`. *Note: this function calls Matlab code; it is not surprising to see Matlab open in the terminal.* """ logger.log(level = loggerlevel, msg = 'Input is: filename={}'.format(filename)) # ====================================== # Create temporary directory # ====================================== if savefile is None: with _tempfile.TemporaryDirectory() as tempdir: tempfilename = 'temp.h5' temppath = _os.path.join(tempdir, tempfilename) return _process_file(filename=filename, temppath=temppath, matlab_verbose=matlab_verbose) else: return _process_file(filename=filename, temppath=savefile, matlab_verbose=matlab_verbose)
def _process_file(filename, temppath, matlab_verbose): # ====================================== # Have matlab process file # ====================================== logger.log(level=loggerlevel, msg='Processed file not found, calling matlab to process file.') pwd = _os.getcwd() matlab = get_matlab() curdir = _os.path.dirname(_os.path.realpath(__file__)) command = '{matlab} -r "addpath(fullfile(\'{curdir}\',\'matlab\'));convert_mat_file(\'{filename}\',\'{outfile}\');exit;"'.format(matlab=matlab, curdir=curdir, pwd=pwd, filename=filename, outfile=temppath) command_split = _shlex.split(command) logger.log(level=loggerlevel, msg='Command given is: {}'.format(command)) if matlab_verbose: _subprocess.call(command_split) else: fnull = open(_os.devnull, 'w') _subprocess.call(command_split, stdout=fnull) # ====================================== # Load file processed by matlab # ====================================== logger.log(level=loggerlevel, msg='Loading processed file') f = _h5.File(temppath, 'r', driver='core', backing_store=False) output = Data(read_file = f, filename=filename) return output def _load_data(wf): processed = wf.create_group('/data/processed') groups = ['arrays', 'scalars', 'images', 'vectors'] for val in groups: processed.create_group(val) wf.flush() class datalevel(object): pass def recursivePopulate(h5data, objData): for i, val in enumerate(h5data): if type(h5data[val]) == _h5._hl.group.Group: setattr(objData, val, datalevel()) recursivePopulate(h5data[val], getattr(objData, val)) else: setattr(objData, val, h5data[val])