Sort out the various possible parameter inputs and return a config
        object (dict)

        We have multiple input formats:

        1) a list, tuple, or numpy.ndarray, containing the linear parameters
        in the following order:
        * for single term: rho0, m1, tau1, c1
        * for multiple termss: rho0, m1, m2, ..., tau1, tau2, ..., c1, c2, ...

        2) a dictionary with the entries "rho0", "m", "tau", "c"

        2b) if the dictionary entries for "m", "tau", and "c" are lists, the
        entries correspond to mulitple polarisazion terms

def _set_parameters(self, parameters):
        """Sort out the various possible parameter inputs and return a config
        object (dict)

        We have multiple input formats:

        1) a list, tuple, or numpy.ndarray, containing the linear parameters
        in the following order:
        * for single term: rho0, m1, tau1, c1
        * for multiple termss: rho0, m1, m2, ..., tau1, tau2, ..., c1, c2, ...

        2) a dictionary with the entries "rho0", "m", "tau", "c"

        2b) if the dictionary entries for "m", "tau", and "c" are lists, the
        entries correspond to mulitple polarisazion terms

        """
        nr_f = self.f.size

        # sort out parameters
        rho0, m, tau, c = self._sort_parameters(parameters)

        newsize = (nr_f, len(m))
        # rho0_resized = np.resize(rho0, newsize)
        m_resized = np.resize(m, newsize)
        tau_resized = np.resize(tau, newsize)
        c_resized = np.resize(c, newsize)

        omega = np.atleast_2d(2 * np.pi * self.f).T
        self.w = np.resize(omega, (len(m), nr_f)).T
        self.rho0 = rho0
        self.m = m_resized
        self.tau = tau_resized
        self.c = c_resized

        # compute some common terms
        self.otc = (self.w * self.tau) ** self.c
        self.otc2 = (self.w * self.tau) ** (2 * self.c)
        self.ang = self.c * np.pi / 2.0  # rad
        self.denom = 1 + 2 * self.otc * np.cos(self.ang) + self.otc2