Example #1
0
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
Example #6
0
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
Example #7
0
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
Example #8
0
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
Example #9
0
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
Example #11
0
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
Example #14
0
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
Example #16
0
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
Example #17
0
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:')