import numpy as np from IPython import embed def zero_crossing(eod, time): threshold = 0 shift_eod = np.roll(eod, 1) eod_times = time[(eod >= threshold) & (shift_eod < threshold)] sampling_rate = 40000.0 eod_idx = eod_times*sampling_rate return eod_idx def vector_strength(spike_times, eod_durations): n = len(spike_times) phase_times = np.zeros(len(spike_times)) for i, idx in enumerate(spike_times): phase_times[i] = (spike_times[i] / eod_durations[i]) * 2 * np.pi vs = np.sqrt((1/n*sum(np.cos(phase_times)))**2 + (1/n*sum(np.sin(phase_times)))**2) return vs def gaussian(x, sig): y = np.exp(-0.5 * (x/sig)**2) / np.sqrt(2*np.pi)/sig return y def smooth(data, window, dt): sigma = window time_gauss = np.arange(-4 * sigma, 4 * sigma, dt) gauss = gaussian(time_gauss, sigma) smoothed_data = np.convolve(data, gauss, 'same') return smoothed_data def map_keys(input): df_map = {} for k in input.keys(): freq = k[1] df = int(freq.strip('Hz')) if df in df_map.keys(): df_map[df].append(k) else: df_map[df] = [k] return df_map