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
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
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
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()