Source code for pylorenzmie.analysis.Trajectory

from pylorenzmie.lib import LMObject
from pylorenzmie.lib.lmtypes import Properties, Results
import pandas as pd


[docs] class Trajectory(LMObject): '''Accumulate per-frame characterization results over time. Each call to :meth:`append` stores one frame's worth of :class:`~pylorenzmie.analysis.Frame` output. :attr:`data` returns the combined time series as a single :class:`pandas.DataFrame`. Inherits from :class:`pylorenzmie.lib.LMObject`. ''' def __init__(self) -> None: super().__init__() self._frames: list[pd.DataFrame] = [] @LMObject.properties.getter def properties(self) -> Properties: return dict() @property def data(self) -> pd.DataFrame: '''All results concatenated into a single DataFrame.''' if not self._frames: return pd.DataFrame() return pd.concat(self._frames, ignore_index=True)
[docs] def append(self, results: Results) -> None: '''Append one frame of results. Parameters ---------- results : pandas.DataFrame or pandas.Series Output from :meth:`Frame.optimize` or :meth:`Frame.analyze`. ''' if isinstance(results, pd.Series): results = results.to_frame().T self._frames.append(results)
[docs] def clear(self) -> None: '''Remove all stored results.''' self._frames = []
[docs] def to_csv(self, path: str, **kwargs) -> None: '''Write accumulated results to a CSV file. Parameters ---------- path : str Destination file path. **kwargs Additional keyword arguments passed to :func:`pandas.DataFrame.to_csv`. ''' self.data.to_csv(path, **kwargs)
[docs] @classmethod def example(cls) -> None: # pragma: no cover import cv2 from pathlib import Path from pylorenzmie.analysis import Frame from pylorenzmie.utilities import example_hologram frame = Frame() frame.instrument.wavelength = 0.447 frame.instrument.magnification = 0.048 frame.instrument.n_m = 1.34 trajectory = cls() for _ in range(3): results = frame.analyze(example_hologram('image0010.png').data) trajectory.append(results) print(trajectory.data)
if __name__ == '__main__': # pragma: no cover Trajectory.example()