Source code for pyspedas.tplot_tools.tplot_math.subtract_average


import logging
import pyspedas
from pyspedas.tplot_tools import tnames, tplot_copy
import numpy


[docs] def subtract_average( names, newname=None, suffix=None, overwrite=None, median=None ): """ Subtracts the average or median from data. Parameters ---------- names: str/list of str List of tplot variable names to process (wildcards accepted) newname: str/list of str, optional List of new names for tplot variables. Default: None. If not given, then a suffix is applied. suffix: str, optional A suffix to apply. Default: '-d'. overwrite: bool, optional If set, then tplot variables are replaced. Default: None median: float, optional If it is 0 or not set, then it computes the mean. Otherwise, it computes the median. Default: None. Returns ------- list of str List of new tplot variables created Examples -------- >>> pyspedas.store_data('a', data={'x':[0,4,8,12,16], 'y':[1,2,3,4,5]}) >>> pyspedas.subtract_average('a') >>> pyspedas.tplot(['a','a-d']) """ old_names = tnames(names) if len(old_names) == 0: return elif len(old_names) < 1: logging.error('Subtract Average error: No tplot names were provided.') return if suffix is None: if median: suffix = '-m' else: suffix = '-d' if overwrite is not None: n_names = old_names elif newname is None: n_names = [s + suffix for s in old_names] else: n_names = newname if isinstance(n_names, str): n_names = [n_names] if len(n_names) != len(old_names): n_names = [s + suffix for s in old_names] old_names = tnames(names) for old_idx, old in enumerate(old_names): new = n_names[old_idx] if new != old: tplot_copy(old, new) data = pyspedas.tplot_tools.data_quants[new].values # Subtracting the average will fail if data is not a floating point type if data.dtype.kind != 'f': data=numpy.float64(data) dim = data.shape if median: if len(dim) == 1: if not numpy.isnan(data).all(): data -= numpy.nanmedian(data, axis=0) else: for i in range(dim[1]): if not numpy.isnan(data[:, i]).all(): data[:, i] -= numpy.nanmedian(data[:, i], axis=0) ptype = 'Median' else: if len(dim) == 1: if not numpy.isnan(data).all(): data -= numpy.nanmean(data, axis=0) else: for i in range(dim[1]): if not numpy.isnan(data[:, i]).all(): data[:, i] -= numpy.nanmean(data[:, i], axis=0) ptype = 'Mean' pyspedas.tplot_tools.data_quants[new].values = data logging.info('Subtract ' + ptype + ' was applied to: ' + new) return n_names