def get_sensitivity_measure(calcAna, calcAnaAll, mode='gamma', eig_index=None): print 'Calculate sensitivity measure.' if calcAna or calcAnaAll: if mode == 'gamma' or mode == 'low': fmax = 100.0 elif mode == 'high_gamma': fmax = 400.0 circ = circuit.Circuit('microcircuit', circuit_params, fmax=fmax, from_file=not calcAnaAll) freqs, eigs = circ.create_eigenvalue_spectra('MH') if mode == 'gamma': fmax = freqs[np.argmin(abs(eigs[eig_index] - 1))] Z = circ.get_sensitivity_measure(fmax) eigc = eigs[eig_index][np.argmin(abs(eigs[eig_index] - 1))] elif mode == 'high_gamma': eigs = eigs[eig_index][np.where(freqs > 150.)] freqs = freqs[np.where(freqs > 150.)] fmax = freqs[np.argmin(abs(eigs - 1.0))] fmax_index = np.argmin(abs(freqs - fmax)) eigc = eigs[fmax_index] Z = circ.get_sensitivity_measure(fmax, index=eig_index) elif mode == 'low': eigs = eigs[eig_index] fmax = 0.0 eigc = eigs[0] Z = circ.get_sensitivity_measure(fmax) k = np.asarray([1, 0]) - np.asarray([eigc.real, eigc.imag]) k /= np.sqrt(np.dot(k, k)) k_per = np.asarray([-k[1], k[0]]) k_per /= np.sqrt(np.dot(k_per, k_per)) Z_amp = Z.real * k[0] + Z.imag * k[1] Z_freq = Z.real * k_per[0] + Z.imag * k_per[1] label = mode + str(eig_index) h5.add_to_h5('results.h5', { 'sensitivity_measure': { label: { 'f_peak': fmax, 'Z': Z, 'Z_amp': Z_amp, 'Z_freq': Z_freq, 'k': k, 'k_per': k_per, 'eigc': eigc } } }, 'a', overwrite_dataset=True) else: path_base = 'sensitivity_measure/' + mode + str(eig_index) fmax = h5.load_h5('results.h5', path_base + '/f_peak') Z = h5.load_h5('results.h5', path_base + '/Z') Z_amp = h5.load_h5('results.h5', path_base + '/Z_amp') Z_freq = h5.load_h5('results.h5', path_base + '/Z_freq') k = h5.load_h5('results.h5', path_base + '/k') k_per = h5.load_h5('results.h5', path_base + '/k_per') eigc = h5.load_h5('results.h5', path_base + '/eigc') return fmax, Z, Z_amp, Z_freq, k, k_per, eigc
def get_diffapprox_gain(rates0, params, Kstim, calc=False, read_old_results=False): folder = get_folder(params) label = 'plot_rates_gain' + str(Kstim) + folder if read_old_results: path = '/Users/bos/Documents/pittsburgh/disinhibitory_circuits/py/E-I-VIP/' g = h5.load_h5(path + 'results.h5', label + '/g') return g circuit_params = set_circuit_params(params) circuit_params['Next'] += np.array([Kstim,Kstim,0]) if calc: circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates = circ.th_rates # divide by 8 since this is the external firing rate in simulation g = (rates[0]-rates0[0])/(Kstim*8.) M = circ.ana.I*circ.ana.W dI = [M[0][i]*(rates[i]-rates0[i]) for i in range(3)] h5.add_to_h5('results.h5',{label:{'g': g}}, 'a', overwrite_dataset=True) else: g = h5.load_h5('results.h5', label + '/g') return g
def get_diffapprox_Next_for_rE_rI_grid(params, rE_array, rI_array, rS, calc_Next=False): folder = get_folder(params) label_Next = 'Next_betas_matrix_' + folder circuit_params = set_circuit_params(params) if calc_Next: print 'calculate Next' circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates_calc = circ.th_rates M = circ.I*circ.W Next = np.zeros((len(rE_array), len(rI_array), 3)) betas = np.zeros((len(rE_array), len(rI_array), 3)) initial_Next = get_Next(params) for i,re in enumerate(rE_array): for j,ri in enumerate(rI_array): target_rates = np.array([re, ri, rS]) circ.Next = initial_Next Next[i][j], betas[i][j] = circ.get_external_input(target_rates) h5.add_to_h5('results.h5', {label_Next:{'Next': Next, 'betas': betas, 'M': M}}, 'a', overwrite_dataset=True) else: Next = h5.load_h5('results.h5', label_Next + '/Next') betas = h5.load_h5('results.h5', label_Next + '/betas') M = h5.load_h5('results.h5', label_Next + '/M') return Next, betas, M
def get_diffapprox_Next_for_pSE_array(params, rE, rI, rS, pSE_array, calc_Next=False): folder = get_folder(params) label_Next = 'Next_betas_pSE_array_' + folder + str(rE) + str(rI) circuit_params = set_circuit_params(params) if calc_Next: print 'calculate Next' circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates_calc = circ.th_rates M = circ.I*circ.W Next = np.zeros((len(pSE_array), 3)) betas = np.zeros((len(pSE_array), 3)) initial_Next = get_Next(params) for i,pSE in enumerate(pSE_array): target_rates = np.array([rE, rI, rS]) circ.Next = initial_Next params['pSE'] = pSE circ.alter_default_params({'p': get_connection_probabilities(params)}) Next[i], betas[i] = circ.get_external_input(target_rates) h5.add_to_h5('results.h5', {label_Next:{'Next': Next, 'betas': betas, 'M': M}}, 'a', overwrite_dataset=True) else: Next = h5.load_h5('results.h5', label_Next + '/Next') betas = h5.load_h5('results.h5', label_Next + '/betas') M = h5.load_h5('results.h5', label_Next + '/M') return Next, betas, M
def get_spec_ana(calcAna, calcAnaAll): print 'Calculate power spectra.' if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, fmax=500.0, from_file=not calcAnaAll) freq_ana, power_ana = circ.create_power_spectra() h5.add_to_h5('results.h5',{'fig_microcircuit':{ 'freq_ana': freq_ana,'power_ana': power_ana}}, 'a',overwrite_dataset=True) else: freq_ana = h5.load_h5('results.h5','fig_microcircuit/freq_ana') power_ana = h5.load_h5('results.h5','fig_microcircuit/power_ana') return freq_ana, power_ana
def get_spectra(calcAna, calcAnaAll, a, conn): print 'Calculate power spectra and eigenvalues.' label = str(a) + str(conn[0]) + str(conn[1]) if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, analysis_type='stationary', from_file=not calcAnaAll) I_new = circ.I.copy() Next_new = circ.Next.copy() I_new[conn[0]][conn[1]] = np.round(circ.I[conn[0]][conn[1]] * (1.0 + a)) # missing rate r = circ.th_rates[conn[1]] * circ.I[conn[0]][conn[1]] * abs(a) # source inhibitory # a pos: more inh. input -> add ext. input # a neg: less inh. input -> rem. ext. input if conn[1] % 2 == 1: Next_add = np.sign(a) * 4 * int(r / circ.v_ext) # source excitatory # a pos: more exc. input -> rem. ext. input # a neg: less exc. input -> add ext. input else: Next_add = -np.sign(a) * int(r / circ.v_ext) Next_new[conn[0]] = circ.Next[conn[0]] + Next_add circ.alter_default_params({ 'analysis_type': 'dynamical', 'I': I_new, 'Next': Next_new }) freqs, power = circ.create_power_spectra() freqs, eigs = circ.create_eigenvalue_spectra('MH') rates = circ.th_rates h5.add_to_h5('results.h5', { 'Z_validation': { label: { 'freqs': freqs, 'power': power, 'eigs': eigs, 'rates': rates } } }, 'a', overwrite_dataset=True) else: freqs = h5.load_h5('results.h5', 'Z_validation/' + label + '/freqs') power = h5.load_h5('results.h5', 'Z_validation/' + label + '/power') eigs = h5.load_h5('results.h5', 'Z_validation/' + label + '/eigs') rates = h5.load_h5('results.h5', 'Z_validation/' + label + '/rates') return freqs, power, eigs, rates
def get_eigenvalues(calcAna, calcAnaAll): print('Calculate eigenvalues.') if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, fmax=400.0, from_file=not calcAnaAll) freqs, eigs = circ.create_eigenvalue_spectra('MH') eigs = np.transpose(eigs) h5.add_to_h5('results.h5', {'eigenvalue_trajectories': { 'freqs': freqs, 'eigs': eigs}}, 'a', overwrite_dataset=True) else: freqs = h5.load_h5('results.h5', 'eigenvalue_trajectories/freqs') eigs = h5.load_h5('results.h5', 'eigenvalue_trajectories/eigs') return freqs, eigs
def get_spectra(panel, calcAna, calcAnaAll): print 'Calculate power spectra.' eig_index = 4 if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, fmax=100.0, from_file=not calcAnaAll) freqs, power = circ.create_power_spectra() h5.add_to_h5( 'results.h5', {'oscillation_origin': { panel: { 'freqs': freqs, 'power': power } }}, 'a', overwrite_dataset=True) if panel == 'A': Mred = np.zeros((8, 8)) Mred[0, 0:4] = 1 Mred[1, 0:2] = 1 Mred[2:4, 2:4] = 1 Mred[3, 0] = 1 elif panel == 'B': Mred = np.ones((8, 8)) Mred[3, 0] = 0 circ.reduce_connectivity(Mred) freqs_sub, power_sub = circ.create_power_spectra() h5.add_to_h5('results.h5', { 'oscillation_origin': { panel: { 'power_sub': power_sub, 'Mred': Mred } } }, 'a', overwrite_dataset=True) else: path_base = 'oscillation_origin/' + panel freqs = h5.load_h5('results.h5', path_base + '/freqs') power = h5.load_h5('results.h5', path_base + '/power') power_sub = h5.load_h5('results.h5', path_base + '/power_sub') Mred = h5.load_h5('results.h5', path_base + '/Mred') return freqs, power, power_sub, Mred
def get_parameter_microcircuit(): # factor for standard deviation of delay distribution dsd = 1.0 circ = circuit.Circuit('microcircuit', analysis_type=None) I_new = circ.I.copy() # reduce indegrees from 4I to 4E I_new[2][3] = np.round(circ.I[2][3]*(1.0-0.15)) Next_new = circ.Next.copy() # adjust external input to 4E Next_new[2] -= 300 Next_new[2] *= (1.0-0.011) new_params = {'de_sd': circ.de*dsd, 'di_sd': circ.di*dsd, 'I': I_new, 'Next': Next_new, 'delay_dist': 'truncated_gaussian'} params = circ.params params.update(new_params) return params
def get_diffapprox_rates_betas(params, calc=False): folder = get_folder(params) label = 'plot_rates_betas' + folder circuit_params = set_circuit_params(params) if calc: circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates = circ.th_rates betas = circ.ana.create_H0_mu()[:,0] h5.add_to_h5('results.h5',{label:{'rates_calc': rates, 'betas': betas}}, 'a', overwrite_dataset=True) else: rates = h5.load_h5('results.h5', label + '/rates_calc') betas = h5.load_h5('results.h5', label + '/betas') return rates, betas
def get_spectra(calcAna, calcAnaAll): print('Calculate spectra..') if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, fmax=400.0, from_file=not calcAnaAll) freqs, power = circ.create_power_spectra() h5.add_to_h5('results.h5', {'fig_eigenmodes': { 'freqs': freqs, 'power': power }}, 'a', overwrite_dataset=True) else: freqs = h5.load_h5('results.h5', 'fig_eigenmodes/freqs') power = h5.load_h5('results.h5', 'fig_eigenmodes/power') return freqs, power
def get_diffapprox_rates(params, calc=False, read_old_results=False): folder = get_folder(params) label = 'plot_rates_' + folder if read_old_results: path = '/Users/bos/Documents/pittsburgh/disinhibitory_circuits/py/E-I-VIP/' rates = h5.load_h5(path + 'results.h5', label + '/rates_calc') return rates circuit_params = set_circuit_params(params) if calc: circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates = circ.th_rates h5.add_to_h5('results.h5',{label:{'rates_calc': rates}}, 'a', overwrite_dataset=True) else: rates = h5.load_h5('results.h5', label + '/rates_calc') return rates
def get_diffapprox_rates_Next_array(params, Next_array, calc=False): folder = get_folder(params) label = 'plot_rates_Next_array' + folder label += str(Next_array[0]) + str(Next_array[1]-Next_array[0]) label += str(Next_array[-1]) circuit_params = set_circuit_params(params) if calc: circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates = np.zeros_like(Next_array) for i in range(Next_array.shape[0]): circuit_params['Next']= Next_array[i] circ.alter_default_params(circuit_params) rates[i] = circ.th_rates h5.add_to_h5('results.h5',{label:{'rates_calc': rates}}, 'a', overwrite_dataset=True) else: rates = h5.load_h5('results.h5', label + '/rates_calc') return rates
def get_rates(calcData, calcAna, calcAnaAll, folder=folder): print 'Get data for firing rates.' tmin = 300.0 if calcData: rates_sim = [] for pop in range(8): mu = rs.get_mu_rate(folder, pop, T, tmin) rates_sim.append(mu) h5.add_to_h5('results.h5',{'fig_microcircuit':{ 'rates_sim': rates_sim}}, 'a', overwrite_dataset=True) else: rates_sim = h5.load_h5('results.h5', 'fig_microcircuit/rates_sim') if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, analysis_type='stationary', from_file=not calcAnaAll) rates_calc = circ.th_rates h5.add_to_h5('results.h5',{'fig_microcircuit':{ 'rates_calc': rates_calc}}, 'a', overwrite_dataset=True) else: rates_calc = h5.load_h5('results.h5','fig_microcircuit/rates_calc') return np.asarray(rates_sim), rates_calc
def get_diffapprox_gain_coefficient(params, calc=False): folder = get_folder(params) label = 'plot_gain_coefficient' + folder circuit_params = set_circuit_params(params) if calc: circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates_calc = circ.th_rates MH = circ.ana.create_MH0() P = np.linalg.inv(np.eye(3)-MH) betas = circ.ana.create_H0_mu()[:,0] factor = np.dot(P[:,:2], betas[:2]) h5.add_to_h5('results.h5',{label:{ 'rates_calc': rates_calc, 'factor': factor}}, 'a', overwrite_dataset=True) else: rates_calc = h5.load_h5('results.h5', label + '/rates_calc') factor = h5.load_h5('results.h5', label + '/factor') return rates_calc, factor
def get_spectra(calcAna, calcAnaAll): print('Calculate spectra.') if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, fmax=400.0, from_file=not calcAnaAll) freqs, power = circ.create_power_spectra() power_layer = [] for i, layer in enumerate(ph.layers): M_red = np.zeros((8, 8)) M_red[2 * i: 2 * i + 2, 2 * i: 2 * i + 2] = np.ones((2, 2)) circ.reduce_connectivity(M_red) freqs, power_red = circ.create_power_spectra() power_layer.append([power_red[2 * i], power_red[2 * i + 1]]) circ.restore_full_connectivity() h5.add_to_h5('results.h5', {'eigenvalue_trajectories': { 'freqs_spec': freqs, 'power_layer': power_layer, 'power': power}}, 'a', overwrite_dataset=True) else: freqs = h5.load_h5('results.h5', 'eigenvalue_trajectories/freqs_spec') power_layer = h5.load_h5('results.h5', 'eigenvalue_trajectories/power_layer') power = h5.load_h5('results.h5', 'eigenvalue_trajectories/power') return freqs, power_layer, power
def get_eigenvalues_layers(calcAna, calcAnaAll): print('Calculate eigenvalues.') if calcAna or calcAnaAll: circ = circuit.Circuit('microcircuit', circuit_params, fmax=400.0, from_file=not calcAnaAll) eigs_layer = [] for i, layer in enumerate(ph.layers): M_red = np.zeros((8, 8)) M_red[2 * i: 2 * i + 2, 2 * i: 2 * i + 2] = np.ones((2, 2)) circ.reduce_connectivity(M_red) freqs, eigs = circ.create_eigenvalue_spectra('MH') eigs_layer.append(eigs[0]) eigs_layer.append(eigs[1]) circ.restore_full_connectivity() eigs_layer = np.transpose(np.asarray(eigs_layer)) h5.add_to_h5('results.h5', {'eigenvalue_trajectories': { 'freq_layer': freqs, 'eigs_layer': eigs_layer}}, 'a', overwrite_dataset=True) else: freqs = h5.load_h5('results.h5', 'eigenvalue_trajectories/freq_layer') eigs_layer = h5.load_h5('results.h5', 'eigenvalue_trajectories/eigs_layer') return freqs, eigs_layer
def get_diffapprox_Next(params, rates, calc=False): folder = get_folder(params) label = 'plot_rates_Next_' + folder + str(rates) if rates[2]>0: label += 'rS_' + str(rates[2]) circuit_params = set_circuit_params(params) if calc: print 'calculate Next' circ = circuit.Circuit('3dcircuit', circuit_params, analysis_type='stationary', from_file='False') rates_calc = circ.th_rates M = circ.I*circ.W Next, betas = circ.get_external_input(rates) h5.add_to_h5('results.h5', {label:{'Next': Next, 'betas': betas, 'M': M}}, 'a', overwrite_dataset=True) else: Next = h5.load_h5('results.h5', label + '/Next') betas = h5.load_h5('results.h5', label + '/betas') M = h5.load_h5('results.h5', label + '/M') return Next, betas, M
import plot_helpers import meanfield.circuit as circuit import numpy as np import h5py_wrapper.wrapper as h5 fix_path = 'integration/data/' if __name__ == '__main__': filename = fix_path + 'Bos2016_data.h5' # Original parameters extracted from the data + modification circ_params_with_modifications = plot_helpers.get_parameter_microcircuit() circ = circuit.Circuit('microcircuit', circ_params_with_modifications, analysis_type='dynamical', fmax=500.0, from_file=False) power_spectra_freqs, power_spectra = circ.create_power_spectra() exemplary_frequency_idx = 20 omega = circ.omegas[exemplary_frequency_idx] print(omega) H = circ.ana.create_H(omega) MH = circ.ana.create_MH(omega) delay_dist = circ.ana.create_delay_dist_matrix(omega) transfer_function = circ.trans_func tau_s = circ.params['tauf'] * 1e-3 transfer_function_with_synaptic_filter = np.copy(transfer_function)
""" import plot_helpers import meanfield.circuit as circuit from docopt import docopt import sys if __name__ == '__main__': arguments = docopt(__doc__, version='0.1') filename = arguments['<filename>'] # New parameters used for Fig. 1 circ_params_new = plot_helpers.get_parameter_microcircuit() # Original parameters extracted from the data circ = circuit.Circuit('microcircuit', analysis_type=None) circ_params_old = circ.params file = open(filename, 'w') sys.stdout = file for attribute in circ_params_new.keys(): print(attribute) print('old/original:') print(circ_params_old[attribute]) print('new:') print(circ_params_new[attribute]) print('\n') attribute = 'I' print('old/original:')