Source code for pyMS.normalisation

__author__ = 'palmer'
import numpy as np


[docs]def apply_normalisation(counts, type_str=""): """ helper function to apply a normalisation function (with some input testing etc) :param counts: numpy array of values to normalise :param type_str: normalisation type to apply (name) :return: numpy array of normalised counts """ normToApply = {"none": none, "tic": tic, "rms": rms, "mad": mad, "sqrt": sqrt} if type_str not in normToApply.keys(): raise ValueError("{} not in {}".format(type_str, normToApply.keys())) counts = np.asarray(counts, dtype=float) return normToApply[type_str](counts)
[docs]def shift_and_scale(counts, scale=1.0, shift=0.0): """ applys the generic scaling a shifting operation :param counts: numpy array :param scale: float :param shift: float :return: numpy array of scaled and shifted values """ scale = float(scale) if scale == 0: return np.zeros(np.shape(counts)) if shift > 0: counts -= shift return (counts) / scale
[docs]def check_zeros(counts): """ helper function to check if vector is all zero :param counts: :return: bool """ if sum(counts) == 0: return True else: return False
[docs]def none(counts): """ does nothing, just returns input. is a dummy for programmatic case where a function must be supplied :param counts: numpy array :return: counts: """ return np.asarray(counts, dtype=float)
[docs]def tic(counts): """ normalisation function, divides each intensity by the sum of all intensities (each spectrum sums to 1) :param counts: numpy array :return:counts normalised: numpy array """ if check_zeros(counts): return counts return shift_and_scale(counts, scale=np.sum(counts))
[docs]def rms(counts): """ normalisation function, divides each intensity by the root-mean-square of all intensities :param counts: numpy array :return:counts normalised: numpy array """ if check_zeros(counts): return counts return shift_and_scale(counts, scale=np.sqrt(np.mean(np.square(counts, dtype=float))))
[docs]def mad(counts): """ normalisation function, divides each intensity by the median-absolute-deviation of all intensities :param counts: numpy array :return:counts normalised: numpy array """ if check_zeros(counts): return counts return shift_and_scale(counts, scale=np.median(np.abs(counts - np.median(counts))))
[docs]def sqrt(counts): """ normalisation function, returns the square root of intensities :param counts: numpy array :return:counts normalised: numpy array """ if check_zeros(counts): return counts counts_norm = np.sqrt(counts) counts_norm[counts == 0] = 0 return counts_norm