示例#1
0
def gen_aperiodic(freqs, aperiodic_params, aperiodic_mode=None):
    """Generate aperiodic values.

    Parameters
    ----------
    freqs : 1d array
        Frequency vector to create aperiodic component for.
    aperiodic_params : list of float
        Parameters that define the aperiodic component.
    aperiodic_mode : {'fixed', 'knee'}, optional
        Which kind of aperiodic component to generate.
        If not provided, is inferred from the parameters.

    Returns
    -------
    ap_vals : 1d array
        Aperiodic values, in log10 spacing.
    """

    if not aperiodic_mode:
        aperiodic_mode = infer_ap_func(aperiodic_params)

    ap_func = get_ap_func(aperiodic_mode)

    ap_vals = ap_func(freqs, *aperiodic_params)

    return ap_vals
示例#2
0
def update_sim_ap_params(sim_params, delta, field=None):
    """Update the aperiodic parameter definition in a SimParams object.

    Parameters
    ----------
    sim_params : SimParams
        Object storing the current parameter definition.
    delta : float or list of float
        Value(s) by which to update the parameters.
    field : {'offset', 'knee', 'exponent'} or list of string
        Field of the aperiodic parameter(s) to update.

    Returns
    -------
    new_sim_params : SimParams
        Updated object storing the new parameter definition.

    Raises
    ------
    InconsistentDataError
        If the input parameters and update values are inconsistent.
    """

    # Grab the aperiodic parameters that need updating
    ap_params = sim_params.aperiodic_params.copy()

    # If field isn't specified, check shapes line up and update across parameters
    if not field:
        if not len(ap_params) == len(delta):
            raise InconsistentDataError(
                "The number of items to update and "
                "number of new values is inconsistent.")
        ap_params = [param + update for param, update in zip(ap_params, delta)]

    # If labels are given, update deltas according to their labels
    else:
        # This loop checks & casts to list, to work for single or multiple passed in values
        for cur_field, cur_delta in zip(
                list([field]) if not isinstance(field, list) else field,
                list([delta]) if not isinstance(delta, list) else delta):
            data_ind = get_indices(infer_ap_func(ap_params))[cur_field]
            ap_params[data_ind] = ap_params[data_ind] + cur_delta

    # Replace parameters. Note that this copies a new object, as data objects are immutable
    new_sim_params = sim_params._replace(aperiodic_params=ap_params)

    return new_sim_params
示例#3
0
def update_syn_ap_params(syn_params, delta, field=None):
    """Update the aperiodic parameter definition in a SynParams object.

    Parameters
    ----------
    syn_params : SynParams object
        Object storing the current parameter definitions.
    delta : float or list
        Value(s) by which to update the parameters.
    field : {'offset', 'knee', 'exponent'} or list of string
        Field of the aperiodic parameters to update.

    Returns
    -------
    new_syn_params : SynParams object
        Updated object storing the new parameter definitions.

    Notes
    -----
    SynParams is a `namedtuple`, which is immutable.
    Therefore, this function constructs and returns a new `SynParams` object.
    """

    ap_params = syn_params.aperiodic_params.copy()

    if not field:
        if not len(ap_params) == len(delta):
            raise ValueError('')
        ap_params = [ii + jj for ii, jj in zip(ap_params, delta)]

    else:
        field = list([field]) if not isinstance(field, list) else field
        delta = list([delta]) if not isinstance(delta, list) else delta

        for cur_field, cur_delta in zip(field, delta):
            dat_ind = get_data_indices(
                infer_ap_func(syn_params.aperiodic_params))[cur_field]
            ap_params[dat_ind] = ap_params[dat_ind] + cur_delta

    new_syn_params = SynParams(ap_params, *syn_params[1:])

    return new_syn_params
示例#4
0
文件: fit.py 项目: anchandm/fooof
    def _check_loaded_settings(self, data):
        """Check if settings added, and update the object as needed.

        Parameters
        ----------
        data : dict
            A dictionary of data that has been added to the object.
        """

        # If settings not loaded from file, clear from object, so that default
        #  settings, which are potentially wrong for loaded data, aren't kept
        if not set(get_obj_desc()['settings']).issubset(set(data.keys())):

            # Reset all public settings to None
            for setting in get_obj_desc()['settings']:
                setattr(self, setting, None)

            # Infer whether knee fitting was used, if aperiodic params have been loaded
            if np.all(self.aperiodic_params_):
                self.aperiodic_mode = infer_ap_func(self.aperiodic_params_)

        # Reset internal settings so that they are consistent with what was loaded
        #  Note that this will set internal settings to None, if public settings unavailable
        self._reset_internal_settings()