Source code for Stoner.core.data

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""The main Data Class definition."""

from sys import float_info
from ..Analysis import AnalysisMixin
from ..analysis.fitting.mixins import FittingMixin
from ..analysis.columns import ColumnOpsMixin
from ..analysis.filtering import FilteringOpsMixin
from ..analysis.features import FeatureOpsMixin
from ..plot import PlotMixin
from ..Core import DataFile
from ..tools import format_error


[docs]class Data(AnalysisMixin, FittingMixin, ColumnOpsMixin, FilteringOpsMixin, FeatureOpsMixin, PlotMixin, DataFile): """The principal class for representing a data file. This merges: - :py:class:`Stoner.Core.DataFile`, - :py:class:`Stoner.Analysis.AnalysisMixin`, - :py:class:`Stoner.analysis.fitting.FittingMixin`, - :py:class:`Stoner.analysis.columns.ColumnOpsMixin`, - :py:class:`Stoner.analysis.filtering.FilteringOpsMixin`, - :py:class:`Stoner.analysis.features.FeatureOpsMixin`, - :py:class:`Stoner.plot.PlotMixin` Also has the :py:mod:`Stoner.formats` loaded redy for use. """
[docs] def format(self, key, **kargs): r"""Return the contents of key pretty formatted using :py:func:`format_error`. Args: fmt (str): Specify the output format, options are: * "text" - plain text output * "latex" - latex output * "html" - html entities escape (bool): Specifies whether to escape the prefix and units for unprintable characters in non text formats )default False) mode (string): If "float" (default) the number is formatted as is, if "eng" the value and error is converted to the next samllest power of 1000 and the appropriate SI index appended. If mode is "sci" then a scientific, i.e. mantissa and exponent format is used. units (string): A suffix providing the units of the value. If si mode is used, then appropriate si prefixes are prepended to the units string. In LaTeX mode, the units string is embedded in \mathrm prefix (string): A prefix string that should be included before the value and error string. in LaTeX mode this is inside the math-mode markers, but not embedded in \mathrm. Returns: A pretty string representation. The if key="key", then the value is self["key"], the error is self["key err"], the default prefix is self["key label"]+"=" or "key=", the units are self["key units"] or "". """ mode = kargs.pop("mode", "float") units = kargs.pop("units", self.get(key + " units", "")) prefix = kargs.pop("prefix", f"{self.get(key + ' label', f'{key}')} = ") latex = kargs.pop("latex", False) fmt = kargs.pop("fmt", "latex" if latex else "text") escape = kargs.pop("escape", False) try: value = float(self[key]) except (ValueError, TypeError) as err: raise KeyError(f"{key} should be a floating point value of the metadata not a {type(self[key])}.") from err try: error = float(self[f"{key} err"]) except (TypeError, KeyError): error = float_info.epsilon return format_error(value, error, fmt=fmt, mode=mode, units=units, prefix=prefix, scape=escape)