class_docstr: A base class containing for the 2D browser.
  
  This class contains all backend-independent attributes and methods.
class_docstr_tok: ["A","base","class","containing","for","the","2D","browser",".","This","class","contains","all","backend-independent","attributes","and","methods","."]
docstr: Update self.mne.data after user interaction.
docstr_tok: ["Update","self.mne.data","after","user","interaction","."]
code: def _process_data(self, data, start, stop, picks, thread=None):
      """Update self.mne.data after user interaction."""
      # apply projectors
      if self.mne.projector is not None:
          # thread is the loading-thread only available in Qt-backend
          if thread:
              thread.processText.emit("Applying Projectors...")
          data = self.mne.projector @ data
      # get only the channels we're displaying
      data = data[picks]
      # remove DC
      if self.mne.remove_dc:
          if thread:
              thread.processText.emit("Removing DC...")
          data -= np.nanmean(data, axis=1, keepdims=True)
      # apply filter
      if self.mne.filter_coefs is not None:
          if thread:
              thread.processText.emit("Apply Filter...")
          self._apply_filter(data, start, stop, picks)
      # scale the data for display in a 1-vertical-axis-unit slot
      if thread:
          thread.processText.emit("Scale Data...")
      this_names = self.mne.ch_names[picks]
      this_types = self.mne.ch_types[picks]
      stims = this_types == "stim"
      white = np.logical_and(
          np.isin(this_names, self.mne.whitened_ch_names),
          np.isin(this_names, self.mne.info["bads"], invert=True),
      )
      norms = np.vectorize(self.mne.scalings.__getitem__)(this_types)
      norms[stims] = data[stims].max(axis=-1)
      norms[white] = self.mne.scalings["whitened"]
      norms[norms == 0] = 1
      data /= 2 * norms[:, np.newaxis]
  
      return data
  
imports: import importlib
  from abc import ABC, abstractmethod
  from collections import OrderedDict
  from contextlib import contextmanager
  from copy import deepcopy
  from itertools import cycle
  import numpy
  from .._fiff.pick import _DATA_CH_TYPES_SPLIT
  from ..defaults import _handle_default
  from ..filter import _iir_filter, _overlap_add_filter
  from ..fixes import _compare_version
  from ..utils import _check_option, _get_stim_channel, _validate_type, get_config, logger, set_config, verbose
  from .backends._utils import VALID_BROWSE_BACKENDS
  from .utils import _get_color_list, _setup_plot_projector, _show_browser
label_desc: Use image node_id 14 for calling the BrowserBase obj's underlying member method code with example usage: obj._process_data(data, start, stop, picks, thread) and returns: data