Source code for nanite.read

import pathlib

from . import read_jpk
from .data import IndentationData, type_indentation

#: All available readers and associated file extensions
readers = [(read_jpk.load_jpk, read_jpk.extensions),
           ]


[docs]def get_data_paths(path): """Obtain a list of data files Parameters ---------- path: str or pathlib.Path Path to a data file or a directory containing data files. Returns ------- paths: list of pathlib.Path All supported data files found in `path`. If `path` is a file, `[pathlib.Path(path)]` is returned. If `path` has an unsupported extion, an empty list is returned. """ path = pathlib.Path(path) paths = [] if path.is_dir(): # recurse into directories for ext in supported_extensions: paths += sorted(path.rglob("*{}".format(ext))) elif path.suffix in supported_extensions: paths = [path] return sorted(paths)
[docs]def get_data_paths_enum(path, skip_errors=False): paths = get_data_paths(path) enumpaths = [] for pp in paths: try: data = load_raw_data(pp) except BaseException: if skip_errors: continue else: raise for enum in range(len(data)): enumpaths.append([pp, enum]) return enumpaths
[docs]def load_data(path, callback=None): """Load data and return list of Indentation""" measurements = load_raw_data(path, callback=callback) data = [] for enum, mm in enumerate(measurements): app, ret = mm metadata = app[1] if metadata["curve type"] in type_indentation: data.append(IndentationData(approach=app[0], retract=ret[0], metadata=metadata, path=app[2], enum=enum )) return data
[docs]def load_raw_data(path, callback=None): """Load raw data Parameters ---------- path: str or pathlib.Path Path to a data file or a directory containing data files. The data format is determined using the extension of the file. callback: callable or None A method that accepts a float between 0 and 1 to externally track the process of loading the data. ret_indentation: bool Return the indentation Returns ------- data: list A measurements list that contains the data. """ paths = get_data_paths(path) data = [] for ii, pp in enumerate(paths): for reader in readers: load, exts = reader if pp.suffix in exts: if callback is None: cbck = None else: # modified callback for multiple files cbck = lambda x: callback(x + ii/len(paths)) data += load(pp, callback=cbck) break else: raise NotImplementedError("Unknown file format: {}". format(pp.name)) return data
#: All supported file extensions supported_extensions = [ext for reader in readers for ext in reader[1]]