Source code for afmformats.afm_segment

__all__ = ["AFMSegment"]


[docs]class AFMSegment(object): """Simple wrapper around dict-like `data` to expose a single segment This class also caches the segment indices. """ def __init__(self, raw_data, data, segment): #: The segment type (approach, intermediate, or retract) self.segment = segment self.raw_data = raw_data self.data = data self._raw_segment_indices = None self._user_segment_indices = None def __getitem__(self, key): """Access column data of the segment""" if key in self.data: return self.data[key][self.segment_indices] elif key in self.raw_data: return self.raw_data[key][self.segment_indices].copy() else: raise KeyError("Undefined feature '{}'!".format(key)) @property def segment_indices(self): """boolean array of segment indices""" if "segment" in self.data: # data takes precedence (user-edited) if self._user_segment_indices is None: self._user_segment_indices = \ self.data["segment"] == self.segment indices = self._user_segment_indices elif "segment" in self.raw_data: # indices from raw data can safely be cached (will not change) if self._raw_segment_indices is None: self._raw_segment_indices = \ self.raw_data["segment"] == self.segment indices = self._raw_segment_indices else: raise ValueError("Could not identify segment data!") return indices
[docs] def clear_cache(self): """Invalidates the segment indices corresponding to `self.data`""" self._user_segment_indices = None