Source code for nanite.group

import pathlib

from .indent import Indentation
from .read import load_data


[docs]def load_group(path, callback=None): """Load indentation data from disk Parameters ---------- path: path-like Path to experimental data callback: callable or None Callback function for tracking loading progress Returns ------- group: nanite.IndetationGroup Indentation group with force-distance data """ path = pathlib.Path(path) data = load_data(path, callback=callback) grp = IndentationGroup() for dd in data: grp.append(Indentation(dd)) grp.path = path return grp
[docs]class IndentationGroup(object): def __init__(self, path=None, callback=None): """Group of Indentation Parameters ---------- path: str or pathlib.Path or None The path to the data file. The data format is determined using the extension of the file and the data is loaded with the correct method. callback: callable or None A method that accepts a float between 0 and 1 to externally track the process of loading the data. """ if path is not None: path = pathlib.Path(path) self._mmlist = [] if path is not None: self += load_group(path, callback=callback) self.path = path def __add__(self, grp): out = IndentationGroup() out._mmlist = self._mmlist + grp._mmlist return out def __iadd__(self, grp): self._mmlist += grp._mmlist self.path = None return self def __iter__(self): return iter(self._mmlist) def __getitem__(self, idx): return self._mmlist[idx] def __len__(self): return len(self._mmlist) def __repr__(self): rep = ["IndentationGroup: '{}'".format(self.path)] for idnt in self._mmlist: rep.append("- {}".format(idnt)) return "\n".join(rep)
[docs] def get_enum(self, enum): """Return the indentation curve with this enum value Raises ------ ValueError if multiple curves with the same enum value exist. KeyErrir if the enum value is not found """ curves = [] for item in self._mmlist: if item.enum == enum: curves.append(item) if len(curves) == 0: raise KeyError("Could not find dataset with enum {}".format(enum)) elif len(curves) == 1: return curves[0] else: raise ValueError("Multiple curves with the same enum value exist!")
[docs] def append(self, item): """Append an indentation dataset Parameters ---------- item: nanite.indent.Indentation Force-indentation dataset """ if not isinstance(item, Indentation): raise ValueError("`item` must be an instance of `Indentation`!") self._mmlist.append(item)
[docs] def index(self, item): return self._mmlist.index(item)
[docs] def subgroup_with_path(self, path): """Return a subgroup with measurements matching `path`""" path = pathlib.Path(path) subgroup = IndentationGroup() for idnt in self: if pathlib.Path(idnt.path).resolve() == path.resolve(): subgroup.append(idnt) subgroup.path = path return subgroup