Source code for cait.versatile.eventfunctions.processing.removebaseline

import numpy as np

from ..functionbase import FncBaseClass
from ..scalarfunctions.fitbaseline import FitBaseline

[docs] class RemoveBaseline(FncBaseClass): """ Remove baseline of given baseline model from an event voltage trace and return the new event. Also works for multiple channels simultaneously. :param fit_baseline: Dictionary of keyword arguments that are passed on to :class:`FitBaseline`. :type fit_baseline: dict :return: Event with baseline removed :rtype: numpy.ndarray **Example:** .. code-block:: python import cait.versatile as vai # Construct mock data (which provides event iterator) md = vai.MockData() it = md.get_event_iterator()[0] # View effect of removing baseline on events vai.Preview(it, vai.RemoveBaseline()) .. image:: media/RemoveBaseline_preview.png """ def __init__(self, fit_baseline: dict = {'model': 0, 'where': 1/8, 'xdata': None}): self._fit_baseline = FitBaseline(**fit_baseline) if 'xdata' in fit_baseline.keys(): self._xdata = fit_baseline['xdata'] else: self._xdata = None def __call__(self, event): par, *_ = self._fit_baseline(event) # ATTENTION: This is set only once! (we have to set it here because # previously we didn't know the length of 'event') if self._xdata is None: self._xdata = np.linspace(0, 1, np.array(event).shape[-1]) self._shifted_event = event - self._fit_baseline.model(self._xdata, par) return self._shifted_event @property def batch_support(self): return 'full' def preview(self, event) -> dict: self(event) if np.ndim(event) > 1: d = dict() for i in range(np.ndim(event)): d[f'channel {i}'] = [self._xdata, event[i]] d[f'baseline removed channel {i}'] = [self._xdata, self._shifted_event[i]] else: d = {'event': [self._xdata, event], 'baseline removed': [self._xdata, self._shifted_event]} return dict(line = d)